diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index f05e445588..26a22fa8b8 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -259,12 +259,6 @@ 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); } else diff --git a/Content.Client/Administration/AdminNameOverlay.cs b/Content.Client/Administration/AdminNameOverlay.cs index 6a1881a227..e2db7a8d6b 100644 --- a/Content.Client/Administration/AdminNameOverlay.cs +++ b/Content.Client/Administration/AdminNameOverlay.cs @@ -2,10 +2,10 @@ using Content.Client.Administration.Systems; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared; using Robust.Shared.Enums; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; +using Robust.Shared.Configuration; namespace Content.Client.Administration; @@ -15,14 +15,16 @@ internal sealed class AdminNameOverlay : Overlay private readonly IEntityManager _entityManager; private readonly IEyeManager _eyeManager; private readonly EntityLookupSystem _entityLookup; + private readonly IUserInterfaceManager _userInterfaceManager; private readonly Font _font; - public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup) + public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup, IUserInterfaceManager userInterfaceManager) { _system = system; _entityManager = entityManager; _eyeManager = eyeManager; _entityLookup = entityLookup; + _userInterfaceManager = userInterfaceManager; ZIndex = 200; _font = new VectorFont(resourceCache.GetResource("/Fonts/NotoSans/NotoSans-Regular.ttf"), 10); } @@ -57,16 +59,18 @@ protected override void Draw(in OverlayDrawArgs args) continue; } - var lineoffset = new Vector2(0f, 11f); + var uiScale = _userInterfaceManager.RootControl.UIScale; + var lineoffset = new Vector2(0f, 11f) * uiScale; var screenCoordinates = _eyeManager.WorldToScreen(aabb.Center + new Angle(-_eyeManager.CurrentEye.Rotation).RotateVec( aabb.TopRight - aabb.Center)) + new Vector2(1f, 7f); if (playerInfo.Antag) { - args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", Color.OrangeRed); + args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", uiScale, Color.OrangeRed); +; } - args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, playerInfo.Connected ? Color.Yellow : Color.White); - args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, playerInfo.Connected ? Color.Aquamarine : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, uiScale, playerInfo.Connected ? Color.Yellow : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White); } } } diff --git a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs index 3502faf9e8..ba6ce40ca0 100644 --- a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs +++ b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs @@ -1,6 +1,8 @@ using Content.Client.Administration.Managers; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared.Configuration; namespace Content.Client.Administration.Systems { @@ -11,6 +13,7 @@ public sealed partial class AdminSystem [Dependency] private readonly IClientAdminManager _adminManager = default!; [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; private AdminNameOverlay _adminNameOverlay = default!; @@ -19,7 +22,7 @@ public sealed partial class AdminSystem private void InitializeOverlay() { - _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup); + _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup, _userInterfaceManager); _adminManager.AdminStatusUpdated += OnAdminStatusUpdated; } diff --git a/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs b/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs index c95f8f204d..fad55f9627 100644 --- a/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs +++ b/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs @@ -1,4 +1,5 @@ using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs b/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs index dd8e3e2212..b4e9a07ef8 100644 --- a/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs +++ b/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs @@ -11,9 +11,8 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Network; -using Robust.Shared.Utility; -using Robust.Shared.Timing; using Robust.Shared.Configuration; +using Robust.Shared.Utility; namespace Content.Client.Administration.UI.Bwoink { diff --git a/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs b/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs index a2faf208d9..7cb32b43df 100644 --- a/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs +++ b/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.UserInterface.Controls; using Content.Shared.Roles; using Robust.Client.AutoGenerated; using Robust.Client.Console; diff --git a/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs b/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs index 2ae1518835..d9e94e373b 100644 --- a/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs +++ b/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs @@ -30,7 +30,6 @@ protected override void Open() _window.AirAlarmModeChanged += OnAirAlarmModeChanged; _window.AutoModeChanged += OnAutoModeChanged; _window.ResyncAllRequested += ResyncAllDevices; - _window.AirAlarmTabChange += OnTabChanged; } private void ResyncAllDevices() @@ -63,11 +62,6 @@ private void OnThresholdChanged(string address, AtmosMonitorThresholdType type, SendMessage(new AirAlarmUpdateAlarmThresholdMessage(address, type, threshold, gas)); } - private void OnTabChanged(AirAlarmTab tab) - { - SendMessage(new AirAlarmTabSetMessage(tab)); - } - protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); diff --git a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs index eeec11c766..e1425ac491 100644 --- a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs +++ b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs @@ -23,7 +23,6 @@ public sealed partial class AirAlarmWindow : FancyWindow public event Action? AirAlarmModeChanged; public event Action? AutoModeChanged; public event Action? ResyncAllRequested; - public event Action? AirAlarmTabChange; private RichTextLabel _address => CDeviceAddress; private RichTextLabel _deviceTotal => CDeviceTotal; @@ -80,11 +79,6 @@ public AirAlarmWindow() _tabContainer.SetTabTitle(1, Loc.GetString("air-alarm-ui-window-tab-scrubbers")); _tabContainer.SetTabTitle(2, Loc.GetString("air-alarm-ui-window-tab-sensors")); - _tabContainer.OnTabChanged += idx => - { - AirAlarmTabChange!((AirAlarmTab) idx); - }; - _resyncDevices.OnPressed += _ => { _ventDevices.RemoveAllChildren(); @@ -117,8 +111,6 @@ public void UpdateState(AirAlarmUIState state) { UpdateDeviceData(addr, dev); } - - _tabContainer.CurrentTab = (int) state.Tab; } public void UpdateModeSelector(AirAlarmMode mode) diff --git a/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs b/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs index 273707cb6e..27ddd51815 100644 --- a/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs +++ b/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs @@ -1,4 +1,5 @@ -using Content.Shared.CrewManifest; +using Content.Client.CrewManifest.UI; +using Content.Shared.CrewManifest; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Commands/SetMenuVisibilityCommand.cs b/Content.Client/Commands/SetMenuVisibilityCommand.cs index ddfb0b1692..17a544daba 100644 --- a/Content.Client/Commands/SetMenuVisibilityCommand.cs +++ b/Content.Client/Commands/SetMenuVisibilityCommand.cs @@ -1,4 +1,5 @@ using Content.Client.Verbs; +using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.Console; diff --git a/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs b/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs index 269694ebf9..81410dc7e6 100644 --- a/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs +++ b/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Client.Materials; +using Content.Client.Materials.UI; using Content.Client.Message; using Content.Client.UserInterface.Controls; using Content.Shared.Construction.Components; diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index 0462c095ba..bda831394d 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -9,6 +9,7 @@ using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Input; +using Content.Shared.Verbs; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -194,8 +195,20 @@ public override void FrameUpdate(FrameEventArgs args) return; // Do we need to do in-range unOccluded checks? - var ignoreFov = !_eyeManager.CurrentEye.DrawFov || - (_verbSystem.Visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov; + var visibility = _verbSystem.Visibility; + + if (!_eyeManager.CurrentEye.DrawFov) + { + visibility &= ~MenuVisibility.NoFov; + } + + var ev = new MenuVisibilityEvent() + { + Visibility = visibility, + }; + + _entityManager.EventBus.RaiseLocalEvent(player, ref ev); + visibility = ev.Visibility; _entityManager.TryGetComponent(player, out ExaminerComponent? examiner); var xformQuery = _entityManager.GetEntityQuery(); @@ -209,7 +222,7 @@ public override void FrameUpdate(FrameEventArgs args) continue; } - if (ignoreFov) + if ((visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov) continue; var pos = new MapCoordinates(_xform.GetWorldPosition(xform, xformQuery), xform.MapID); diff --git a/Content.Client/CrewManifest/CrewManifestUi.xaml.cs b/Content.Client/CrewManifest/CrewManifestUi.xaml.cs index 4183c90814..f07e54eb65 100644 --- a/Content.Client/CrewManifest/CrewManifestUi.xaml.cs +++ b/Content.Client/CrewManifest/CrewManifestUi.xaml.cs @@ -1,3 +1,4 @@ +using Content.Client.CrewManifest.UI; using Content.Shared.CrewManifest; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; diff --git a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml index 4cd59f38b2..e832b4ee9f 100644 --- a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml +++ b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml @@ -1,6 +1,7 @@ + xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" + Title="{Loc door-electronics-configuration-title}"> diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 6caefb9a7e..c4c18f154a 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -108,6 +108,7 @@ public override void Init() _prototypeManager.RegisterIgnore("lobbyBackground"); _prototypeManager.RegisterIgnore("gamePreset"); _prototypeManager.RegisterIgnore("noiseChannel"); + _prototypeManager.RegisterIgnore("playerConnectionWhitelist"); _prototypeManager.RegisterIgnore("spaceBiome"); _prototypeManager.RegisterIgnore("worldgenConfig"); _prototypeManager.RegisterIgnore("gameRule"); diff --git a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs index 469b0ed222..de06d85bb0 100644 --- a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs +++ b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs @@ -23,6 +23,8 @@ public sealed partial class GuidebookWindow : FancyWindow, ILinkClickHandler private readonly ISawmill _sawmill; + public ProtoId LastEntry; + public GuidebookWindow() { RobustXamlLoader.Load(this); @@ -90,6 +92,8 @@ private void ShowGuide(GuideEntry entry) _sawmill.Error($"Failed to parse contents of guide document {entry.Id}."); } + + LastEntry = entry.Id; } public void UpdateGuides( diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs index 38760f4aa3..baea03c892 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs @@ -17,6 +17,7 @@ public HealthAnalyzerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owne protected override void Open() { base.Open(); + _window = this.CreateWindow(); _window.Title = EntMan.GetComponent(Owner).EntityName; diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index 401f976862..97968c4b99 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -1,48 +1,64 @@ - + MaxHeight="525" + MinWidth="300"> diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs index fcf6d4551f..9b96f5d3fe 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs @@ -1,12 +1,20 @@ using System.Linq; using System.Numerics; +using Content.Client.Message; using Content.Shared.Atmos; using Content.Client.UserInterface.Controls; +using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Prototypes; using Content.Shared.IdentityManagement; +using Content.Shared.Inventory; using Content.Shared.MedicalScanner; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; @@ -28,9 +36,6 @@ public sealed partial class HealthAnalyzerWindow : FancyWindow private readonly IPrototypeManager _prototypes; private readonly IResourceCache _cache; - private const int AnalyzerHeight = 430; - private const int AnalyzerWidth = 300; - public HealthAnalyzerWindow() { RobustXamlLoader.Load(this); @@ -44,8 +49,6 @@ public HealthAnalyzerWindow() public void Populate(HealthAnalyzerScannedUserMessage msg) { - GroupsContainer.RemoveAllChildren(); - var target = _entityManager.GetEntity(msg.TargetEntity); if (target == null @@ -57,82 +60,96 @@ public void Populate(HealthAnalyzerScannedUserMessage msg) NoPatientDataText.Visible = false; - string entityName = Loc.GetString("health-analyzer-window-entity-unknown-text"); - if (_entityManager.HasComponent(target.Value)) - { - entityName = Identity.Name(target.Value, _entityManager); - } + // Scan Mode - if (msg.ScanMode.HasValue) - { - ScanModePanel.Visible = true; - ScanModeText.Text = Loc.GetString(msg.ScanMode.Value ? "health-analyzer-window-scan-mode-active" : "health-analyzer-window-scan-mode-inactive"); - ScanModeText.FontColorOverride = msg.ScanMode.Value ? Color.Green : Color.Red; - } - else - { - ScanModePanel.Visible = false; - } + ScanModeLabel.Text = msg.ScanMode.HasValue + ? msg.ScanMode.Value + ? Loc.GetString("health-analyzer-window-scan-mode-active") + : Loc.GetString("health-analyzer-window-scan-mode-inactive") + : Loc.GetString("health-analyzer-window-entity-unknown-text"); + + ScanModeLabel.FontColorOverride = msg.ScanMode.HasValue && msg.ScanMode.Value ? Color.Green : Color.Red; + + // Patient Information + + SpriteView.SetEntity(target.Value); + + var name = new FormattedMessage(); + name.PushColor(Color.White); + name.AddText(_entityManager.HasComponent(target.Value) + ? Identity.Name(target.Value, _entityManager) + : Loc.GetString("health-analyzer-window-entity-unknown-text")); + NameLabel.SetMessage(name); + + SpeciesLabel.Text = + _entityManager.TryGetComponent(target.Value, + out var humanoidAppearanceComponent) + ? Loc.GetString(_prototypes.Index(humanoidAppearanceComponent.Species).Name) + : Loc.GetString("health-analyzer-window-entity-unknown-species-text"); + + // Basic Diagnostic + + TemperatureLabel.Text = !float.IsNaN(msg.Temperature) + ? $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); + + BloodLabel.Text = !float.IsNaN(msg.BloodLevel) + ? $"{msg.BloodLevel * 100:F1} %" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); - PatientName.Text = Loc.GetString( - "health-analyzer-window-entity-health-text", - ("entityName", entityName) - ); + StatusLabel.Text = + _entityManager.TryGetComponent(target.Value, out var mobStateComponent) + ? GetStatus(mobStateComponent.CurrentState) + : Loc.GetString("health-analyzer-window-entity-unknown-text"); - Temperature.Text = Loc.GetString("health-analyzer-window-entity-temperature-text", - ("temperature", float.IsNaN(msg.Temperature) ? "N/A" : $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)") - ); + // Total Damage - BloodLevel.Text = Loc.GetString("health-analyzer-window-entity-blood-level-text", - ("bloodLevel", float.IsNaN(msg.BloodLevel) ? "N/A" : $"{msg.BloodLevel * 100:F1} %") - ); + DamageLabel.Text = damageable.TotalDamage.ToString(); + + // Alerts + + AlertsDivider.Visible = msg.Bleeding == true; + AlertsContainer.Visible = msg.Bleeding == true; if (msg.Bleeding == true) { - Bleeding.Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"); - Bleeding.FontColorOverride = Color.Red; - } - else - { - Bleeding.Text = string.Empty; // Clear the text + AlertsContainer.DisposeAllChildren(); + AlertsContainer.AddChild(new Label + { + Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"), + FontColorOverride = Color.Red, + }); } - patientDamageAmount.Text = Loc.GetString( - "health-analyzer-window-entity-damage-total-text", - ("amount", damageable.TotalDamage) - ); + // Damage Groups var damageSortedGroups = - damageable.DamagePerGroup.OrderBy(damage => damage.Value) + damageable.DamagePerGroup.OrderByDescending(damage => damage.Value) .ToDictionary(x => x.Key, x => x.Value); + IReadOnlyDictionary damagePerType = damageable.Damage.DamageDict; DrawDiagnosticGroups(damageSortedGroups, damagePerType); + } - if (_entityManager.TryGetComponent(target, out HungerComponent? hunger) - && hunger.StarvationDamage != null - && hunger.CurrentThreshold <= HungerThreshold.Starving) + private static string GetStatus(MobState mobState) + { + return mobState switch { - var box = new Control { Margin = new Thickness(0, 0, 0, 15) }; - - box.AddChild(CreateDiagnosticGroupTitle( - Loc.GetString("health-analyzer-window-malnutrition"), - "malnutrition")); - - GroupsContainer.AddChild(box); - } - - SetHeight = AnalyzerHeight; - SetWidth = AnalyzerWidth; + MobState.Alive => Loc.GetString("health-analyzer-window-entity-alive-text"), + MobState.Critical => Loc.GetString("health-analyzer-window-entity-critical-text"), + MobState.Dead => Loc.GetString("health-analyzer-window-entity-dead-text"), + _ => Loc.GetString("health-analyzer-window-entity-unknown-text"), + }; } private void DrawDiagnosticGroups( - Dictionary groups, IReadOnlyDictionary damageDict) + Dictionary groups, + IReadOnlyDictionary damageDict) { - HashSet shownTypes = new(); + GroupsContainer.RemoveAllChildren(); - // Show the total damage and type breakdown for each damage group. - foreach (var (damageGroupId, damageAmount) in groups.Reverse()) + foreach (var (damageGroupId, damageAmount) in groups) { if (damageAmount == 0) continue; @@ -145,7 +162,6 @@ private void DrawDiagnosticGroups( var groupContainer = new BoxContainer { - Margin = new Thickness(0, 0, 0, 15), Align = BoxContainer.AlignMode.Begin, Orientation = BoxContainer.LayoutOrientation.Vertical, }; @@ -159,23 +175,16 @@ private void DrawDiagnosticGroups( foreach (var type in group.DamageTypes) { - if (damageDict.TryGetValue(type, out var typeAmount) && typeAmount > 0) - { - // If damage types are allowed to belong to more than one damage group, - // they may appear twice here. Mark them as duplicate. - if (shownTypes.Contains(type)) - continue; - - shownTypes.Add(type); - - var damageString = Loc.GetString( - "health-analyzer-window-damage-type-text", - ("damageType", _prototypes.Index(type).LocalizedName), - ("amount", typeAmount) - ); - - groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, "- "))); - } + if (!damageDict.TryGetValue(type, out var typeAmount) || typeAmount <= 0) + continue; + + var damageString = Loc.GetString( + "health-analyzer-window-damage-type-text", + ("damageType", _prototypes.Index(type).LocalizedName), + ("amount", typeAmount) + ); + + groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, " · "))); } } } @@ -198,7 +207,6 @@ private static Label CreateDiagnosticItemLabel(string text) { return new Label { - Margin = new Thickness(2, 2), Text = text, }; } @@ -207,13 +215,13 @@ private BoxContainer CreateDiagnosticGroupTitle(string text, string id) { var rootContainer = new BoxContainer { + Margin = new Thickness(0, 6, 0, 0), VerticalAlignment = VAlignment.Bottom, - Orientation = BoxContainer.LayoutOrientation.Horizontal + Orientation = BoxContainer.LayoutOrientation.Horizontal, }; rootContainer.AddChild(new TextureRect { - Margin = new Thickness(0, 3), SetSize = new Vector2(30, 30), Texture = GetTexture(id.ToLower()) }); diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index c5f2f311d9..e81f72ba67 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -718,6 +718,9 @@ private void ReloadPreview() PreviewDummy = _controller.LoadProfileEntity(Profile, JobOverride, ShowClothes.Pressed); SpriteView.SetEntity(PreviewDummy); _entManager.System().SetEntityName(PreviewDummy, Profile.Name); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } /// @@ -778,6 +781,9 @@ private void ReloadProfilePreview() return; _entManager.System().LoadProfile(PreviewDummy, Profile); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } private void OnSpeciesInfoButtonPressed(BaseButton.ButtonEventArgs args) @@ -1014,7 +1020,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.AddLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1023,7 +1028,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.RemoveLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1033,7 +1037,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo _loadoutWindow.OnClose += () => { JobOverride = null; - SetDirty(); ReloadPreview(); }; @@ -1058,7 +1061,6 @@ private void OnMarkingChange(MarkingSet markings) return; Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithMarkings(markings.GetForwardEnumerator().ToList())); - SetDirty(); ReloadProfilePreview(); } @@ -1126,7 +1128,6 @@ private void OnSkinColorOnValueChanged() } } - SetDirty(); ReloadProfilePreview(); } @@ -1157,7 +1158,6 @@ private void SetAge(int newAge) { Profile = Profile?.WithAge(newAge); ReloadPreview(); - SetDirty(); } private void SetSex(Sex newSex) @@ -1180,14 +1180,12 @@ private void SetSex(Sex newSex) UpdateGenderControls(); Markings.SetSex(newSex); ReloadPreview(); - SetDirty(); } private void SetGender(Gender newGender) { Profile = Profile?.WithGender(newGender); ReloadPreview(); - SetDirty(); } private void SetSpecies(string newSpecies) @@ -1201,7 +1199,6 @@ private void SetSpecies(string newSpecies) RefreshLoadouts(); UpdateSexControls(); // update sex for new species UpdateSpeciesGuidebookIcon(); - SetDirty(); ReloadPreview(); } diff --git a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs index 14709f8b1f..619cac6839 100644 --- a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs +++ b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Client.UserInterface.Controls; +using Prometheus; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/Lobby/UI/LobbyGui.xaml.cs b/Content.Client/Lobby/UI/LobbyGui.xaml.cs index 6471edb6f3..81230130a1 100644 --- a/Content.Client/Lobby/UI/LobbyGui.xaml.cs +++ b/Content.Client/Lobby/UI/LobbyGui.xaml.cs @@ -2,6 +2,7 @@ using Content.Client.UserInterface.Systems.EscapeMenu; using Robust.Client.AutoGenerated; using Robust.Client.Console; +using Robust.Client.State; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs index 6133abfcb7..441ca9ea36 100644 --- a/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs +++ b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs @@ -3,6 +3,7 @@ using Robust.Client.UserInterface.XAML; using Robust.Shared.Timing; using Content.Client.TextScreen; +using Robust.Client.UserInterface.Controls; namespace Content.Client.MachineLinking.UI; diff --git a/Content.Client/Options/UI/OptionsMenu.xaml.cs b/Content.Client/Options/UI/OptionsMenu.xaml.cs index 61037f4e4a..b749d1f234 100644 --- a/Content.Client/Options/UI/OptionsMenu.xaml.cs +++ b/Content.Client/Options/UI/OptionsMenu.xaml.cs @@ -1,3 +1,4 @@ +using Content.Client.Options.UI.Tabs; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs index 61e20f751c..ebf6c18c95 100644 --- a/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Client.Power.Components; using Content.Shared.Power.Components; using Content.Shared.Power.EntitySystems; @@ -27,4 +28,16 @@ private void OnHandleState(EntityUid uid, ApcPowerReceiverComponent component, r component.Powered = state.Powered; } + + public override bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component) + { + if (component != null) + return true; + + if (!TryComp(entity, out ApcPowerReceiverComponent? receiver)) + return false; + + component = receiver; + return true; + } } diff --git a/Content.Client/Power/Generator/GeneratorWindow.xaml.cs b/Content.Client/Power/Generator/GeneratorWindow.xaml.cs index e975e5d466..161482e090 100644 --- a/Content.Client/Power/Generator/GeneratorWindow.xaml.cs +++ b/Content.Client/Power/Generator/GeneratorWindow.xaml.cs @@ -3,6 +3,7 @@ using Content.Shared.Power.Generator; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Network; namespace Content.Client.Power.Generator; diff --git a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs index 20d2e4a3e5..f66b3db000 100644 --- a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs +++ b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs @@ -1,3 +1,4 @@ +using System.Threading.Channels; using Content.Client.UserInterface.Controls; using Content.Shared.Radio.Components; using Robust.Client.AutoGenerated; diff --git a/Content.Client/StationRecords/GeneralRecord.xaml.cs b/Content.Client/StationRecords/GeneralRecord.xaml.cs index 6a2622fba9..e84c2dc098 100644 --- a/Content.Client/StationRecords/GeneralRecord.xaml.cs +++ b/Content.Client/StationRecords/GeneralRecord.xaml.cs @@ -2,6 +2,7 @@ using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Enums; namespace Content.Client.StationRecords; diff --git a/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs b/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs index 9f07867da8..9ef6c65e89 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/UserInterface/Controls/ProgressTextureRect.cs b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs index 2b8d93a5d4..8454ae0892 100644 --- a/Content.Client/UserInterface/Controls/ProgressTextureRect.cs +++ b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs @@ -9,7 +9,12 @@ public sealed class ProgressTextureRect : TextureRect { public float Progress; - private readonly ProgressColorSystem _progressColor = IoCManager.Resolve().System(); + private readonly ProgressColorSystem _progressColor; + + public ProgressTextureRect() + { + _progressColor = IoCManager.Resolve().System(); + } protected override void Draw(DrawingHandleScreen handle) { diff --git a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs index c920bbfeec..fa2f5bfa75 100644 --- a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs +++ b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs @@ -133,7 +133,7 @@ public void OnStateEntered(GameplayState state) var boundKey = hotbarKeys[i]; builder = builder.Bind(boundKey, new PointerInputCmdHandler((in PointerInputCmdArgs args) => { - if (args.State != BoundKeyState.Up) + if (args.State != BoundKeyState.Down) return false; TriggerAction(boundId); @@ -240,8 +240,6 @@ private bool TryTargetWorld(in PointerInputCmdArgs args, EntityUid actionId, Wor if (action.Event != null) { action.Event.Target = coords; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); @@ -275,8 +273,6 @@ private bool TryTargetEntity(in PointerInputCmdArgs args, EntityUid actionId, En if (action.Event != null) { action.Event.Target = entity; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); @@ -316,8 +312,6 @@ private bool TryTargetEntityWorld(in PointerInputCmdArgs args, { action.Event.Entity = entity; action.Event.Coords = coords; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); diff --git a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs index 03ea47827f..702b0a52ac 100644 --- a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs +++ b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs @@ -30,6 +30,7 @@ public sealed class GuidebookUIController : UIController, IOnStateEntered UIManager.GetActiveUIWidgetOrNull()?.GuidebookButton; + private ProtoId? _lastEntry; public void OnStateEntered(LobbyState state) { @@ -142,7 +143,10 @@ private void OnWindowClosed() GuidebookButton.Pressed = false; if (_guideWindow != null) + { _guideWindow.ReturnContainer.Visible = false; + _lastEntry = _guideWindow.LastEntry; + } } private void OnWindowOpen() @@ -176,8 +180,6 @@ public void OpenGuidebook( if (GuidebookButton != null) GuidebookButton.SetClickPressed(!_guideWindow.IsOpen); - selected ??= _configuration.GetCVar(CCVars.DefaultGuide); - if (guides == null) { guides = _prototypeManager.EnumeratePrototypes() @@ -193,6 +195,17 @@ public void OpenGuidebook( } } + if (selected == null) + { + if (_lastEntry is { } lastEntry && guides.ContainsKey(lastEntry)) + { + selected = _lastEntry; + } + else + { + selected = _configuration.GetCVar(CCVars.DefaultGuide); + } + } _guideWindow.UpdateGuides(guides, rootEntries, forceRoot, selected); // Expand up to depth-2. diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index efe6ef8e9a..ee7a0e41fa 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -7,6 +7,7 @@ using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow; using Robust.Client.UserInterface; using Content.Client.UserInterface.Controls; +using Content.Shared.IdentityManagement; using Robust.Client.Graphics; namespace Content.Client.VendingMachines.UI @@ -15,6 +16,9 @@ namespace Content.Client.VendingMachines.UI public sealed partial class VendingMachineMenu : FancyWindow { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + + private readonly Dictionary _dummies = []; public event Action? OnItemSelected; @@ -32,6 +36,22 @@ public VendingMachineMenu() VendingContents.ItemKeyBindDown += (args, data) => OnItemSelected?.Invoke(args, data); } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + // Don't clean up dummies during disposal or we'll just have to spawn them again + if (!disposing) + return; + + // Delete any dummy items we spawned + foreach (var entity in _dummies.Values) + { + _entityManager.QueueDeleteEntity(entity); + } + _dummies.Clear(); + } + private bool DataFilterCondition(string filter, ListData data) { if (data is not VendorItemsListData { ItemText: var text }) @@ -91,7 +111,14 @@ public void Populate(List inventory) if (!_prototypeManager.TryIndex(entry.ID, out var prototype)) continue; - var itemText = $"{prototype.Name} [{entry.Amount}]"; + if (!_dummies.TryGetValue(entry.ID, out var dummy)) + { + dummy = _entityManager.Spawn(entry.ID); + _dummies.Add(entry.ID, dummy); + } + + var itemName = Identity.Name(dummy, _entityManager); + var itemText = $"{itemName} [{entry.Amount}]"; if (itemText.Length > longestEntry.Length) longestEntry = itemText; diff --git a/Content.Client/Verbs/VerbSystem.cs b/Content.Client/Verbs/VerbSystem.cs index 5f1f49e5fd..c3e03528a7 100644 --- a/Content.Client/Verbs/VerbSystem.cs +++ b/Content.Client/Verbs/VerbSystem.cs @@ -67,6 +67,14 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true ? Visibility : Visibility | MenuVisibility.NoFov; + var ev = new MenuVisibilityEvent() + { + TargetPos = targetPos, + Visibility = visibility, + }; + + RaiseLocalEvent(player.Value, ref ev); + visibility = ev.Visibility; // Get entities List entities; @@ -77,13 +85,8 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true var entitiesUnderMouse = gameScreenBase.GetClickableEntities(targetPos).ToHashSet(); bool Predicate(EntityUid e) => e == player || entitiesUnderMouse.Contains(e); - // first check the general location. - if (!_examine.CanExamine(player.Value, targetPos, Predicate)) - return false; - TryComp(player.Value, out ExaminerComponent? examiner); - // Then check every entity entities = new(); foreach (var ent in _entityLookup.GetEntitiesInRange(targetPos, EntityMenuLookupSize)) { @@ -137,27 +140,6 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true } } - // Remove any entities that do not have LOS - if ((visibility & MenuVisibility.NoFov) == 0) - { - var xformQuery = GetEntityQuery(); - var playerPos = _transform.GetMapCoordinates(player.Value, xform: xformQuery.GetComponent(player.Value)); - - for (var i = entities.Count - 1; i >= 0; i--) - { - var entity = entities[i]; - - if (!_examine.InRangeUnOccluded( - playerPos, - _transform.GetMapCoordinates(entity, xform: xformQuery.GetComponent(entity)), - ExamineSystemShared.ExamineRange, - null)) - { - entities.RemoveSwap(i); - } - } - } - if (entities.Count == 0) return false; @@ -229,15 +211,4 @@ private void HandleVerbResponse(VerbsResponseEvent msg) OnVerbsResponse?.Invoke(msg); } } - - [Flags] - public enum MenuVisibility - { - // What entities can a user see on the entity menu? - Default = 0, // They can only see entities in FoV. - NoFov = 1 << 0, // They ignore FoV restrictions - InContainer = 1 << 1, // They can see through containers. - Invisible = 1 << 2, // They can see entities without sprites and the "HideContextMenu" tag is ignored. - All = NoFov | InContainer | Invisible - } } diff --git a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs index 2890bb3dbf..2723db1efb 100644 --- a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs +++ b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs @@ -1,6 +1,7 @@ using Content.Client.Stylesheets; using Content.Client.UserInterface.Controls; using Content.Shared.Xenoarchaeology.Equipment; +using Microsoft.VisualBasic; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; using Robust.Client.UserInterface.Controls; diff --git a/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs new file mode 100644 index 0000000000..c8378bb661 --- /dev/null +++ b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs @@ -0,0 +1,58 @@ +using System.Linq; +using Content.Client.Chat.UI; +using Content.Client.LateJoin; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.ContentPack; +using Robust.Shared.IoC; +using Robust.Shared.Reflection; + +namespace Content.IntegrationTests.Tests.UserInterface; + +[TestFixture] +public sealed class UiControlTest +{ + // You should not be adding to this. + private Type[] _ignored = new Type[] + { + typeof(EmotesMenu), + typeof(LateJoinGui), + }; + + /// + /// Tests that all windows can be instantiated successfully. + /// + [Test] + public async Task TestWindows() + { + var pair = await PoolManager.GetServerClient(new PoolSettings() + { + Connected = true, + }); + var activator = pair.Client.ResolveDependency(); + var refManager = pair.Client.ResolveDependency(); + var loader = pair.Client.ResolveDependency(); + + await pair.Client.WaitAssertion(() => + { + foreach (var type in refManager.GetAllChildren(typeof(BaseWindow))) + { + if (type.IsAbstract || _ignored.Contains(type)) + continue; + + if (!loader.IsContentType(type)) + continue; + + // If it has no empty ctor then skip it instead of figuring out what args it needs. + var ctor = type.GetConstructor(Type.EmptyTypes); + + if (ctor == null) + continue; + + // Don't inject because the control themselves have to do it. + activator.CreateInstance(type, oneOff: true, inject: false); + } + }); + + await pair.CleanReturnAsync(); + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs new file mode 100644 index 0000000000..61aa1a8c73 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs @@ -0,0 +1,1769 @@ +// +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; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20240112194620_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .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.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (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.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("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.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("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/20240112194620_Blacklist.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs new file mode 100644 index 0000000000..a6a34626ed --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index cb9fdde4d5..1f64f6e51a 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -512,6 +512,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs new file mode 100644 index 0000000000..049901bc7d --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs @@ -0,0 +1,1701 @@ +// +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("20240112194612_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + 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.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (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.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("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.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("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/20240112194612_Blacklist.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs new file mode 100644 index 0000000000..4988a3c336 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index efc6682191..02d4416302 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -483,6 +483,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index ea63c41fc2..00b3cfea03 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -28,6 +28,7 @@ protected ServerDbContext(DbContextOptions options) : base(options) public DbSet AdminLog { get; set; } = null!; public DbSet AdminLogPlayer { get; set; } = null!; public DbSet Whitelist { get; set; } = null!; + public DbSet Blacklist { get; set; } = null!; public DbSet Ban { get; set; } = default!; public DbSet Unban { get; set; } = default!; public DbSet BanExemption { get; set; } = default!; @@ -551,6 +552,15 @@ public class Whitelist [Required, Key] public Guid UserId { get; set; } } + /// + /// List of users who are on the "blacklist". This is a list that may be used by Whitelist implementations to deny access to certain users. + /// + [Table("blacklist")] + public class Blacklist + { + [Required, Key] public Guid UserId { get; set; } + } + public class Admin { [Key] public Guid UserId { get; set; } diff --git a/Content.Server/Abilities/Mime/MimePowersSystem.cs b/Content.Server/Abilities/Mime/MimePowersSystem.cs index 85230faab0..20889f293c 100644 --- a/Content.Server/Abilities/Mime/MimePowersSystem.cs +++ b/Content.Server/Abilities/Mime/MimePowersSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Alert; using Content.Shared.Coordinates.Helpers; using Content.Shared.Maps; -using Content.Shared.Mobs.Components; using Content.Shared.Physics; using Robust.Shared.Containers; using Robust.Shared.Map; @@ -19,7 +18,6 @@ public sealed class MimePowersSystem : EntitySystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; - [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; [Dependency] private readonly TurfSystem _turf = default!; [Dependency] private readonly IMapManager _mapMan = default!; [Dependency] private readonly SharedContainerSystem _container = default!; @@ -80,22 +78,13 @@ private void OnInvisibleWall(EntityUid uid, MimePowersComponent component, Invis if (tile == null) return; - // Check there are no walls there - if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + // Check if the tile is blocked by a wall or mob, and don't create the wall if so + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable | CollisionGroup.Opaque)) { _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); return; } - // Check there are no mobs there - foreach (var entity in _lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f)) - { - if (HasComp(entity) && entity != uid) - { - _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); - return; - } - } _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-popup", ("mime", uid)), uid); // Make sure we set the invisible wall to despawn properly Spawn(component.WallPrototype, _turf.GetTileCenter(tile.Value)); diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index a1f02ed1ec..af9b0b1ddb 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -55,12 +55,6 @@ private void OnActivate(EntityUid uid, ActionOnInteractComponent component, Acti 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; } @@ -94,8 +88,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (entActId, entAct) = _random.Pick(entOptions); if (entAct.Event != null) { - entAct.Event.Performer = args.User; - entAct.Event.Action = entActId; entAct.Event.Target = args.Target.Value; } @@ -119,8 +111,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (entActId, entAct) = _random.Pick(entWorldOptions); if (entAct.Event != null) { - entAct.Event.Performer = args.User; - entAct.Event.Action = entActId; entAct.Event.Entity = args.Target; entAct.Event.Coords = args.ClickLocation; } @@ -145,8 +135,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (actId, act) = _random.Pick(options); if (act.Event != null) { - act.Event.Performer = args.User; - act.Event.Action = actId; act.Event.Target = args.ClickLocation; } diff --git a/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs b/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs index 4f2108748b..3dd216c5dc 100644 --- a/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs +++ b/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs @@ -1,6 +1,7 @@ using Content.Server.Power.Components; using Content.Server.Station.Systems; using Content.Shared.AlertLevel; +using Content.Shared.Power; namespace Content.Server.AlertLevel; diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs index bac2648307..bc3b57bd5a 100644 --- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs +++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; using Content.Shared.Mind.Components; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/Anomaly/AnomalySynchronizerSystem.cs b/Content.Server/Anomaly/AnomalySynchronizerSystem.cs index 9f18a41292..d4a3a0d5fa 100644 --- a/Content.Server/Anomaly/AnomalySynchronizerSystem.cs +++ b/Content.Server/Anomaly/AnomalySynchronizerSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Power; using Robust.Shared.Audio.Systems; using Content.Shared.Verbs; diff --git a/Content.Server/Anomaly/AnomalySystem.Generator.cs b/Content.Server/Anomaly/AnomalySystem.Generator.cs index 056a985cbe..6eb84b9441 100644 --- a/Content.Server/Anomaly/AnomalySystem.Generator.cs +++ b/Content.Server/Anomaly/AnomalySystem.Generator.cs @@ -13,6 +13,7 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Map; using System.Numerics; +using Content.Shared.Power; using Robust.Server.GameObjects; namespace Content.Server.Anomaly; diff --git a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs index 561cad8d7e..b0bf389509 100644 --- a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs +++ b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Advertise; using Content.Server.Advertise.Components; using Content.Shared.Arcade; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Player; diff --git a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs index f7758f11f1..b359a13bd1 100644 --- a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs +++ b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.UserInterface; using Content.Server.Advertise; using Content.Server.Advertise.Components; +using Content.Shared.Power; using static Content.Shared.Arcade.SharedSpaceVillainArcadeComponent; using Robust.Server.GameObjects; using Robust.Shared.Audio; diff --git a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs index 643b0ce782..a4e83594f2 100644 --- a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs +++ b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs @@ -17,8 +17,6 @@ public sealed partial class AirAlarmComponent : Component // Remember to null this afterwards. [ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; } - [ViewVariables] public AirAlarmTab CurrentTab { get; set; } - public readonly HashSet KnownDevices = new(); public readonly Dictionary VentData = new(); public readonly Dictionary ScrubberData = new(); diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index f4650861db..eebac18501 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -18,6 +18,7 @@ using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Systems; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Wires; using Robust.Server.GameObjects; using Robust.Shared.Player; @@ -173,7 +174,6 @@ public override void Initialize() subs.Event(OnUpdateThreshold); subs.Event(OnUpdateDeviceData); subs.Event(OnCopyDeviceData); - subs.Event(OnTabChange); }); } @@ -200,12 +200,6 @@ private void OnDeviceListUpdate(EntityUid uid, AirAlarmComponent component, Devi SyncRegisterAllDevices(uid); } - private void OnTabChange(EntityUid uid, AirAlarmComponent component, AirAlarmTabSetMessage msg) - { - component.CurrentTab = msg.Tab; - UpdateUI(uid, component); - } - private void OnPowerChanged(EntityUid uid, AirAlarmComponent component, ref PowerChangedEvent args) { if (args.Powered) @@ -598,34 +592,19 @@ public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetwo var pressure = CalculatePressureAverage(alarm); var temperature = CalculateTemperatureAverage(alarm); - var dataToSend = new Dictionary(); + var dataToSend = new List<(string, IAtmosDeviceData)>(); - if (alarm.CurrentTab != AirAlarmTab.Settings) + foreach (var (addr, data) in alarm.VentData) { - switch (alarm.CurrentTab) - { - case AirAlarmTab.Vent: - foreach (var (addr, data) in alarm.VentData) - { - dataToSend.Add(addr, data); - } - - break; - case AirAlarmTab.Scrubber: - foreach (var (addr, data) in alarm.ScrubberData) - { - dataToSend.Add(addr, data); - } - - break; - case AirAlarmTab.Sensors: - foreach (var (addr, data) in alarm.SensorData) - { - dataToSend.Add(addr, data); - } - - break; - } + dataToSend.Add((addr, data)); + } + foreach (var (addr, data) in alarm.ScrubberData) + { + dataToSend.Add((addr, data)); + } + foreach (var (addr, data) in alarm.SensorData) + { + dataToSend.Add((addr, data)); } var deviceCount = alarm.KnownDevices.Count; @@ -638,7 +617,7 @@ public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetwo _ui.SetUiState( uid, SharedAirAlarmInterfaceKey.Key, - new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value, alarm.AutoMode)); + new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, highestAlarm.Value, alarm.AutoMode)); } private const float Delay = 8f; diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs index 1b3b11068c..81a3968e6f 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Power.Components; using Content.Shared.Atmos.Monitor; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tag; using Robust.Server.Audio; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs index c1a5256fdd..2c9a358755 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tag; using Robust.Shared.Prototypes; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs index 7cb8102a38..b6271c22d4 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs @@ -15,6 +15,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems [UsedImplicitly] public sealed class GasPortableSystem : EntitySystem { + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; @@ -33,7 +34,7 @@ private void OnPortableAnchorAttempt(EntityUid uid, GasPortableComponent compone return; // If we can't find any ports, cancel the anchoring. - if(!FindGasPortIn(transform.GridUid, transform.Coordinates, out _)) + if (!FindGasPortIn(transform.GridUid, transform.Coordinates, out _)) args.Cancel(); } @@ -57,7 +58,7 @@ public bool FindGasPortIn(EntityUid? gridId, EntityCoordinates coordinates, [Not if (!TryComp(gridId, out var grid)) return false; - foreach (var entityUid in grid.GetLocal(coordinates)) + foreach (var entityUid in _mapSystem.GetLocal(gridId.Value, grid, coordinates)) { if (EntityManager.TryGetComponent(entityUid, out port)) { diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index 2859c7f19d..dbbbf2d008 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -18,6 +18,7 @@ using Content.Shared.Audio; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; +using Content.Shared.Power; using Content.Shared.Tools.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs index b27689ed58..a35cf6c2e3 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs @@ -16,6 +16,7 @@ using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Audio; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tools.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs index bc5db2e22c..b1b6ed3678 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs @@ -15,6 +15,7 @@ using Content.Server.NodeContainer.EntitySystems; using Content.Shared.Atmos; using Content.Shared.Database; +using Content.Shared.Power; namespace Content.Server.Atmos.Portable { diff --git a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs index cbf63f5404..36ef59e743 100644 --- a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs +++ b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Atmos.Piping.Portable.Components; using Content.Shared.Atmos.Visuals; +using Content.Shared.Power; using Content.Shared.UserInterface; using Robust.Server.GameObjects; diff --git a/Content.Server/Audio/AmbientSoundSystem.cs b/Content.Server/Audio/AmbientSoundSystem.cs index e78970d124..1f4abf34f7 100644 --- a/Content.Server/Audio/AmbientSoundSystem.cs +++ b/Content.Server/Audio/AmbientSoundSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Audio; using Content.Shared.Mobs; +using Content.Shared.Power; namespace Content.Server.Audio; diff --git a/Content.Server/Audio/Jukebox/JukeboxSystem.cs b/Content.Server/Audio/Jukebox/JukeboxSystem.cs index b8b97b415c..d7593368ae 100644 --- a/Content.Server/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Server/Audio/Jukebox/JukeboxSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Audio.Jukebox; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Components; diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index a6b61da591..2cc8085e72 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Damage; using Content.Shared.Emag.Systems; using Content.Shared.Mobs.Systems; +using Content.Shared.Power; using Robust.Shared.Timing; using Robust.Shared.Utility; diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index 1369fa20f1..dd89ba2f72 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -1,17 +1,14 @@ -using System.Globalization; -using System.Linq; using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Hands.Systems; using Content.Server.Inventory; using Content.Server.Popups; -using Content.Server.Chat.Systems; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Server.StationRecords; using Content.Server.StationRecords.Systems; -using Content.Shared.StationRecords; -using Content.Shared.UserInterface; using Content.Shared.Access.Systems; using Content.Shared.Bed.Cryostorage; using Content.Shared.Chat; @@ -19,6 +16,8 @@ using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Mind.Components; +using Content.Shared.StationRecords; +using Content.Shared.UserInterface; using Robust.Server.Audio; using Robust.Server.Containers; using Robust.Server.GameObjects; @@ -27,6 +26,7 @@ using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Player; +using System.Globalization; namespace Content.Server.Bed.Cryostorage; @@ -40,7 +40,7 @@ public sealed class CryostorageSystem : SharedCryostorageSystem [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly ClimbSystem _climb = default!; [Dependency] private readonly ContainerSystem _container = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HandsSystem _hands = default!; [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -210,7 +210,7 @@ public void HandleEnterCryostorage(Entity ent, Ne if (userId != null && Mind.TryGetMind(userId.Value, out var mind) && HasComp(mind.Value.Comp.CurrentEntity)) { - _gameTicker.OnGhostAttempt(mind.Value, false); + _ghostSystem.OnGhostAttempt(mind.Value, false); } } diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index bd5edb0ea5..4279f3ed2b 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -1,5 +1,5 @@ using Content.Server.Body.Components; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Humanoid; using Content.Shared.Body.Components; using Content.Shared.Body.Part; @@ -17,7 +17,7 @@ namespace Content.Server.Body.Systems; public sealed class BodySystem : SharedBodySystem { - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -43,7 +43,7 @@ private void OnRelayMoveInput(Entity ent, ref MoveInputEvent args if (_mobState.IsDead(ent) && _mindSystem.TryGetMind(ent, out var mindId, out var mind)) { mind.TimeOfDeath ??= _gameTiming.RealTime; - _ticker.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); } } diff --git a/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs b/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs index 4458b020a1..6f356baf07 100644 --- a/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs +++ b/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Power.Components; using Content.Shared.Atmos.Rotting; using Content.Shared.Buckle.Components; +using Content.Shared.Power; namespace Content.Server.Buckle.Systems; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs index f83ec1a512..5b69974077 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs @@ -6,6 +6,7 @@ using Content.Shared.Cargo; using Content.Shared.Cargo.Components; using Content.Shared.DeviceLinking; +using Content.Shared.Power; using Robust.Shared.Audio; using Robust.Shared.Random; using Robust.Shared.Utility; diff --git a/Content.Server/Chat/SuicideSystem.cs b/Content.Server/Chat/SuicideSystem.cs index 884292b0fa..69d87472fb 100644 --- a/Content.Server/Chat/SuicideSystem.cs +++ b/Content.Server/Chat/SuicideSystem.cs @@ -1,18 +1,18 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; +using Content.Shared.Administration.Logs; +using Content.Shared.Chat; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Interaction.Events; using Content.Shared.Item; using Content.Shared.Mind; +using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.Tag; using Robust.Shared.Player; -using Content.Shared.Administration.Logs; -using Content.Shared.Chat; -using Content.Shared.Mind.Components; namespace Content.Server.Chat; @@ -23,7 +23,7 @@ public sealed class SuicideSystem : EntitySystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly SharedSuicideSystem _suicide = default!; public override void Initialize() @@ -82,7 +82,7 @@ private void OnSuicideGhost(Entity victim, ref SuicideGh if (_tagSystem.HasTag(victim, "CannotSuicide")) args.CanReturnToBody = true; - if (_gameTicker.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) + if (_ghostSystem.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) args.Handled = true; } diff --git a/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs index a942d34e7a..45a85010b1 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Power; namespace Content.Server.Chemistry.EntitySystems; diff --git a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs index 6e6373e10b..cd39d20b75 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Placeable; +using Content.Shared.Power; namespace Content.Server.Chemistry.EntitySystems; diff --git a/Content.Server/Cloning/CloningConsoleSystem.cs b/Content.Server/Cloning/CloningConsoleSystem.cs index 950a6599a8..050e2b7f06 100644 --- a/Content.Server/Cloning/CloningConsoleSystem.cs +++ b/Content.Server/Cloning/CloningConsoleSystem.cs @@ -15,6 +15,7 @@ using Content.Shared.Mind; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; +using Content.Shared.Power; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.Player; diff --git a/Content.Server/Clothing/Systems/CursedMaskSystem.cs b/Content.Server/Clothing/Systems/CursedMaskSystem.cs index 2045ff5ccd..825e85e2c6 100644 --- a/Content.Server/Clothing/Systems/CursedMaskSystem.cs +++ b/Content.Server/Clothing/Systems/CursedMaskSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Administration.Logs; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Mind; using Content.Server.NPC; using Content.Server.NPC.HTN; @@ -21,7 +21,7 @@ namespace Content.Server.Clothing.Systems; public sealed class CursedMaskSystem : SharedCursedMaskSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HTNSystem _htn = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly NPCSystem _npc = default!; @@ -39,7 +39,7 @@ protected override void TryTakeover(Entity ent, EntityUid w if (TryComp(wearer, out var actor) && actor.PlayerSession.GetMind() is { } mind) { var session = actor.PlayerSession; - if (!_ticker.OnGhostAttempt(mind, false)) + if (!_ghostSystem.OnGhostAttempt(mind, false)) return; ent.Comp.StolenMind = mind; diff --git a/Content.Server/Connection/ConnectionManager.Whitelist.cs b/Content.Server/Connection/ConnectionManager.Whitelist.cs new file mode 100644 index 0000000000..212c87e17a --- /dev/null +++ b/Content.Server/Connection/ConnectionManager.Whitelist.cs @@ -0,0 +1,221 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; +using Content.Server.Database; +using Content.Shared.CCVar; +using Content.Shared.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection; + +/// +/// Handles whitelist conditions for incoming connections. +/// +public sealed partial class ConnectionManager +{ + private PlayerConnectionWhitelistPrototype[]? _whitelists; + + public void PostInit() + { + _cfg.OnValueChanged(CCVars.WhitelistPrototypeList, UpdateWhitelists, true); + } + + private void UpdateWhitelists(string s) + { + var list = new List(); + foreach (var id in s.Split(',')) + { + if (_prototypeManager.TryIndex(id, out PlayerConnectionWhitelistPrototype? prototype)) + { + list.Add(prototype); + } + else + { + _sawmill.Fatal($"Whitelist prototype {id} does not exist. Denying all connections."); + _whitelists = null; // Invalidate the list, causes deny on all connections. + return; + } + } + + _whitelists = list.ToArray(); + } + + private bool IsValid(PlayerConnectionWhitelistPrototype whitelist, int playerCount) + { + return playerCount >= whitelist.MinimumPlayers && playerCount <= whitelist.MaximumPlayers; + } + + public async Task<(bool isWhitelisted, string? denyMessage)> IsWhitelisted(PlayerConnectionWhitelistPrototype whitelist, NetUserData data, ISawmill sawmill) + { + var cacheRemarks = await _db.GetAllAdminRemarks(data.UserId); + var cachePlaytime = await _db.GetPlayTimes(data.UserId); + + foreach (var condition in whitelist.Conditions) + { + bool matched; + string denyMessage; + switch (condition) + { + case ConditionAlwaysMatch: + matched = true; + denyMessage = Loc.GetString("whitelist-always-deny"); + break; + case ConditionManualWhitelistMembership: + matched = await CheckConditionManualWhitelist(data); + denyMessage = Loc.GetString("whitelist-manual"); + break; + case ConditionManualBlacklistMembership: + matched = await CheckConditionManualBlacklist(data); + denyMessage = Loc.GetString("whitelist-blacklisted"); + break; + case ConditionNotesDateRange conditionNotes: + matched = CheckConditionNotesDateRange(conditionNotes, cacheRemarks); + denyMessage = Loc.GetString("whitelist-notes"); + break; + case ConditionPlayerCount conditionPlayerCount: + matched = CheckConditionPlayerCount(conditionPlayerCount); + denyMessage = Loc.GetString("whitelist-player-count"); + break; + case ConditionPlaytime conditionPlaytime: + matched = CheckConditionPlaytime(conditionPlaytime, cachePlaytime); + denyMessage = Loc.GetString("whitelist-playtime", ("minutes", conditionPlaytime.MinimumPlaytime)); + break; + case ConditionNotesPlaytimeRange conditionNotesPlaytimeRange: + matched = CheckConditionNotesPlaytimeRange(conditionNotesPlaytimeRange, cacheRemarks, cachePlaytime); + denyMessage = Loc.GetString("whitelist-notes"); + break; + default: + throw new NotImplementedException($"Whitelist condition {condition.GetType().Name} not implemented"); + } + + sawmill.Verbose($"User {data.UserName} whitelist condition {condition.GetType().Name} result: {matched}"); + sawmill.Verbose($"Action: {condition.Action.ToString()}"); + switch (condition.Action) + { + case ConditionAction.Allow: + if (matched) + { + sawmill.Verbose($"User {data.UserName} passed whitelist condition {condition.GetType().Name} and it's a breaking condition"); + return (true, denyMessage); + } + break; + case ConditionAction.Deny: + if (matched) + { + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name}"); + return (false, denyMessage); + } + break; + default: + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name} but it's not a breaking condition"); + break; + } + } + sawmill.Verbose($"User {data.UserName} passed all whitelist conditions"); + return (true, null); + } + + #region Condition Checking + + private async Task CheckConditionManualWhitelist(NetUserData data) + { + return !(await _db.GetWhitelistStatusAsync(data.UserId)); + } + + private async Task CheckConditionManualBlacklist(NetUserData data) + { + return await _db.GetBlacklistStatusAsync(data.UserId); + } + + private bool CheckConditionNotesDateRange(ConditionNotesDateRange conditionNotes, List remarks) + { + var range = DateTime.UtcNow.AddDays(-conditionNotes.Range); + + return CheckRemarks(remarks, + conditionNotes.IncludeExpired, + conditionNotes.IncludeSecret, + conditionNotes.MinimumSeverity, + conditionNotes.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.CreatedAt > range); + } + + private bool CheckConditionPlayerCount(ConditionPlayerCount conditionPlayerCount) + { + var count = _plyMgr.PlayerCount; + return count >= conditionPlayerCount.MinimumPlayers && count <= conditionPlayerCount.MaximumPlayers; + } + + private bool CheckConditionPlaytime(ConditionPlaytime conditionPlaytime, List playtime) + { + var tracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (tracker is null) + { + return false; + } + + return tracker.TimeSpent.TotalMinutes >= conditionPlaytime.MinimumPlaytime; + } + + private bool CheckConditionNotesPlaytimeRange( + ConditionNotesPlaytimeRange conditionNotesPlaytimeRange, + List remarks, + List playtime) + { + var overallTracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (overallTracker is null) + { + return false; + } + + return CheckRemarks(remarks, + conditionNotesPlaytimeRange.IncludeExpired, + conditionNotesPlaytimeRange.IncludeSecret, + conditionNotesPlaytimeRange.MinimumSeverity, + conditionNotesPlaytimeRange.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.PlaytimeAtNote >= overallTracker.TimeSpent - TimeSpan.FromMinutes(conditionNotesPlaytimeRange.Range)); + } + + private bool CheckRemarks(List remarks, bool includeExpired, bool includeSecret, NoteSeverity minimumSeverity, int MinimumNotes, Func additionalCheck) + { + var utcNow = DateTime.UtcNow; + + var notes = remarks.Count(r => r is AdminNoteRecord note && note.Severity >= minimumSeverity && (includeSecret || !note.Secret) && (includeExpired || note.ExpirationTime == null || note.ExpirationTime > utcNow)); + if (notes < MinimumNotes) + { + return false; + } + + foreach (var adminRemarksRecord in remarks) + { + // If we're not including expired notes, skip them + if (!includeExpired && (adminRemarksRecord.ExpirationTime == null || adminRemarksRecord.ExpirationTime <= utcNow)) + continue; + + // In order to get the severity of the remark, we need to see if it's an AdminNoteRecord. + if (adminRemarksRecord is not AdminNoteRecord adminNoteRecord) + continue; + + // We want to filter out secret notes if we're not including them. + if (!includeSecret && adminNoteRecord.Secret) + continue; + + // At this point, we need to remove the note if it's not within the severity range. + if (adminNoteRecord.Severity < minimumSeverity) + continue; + + // Perform the additional check specific to each method + if (!additionalCheck(adminRemarksRecord)) + continue; + + // If we've made it this far, we have a match + return true; + } + + // No matches + return false; + } + + #endregion +} diff --git a/Content.Server/Connection/ConnectionManager.cs b/Content.Server/Connection/ConnectionManager.cs index d39dd7990e..987c8d06b0 100644 --- a/Content.Server/Connection/ConnectionManager.cs +++ b/Content.Server/Connection/ConnectionManager.cs @@ -1,5 +1,9 @@ using System.Collections.Immutable; using System.Linq; +using System.Text.Json.Nodes; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; using System.Runtime.InteropServices; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -14,6 +18,7 @@ using Robust.Shared.Configuration; using Robust.Shared.Enums; using Robust.Shared.Network; +using Robust.Shared.Prototypes; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -26,6 +31,7 @@ namespace Content.Server.Connection public interface IConnectionManager { void Initialize(); + void PostInit(); /// /// Temporarily allow a user to bypass regular connection requirements. @@ -43,7 +49,7 @@ public interface IConnectionManager /// /// Handles various duties like guest username assignment, bans, connection logs, etc... /// - public sealed class ConnectionManager : IConnectionManager + public sealed partial class ConnectionManager : IConnectionManager { [Dependency] private readonly IServerDbManager _dbManager = default!; [Dependency] private readonly IPlayerManager _plyMgr = default!; @@ -52,12 +58,14 @@ public sealed class ConnectionManager : IConnectionManager [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ILocalizationManager _loc = default!; [Dependency] private readonly ServerDbEntryManager _serverDbEntry = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IChatManager _chatManager = default!; - private readonly Dictionary _temporaryBypasses = []; private ISawmill _sawmill = default!; + private readonly Dictionary _temporaryBypasses = []; + public void Initialize() { @@ -268,20 +276,33 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null); } - if (_cfg.GetCVar(CCVars.WhitelistEnabled)) + // Checks for whitelist IF it's enabled AND the user isn't an admin. Admins are always allowed. + if (_cfg.GetCVar(CCVars.WhitelistEnabled) && adminData is null) { - var min = _cfg.GetCVar(CCVars.WhitelistMinPlayers); - var max = _cfg.GetCVar(CCVars.WhitelistMaxPlayers); - var playerCountValid = _plyMgr.PlayerCount >= min && _plyMgr.PlayerCount < max; + if (_whitelists is null) + { + _sawmill.Error("Whitelist enabled but no whitelists loaded."); + // Misconfigured, deny everyone. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-misconfigured"), null); + } - if (playerCountValid && await _db.GetWhitelistStatusAsync(userId) == false - && adminData is null) + foreach (var whitelist in _whitelists) { - var msg = Loc.GetString(_cfg.GetCVar(CCVars.WhitelistReason)); - // was the whitelist playercount changed? - if (min > 0 || max < int.MaxValue) - msg += "\n" + Loc.GetString("whitelist-playercount-invalid", ("min", min), ("max", max)); - return (ConnectionDenyReason.Whitelist, msg, null); + if (!IsValid(whitelist, _plyMgr.PlayerCount)) + { + // Not valid for current player count. + continue; + } + + var whitelistStatus = await IsWhitelisted(whitelist, e.UserData, _sawmill); + if (!whitelistStatus.isWhitelisted) + { + // Not whitelisted. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-fail-prefix", ("msg", whitelistStatus.denyMessage!)), null); + } + + // Whitelisted, don't check any more. + break; } } diff --git a/Content.Server/Connection/Whitelist/BlacklistCommands.cs b/Content.Server/Connection/Whitelist/BlacklistCommands.cs new file mode 100644 index 0000000000..e79fb7ee22 --- /dev/null +++ b/Content.Server/Connection/Whitelist/BlacklistCommands.cs @@ -0,0 +1,117 @@ +using Content.Server.Administration; +using Content.Server.Database; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Connection.Whitelist; + +[AdminCommand(AdminFlags.Ban)] +public sealed class AddBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistadd"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistadd-not-found", ("username", args[0]))); + return; + } + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistadd-existing", ("username", data.Username))); + return; + } + + await _db.AddToBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistadd-added", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistadd-arg-player")); + } + + return CompletionResult.Empty; + } +} + +[AdminCommand(AdminFlags.Ban)] +public sealed class RemoveBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistremove"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistremove-not-found", ("username", args[0]))); + return; + } + + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (!isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistremove-existing", ("username", data.Username))); + return; + } + + await _db.RemoveFromBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistremove-removed", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistremove-arg-player")); + } + + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs new file mode 100644 index 0000000000..9fe5db4012 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that always matches +/// +public sealed partial class ConditionAlwaysMatch : WhitelistCondition +{ + +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs new file mode 100644 index 0000000000..9d67129e71 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual blacklist. +/// +public sealed partial class ConditionManualBlacklistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs new file mode 100644 index 0000000000..a31835f9c2 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual whitelist. +/// +public sealed partial class ConditionManualWhitelistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs new file mode 100644 index 0000000000..1e34bc6373 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs @@ -0,0 +1,34 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain date range. +/// +public sealed partial class ConditionNotesDateRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// Range in days to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs new file mode 100644 index 0000000000..d2d22a8cd0 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs @@ -0,0 +1,30 @@ +using Content.Shared.Database; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain playtime range. +/// +public sealed partial class ConditionNotesPlaytimeRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// The range in minutes to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs new file mode 100644 index 0000000000..432ad32c4a --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using Robust.Server.Player; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player count is within a certain range. +/// +public sealed partial class ConditionPlayerCount : WhitelistCondition +{ + [DataField] + public int MinimumPlayers = 0; + [DataField] + public int MaximumPlayers = int.MaxValue; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs new file mode 100644 index 0000000000..7b45181e12 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has played for a certain amount of time. +/// +public sealed partial class ConditionPlaytime : WhitelistCondition +{ + [DataField] + public int MinimumPlaytime = 0; // In minutes +} diff --git a/Content.Server/Connection/Whitelist/WhitelistCondition.cs b/Content.Server/Connection/Whitelist/WhitelistCondition.cs new file mode 100644 index 0000000000..b68fd52996 --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistCondition.cs @@ -0,0 +1,41 @@ +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist; + +/// +/// This class is used to determine if a player should be allowed to join the server. +/// It is used in +/// +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class WhitelistCondition +{ + /// + /// What action should be taken if this condition is met? + /// Defaults to . + /// + [DataField] + public ConditionAction Action { get; set; } = ConditionAction.Next; +} + +/// +/// Determines what action should be taken if a condition is met. +/// +public enum ConditionAction +{ + /// + /// The player is allowed to join, and the next conditions will be skipped. + /// + Allow, + /// + /// The player is denied to join, and the next conditions will be skipped. + /// + Deny, + /// + /// The next condition should be checked. + /// + Next +} diff --git a/Content.Server/Connection/Whitelist/WhitelistPrototype.cs b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs new file mode 100644 index 0000000000..2b8b9babbc --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Server.Connection.Whitelist; + +/// +/// Used by the to determine if a player should be allowed to join the server. +/// Used in the whitelist.prototype_list CVar. +/// +/// Whitelists are used to determine if a player is allowed to connect. +/// You define a PlayerConnectionWhitelist with a list of conditions. +/// Every condition has a type and a along with other parameters depending on the type. +/// Action must either be Allow, Deny or Next. +/// Allow means the player is instantly allowed to connect if the condition is met. +/// Deny means the player is instantly denied to connect if the condition is met. +/// Next means the next condition in the list is checked. +/// If the condition doesn't match, the next condition is checked. +/// +[Prototype("playerConnectionWhitelist")] +public sealed class PlayerConnectionWhitelistPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + /// + /// Minimum number of players required for this whitelist to be active. + /// If there are less players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MinimumPlayers { get; } = 0; + + /// + /// Maximum number of players allowed for this whitelist to be active. + /// If there are more players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MaximumPlayers { get; } = int.MaxValue; + + [DataField] + public WhitelistCondition[] Conditions { get; } = default!; +} diff --git a/Content.Server/Construction/ConstructionSystem.Computer.cs b/Content.Server/Construction/ConstructionSystem.Computer.cs index 0685b08f4f..6951d44b4d 100644 --- a/Content.Server/Construction/ConstructionSystem.Computer.cs +++ b/Content.Server/Construction/ConstructionSystem.Computer.cs @@ -1,6 +1,7 @@ using Content.Server.Construction.Components; using Content.Server.Power.Components; using Content.Shared.Computer; +using Content.Shared.Power; using Robust.Shared.Containers; namespace Content.Server.Construction; diff --git a/Content.Server/Construction/FlatpackSystem.cs b/Content.Server/Construction/FlatpackSystem.cs index af2132723c..11303e7f2e 100644 --- a/Content.Server/Construction/FlatpackSystem.cs +++ b/Content.Server/Construction/FlatpackSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Construction; using Content.Shared.Construction.Components; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Power; using Robust.Shared.Prototypes; using Robust.Shared.Timing; diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 72e3c50daf..2b6ce41e19 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -1066,6 +1066,29 @@ public async Task SetLastReadRules(NetUserId player, DateTimeOffset date) await db.DbContext.SaveChangesAsync(); } + public async Task GetBlacklistStatusAsync(NetUserId player) + { + await using var db = await GetDb(); + + return await db.DbContext.Blacklist.AnyAsync(w => w.UserId == player); + } + + public async Task AddToBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + + db.DbContext.Blacklist.Add(new Blacklist() { UserId = player }); + await db.DbContext.SaveChangesAsync(); + } + + public async Task RemoveFromBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + var entry = await db.DbContext.Blacklist.SingleAsync(w => w.UserId == player); + db.DbContext.Blacklist.Remove(entry); + await db.DbContext.SaveChangesAsync(); + } + #endregion #region Uploaded Resources Logs diff --git a/Content.Server/Database/ServerDbManager.cs b/Content.Server/Database/ServerDbManager.cs index 8b6ac5fed6..216b1ec159 100644 --- a/Content.Server/Database/ServerDbManager.cs +++ b/Content.Server/Database/ServerDbManager.cs @@ -244,6 +244,16 @@ Task AddConnectionLogAsync( #endregion + #region Blacklist + + Task GetBlacklistStatusAsync(NetUserId player); + + Task AddToBlacklistAsync(NetUserId player); + + Task RemoveFromBlacklistAsync(NetUserId player); + + #endregion + #region Uploaded Resources Logs Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data); @@ -740,6 +750,24 @@ public Task RemoveFromWhitelistAsync(NetUserId player) return RunDbCommand(() => _db.RemoveFromWhitelistAsync(player)); } + public Task GetBlacklistStatusAsync(NetUserId player) + { + DbReadOpsMetric.Inc(); + return RunDbCommand(() => _db.GetBlacklistStatusAsync(player)); + } + + public Task AddToBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.AddToBlacklistAsync(player)); + } + + public Task RemoveFromBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.RemoveFromBlacklistAsync(player)); + } + public Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data) { DbWriteOpsMetric.Inc(); diff --git a/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs b/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs index d9599546ae..b67a2fcd95 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/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs b/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs index 6e7bd255c5..f47a5df8ac 100644 --- a/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs @@ -1,6 +1,7 @@ using Content.Server.DeviceNetwork.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power.EntitySystems; namespace Content.Server.DeviceNetwork.Systems; diff --git a/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs b/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs index cdc083feac..d189afc0a0 100644 --- a/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Medical.CrewMonitoring; using Content.Server.Power.Components; using Content.Server.Station.Systems; +using Content.Shared.Power; namespace Content.Server.DeviceNetwork.Systems; diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index 7726acfc93..f1d182fc66 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -25,6 +25,7 @@ using Content.Shared.Item; using Content.Shared.Movement.Events; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Verbs; using Robust.Server.Audio; using Robust.Server.GameObjects; diff --git a/Content.Server/Doors/Systems/AirlockSystem.cs b/Content.Server/Doors/Systems/AirlockSystem.cs index fd5d3a9ceb..e9f1db13ff 100644 --- a/Content.Server/Doors/Systems/AirlockSystem.cs +++ b/Content.Server/Doors/Systems/AirlockSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Wires; using Robust.Shared.Player; diff --git a/Content.Server/Doors/Systems/DoorSystem.cs b/Content.Server/Doors/Systems/DoorSystem.cs index 5968e445c1..292f8ec8e9 100644 --- a/Content.Server/Doors/Systems/DoorSystem.cs +++ b/Content.Server/Doors/Systems/DoorSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Access; using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; -using Content.Server.Power.Components; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Power; using Robust.Shared.Physics.Components; namespace Content.Server.Doors.Systems; diff --git a/Content.Server/Doors/Systems/FirelockSystem.cs b/Content.Server/Doors/Systems/FirelockSystem.cs index 87e5887c42..6bb1972b6e 100644 --- a/Content.Server/Doors/Systems/FirelockSystem.cs +++ b/Content.Server/Doors/Systems/FirelockSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Atmos.Monitor; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 3a9d07126e..76d1b0deda 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -145,6 +145,7 @@ public override void PostInit() IoCManager.Resolve().Initialize(); IoCManager.Resolve().GetEntitySystem().PostInitialize(); IoCManager.Resolve().Initialize(); + IoCManager.Resolve().PostInit(); } } diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs index 18852ac755..a43d0171e6 100644 --- a/Content.Server/Fax/FaxSystem.cs +++ b/Content.Server/Fax/FaxSystem.cs @@ -29,6 +29,7 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Content.Shared.NameModifier.Components; +using Content.Shared.Power; namespace Content.Server.Fax; diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 5a2b375dd6..5642e84f90 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -1,27 +1,16 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading.Tasks; using Content.Server.GameTicking.Presets; using Content.Server.Maps; using Content.Shared.CCVar; -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Content.Shared.Ghost; -using Content.Shared.Mind; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using JetBrains.Annotations; using Robust.Shared.Player; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading.Tasks; namespace Content.Server.GameTicking { public sealed partial class GameTicker { - [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; - public const float PresetFailedCooldownIncrease = 30f; /// @@ -198,94 +187,6 @@ public void StartGamePresetRules() } } - public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) - { - if (!Resolve(mindId, ref mind)) - return false; - - var playerEntity = mind.CurrentEntity; - - if (playerEntity != null && viaCommand) - _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); - - var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); - RaiseLocalEvent(handleEv); - - // Something else has handled the ghost attempt for us! We return its result. - if (handleEv.Handled) - return handleEv.Result; - - if (mind.PreventGhosting) - { - if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts - { - _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), - true); - } - - return false; - } - - if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) - return false; - - if (mind.VisitingEntity != default) - { - _mind.UnVisit(mindId, mind: mind); - } - - var position = Exists(playerEntity) - ? Transform(playerEntity.Value).Coordinates - : GetObserverSpawnPoint(); - - if (position == default) - return false; - - // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. - // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. - // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) - // Note that we could theoretically be ICly dead and still physically alive and vice versa. - // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) - // + If we're in a mob that is critical, and we're supposed to be able to return if possible, - // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. - // (If the mob survives, that's a bug. Ghosting is kept regardless.) - var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); - - if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && - canReturnGlobal && - TryComp(playerEntity, out MobStateComponent? mobState)) - { - if (_mobState.IsCritical(playerEntity.Value, mobState)) - { - canReturn = true; - - //todo: what if they dont breathe lol - //cry deeply - - FixedPoint2 dealtDamage = 200; - if (TryComp(playerEntity, out var damageable) - && TryComp(playerEntity, out var thresholds)) - { - var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); - dealtDamage = playerDeadThreshold - damageable.TotalDamage; - } - - DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); - - _damageable.TryChangeDamage(playerEntity, damage, true); - } - } - - 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)" : "")}"); - - return true; - } - private void IncrementRoundNumber() { var playerIds = _playerGameStatuses.Keys.Select(player => player.UserId).ToArray(); @@ -304,17 +205,4 @@ private void IncrementRoundNumber() RoundId = task.GetAwaiter().GetResult(); } } - - public sealed class GhostAttemptHandleEvent : HandledEntityEventArgs - { - public MindComponent Mind { get; } - public bool CanReturnGlobal { get; } - public bool Result { get; set; } - - public GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) - { - Mind = mind; - CanReturnGlobal = canReturnGlobal; - } - } } diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 5e2ef0c02c..3ca62e561d 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -4,6 +4,7 @@ using Content.Server.Administration.Managers; using Content.Server.GameTicking.Events; using Content.Server.Ghost; +using Content.Server.Shuttles.Components; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; @@ -274,28 +275,13 @@ private void SpawnPlayer(ICommonSession player, Loc.GetString("job-greet-station-name", ("stationName", metaData.EntityName))); } - // Arrivals is unable to do this during spawning as no actor is attached yet. - // We also want this message last. - if (!silent && lateJoin && _arrivals.Enabled) - { - var arrival = _arrivals.NextShuttleArrival(); - if (arrival == null) - { - _chatManager.DispatchServerMessage(player, Loc.GetString("latejoin-arrivals-direction")); - } - else - { - _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, + silent, PlayersJoinedRoundNormally, station, character); @@ -314,7 +300,7 @@ public void Respawn(ICommonSession player) } /// - /// Makes a player join into the game and spawn on a staiton. + /// Makes a player join into the game and spawn on a station. /// /// The player joining /// The station they're spawning on @@ -494,6 +480,7 @@ public sealed class PlayerSpawnCompleteEvent : EntityEventArgs public ICommonSession Player { get; } public string? JobId { get; } public bool LateJoin { get; } + public bool Silent { get; } public EntityUid Station { get; } public HumanoidCharacterProfile Profile { get; } @@ -504,6 +491,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, ICommonSession player, string? jobId, bool lateJoin, + bool silent, int joinOrder, EntityUid station, HumanoidCharacterProfile profile) @@ -512,6 +500,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, Player = player; JobId = jobId; LateJoin = lateJoin; + Silent = silent; Station = station; Profile = profile; JoinOrder = joinOrder; diff --git a/Content.Server/Ghost/GhostCommand.cs b/Content.Server/Ghost/GhostCommand.cs index b553d64201..a2f361d29d 100644 --- a/Content.Server/Ghost/GhostCommand.cs +++ b/Content.Server/Ghost/GhostCommand.cs @@ -1,4 +1,3 @@ -using Content.Server.GameTicking; using Content.Server.Popups; using Content.Shared.Administration; using Content.Shared.Mind; @@ -41,7 +40,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) mind = _entities.GetComponent(mindId); } - if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) + if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) { shell.WriteLine(Loc.GetString("ghost-command-denied")); } diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index b68c279b3e..b045214329 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -1,17 +1,23 @@ -using System.Linq; -using System.Numerics; +using Content.Server.Administration.Logs; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Ghost.Components; using Content.Server.Mind; using Content.Server.Roles.Jobs; using Content.Server.Warps; using Content.Shared.Actions; +using Content.Shared.CCVar; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Eye; +using Content.Shared.FixedPoint; using Content.Shared.Follower; using Content.Shared.Ghost; using Content.Shared.Mind; using Content.Shared.Mind.Components; +using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Events; @@ -19,11 +25,15 @@ using Content.Shared.Storage.Components; using Robust.Server.GameObjects; using Robust.Server.Player; +using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Linq; +using System.Numerics; namespace Content.Server.Ghost { @@ -44,6 +54,14 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; private EntityQuery _ghostQuery; private EntityQuery _physicsQuery; @@ -144,7 +162,7 @@ private void OnRelayMoveInput(EntityUid uid, GhostOnMoveComponent component, ref if (component.MustBeDead && (_mobState.IsAlive(uid) || _mobState.IsCritical(uid))) return; - _ticker.OnGhostAttempt(mindId, component.CanReturn, mind: mind); + OnGhostAttempt(mindId, component.CanReturn, mind: mind); } private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentStartup args) @@ -473,5 +491,102 @@ private bool IsValidSpawnPosition(EntityCoordinates? spawnPosition) Log.Debug($"Spawned ghost \"{ToPrettyString(ghost)}\" for {mind.Comp.CharacterName}."); return ghost; } + + public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) + { + if (!Resolve(mindId, ref mind)) + return false; + + var playerEntity = mind.CurrentEntity; + + if (playerEntity != null && viaCommand) + _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); + + var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); + RaiseLocalEvent(handleEv); + + // Something else has handled the ghost attempt for us! We return its result. + if (handleEv.Handled) + return handleEv.Result; + + if (mind.PreventGhosting) + { + if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts + { + _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), + true); + } + + return false; + } + + if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) + return false; + + if (mind.VisitingEntity != default) + { + _mind.UnVisit(mindId, mind: mind); + } + + var position = Exists(playerEntity) + ? Transform(playerEntity.Value).Coordinates + : _gameTicker.GetObserverSpawnPoint(); + + if (position == default) + return false; + + // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. + // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. + // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) + // Note that we could theoretically be ICly dead and still physically alive and vice versa. + // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) + // + If we're in a mob that is critical, and we're supposed to be able to return if possible, + // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. + // (If the mob survives, that's a bug. Ghosting is kept regardless.) + var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); + + if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && + canReturnGlobal && + TryComp(playerEntity, out MobStateComponent? mobState)) + { + if (_mobState.IsCritical(playerEntity.Value, mobState)) + { + canReturn = true; + + //todo: what if they dont breathe lol + //cry deeply + + FixedPoint2 dealtDamage = 200; + + if (TryComp(playerEntity, out var damageable) + && TryComp(playerEntity, out var thresholds)) + { + var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); + dealtDamage = playerDeadThreshold - damageable.TotalDamage; + } + + DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); + + _damageable.TryChangeDamage(playerEntity, damage, true); + } + } + + var 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)" : "")}"); + + return true; + } + } + + public sealed class GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) : HandledEntityEventArgs + { + public MindComponent Mind { get; } = mind; + public bool CanReturnGlobal { get; } = canReturnGlobal; + public bool Result { get; set; } } } diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index b4023bbdb9..f7e0c6fde2 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -21,6 +21,7 @@ using System.Linq; using Content.Server.Jittering; using Content.Shared.Jittering; +using Content.Shared.Power; namespace Content.Server.Kitchen.EntitySystems { diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 5ece533a62..18f246dcef 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -19,6 +19,7 @@ using Content.Shared.Examine; using Content.Shared.Lathe; using Content.Shared.Materials; +using Content.Shared.Power; using Content.Shared.ReagentSpeed; using Content.Shared.Research.Components; using Content.Shared.Research.Prototypes; @@ -155,10 +156,10 @@ public List> GetAvailableRecipes(EntityUid uid, La { var ev = new LatheGetRecipesEvent(uid, getUnavailable) { - Recipes = new List>(component.StaticRecipes) + Recipes = new HashSet>(component.StaticRecipes) }; RaiseLocalEvent(uid, ev); - return ev.Recipes; + return ev.Recipes.ToList(); } public static List> GetAllBaseRecipes(LatheComponent component) diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index b6810aa33b..6bd5750460 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Examine; using Content.Shared.Light; using Content.Shared.Light.Components; +using Content.Shared.Power; using Content.Shared.Station.Components; using Robust.Server.GameObjects; using Color = Robust.Shared.Maths.Color; diff --git a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs index 752fb8f5fe..3c5f7eaecb 100644 --- a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs +++ b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs @@ -1,6 +1,8 @@ using Content.Server.Light.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Light.EntitySystems { diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index 33b7ce0782..6e1363dee2 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -25,6 +25,8 @@ using Robust.Shared.Audio.Systems; using Content.Shared.Damage.Systems; using Content.Shared.Damage.Components; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Light.EntitySystems { diff --git a/Content.Server/Maps/ResaveCommand.cs b/Content.Server/Maps/ResaveCommand.cs index a966070d3e..cc4d13dded 100644 --- a/Content.Server/Maps/ResaveCommand.cs +++ b/Content.Server/Maps/ResaveCommand.cs @@ -13,7 +13,7 @@ namespace Content.Server.Maps; /// /// Loads every map and resaves it into the data folder. /// -[AdminCommand(AdminFlags.Mapping)] +[AdminCommand(AdminFlags.Host)] public sealed class ResaveCommand : LocalizedCommands { [Dependency] private readonly IEntityManager _entManager = default!; diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index e66c27343c..f6abcad7bc 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,30 +1,29 @@ -using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Administration.Logs; using Content.Server.Fluids.EntitySystems; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Popups; -using Content.Server.Power.Components; +using Content.Server.Repairable; using Content.Server.Stack; using Content.Server.Wires; using Content.Shared.Body.Systems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Database; +using Content.Shared.Destructible; +using Content.Shared.Emag.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Materials; using Content.Shared.Mind; using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; using System.Linq; -using Content.Server.Administration.Logs; -using Content.Server.Repairable; -using Content.Shared.Database; -using Content.Shared.Destructible; -using Content.Shared.Emag.Components; -using Robust.Shared.Prototypes; namespace Content.Server.Materials; @@ -33,7 +32,7 @@ public sealed class MaterialReclaimerSystem : SharedMaterialReclaimerSystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly AppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly OpenableSystem _openable = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -98,7 +97,7 @@ private void OnSuicideByEnvironment(Entity entity, r if (TryComp(victim, out ActorComponent? actor) && _mind.TryGetMind(actor.PlayerSession, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } suicider) { _popup.PopupEntity(Loc.GetString("recycler-component-suicide-message"), suicider); diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index c5beed718e..868e6d99f2 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -24,6 +24,7 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Throwing; using Robust.Server.Player; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index 8d54fc6dd9..2c9f58616a 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -29,6 +29,7 @@ using Content.Shared.Interaction; using Content.Shared.Medical.Cryogenics; using Content.Shared.MedicalScanner; +using Content.Shared.Power; using Content.Shared.Verbs; using Robust.Server.GameObjects; using Robust.Shared.Containers; diff --git a/Content.Server/Mind/MindSystem.cs b/Content.Server/Mind/MindSystem.cs index 4271d76b44..c3e29cc363 100644 --- a/Content.Server/Mind/MindSystem.cs +++ b/Content.Server/Mind/MindSystem.cs @@ -1,4 +1,3 @@ -using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.GameTicking; using Content.Server.Ghost; @@ -13,6 +12,7 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; namespace Content.Server.Mind; @@ -194,7 +194,7 @@ public override void TransferTo(EntityUid mindId, EntityUid? entity, bool ghostC component = EnsureComp(entity.Value); if (component.HasMind) - _gameTicker.OnGhostAttempt(component.Mind.Value, false); + _ghosts.OnGhostAttempt(component.Mind.Value, false); if (TryComp(entity.Value, out var actor)) { diff --git a/Content.Server/Morgue/CrematoriumSystem.cs b/Content.Server/Morgue/CrematoriumSystem.cs index f6859b610a..656457dc98 100644 --- a/Content.Server/Morgue/CrematoriumSystem.cs +++ b/Content.Server/Morgue/CrematoriumSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Morgue.Components; using Content.Server.Storage.Components; using Content.Server.Storage.EntitySystems; @@ -13,8 +13,6 @@ using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Verbs; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Player; @@ -25,7 +23,7 @@ public sealed class CrematoriumSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly StandingStateSystem _standing = default!; @@ -154,7 +152,7 @@ private void OnSuicideByEnvironment(EntityUid uid, CrematoriumComponent componen var victim = args.Victim; if (TryComp(victim, out ActorComponent? actor) && _minds.TryGetMind(victim, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } entity) { diff --git a/Content.Server/NPC/Systems/NPCJukeSystem.cs b/Content.Server/NPC/Systems/NPCJukeSystem.cs index 94a30feb0c..1b2f4f5357 100644 --- a/Content.Server/NPC/Systems/NPCJukeSystem.cs +++ b/Content.Server/NPC/Systems/NPCJukeSystem.cs @@ -20,6 +20,7 @@ public sealed class NPCJukeSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly MeleeWeaponSystem _melee = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; private EntityQuery _npcMeleeQuery; @@ -59,7 +60,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var currentTile = grid.CoordinatesToTile(args.Transform.Coordinates); + var currentTile = _mapSystem.CoordinatesToTile(args.Transform.GridUid.Value, grid, args.Transform.Coordinates); if (component.TargetTile == null) { @@ -72,7 +73,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt for (var i = 0; i < 8; i++) { var index = (startIndex + i) % 8; - var neighbor = ((Direction) index).ToIntVec() + currentTile; + var neighbor = ((Direction)index).ToIntVec() + currentTile; var valid = true; // TODO: Probably make this a helper on engine maybe @@ -116,7 +117,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var targetCoords = grid.GridTileToWorld(component.TargetTile.Value); + var targetCoords = _mapSystem.GridTileToWorld(args.Transform.GridUid.Value, grid, component.TargetTile.Value); var targetDir = (targetCoords.Position - args.WorldPosition); targetDir = args.OffsetRotation.RotateVec(targetDir); const float weight = 1f; diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index e0bcb97a11..fa43b3e752 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -22,7 +22,7 @@ private void ApplySeek(Span interest, Vector2 direction, float weight) if (weight == 0f || direction == Vector2.Zero) return; - var directionAngle = (float) direction.ToAngle().Theta; + var directionAngle = (float)direction.ToAngle().Theta; for (var i = 0; i < InterestDirections; i++) { @@ -166,8 +166,8 @@ private bool TrySeek( } // Check if mapids match. - var targetMap = targetCoordinates.ToMap(EntityManager, _transform); - var ourMap = ourCoordinates.ToMap(EntityManager, _transform); + var targetMap = _transform.ToMapCoordinates(targetCoordinates); + var ourMap = _transform.ToMapCoordinates(ourCoordinates); if (targetMap.MapId != ourMap.MapId) { @@ -258,7 +258,7 @@ private bool TrySeek( return false; } - targetMap = targetCoordinates.ToMap(EntityManager, _transform); + targetMap = _transform.ToMapCoordinates(targetCoordinates); // Can't make it again. if (ourMap.MapId != targetMap.MapId) @@ -429,7 +429,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (TryComp(uid, out var physics)) { - mask = (CollisionGroup) physics.CollisionMask; + mask = (CollisionGroup)physics.CollisionMask; } for (var i = 0; i < nodes.Count; i++) @@ -439,7 +439,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (!node.Data.IsFreeSpace) break; - var nodeMap = node.Coordinates.ToMap(EntityManager, _transform); + var nodeMap = _transform.ToMapCoordinates(node.Coordinates); // If any nodes are 'behind us' relative to the target we'll prune them. // This isn't perfect but should fix most cases of stutter stepping. diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs index 3bc4eae9e4..a31c7850f3 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs @@ -207,7 +207,7 @@ private void GetObstacleEntities(PathPoly poly, int mask, int layer, List user, En if (action.Event != null) { - action.Event.Performer = user; - action.Event.Action = user.Comp.ActionEnt.Value; action.Event.Coords = Transform(target).Coordinates; } diff --git a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs index 180e40d1e4..c91a6f795b 100644 --- a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Power; using Content.Shared.Storage.Components; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; diff --git a/Content.Server/Paper/PaperRandomStoryComponent.cs b/Content.Server/Paper/PaperRandomStoryComponent.cs index b8e07f0ee8..7b6624ac85 100644 --- a/Content.Server/Paper/PaperRandomStoryComponent.cs +++ b/Content.Server/Paper/PaperRandomStoryComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Paper; using Content.Shared.StoryGen; using Robust.Shared.Prototypes; diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs index 4d39a5ce30..17943c1c98 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using Content.Server.Administration.Managers; using Content.Shared.CCVar; +using Content.Shared.Power; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; diff --git a/Content.Server/Physics/Controllers/ConveyorController.cs b/Content.Server/Physics/Controllers/ConveyorController.cs index e2788fa54c..3c0db7f85a 100644 --- a/Content.Server/Physics/Controllers/ConveyorController.cs +++ b/Content.Server/Physics/Controllers/ConveyorController.cs @@ -7,6 +7,7 @@ using Content.Shared.Maps; using Content.Shared.Physics; using Content.Shared.Physics.Controllers; +using Content.Shared.Power; using Robust.Shared.Physics; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Components; diff --git a/Content.Server/Power/Components/ApcPowerReceiverComponent.cs b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs index 9a68e2aabb..ebb3c6b42f 100644 --- a/Content.Server/Power/Components/ApcPowerReceiverComponent.cs +++ b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs @@ -59,11 +59,4 @@ public bool PowerDisabled { public float PowerReceived => NetworkLoad.ReceivingPower; } - - /// - /// Raised whenever an ApcPowerReceiver becomes powered / unpowered. - /// Does nothing on the client. - /// - [ByRefEvent] - public readonly record struct PowerChangedEvent(bool Powered, float ReceivingPower); } diff --git a/Content.Server/Power/Components/CableComponent.cs b/Content.Server/Power/Components/CableComponent.cs index a2a02a60f6..7398bc0616 100644 --- a/Content.Server/Power/Components/CableComponent.cs +++ b/Content.Server/Power/Components/CableComponent.cs @@ -4,6 +4,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using System.Diagnostics.Tracing; +using Content.Shared.Tools.Systems; namespace Content.Server.Power.Components; @@ -14,11 +15,11 @@ namespace Content.Server.Power.Components; [Access(typeof(CableSystem))] public sealed partial class CableComponent : Component { - [DataField("cableDroppedOnCutPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string CableDroppedOnCutPrototype = "CableHVStack1"; + [DataField] + public EntProtoId CableDroppedOnCutPrototype = "CableHVStack1"; - [DataField("cuttingQuality", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string CuttingQuality = "Cutting"; + [DataField] + public ProtoId CuttingQuality = SharedToolSystem.CutQuality; /// /// Checked by to determine if there is diff --git a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs index 11f35634b2..9fd824a3c4 100644 --- a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs +++ b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Power.Components; +using Content.Shared.Power; using Content.Shared.Power.Components; using Content.Shared.Power.EntitySystems; using Content.Shared.UserInterface; diff --git a/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs b/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs index 15b967bb1d..4a63be894e 100644 --- a/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs +++ b/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Tools; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Tools.Systems; using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.Utility; @@ -27,7 +28,7 @@ public override void Initialize() private void OnAfterInteractUsing(EntityUid uid, CableComponent component, AfterInteractUsingEvent args) { - if (args.Handled || args.Target == null || !args.CanReach || !_toolSystem.HasQuality(args.Used, "Pulsing")) + if (args.Handled || args.Target == null || !args.CanReach || !_toolSystem.HasQuality(args.Used, SharedToolSystem.PulseQuality)) return; var markup = FormattedMessage.FromMarkup(GenerateCableMarkup(uid)); @@ -45,7 +46,7 @@ private void OnGetExamineVerbs(EntityUid uid, CableComponent component, GetVerbs // Pulsing is hardcoded here because I don't think it needs to be more complex than that right now. // Update if I'm wrong. - var enabled = held != null && _toolSystem.HasQuality(held.Value, "Pulsing"); + var enabled = held != null && _toolSystem.HasQuality(held.Value, SharedToolSystem.PulseQuality); var verb = new ExamineVerb { Disabled = !enabled, diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index 4e2543d2a7..df7bd2a54f 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -8,6 +8,7 @@ using JetBrains.Annotations; using Robust.Shared.Containers; using System.Diagnostics.CodeAnalysis; +using Content.Shared.Power.Components; using Content.Shared.Storage.Components; using Robust.Server.Containers; using Content.Shared.Whitelist; diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index a7098649ce..9ce4814139 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Power.Pow3r; using Content.Shared.CCVar; using Content.Shared.Power; +using Content.Shared.Power.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Configuration; diff --git a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs index 9b15bdfd28..38d7376e54 100644 --- a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Power.Components; @@ -197,5 +198,17 @@ public void SetLoad(ApcPowerReceiverComponent comp, float load) { comp.Load = load; } + + public override bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component) + { + if (component != null) + return true; + + if (!TryComp(entity, out ApcPowerReceiverComponent? receiver)) + return false; + + component = receiver; + return true; + } } } diff --git a/Content.Server/Power/Generation/Teg/TegSystem.cs b/Content.Server/Power/Generation/Teg/TegSystem.cs index 02412ca5fb..edf0693954 100644 --- a/Content.Server/Power/Generation/Teg/TegSystem.cs +++ b/Content.Server/Power/Generation/Teg/TegSystem.cs @@ -10,6 +10,8 @@ using Content.Shared.Atmos; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Power.Generation.Teg; using Content.Shared.Rounding; using Robust.Server.GameObjects; diff --git a/Content.Server/Power/Generator/GasPowerReceiverSystem.cs b/Content.Server/Power/Generator/GasPowerReceiverSystem.cs index 5f79906c99..5a1bd31a15 100644 --- a/Content.Server/Power/Generator/GasPowerReceiverSystem.cs +++ b/Content.Server/Power/Generator/GasPowerReceiverSystem.cs @@ -5,6 +5,8 @@ using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Shared.Atmos; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Power.Generator; diff --git a/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs b/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs index f16a09eae3..19ae0bd687 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/PowerCell/PowerCellSystem.Draw.cs b/Content.Server/PowerCell/PowerCellSystem.Draw.cs index 9ebd677f47..ae43b6dae9 100644 --- a/Content.Server/PowerCell/PowerCellSystem.Draw.cs +++ b/Content.Server/PowerCell/PowerCellSystem.Draw.cs @@ -1,5 +1,4 @@ using Content.Server.Power.Components; -using Content.Shared.Item.ItemToggle.Components; using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; @@ -14,11 +13,11 @@ public sealed partial class PowerCellSystem public override void Update(float frameTime) { base.Update(frameTime); - var query = EntityQueryEnumerator(); + var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var comp, out var slot, out var toggle)) + while (query.MoveNext(out var uid, out var comp, out var slot)) { - if (!comp.Enabled || !toggle.Activated) + if (!comp.Enabled) continue; if (Timing.CurTime < comp.NextUpdateTime) @@ -32,8 +31,6 @@ public override void Update(float frameTime) if (_battery.TryUseCharge(batteryEnt.Value, comp.DrawRate, battery)) continue; - Toggle.TryDeactivate((uid, toggle)); - var ev = new PowerCellSlotEmptyEvent(); RaiseLocalEvent(uid, ref ev); } @@ -60,7 +57,10 @@ private void OnDrawCellChanged(EntityUid uid, PowerCellDrawComponent component, var canUse = !args.Ejected && HasActivatableCharge(uid, component); if (!canDraw) - Toggle.TryDeactivate(uid); + { + var ev = new PowerCellSlotEmptyEvent(); + RaiseLocalEvent(uid, ref ev); + } if (canUse != component.CanUse || canDraw != component.CanDraw) { diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.cs index 5a6a8510ff..cdf1f00205 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.cs @@ -4,6 +4,7 @@ using Content.Server.NPC.Components; using Content.Server.NPC.HTN; using Content.Server.NPC.Systems; +using Content.Server.Shuttles.Systems; using Content.Shared.Construction.EntitySystems; using Content.Shared.Maps; using Content.Shared.Procedural; @@ -51,6 +52,8 @@ public sealed partial class DungeonJob : Job> private readonly EntityUid _gridUid; private readonly MapGridComponent _grid; + private readonly EntityCoordinates? _targetCoordinates; + private readonly ISawmill _sawmill; public DungeonJob( @@ -70,6 +73,7 @@ public DungeonJob( EntityUid gridUid, int seed, Vector2i position, + EntityCoordinates? targetCoordinates = null, CancellationToken cancellation = default) : base(maxTime, cancellation) { _sawmill = sawmill; @@ -94,6 +98,7 @@ public DungeonJob( _gridUid = gridUid; _seed = seed; _position = position; + _targetCoordinates = targetCoordinates; } /// @@ -151,6 +156,12 @@ private async Task> GetDungeons( // To make it slightly more deterministic treat this RNG as separate ig. // Post-processing after finishing loading. + if (_targetCoordinates != null) + { + var oldMap = _xformQuery.Comp(_gridUid).MapUid; + _entManager.System().TryFTLProximity(_gridUid, _targetCoordinates.Value); + _entManager.DeleteEntity(oldMap); + } // Defer splitting so they don't get spammed and so we don't have to worry about tracking the grid along the way. _grid.CanSplit = true; diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 68c4a98610..706f63ffd7 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -183,11 +183,16 @@ public MapId GetOrCreateTemplate(DungeonRoomPrototype proto) return mapId; } + /// + /// Generates a dungeon in the background with the specified config. + /// + /// Coordinates to move the dungeon to afterwards. Will delete the original map public void GenerateDungeon(DungeonConfig gen, EntityUid gridUid, MapGridComponent grid, Vector2i position, - int seed) + int seed, + EntityCoordinates? coordinates = null) { var cancelToken = new CancellationTokenSource(); var job = new DungeonJob.DungeonJob( @@ -207,6 +212,7 @@ public void GenerateDungeon(DungeonConfig gen, gridUid, seed, position, + coordinates, cancelToken.Token); _dungeonJobs.Add(job, cancelToken); @@ -238,6 +244,7 @@ public async Task> GenerateDungeonAsync( gridUid, seed, position, + null, cancelToken.Token); _dungeonJobs.Add(job, cancelToken); diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index 1258e0b8c7..c977fbc048 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -9,6 +9,7 @@ using Content.Server.Speech.Components; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Radio; using Content.Shared.Radio.Components; using Robust.Shared.Prototypes; diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 0cbbc46a4f..0b86383faa 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -45,13 +45,14 @@ public sealed class ArrivalsSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IConsoleHost _console = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly BiomeSystem _biomes = default!; [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleSystem _shuttles = default!; @@ -103,6 +104,8 @@ public override void Initialize() SubscribeLocalEvent(OnArrivalsFTL); SubscribeLocalEvent(OnArrivalsDocked); + SubscribeLocalEvent(SendDirections); + _pendingQuery = GetEntityQuery(); _blacklistQuery = GetEntityQuery(); _mobQuery = GetEntityQuery(); @@ -377,6 +380,20 @@ public void HandlePlayerSpawning(PlayerSpawningEvent ev) EnsureComp(ev.SpawnResult.Value); } + private void SendDirections(PlayerSpawnCompleteEvent ev) + { + if (!Enabled || !ev.LateJoin || ev.Silent || !_pendingQuery.HasComp(ev.Mob)) + return; + + var arrival = NextShuttleArrival(); + + var message = arrival is not null + ? Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}")) + : Loc.GetString("latejoin-arrivals-direction"); + + _chat.DispatchServerMessage(ev.Player, message); + } + private bool TryTeleportToMapSpawn(EntityUid player, EntityUid stationId, TransformComponent? transform = null) { if (!Resolve(player, ref transform)) @@ -496,9 +513,8 @@ private void OnRoundStarting(RoundStartingEvent ev) private void SetupArrivalsStation() { - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); - _mapManager.AddUninitializedMap(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId, false); + _metaData.SetEntityName(mapUid, Loc.GetString("map-name-terminal")); if (!_loader.TryLoad(mapId, _cfgManager.GetCVar(CCVars.ArrivalsMap), out var uids)) { @@ -524,7 +540,7 @@ private void SetupArrivalsStation() AddComp(mapUid, restricted); } - _mapManager.DoMapInitialize(mapId); + _mapSystem.InitializeMap(mapId); // Handle roundstart stations. var query = AllEntityQuery(); @@ -582,10 +598,10 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) return; // Spawn arrivals on a dummy map then dock it to the source. - var dummyMap = _mapManager.CreateMap(); + var dummpMapEntity = _mapSystem.CreateMap(out var dummyMapId); if (TryGetArrivals(out var arrivals) && - _loader.TryLoad(dummyMap, component.ShuttlePath.ToString(), out var shuttleUids)) + _loader.TryLoad(dummyMapId, component.ShuttlePath.ToString(), out var shuttleUids)) { component.Shuttle = shuttleUids[0]; var shuttleComp = Comp(component.Shuttle); @@ -597,7 +613,7 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) } // Don't start the arrivals shuttle immediately docked so power has a time to stabilise? - var timer = AddComp(_mapManager.GetMapEntityId(dummyMap)); + var timer = AddComp(dummpMapEntity); timer.Lifetime = 15f; } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs index 1a95ef9cb2..597d74dcc7 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs @@ -18,143 +18,143 @@ public sealed partial class DockingSystem private const int DockRoundingDigits = 2; public Angle GetAngle(EntityUid uid, TransformComponent xform, EntityUid targetUid, TransformComponent targetXform, EntityQuery xformQuery) - { - var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); - var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); - - var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), - _physicsQuery.GetComponent(uid).LocalCenter); - var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), - _physicsQuery.GetComponent(targetUid).LocalCenter); - - var mapDiff = shuttleCOM - targetCOM; - var angle = mapDiff.ToWorldAngle(); - angle -= targetRot; - return angle; - } - - /// - /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. - /// - private bool CanDock( - DockingComponent shuttleDock, - TransformComponent shuttleDockXform, - DockingComponent gridDock, - TransformComponent gridDockXform, - Box2 shuttleAABB, - Angle targetGridRotation, - FixturesComponent shuttleFixtures, - MapGridComponent grid, - bool isMap, - out Matrix3x2 matty, - out Box2 shuttleDockedAABB, - out Angle gridRotation) - { - shuttleDockedAABB = Box2.UnitCentered; - gridRotation = Angle.Zero; - matty = Matrix3x2.Identity; - - if (shuttleDock.Docked || - gridDock.Docked || - !shuttleDockXform.Anchored || - !gridDockXform.Anchored) - { - return false; - } - - // First, get the station dock's position relative to the shuttle, this is where we rotate it around - var stationDockPos = shuttleDockXform.LocalPosition + - shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); - - // Need to invert the grid's angle. - var shuttleDockAngle = shuttleDockXform.LocalRotation; - var gridDockAngle = gridDockXform.LocalRotation.Opposite(); - var offsetAngle = gridDockAngle - shuttleDockAngle; - - 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; - - shuttleDockedAABB = matty.TransformBox(shuttleAABB); - gridRotation = (targetGridRotation + offsetAngle).Reduced(); - return true; - } - - /// - /// Gets docking config between 2 specific docks. - /// - public DockingConfig? GetDockingConfig( - EntityUid shuttleUid, - EntityUid targetGrid, - EntityUid shuttleDockUid, - DockingComponent shuttleDock, - EntityUid gridDockUid, - DockingComponent gridDock) - { - var shuttleDocks = new List>(1) + { + var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); + var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); + + var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), + _physicsQuery.GetComponent(uid).LocalCenter); + var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), + _physicsQuery.GetComponent(targetUid).LocalCenter); + + var mapDiff = shuttleCOM - targetCOM; + var angle = mapDiff.ToWorldAngle(); + angle -= targetRot; + return angle; + } + + /// + /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. + /// + private bool CanDock( + DockingComponent shuttleDock, + TransformComponent shuttleDockXform, + DockingComponent gridDock, + TransformComponent gridDockXform, + Box2 shuttleAABB, + Angle targetGridRotation, + FixturesComponent shuttleFixtures, + Entity gridEntity, + bool isMap, + out Matrix3x2 matty, + out Box2 shuttleDockedAABB, + out Angle gridRotation) + { + shuttleDockedAABB = Box2.UnitCentered; + gridRotation = Angle.Zero; + matty = Matrix3x2.Identity; + + if (shuttleDock.Docked || + gridDock.Docked || + !shuttleDockXform.Anchored || + !gridDockXform.Anchored) + { + return false; + } + + // First, get the station dock's position relative to the shuttle, this is where we rotate it around + var stationDockPos = shuttleDockXform.LocalPosition + + shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); + + // Need to invert the grid's angle. + var shuttleDockAngle = shuttleDockXform.LocalRotation; + var gridDockAngle = gridDockXform.LocalRotation.Opposite(); + var offsetAngle = gridDockAngle - shuttleDockAngle; + + var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); + var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); + matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); + + if (!ValidSpawn(gridEntity, matty, offsetAngle, shuttleFixtures, isMap)) + return false; + + shuttleDockedAABB = matty.TransformBox(shuttleAABB); + gridRotation = (targetGridRotation + offsetAngle).Reduced(); + return true; + } + + /// + /// Gets docking config between 2 specific docks. + /// + public DockingConfig? GetDockingConfig( + EntityUid shuttleUid, + EntityUid targetGrid, + EntityUid shuttleDockUid, + DockingComponent shuttleDock, + EntityUid gridDockUid, + DockingComponent gridDock) + { + var shuttleDocks = new List>(1) { (shuttleDockUid, shuttleDock) }; - var gridDocks = new List>(1) + var gridDocks = new List>(1) { (gridDockUid, gridDock) }; - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); - } - - /// - /// Tries to get a valid docking configuration for the shuttle to the target grid. - /// - /// Priority docking tag to prefer, e.g. for emergency shuttle - public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); - } - - /// - /// Tries to get a docking config at the specified coordinates and angle. - /// - public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, - EntityUid targetGrid, - EntityCoordinates coordinates, - Angle angle) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); - - foreach (var config in configs) - { - if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) - { - return config; - } - } - - return null; - } - - /// - /// Gets all docking configs between the 2 grids. - /// - private List GetDockingConfigs( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks) - { - var validDockConfigs = new List(); - - if (gridDocks.Count <= 0) + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); + } + + /// + /// Tries to get a valid docking configuration for the shuttle to the target grid. + /// + /// Priority docking tag to prefer, e.g. for emergency shuttle + public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); + } + + /// + /// Tries to get a docking config at the specified coordinates and angle. + /// + public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, + EntityUid targetGrid, + EntityCoordinates coordinates, + Angle angle) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + + foreach (var config in configs) + { + if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) + { + return config; + } + } + + return null; + } + + /// + /// Gets all docking configs between the 2 grids. + /// + private List GetDockingConfigs( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks) + { + var validDockConfigs = new List(); + + if (gridDocks.Count <= 0) return validDockConfigs; var targetGridGrid = _gridQuery.GetComponent(targetGrid); @@ -168,117 +168,118 @@ private List GetDockingConfigs( var grids = new List>(); if (shuttleDocks.Count > 0) { - // We'll try all combinations of shuttle docks and see which one is most suitable - foreach (var (dockUid, shuttleDock) in shuttleDocks) - { - var shuttleDockXform = _xformQuery.GetComponent(dockUid); - - foreach (var (gridDockUid, gridDock) in gridDocks) - { - var gridXform = _xformQuery.GetComponent(gridDockUid); - - if (!CanDock( - shuttleDock, shuttleDockXform, - gridDock, gridXform, - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, - targetGridGrid, - isMap, - out var matty, - out var dockedAABB, - out var targetAngle)) - { - continue; - } - - // Can't just use the AABB as we want to get bounds as tight as possible. - 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 - var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); - - // Check if there's no intersecting grids (AKA oh god it's docking at cargo). - grids.Clear(); - _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); - if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) - { - continue; - } - - // Alright well the spawn is valid now to check how many we can connect - // Get the matrix for each shuttle dock and test it against the grid docks to see - // if the connected position / direction matches. - - var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() + // We'll try all combinations of shuttle docks and see which one is most suitable + foreach (var (dockUid, shuttleDock) in shuttleDocks) + { + var shuttleDockXform = _xformQuery.GetComponent(dockUid); + + foreach (var (gridDockUid, gridDock) in gridDocks) + { + var gridXform = _xformQuery.GetComponent(gridDockUid); + + if (!CanDock( + shuttleDock, shuttleDockXform, + gridDock, gridXform, + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out var matty, + out var dockedAABB, + out var targetAngle)) + { + continue; + } + + // Can't just use the AABB as we want to get bounds as tight as possible. + var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); + var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, _transform.ToMapCoordinates(gridPosition).Position); + + // TODO: use tight bounds + var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); + + // Check if there's no intersecting grids (AKA oh god it's docking at cargo). + grids.Clear(); + _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); + if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) + { + continue; + } + + // Alright well the spawn is valid now to check how many we can connect + // Get the matrix for each shuttle dock and test it against the grid docks to see + // if the connected position / direction matches. + + var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() { (dockUid, gridDockUid, shuttleDock, gridDock), }; - dockedAABB = dockedAABB.Rounded(DockRoundingDigits); - - foreach (var (otherUid, other) in shuttleDocks) - { - if (other == shuttleDock) - continue; - - foreach (var (otherGridUid, otherGrid) in gridDocks) - { - if (otherGrid == gridDock) - continue; - - if (!CanDock( - other, - _xformQuery.GetComponent(otherUid), - otherGrid, - _xformQuery.GetComponent(otherGridUid), - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, targetGridGrid, - isMap, - out _, - out var otherdockedAABB, - out var otherTargetAngle)) - { - continue; - } - - otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); - - // Different setup. - if (!targetAngle.Equals(otherTargetAngle) || - !dockedAABB.Equals(otherdockedAABB)) - { - continue; - } - - dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); - } - } - - validDockConfigs.Add(new DockingConfig() - { - Docks = dockedPorts, - Coordinates = gridPosition, - Area = dockedAABB, - Angle = targetAngle, - }); - } - } + dockedAABB = dockedAABB.Rounded(DockRoundingDigits); + + foreach (var (otherUid, other) in shuttleDocks) + { + if (other == shuttleDock) + continue; + + foreach (var (otherGridUid, otherGrid) in gridDocks) + { + if (otherGrid == gridDock) + continue; + + if (!CanDock( + other, + _xformQuery.GetComponent(otherUid), + otherGrid, + _xformQuery.GetComponent(otherGridUid), + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out _, + out var otherdockedAABB, + out var otherTargetAngle)) + { + continue; + } + + otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); + + // Different setup. + if (!targetAngle.Equals(otherTargetAngle) || + !dockedAABB.Equals(otherdockedAABB)) + { + continue; + } + + dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); + } + } + + validDockConfigs.Add(new DockingConfig() + { + Docks = dockedPorts, + Coordinates = gridPosition, + Area = dockedAABB, + Angle = targetAngle, + }); + } + } } return validDockConfigs; - } + } - private DockingConfig? GetDockingConfigPrivate( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks, - string? priorityTag = null) - { - var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + private DockingConfig? GetDockingConfigPrivate( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks, + string? priorityTag = null) + { + var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); if (validDockConfigs.Count <= 0) return null; @@ -300,56 +301,56 @@ private List GetDockingConfigs( return location; } - /// - /// Checks whether the shuttle can warp to the specified position. - /// - private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) - { - var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); + /// + /// Checks whether the shuttle can warp to the specified position. + /// + private bool ValidSpawn(Entity gridEntity, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) + { + 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) - { - var polyShape = (PolygonShape) fix.Shape; - var aabb = polyShape.ComputeAABB(transform, 0); - aabb = aabb.Enlarged(-0.01f); - - // If it's a map check no hard collidable anchored entities overlap - if (isMap) - { - foreach (var tile in grid.GetLocalTilesIntersecting(aabb)) - { - var anchoredEnumerator = grid.GetAnchoredEntitiesEnumerator(tile.GridIndices); - - while (anchoredEnumerator.MoveNext(out var anc)) - { - if (!_physicsQuery.TryGetComponent(anc, out var physics) || - !physics.CanCollide || - !physics.Hard) - { - continue; - } - - return false; - } - } - } - // If it's not a map check it doesn't overlap the grid. - else - { - if (grid.GetLocalTilesIntersecting(aabb).Any()) - return false; - } - } - - return true; - } - - public List> GetDocks(EntityUid uid) - { - _dockingSet.Clear(); - _lookup.GetChildEntities(uid, _dockingSet); - - return _dockingSet.ToList(); - } + // Because some docking bounds are tight af need to check each chunk individually + foreach (var fix in shuttleFixturesComp.Fixtures.Values) + { + var polyShape = (PolygonShape)fix.Shape; + var aabb = polyShape.ComputeAABB(transform, 0); + aabb = aabb.Enlarged(-0.01f); + + // If it's a map check no hard collidable anchored entities overlap + if (isMap) + { + foreach (var tile in _mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb)) + { + var anchoredEnumerator = _mapSystem.GetAnchoredEntitiesEnumerator(gridEntity.Owner, gridEntity.Comp, tile.GridIndices); + + while (anchoredEnumerator.MoveNext(out var anc)) + { + if (!_physicsQuery.TryGetComponent(anc, out var physics) || + !physics.CanCollide || + !physics.Hard) + { + continue; + } + + return false; + } + } + } + // If it's not a map check it doesn't overlap the grid. + else + { + if (_mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb).Any()) + return false; + } + } + + return true; + } + + public List> GetDocks(EntityUid uid) + { + _dockingSet.Clear(); + _lookup.GetChildEntities(uid, _dockingSet); + + return _dockingSet.ToList(); + } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.cs b/Content.Server/Shuttles/Systems/DockingSystem.cs index f46c3980e5..fcdd6c0c1a 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.cs @@ -23,6 +23,7 @@ namespace Content.Server.Shuttles.Systems public sealed partial class DockingSystem : SharedDockingSystem { [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly DoorSystem _doorSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly PathfindingSystem _pathfinding = default!; @@ -262,7 +263,7 @@ public void Dock(Entity dockA, Entity dockB) joint.LocalAnchorA = anchorA; joint.LocalAnchorB = anchorB; - joint.ReferenceAngle = (float) (_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); + joint.ReferenceAngle = (float)(_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); joint.CollideConnected = true; joint.Stiffness = stiffness; joint.Damping = damping; diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs index 6e61ff39b4..e44a8ce361 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs @@ -233,7 +233,7 @@ private void UpdateEmergencyConsole(float frameTime) ShuttlesLeft = true; _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("emergency-shuttle-left", ("transitTime", $"{TransitTime:0}"))); - Timer.Spawn((int) (TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); + Timer.Spawn((int)(TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); } // All the others. diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 45397ede08..52b327ee01 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -50,8 +50,8 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AccessReaderSystem _reader = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly CommunicationsConsoleSystem _commsConsole = default!; @@ -61,6 +61,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IdCardSystem _idSystem = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly MapLoaderSystem _map = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly RoundEndSystem _roundEnd = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -212,7 +213,7 @@ private void OnEmergencyFTL(EntityUid uid, EmergencyShuttleComponent component, { [ShuttleTimerMasks.ShuttleMap] = uid, [ShuttleTimerMasks.SourceMap] = args.FromMapUid, - [ShuttleTimerMasks.DestMap] = args.TargetCoordinates.GetMapUid(_entityManager), + [ShuttleTimerMasks.DestMap] = _transformSystem.GetMap(args.TargetCoordinates), [ShuttleTimerMasks.ShuttleTime] = ftlTime, [ShuttleTimerMasks.SourceTime] = ftlTime, [ShuttleTimerMasks.DestTime] = ftlTime @@ -289,7 +290,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-docked", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -320,7 +321,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-nearby", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -401,7 +402,7 @@ private void SetupEmergencyShuttle() private void AddCentcomm(EntityUid station, StationCentcommComponent component) { - DebugTools.Assert(LifeStage(station)>= EntityLifeStage.MapInitialized); + DebugTools.Assert(LifeStage(station) >= EntityLifeStage.MapInitialized); if (component.MapEntity != null || component.Entity != null) { Log.Warning("Attempted to re-add an existing centcomm map."); @@ -434,12 +435,11 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) return; } - var mapId = _mapManager.CreateMap(); + var map = _mapSystem.CreateMap(out var mapId); var grid = _map.LoadGrid(mapId, component.Map.ToString(), new MapLoadOptions() { LoadMap = false, }); - var map = _mapManager.GetMapEntityId(mapId); if (!Exists(map)) { @@ -465,8 +465,9 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) } component.MapEntity = map; + _metaData.SetEntityName(map, Loc.GetString("map-name-centcomm")); component.Entity = grid; - _shuttle.TryAddFTLDestination(mapId, false, out _); + _shuttle.TryAddFTLDestination(mapId, true, out _); Log.Info($"Created centcomm grid {ToPrettyString(grid)} on map {ToPrettyString(map)} for station {ToPrettyString(station)}"); } @@ -492,7 +493,7 @@ private void AddEmergencyShuttle(Entity ent, ref Shuttle private void OnPositionFTLMessage(Entity entity, ref ShuttleConsoleFTLPositionMessage args) { - var mapUid = _mapManager.GetMapEntityId(args.Coordinates.MapId); + var mapUid = _mapSystem.GetMap(args.Coordinates.MapId); // If it's beacons only block all position messages. if (!Exists(mapUid) || _shuttle.IsBeaconMap(mapUid)) diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs index 00a913aad8..f02ea945d0 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Shuttles.Systems; using Content.Shared.Tag; using Content.Shared.Movement.Systems; +using Content.Shared.Power; using Content.Shared.Shuttles.UI.MapObjects; using Content.Shared.Timing; using Robust.Server.GameObjects; @@ -25,7 +26,7 @@ namespace Content.Server.Shuttles.Systems; public sealed partial class ShuttleConsoleSystem : SharedShuttleConsoleSystem { - [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; @@ -128,7 +129,7 @@ public void RefreshShuttleConsoles() while (query.MoveNext(out var uid, out _)) { - UpdateState(uid,ref dockState); + UpdateState(uid, ref dockState); } } @@ -137,7 +138,7 @@ public void RefreshShuttleConsoles() /// private void OnConsoleUIClose(EntityUid uid, ShuttleConsoleComponent component, BoundUIClosedEvent args) { - if ((ShuttleConsoleUiKey) args.UiKey != ShuttleConsoleUiKey.Key) + if ((ShuttleConsoleUiKey)args.UiKey != ShuttleConsoleUiKey.Key) { return; } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index 518867b555..e670445745 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -66,7 +66,7 @@ public sealed partial class ShuttleSystem /// /// How many times we try to proximity warp close to something before falling back to map-wideAABB. /// - private const int FTLProximityIterations = 3; + private const int FTLProximityIterations = 5; private readonly HashSet _lookupEnts = new(); private readonly HashSet _immuneEnts = new(); @@ -134,13 +134,12 @@ private EntityUid EnsureFTLMap() return uid; } - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId); var ftlMap = AddComp(mapUid); _metadata.SetEntityName(mapUid, "FTL"); Log.Debug($"Setup hyperspace map at {mapUid}"); - DebugTools.Assert(!_mapManager.IsMapPaused(mapId)); + DebugTools.Assert(!_mapSystem.IsPaused(mapId)); var parallax = EnsureComp(mapUid); parallax.Parallax = ftlMap.Parallax; @@ -188,7 +187,12 @@ public void SetFTLWhitelist(Entity entity, EntityWhite /// public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] out FTLDestinationComponent? component) { - var mapUid = _mapManager.GetMapEntityId(mapId); + return TryAddFTLDestination(mapId, enabled, true, false, out component); + } + + public bool TryAddFTLDestination(MapId mapId, bool enabled, bool requireDisk, bool beaconsOnly, [NotNullWhen(true)] out FTLDestinationComponent? component) + { + var mapUid = _mapSystem.GetMapOrInvalid(mapId); component = null; if (!Exists(mapUid)) @@ -196,10 +200,13 @@ public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] component = EnsureComp(mapUid); - if (component.Enabled == enabled) + if (component.Enabled == enabled && component.RequireCoordinateDisk == requireDisk && component.BeaconsOnly == beaconsOnly) return true; component.Enabled = enabled; + component.RequireCoordinateDisk = requireDisk; + component.BeaconsOnly = beaconsOnly; + _console.RefreshShuttleConsoles(); Dirty(mapUid, component); return true; @@ -281,8 +288,8 @@ public void FTLToCoordinates( _console.RefreshShuttleConsoles(shuttleUid); - var mapId = coordinates.GetMapId(EntityManager); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapId = _transform.GetMapId(coordinates); + var mapUid = _mapSystem.GetMap(mapId); var ev = new FTLRequestEvent(mapUid); RaiseLocalEvent(shuttleUid, ref ev, true); } @@ -321,7 +328,7 @@ public void FTLToDock( hyperspace.TargetCoordinates = config.Coordinates; hyperspace.TargetAngle = config.Angle; } - else if (TryGetFTLProximity(shuttleUid, target, out var coords, out var targAngle)) + else if (TryGetFTLProximity(shuttleUid, new EntityCoordinates(target, Vector2.Zero), out var coords, out var targAngle)) { hyperspace.TargetCoordinates = coords; hyperspace.TargetAngle = targAngle; @@ -377,17 +384,18 @@ private void UpdateFTLStarting(Entity entity) var fromMatrix = _transform.GetWorldMatrix(xform); var fromRotation = _transform.GetWorldRotation(xform); - var width = Comp(uid).LocalAABB.Width; + var grid = Comp(uid); + var width = grid.LocalAABB.Width; var ftlMap = EnsureFTLMap(); var body = _physicsQuery.GetComponent(entity); - var shuttleCenter = body.LocalCenter; + var shuttleCenter = grid.LocalAABB.Center; // Leave audio at the old spot // Just so we don't clip if (fromMapUid != null && TryComp(comp.StartupStream, out AudioComponent? startupAudio)) { var clippedAudio = _audio.PlayStatic(_startupSound, Filter.Broadcast(), - new EntityCoordinates(fromMapUid.Value, _maps.GetGridPosition(entity.Owner)), true, startupAudio.Params); + new EntityCoordinates(fromMapUid.Value, _mapSystem.GetGridPosition(entity.Owner)), true, startupAudio.Params); _audio.SetPlaybackPosition(clippedAudio, entity.Comp1.StartupTime); clippedAudio.Value.Component.Flags |= AudioFlags.NoOcclusion; @@ -476,7 +484,7 @@ private void UpdateFTLArriving(Entity entity) var map = maps.Min(o => o.GetHashCode()); mapId = new MapId(map); - TryFTLProximity(uid, _mapManager.GetMapEntityId(mapId)); + TryFTLProximity(uid, _mapSystem.GetMap(mapId)); } // Docking FTL else if (HasComp(target.EntityId) && @@ -500,7 +508,8 @@ private void UpdateFTLArriving(Entity entity) // Position ftl else { - mapId = target.GetMapId(EntityManager); + // TODO: This should now use tryftlproximity + mapId = _transform.GetMapId(target); _transform.SetCoordinates(uid, xform, target, rotation: entity.Comp1.TargetAngle); } @@ -538,7 +547,7 @@ private void UpdateFTLArriving(Entity entity) _mapManager.SetMapPaused(mapId, false); Smimsh(uid, xform: xform); - var ftlEvent = new FTLCompletedEvent(uid, _mapManager.GetMapEntityId(mapId)); + var ftlEvent = new FTLCompletedEvent(uid, _mapSystem.GetMap(mapId)); RaiseLocalEvent(uid, ref ftlEvent, true); } @@ -614,7 +623,7 @@ private void DoTheDinosaur(TransformComponent xform) // If the guy we knocked down is on a spaced tile, throw them too if (grid != null) - TossIfSpaced(grid, shuttleBody, child); + TossIfSpaced((xform.GridUid.Value, grid, shuttleBody), child); } } } @@ -635,13 +644,15 @@ private void KnockOverKids(TransformComponent xform, ref ValueList to /// /// Throws people who are standing on a spaced tile, tries to throw them towards a neighbouring space tile /// - private void TossIfSpaced(MapGridComponent shuttleGrid, PhysicsComponent shuttleBody, EntityUid tossed) + private void TossIfSpaced(Entity shuttleEntity, EntityUid tossed) { - if (!_xformQuery.TryGetComponent(tossed, out var childXform) ) + var shuttleGrid = shuttleEntity.Comp1; + var shuttleBody = shuttleEntity.Comp2; + if (!_xformQuery.TryGetComponent(tossed, out var childXform)) return; // only toss if its on lattice/space - var tile = shuttleGrid.GetTileRef(childXform.Coordinates); + var tile = _mapSystem.GetTileRef(shuttleEntity, shuttleGrid, childXform.Coordinates); if (!tile.IsSpace(_tileDefManager)) return; @@ -687,7 +698,7 @@ public void FTLDock(Entity shuttle, DockingConfig config) { // Set position var mapCoordinates = _transform.ToMapCoordinates(config.Coordinates); - var mapUid = _mapManager.GetMapEntityId(mapCoordinates.MapId); + var mapUid = _mapSystem.GetMap(mapCoordinates.MapId); _transform.SetCoordinates(shuttle.Owner, shuttle.Comp, new EntityCoordinates(mapUid, mapCoordinates.Position), rotation: config.Angle); // Connect everything @@ -698,16 +709,23 @@ public void FTLDock(Entity shuttle, DockingConfig config) } /// - /// Tries to get the target position to FTL near to another grid. + /// Tries to get the target position to FTL near the target coordinates. + /// If the target coordinates have a mapgrid then will try to offset the AABB. /// - private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, + /// Min offset for the final FTL. + /// Max offset for the final FTL from the box we spawn. + private bool TryGetFTLProximity( + EntityUid shuttleUid, + EntityCoordinates targetCoordinates, out EntityCoordinates coordinates, out Angle angle, + float minOffset = 0f, float maxOffset = 64f, TransformComponent? xform = null, TransformComponent? targetXform = null) { + DebugTools.Assert(minOffset < maxOffset); coordinates = EntityCoordinates.Invalid; angle = Angle.Zero; - if (!Resolve(targetUid, ref targetXform) || + if (!Resolve(targetCoordinates.EntityId, ref targetXform) || targetXform.MapUid == null || !targetXform.MapUid.Value.IsValid() || !Resolve(shuttleUid, ref xform)) @@ -715,26 +733,24 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, return false; } - - var xformQuery = GetEntityQuery(); - var shuttleAABB = Comp(shuttleUid).LocalAABB; - Box2 targetLocalAABB; - - // Spawn nearby. // We essentially expand the Box2 of the target area until nothing else is added then we know it's valid. // Can't just get an AABB of every grid as we may spawn very far away. - if (TryComp(targetXform.GridUid, out var targetGrid)) - { - targetLocalAABB = targetGrid.LocalAABB; - } - else - { - targetLocalAABB = new Box2(); - } - - var targetAABB = _transform.GetWorldMatrix(targetXform, xformQuery) - .TransformBox(targetLocalAABB).Enlarged(shuttleAABB.Size.Length()); var nearbyGrids = new HashSet(); + var shuttleAABB = Comp(shuttleUid).LocalAABB; + + // Start with small point. + // If our target pos is offset we mot even intersect our target's AABB so we don't include it. + var targetLocalAABB = Box2.CenteredAround(targetCoordinates.Position, Vector2.One); + + // How much we expand the target AABB be. + // We half it because we only need the width / height in each direction if it's placed at a particular spot. + var expansionAmount = MathF.Max(shuttleAABB.Width / 2f, shuttleAABB.Height / 2f); + + // Expand the starter AABB so we have something to query to start with. + var targetAABB = _transform.GetWorldMatrix(targetXform) + .TransformBox(targetLocalAABB) + .Enlarged(expansionAmount); + var iteration = 0; var lastCount = nearbyGrids.Count; var mapId = targetXform.MapID; @@ -743,15 +759,21 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, while (iteration < FTLProximityIterations) { grids.Clear(); - _mapManager.FindGridsIntersecting(mapId, targetAABB, ref grids); + // We pass in an expanded offset here so we can safely do a random offset later. + // We don't include this in the actual targetAABB because then we would be double-expanding it. + // Once in this loop, then again when placing the shuttle later. + // Note that targetAABB already has expansionAmount factored in already. + _mapManager.FindGridsIntersecting(mapId, targetAABB.Enlarged(maxOffset), ref grids); foreach (var grid in grids) { if (!nearbyGrids.Add(grid)) continue; - targetAABB = targetAABB.Union(_transform.GetWorldMatrix(grid, xformQuery) - .TransformBox(Comp(grid).LocalAABB)); + // Include the other grid's AABB (expanded by ours) as well. + targetAABB = targetAABB.Union( + _transform.GetWorldMatrix(grid) + .TransformBox(Comp(grid).LocalAABB.Enlarged(expansionAmount))); } // Can do proximity @@ -760,7 +782,6 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, break; } - targetAABB = targetAABB.Enlarged(shuttleAABB.Size.Length() / 2f); iteration++; lastCount = nearbyGrids.Count; @@ -775,13 +796,15 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, if (nearbyGrids.Contains(uid)) continue; - targetAABB = targetAABB.Union(_transform.GetWorldMatrix(uid, xformQuery) - .TransformBox(Comp(uid).LocalAABB)); + targetAABB = targetAABB.Union( + _transform.GetWorldMatrix(uid) + .TransformBox(Comp(uid).LocalAABB.Enlarged(expansionAmount))); } break; } + // Now we have a targetAABB. This has already been expanded to account for our fat ass. Vector2 spawnPos; if (TryComp(shuttleUid, out var shuttleBody)) @@ -790,21 +813,32 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, _physics.SetAngularVelocity(shuttleUid, 0f, body: shuttleBody); } + // TODO: This should prefer the position's angle instead. // TODO: This is pretty crude for multiple landings. if (nearbyGrids.Count > 1 || !HasComp(targetXform.GridUid)) { - var minRadius = (MathF.Max(targetAABB.Width, targetAABB.Height) + MathF.Max(shuttleAABB.Width, shuttleAABB.Height)) / 2f; - spawnPos = targetAABB.Center + _random.NextVector2(minRadius, minRadius + 64f); + // Pick a random angle + var offsetAngle = _random.NextAngle(); + + // Our valid spawn positions are away. + var minRadius = MathF.Max(targetAABB.Width / 2f, targetAABB.Height / 2f); + spawnPos = targetAABB.Center + offsetAngle.RotateVec(new Vector2(_random.NextFloat(minRadius + minOffset, minRadius + maxOffset), 0f)); } else if (shuttleBody != null) { - var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform, xformQuery); - var transform = new Transform(targetPos, targetRot); - spawnPos = Robust.Shared.Physics.Transform.Mul(transform, -shuttleBody.LocalCenter); + (spawnPos, angle) = _transform.GetWorldPositionRotation(targetXform); } else { - spawnPos = _transform.GetWorldPosition(targetXform, xformQuery); + spawnPos = _transform.GetWorldPosition(targetXform); + } + + var offset = Vector2.Zero; + + // Offset it because transform does not correspond to AABB position. + if (TryComp(shuttleUid, out MapGridComponent? shuttleGrid)) + { + offset = -shuttleGrid.LocalAABB.Center; } if (!HasComp(targetXform.GridUid)) @@ -816,7 +850,11 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, angle = Angle.Zero; } - coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos); + // Rotate our localcenter around so we spawn exactly where we "think" we should (center of grid on the dot). + var transform = new Transform(spawnPos, angle); + spawnPos = Robust.Shared.Physics.Transform.Mul(transform, offset); + + coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos - offset); return true; } @@ -833,13 +871,31 @@ public bool TryFTLProximity(EntityUid shuttleUid, EntityUid targetUid, Transform return false; } - if (!TryGetFTLProximity(shuttleUid, targetUid, out var coords, out var angle, xform, targetXform)) + if (!TryGetFTLProximity(shuttleUid, new EntityCoordinates(targetUid, Vector2.Zero), out var coords, out var angle, xform: xform, targetXform: targetXform)) return false; _transform.SetCoordinates(shuttleUid, xform, coords, rotation: angle); return true; } + /// + /// Tries to FTL to the target coordinates; will move nearby if not possible. + /// + public bool TryFTLProximity(Entity shuttle, EntityCoordinates targetCoordinates) + { + if (!Resolve(shuttle.Owner, ref shuttle.Comp) || + _transform.GetMap(targetCoordinates)?.IsValid() != true) + { + return false; + } + + if (!TryGetFTLProximity(shuttle, targetCoordinates, out var coords, out var angle)) + return false; + + _transform.SetCoordinates(shuttle, shuttle.Comp, coords, rotation: angle); + return true; + } + /// /// Flattens / deletes everything under the grid upon FTL. /// @@ -861,7 +917,6 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom var aabb = fixture.Shape.ComputeAABB(transform, 0); // Shift it slightly - aabb = aabb.Translated(-grid.TileSizeHalfVector); // Create a small border around it. aabb = aabb.Enlarged(0.2f); aabbs.Add(aabb); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index c0eff11931..5ad94699be 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -85,7 +85,7 @@ private void CargoSpawn(EntityUid uid, StationCargoShuttleComponent component) _mapManager.DeleteMap(mapId); } - private bool TryDungeonSpawn(Entity targetGrid, MapId mapId, DungeonSpawnGroup group, out EntityUid spawned) + private bool TryDungeonSpawn(Entity targetGrid, DungeonSpawnGroup group, out EntityUid spawned) { spawned = EntityUid.Invalid; @@ -110,11 +110,12 @@ private bool TryDungeonSpawn(Entity targetGrid, MapId mapId, spawnCoords = spawnCoords.Offset(_random.NextVector2(distancePadding + group.MinimumDistance, distancePadding + group.MaximumDistance)); } - var spawnMapCoords = _transform.ToMapCoordinates(spawnCoords); + _mapSystem.CreateMap(out var mapId); + var spawnedGrid = _mapManager.CreateGridEntity(mapId); - _transform.SetMapCoordinates(spawnedGrid, spawnMapCoords); - _dungeon.GenerateDungeon(dungeonProto, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next()); + _transform.SetMapCoordinates(spawnedGrid, new MapCoordinates(Vector2.Zero, mapId)); + _dungeon.GenerateDungeon(dungeonProto, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next(), spawnCoords); spawned = spawnedGrid.Owner; return true; @@ -192,7 +193,7 @@ private void GridSpawns(EntityUid uid, GridSpawnComponent component) switch (group) { case DungeonSpawnGroup dungeon: - if (!TryDungeonSpawn(targetGrid.Value, mapId, dungeon, out spawned)) + if (!TryDungeonSpawn(targetGrid.Value, dungeon, out spawned)) continue; break; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index 8a8d2d883d..436b248407 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -39,8 +39,8 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta var otherXform = Transform(args.OtherEntity); - var ourPoint = Vector2.Transform(args.WorldPoint, ourXform.InvWorldMatrix); - var otherPoint = Vector2.Transform(args.WorldPoint, otherXform.InvWorldMatrix); + var ourPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(ourXform)); + var otherPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(otherXform)); 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 6ae4aff2f4..054c42f934 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -49,7 +49,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly MetaDataSystem _metadata = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleConsoleSystem _console = default!; diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index fd14963081..f5e8f7823e 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -19,6 +19,7 @@ using Robust.Shared.Timing; using Robust.Shared.Utility; using Content.Shared.Localizations; +using Content.Shared.Power; namespace Content.Server.Shuttles.Systems; @@ -26,6 +27,7 @@ public sealed class ThrusterSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AmbientSoundSystem _ambient = default!; [Dependency] private readonly FixtureSystem _fixtureSystem = default!; [Dependency] private readonly DamageableSystem _damageable = default!; @@ -108,7 +110,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref continue; var checkPos = tilePos + new Vector2i(x, y); - var enumerator = grid.GetAnchoredEntitiesEnumerator(checkPos); + var enumerator = _mapSystem.GetAnchoredEntitiesEnumerator(uid, grid, checkPos); while (enumerator.MoveNext(out var ent)) { @@ -119,7 +121,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref var xform = xformQuery.GetComponent(ent.Value); var direction = xform.LocalRotation.ToWorldVec(); - if (new Vector2i((int) direction.X, (int) direction.Y) != new Vector2i(x, y)) + if (new Vector2i((int)direction.X, (int)direction.Y) != new Vector2i(x, y)) continue; DisableThruster(ent.Value, thruster, xform.GridUid); @@ -182,8 +184,8 @@ private void OnRotate(EntityUid uid, ThrusterComponent component, ref MoveEvent return; } - var oldDirection = (int) args.OldRotation.GetCardinalDir() / 2; - var direction = (int) args.NewRotation.GetCardinalDir() / 2; + var oldDirection = (int)args.OldRotation.GetCardinalDir() / 2; + var direction = (int)args.NewRotation.GetCardinalDir() / 2; var oldShuttleComponent = shuttleComponent; if (args.ParentChanged) @@ -281,7 +283,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform switch (component.Type) { case ThrusterType.Linear: - var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; + var direction = (int)xform.LocalRotation.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] += component.Thrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -293,7 +295,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform { var shape = new PolygonShape(); shape.Set(component.BurnPoly); - _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int) CollisionGroup.FullTileMask, body: physicsComponent); + _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int)CollisionGroup.FullTileMask, body: physicsComponent); } break; @@ -333,7 +335,7 @@ private void RefreshCenter(EntityUid uid, ShuttleComponent shuttle) foreach (var dir in new[] { Direction.South, Direction.East, Direction.North, Direction.West }) { - var index = (int) dir / 2; + var index = (int)dir / 2; var pop = shuttle.LinearThrusters[index]; var totalThrust = 0f; @@ -379,7 +381,7 @@ public void DisableThruster(EntityUid uid, ThrusterComponent component, EntityUi { case ThrusterType.Linear: angle ??= xform.LocalRotation; - var direction = (int) angle.Value.GetCardinalDir() / 2; + var direction = (int)angle.Value.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] -= component.Thrust; DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -425,7 +427,7 @@ public bool CanEnable(EntityUid uid, ThrusterComponent component) var xform = Transform(uid); - if (!xform.Anchored ||!this.IsPowered(uid, EntityManager)) + if (!xform.Anchored || !this.IsPowered(uid, EntityManager)) { return false; } @@ -442,7 +444,8 @@ private bool NozzleExposed(TransformComponent xform) return true; var (x, y) = xform.LocalPosition + xform.LocalRotation.Opposite().ToWorldVec(); - var tile = Comp(xform.GridUid.Value).GetTileRef(new Vector2i((int) Math.Floor(x), (int) Math.Floor(y))); + var mapGrid = Comp(xform.GridUid.Value); + var tile = _mapSystem.GetTileRef(xform.GridUid.Value, mapGrid, new Vector2i((int)Math.Floor(x), (int)Math.Floor(y))); return tile.Tile.IsSpace(); } @@ -581,6 +584,6 @@ public void SetAngularThrust(ShuttleComponent component, bool on) private int GetFlagIndex(DirectionFlag flag) { - return (int) Math.Log2((int) flag); + return (int)Math.Log2((int)flag); } } diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 3f32afbffb..bd85282a0f 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -282,6 +282,7 @@ public void BorgActivate(EntityUid uid, BorgChassisComponent component) { Popup.PopupEntity(Loc.GetString("borg-mind-added", ("name", Identity.Name(uid, EntityManager))), uid); Toggle.TryActivate(uid); + _powerCell.SetDrawEnabled(uid, _mobState.IsAlive(uid)); _appearance.SetData(uid, BorgVisuals.HasPlayer, true); } @@ -292,6 +293,7 @@ public void BorgDeactivate(EntityUid uid, BorgChassisComponent component) { Popup.PopupEntity(Loc.GetString("borg-mind-removed", ("name", Identity.Name(uid, EntityManager))), uid); Toggle.TryDeactivate(uid); + _powerCell.SetDrawEnabled(uid, false); _appearance.SetData(uid, BorgVisuals.HasPlayer, false); } diff --git a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs index ca32beb8db..05262f2999 100644 --- a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs @@ -166,11 +166,12 @@ private void RemoveConnections(Entity genera ChangeFieldVisualizer(value.Item1); } component.Connections.Clear(); + if (component.IsConnected) + _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); component.IsConnected = false; ChangeOnLightVisualizer(generator); ChangeFieldVisualizer(generator); _adminLogger.Add(LogType.FieldGeneration, LogImpact.Medium, $"{ToPrettyString(uid)} lost field connections"); // Ideally LogImpact would depend on if there is a singulo nearby - _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); } #endregion diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index a9763b64d9..1ada60e1d6 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Interaction; using Content.Shared.Lock; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Projectiles; using Content.Shared.Singularity.Components; using Content.Shared.Singularity.EntitySystems; diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs deleted file mode 100644 index 44e83b0e79..0000000000 --- a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Shared.Sound.Components; - -namespace Content.Server.Sound.Components -{ - /// - /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent - /// - [RegisterComponent] - public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent - { - } -} diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index fc10d951e7..9d7e8496c3 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -39,15 +39,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(HandleEmitSoundOnTrigger); - SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(HandleSpamEmitSoundMapInit); } - private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) - { - TryEmitSound(uid, component, args.User, false); - } - private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args) { TryEmitSound(uid, component, args.User, false); diff --git a/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs b/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs index 9cc85060c6..d2c2a8a1ca 100644 --- a/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs +++ b/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs @@ -1,5 +1,7 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Sound; using Content.Shared.Sound.Components; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs index f61c57a4a6..5e50740ae6 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs @@ -3,6 +3,7 @@ using Content.Server.DeviceNetwork.Systems; using Content.Server.Power.Components; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.UserInterface; using Content.Shared.SurveillanceCamera; using Robust.Server.GameObjects; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs index d0c2cd78d3..315273a0cc 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Power.Components; using Content.Shared.ActionBlocker; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.SurveillanceCamera; using Content.Shared.Verbs; using Robust.Server.GameObjects; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 8dd253269d..9d1dd00590 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Power.Components; using Content.Shared.ActionBlocker; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.SurveillanceCamera; using Content.Shared.Verbs; using Robust.Server.GameObjects; diff --git a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs index ffc796cbb2..c4b5b72a9c 100644 --- a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs +++ b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Examine; using Content.Shared.Placeable; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Temperature; using Content.Shared.Verbs; using Robust.Server.Audio; diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 2866b14a83..a265ce2d43 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -16,6 +16,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Emp; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Throwing; using Content.Shared.UserInterface; using Content.Shared.VendingMachines; diff --git a/Content.Server/Weather/WeatherSystem.cs b/Content.Server/Weather/WeatherSystem.cs index c3af49944d..dbee62a72f 100644 --- a/Content.Server/Weather/WeatherSystem.cs +++ b/Content.Server/Weather/WeatherSystem.cs @@ -33,58 +33,50 @@ private void WeatherTwo(IConsoleShell shell, string argStr, string[] args) { if (args.Length < 2) { - shell.WriteError($"A"); + shell.WriteError(Loc.GetString("cmd-weather-error-no-arguments")); return; } if (!int.TryParse(args[0], out var mapInt)) - { return; - } var mapId = new MapId(mapInt); if (!MapManager.MapExists(mapId)) - { return; + + if (!_mapSystem.TryGetMap(mapId, out var mapUid)) + return; + + var weatherComp = EnsureComp(mapUid.Value); + + //Weather Proto parsing + WeatherPrototype? weather = null; + if (!args[1].Equals("null")) + { + if (!ProtoMan.TryIndex(args[1], out weather)) + { + shell.WriteError(Loc.GetString("cmd-weather-error-unknown-proto")); + return; + } } + //Time parsing TimeSpan? endTime = null; - if (args.Length == 3) { + var curTime = Timing.CurTime; if (int.TryParse(args[2], out var durationInt)) { - var curTime = Timing.CurTime; - var maxTime = TimeSpan.MaxValue; - - // If it's already running then just fade out with how much time we're into the weather. - if (_mapSystem.TryGetMap(mapId, out var mapUid) && - TryComp(mapUid, out var weatherComp) && - weatherComp.Weather.TryGetValue(args[1], out var existing)) - { - maxTime = curTime - existing.StartTime; - } - endTime = curTime + TimeSpan.FromSeconds(durationInt); - - if (endTime > maxTime) - endTime = maxTime; + } + else + { + shell.WriteError(Loc.GetString("cmd-weather-error-wrong-time")); } } - if (args[1].Equals("null")) - { - SetWeather(mapId, null, endTime); - } - else if (ProtoMan.TryIndex(args[1], out var weatherProto)) - { - SetWeather(mapId, weatherProto, endTime); - } - else - { - shell.WriteError($"Unable to parse weather prototype"); - } + SetWeather(mapId, weather, endTime); } private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args) diff --git a/Content.Server/Wires/WiresSystem.cs b/Content.Server/Wires/WiresSystem.cs index 92dcbb504f..92a0322ecb 100644 --- a/Content.Server/Wires/WiresSystem.cs +++ b/Content.Server/Wires/WiresSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Tools.Components; using Content.Shared.Wires; using Robust.Server.GameObjects; diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs index 8fc2f26fa6..3681e3d402 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Paper; using Content.Shared.Placeable; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Research.Components; using Content.Shared.Xenoarchaeology.Equipment; using Content.Shared.Xenoarchaeology.XenoArtifacts; diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs index f65ba46f7a..f841ea910e 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Xenoarchaeology.XenoArtifacts; using Content.Shared.Body.Components; using Content.Shared.Damage; +using Content.Shared.Power; using Content.Shared.Verbs; using Content.Shared.Whitelist; using Content.Shared.Xenoarchaeology.Equipment; diff --git a/Content.Shared/Actions/ActionEvents.cs b/Content.Shared/Actions/ActionEvents.cs index 4f1cd6da44..6ff8660458 100644 --- a/Content.Shared/Actions/ActionEvents.cs +++ b/Content.Shared/Actions/ActionEvents.cs @@ -187,5 +187,10 @@ public abstract partial class BaseActionEvent : HandledEntityEventArgs /// /// The action the event belongs to. /// - public EntityUid Action; + public Entity Action; + + /// + /// Should we toggle the action entity? + /// + public bool Toggle; } diff --git a/Content.Shared/Actions/ActionGrantComponent.cs b/Content.Shared/Actions/ActionGrantComponent.cs new file mode 100644 index 0000000000..94c3a0bbd1 --- /dev/null +++ b/Content.Shared/Actions/ActionGrantComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions; + +/// +/// Grants actions on MapInit and removes them on shutdown +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(ActionGrantSystem))] +public sealed partial class ActionGrantComponent : Component +{ + [DataField(required: true), AutoNetworkedField, AlwaysPushInheritance] + public List Actions = new(); + + [DataField, AutoNetworkedField] + public List ActionEntities = new(); +} diff --git a/Content.Shared/Actions/ActionGrantSystem.cs b/Content.Shared/Actions/ActionGrantSystem.cs new file mode 100644 index 0000000000..f73ecf8a46 --- /dev/null +++ b/Content.Shared/Actions/ActionGrantSystem.cs @@ -0,0 +1,48 @@ +namespace Content.Shared.Actions; + +/// +/// +/// +public sealed class ActionGrantSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnItemGet); + } + + private void OnItemGet(Entity ent, ref GetItemActionsEvent args) + { + if (!TryComp(ent.Owner, out ActionGrantComponent? grant)) + return; + + foreach (var action in grant.ActionEntities) + { + args.AddAction(action); + } + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + foreach (var action in ent.Comp.Actions) + { + EntityUid? actionEnt = null; + _actions.AddAction(ent.Owner, ref actionEnt, action); + + if (actionEnt != null) + ent.Comp.ActionEntities.Add(actionEnt.Value); + } + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + foreach (var actionEnt in ent.Comp.ActionEntities) + { + _actions.RemoveAction(ent.Owner, actionEnt); + } + } +} diff --git a/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs b/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs new file mode 100644 index 0000000000..c9c4db145d --- /dev/null +++ b/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions.Events; + +/// +/// Adds / removes the component upon action. +/// +[Virtual] +public partial class ActionComponentChangeEvent : InstantActionEvent +{ + [DataField(required: true)] + public ComponentRegistry Components = new(); +} + +/// +/// Similar to except raises an event to attempt to relay it. +/// +public sealed partial class RelayedActionComponentChangeEvent : ActionComponentChangeEvent +{ + +} + +[ByRefEvent] +public record struct AttemptRelayActionComponentChangeEvent +{ + public EntityUid? Target; +} diff --git a/Content.Shared/Actions/ItemActionGrantComponent.cs b/Content.Shared/Actions/ItemActionGrantComponent.cs new file mode 100644 index 0000000000..d1769b51a2 --- /dev/null +++ b/Content.Shared/Actions/ItemActionGrantComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions; + +/// +/// Works in tandem with by granting those actions to the equipper entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(ActionGrantSystem))] +public sealed partial class ItemActionGrantComponent : Component +{ + [DataField(required: true), AutoNetworkedField, AlwaysPushInheritance] + public List Actions = new(); +} diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index fb9415096f..2756345428 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -11,7 +11,6 @@ using Content.Shared.Rejuvenate; using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Timing; @@ -45,6 +44,8 @@ public override void Initialize() SubscribeLocalEvent(OnActionShutdown); SubscribeLocalEvent(OnActionShutdown); + SubscribeLocalEvent(OnActionCompChange); + SubscribeLocalEvent(OnRelayActionCompChange); SubscribeLocalEvent(OnDidEquip); SubscribeLocalEvent(OnHandEquipped); SubscribeLocalEvent(OnDidUnequip); @@ -490,12 +491,6 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg break; } - if (performEvent != null) - { - performEvent.Performer = user; - performEvent.Action = actionEnt; - } - // All checks passed. Perform the action! PerformAction(user, component, actionEnt, action, performEvent, curTime); } @@ -641,6 +636,8 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti // This here is required because of client-side prediction (RaisePredictiveEvent results in event re-use). actionEvent.Handled = false; var target = performer; + actionEvent.Performer = performer; + actionEvent.Action = (actionId, action); if (!action.RaiseOnUser && action.Container != null && !HasComp(action.Container)) target = action.Container.Value; @@ -653,10 +650,14 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti return; // no interaction occurred. // play sound, reduce charges, start cooldown, and mark as dirty (if required). + if (actionEvent?.Toggle == true) + { + action.Toggled = !action.Toggled; + } - _audio.PlayPredicted(action.Sound, performer,predicted ? performer : null); + _audio.PlayPredicted(action.Sound, performer, predicted ? performer : null); - var dirty = toggledBefore == action.Toggled; + var dirty = toggledBefore != action.Toggled; if (action.Charges != null) { @@ -673,10 +674,11 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti action.Cooldown = (curTime, curTime + action.UseDelay.Value); } - Dirty(actionId, action); - - if (dirty && component != null) - Dirty(performer, component); + if (dirty) + { + Dirty(actionId, action); + UpdateAction(actionId, action); + } var ev = new ActionPerformedEvent(performer); RaiseLocalEvent(actionId, ref ev); @@ -975,6 +977,47 @@ public bool ValidAction(BaseActionComponent action, bool canReach = true) #endregion + private void OnRelayActionCompChange(Entity ent, ref RelayedActionComponentChangeEvent args) + { + if (args.Handled) + return; + + var ev = new AttemptRelayActionComponentChangeEvent(); + RaiseLocalEvent(ent.Owner, ref ev); + var target = ev.Target ?? ent.Owner; + + args.Handled = true; + args.Toggle = true; + + if (!args.Action.Comp.Toggled) + { + EntityManager.AddComponents(target, args.Components); + } + else + { + EntityManager.RemoveComponents(target, args.Components); + } + } + + private void OnActionCompChange(Entity ent, ref ActionComponentChangeEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + args.Toggle = true; + var target = ent.Owner; + + if (!args.Action.Comp.Toggled) + { + EntityManager.AddComponents(target, args.Components); + } + else + { + EntityManager.RemoveComponents(target, args.Components); + } + } + #region EquipHandlers private void OnDidEquip(EntityUid uid, ActionsComponent component, DidEquipEvent args) { diff --git a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs index e40099dc72..ce3f00094a 100644 --- a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs +++ b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs @@ -37,7 +37,7 @@ public interface IAtmosDeviceData [Serializable, NetSerializable] public sealed class AirAlarmUIState : BoundUserInterfaceState { - public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, Dictionary deviceData, AirAlarmMode mode, AirAlarmTab tab, AtmosAlarmType alarmType, bool autoMode) + public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, List<(string, IAtmosDeviceData)> deviceData, AirAlarmMode mode, AtmosAlarmType alarmType, bool autoMode) { Address = address; DeviceCount = deviceCount; @@ -45,7 +45,6 @@ public AirAlarmUIState(string address, int deviceCount, float pressureAverage, f TemperatureAverage = temperatureAverage; DeviceData = deviceData; Mode = mode; - Tab = tab; AlarmType = alarmType; AutoMode = autoMode; } @@ -57,27 +56,16 @@ public AirAlarmUIState(string address, int deviceCount, float pressureAverage, f /// /// Every single device data that can be seen from this /// air alarm. This includes vents, scrubbers, and sensors. - /// The device data you get, however, depends on the current - /// selected tab. + /// Each entry is a tuple of device address and the device + /// data. The same address may appear multiple times, if + /// that device provides multiple functions. /// - public Dictionary DeviceData { get; } + public List<(string, IAtmosDeviceData)> DeviceData { get; } public AirAlarmMode Mode { get; } - public AirAlarmTab Tab { get; } public AtmosAlarmType AlarmType { get; } public bool AutoMode { get; } } -[Serializable, NetSerializable] -public sealed class AirAlarmTabSetMessage : BoundUserInterfaceMessage -{ - public AirAlarmTabSetMessage(AirAlarmTab tab) - { - Tab = tab; - } - - public AirAlarmTab Tab { get; } -} - [Serializable, NetSerializable] public sealed class AirAlarmResyncAllDevicesMessage : BoundUserInterfaceMessage {} @@ -144,11 +132,3 @@ public AirAlarmUpdateAlarmThresholdMessage(string address, AtmosMonitorThreshold Gas = gas; } } - -public enum AirAlarmTab -{ - Vent, - Scrubber, - Sensors, - Settings -} diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index b8186e2b79..101c388a8b 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -90,6 +90,12 @@ public sealed partial class StrapComponent : Component /// [DataField] public float BuckleDoafterTime = 2f; + + /// + /// Whether InteractHand will buckle the user to the strap. + /// + [DataField] + public bool BuckleOnInteractHand = true; } public enum StrapPosition diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs index 381789f32d..7677e800fe 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs @@ -84,7 +84,7 @@ private void OnStrapInteractHand(EntityUid uid, StrapComponent component, Intera if (!TryComp(args.User, out BuckleComponent? buckle)) return; - if (buckle.BuckledTo == null) + if (buckle.BuckledTo == null && component.BuckleOnInteractHand) TryBuckle(args.User, args.User, uid, buckle, popup: true); else if (buckle.BuckledTo == uid) TryUnbuckle(args.User, args.User, buckle, popup: true); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 2c65885670..4c49a8548e 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1379,24 +1379,12 @@ public static readonly CVarDef /// public static readonly CVarDef WhitelistEnabled = CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); - - /// - /// The loc string to display as a disconnect reason when someone is not whitelisted. - /// - public static readonly CVarDef WhitelistReason = - CVarDef.Create("whitelist.reason", "whitelist-not-whitelisted", CVar.SERVERONLY); - - /// - /// If the playercount is below this number, the whitelist will not apply. - /// - public static readonly CVarDef WhitelistMinPlayers = - CVarDef.Create("whitelist.min_players", 0, CVar.SERVERONLY); - /// - /// If the playercount is above this number, the whitelist will not apply. + /// Specifies the whitelist prototypes to be used by the server. This should be a comma-separated list of prototypes. + /// If a whitelists conditions to be active fail (for example player count), the next whitelist will be used instead. If no whitelist is valid, the player will be allowed to connect. /// - public static readonly CVarDef WhitelistMaxPlayers = - CVarDef.Create("whitelist.max_players", int.MaxValue, CVar.SERVERONLY); + public static readonly CVarDef WhitelistPrototypeList = + CVarDef.Create("whitelist.prototype_list", "basicWhitelist", CVar.SERVERONLY); /* * VOTE diff --git a/Content.Shared/Cabinet/ItemCabinetComponent.cs b/Content.Shared/Cabinet/ItemCabinetComponent.cs index b1d7e4a263..f83f6a96ad 100644 --- a/Content.Shared/Cabinet/ItemCabinetComponent.cs +++ b/Content.Shared/Cabinet/ItemCabinetComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Containers.ItemSlots; using Robust.Shared.GameStates; using Robust.Shared.Serialization; diff --git a/Content.Shared/Cargo/Components/CashComponent.cs b/Content.Shared/Cargo/Components/CashComponent.cs index 10a47ff803..89af094e04 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/Chemistry/Components/Solution.cs b/Content.Shared/Chemistry/Components/Solution.cs index 35ab28f34a..fc25781005 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 { diff --git a/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs b/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs index cd4d0d6203..a5303ac121 100644 --- a/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs +++ b/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Clothing.EntitySystems; using Robust.Shared.GameStates; namespace Content.Shared.Clothing.Components; diff --git a/Content.Shared/Clothing/Components/ToggleClothingComponent.cs b/Content.Shared/Clothing/Components/ToggleClothingComponent.cs index c77aa03475..04bc3ed4e8 100644 --- a/Content.Shared/Clothing/Components/ToggleClothingComponent.cs +++ b/Content.Shared/Clothing/Components/ToggleClothingComponent.cs @@ -1,5 +1,7 @@ using Content.Shared.Actions; using Content.Shared.Clothing.EntitySystems; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Toggleable; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Containers/ContainerCompComponent.cs b/Content.Shared/Containers/ContainerCompComponent.cs new file mode 100644 index 0000000000..b1415e0d8b --- /dev/null +++ b/Content.Shared/Containers/ContainerCompComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Containers; + +/// +/// Applies container changes whenever an entity is inserted into the specified container on this entity. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ContainerCompComponent : Component +{ + [DataField(required: true)] + public EntProtoId Proto; + + [DataField(required: true)] + public string Container = string.Empty; +} diff --git a/Content.Shared/Containers/ContainerCompSystem.cs b/Content.Shared/Containers/ContainerCompSystem.cs new file mode 100644 index 0000000000..75908efea3 --- /dev/null +++ b/Content.Shared/Containers/ContainerCompSystem.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Shared.Containers; + +/// +/// Applies / removes an entity prototype from a child entity when it's inserted into a container. +/// +public sealed class ContainerCompSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnConInsert); + SubscribeLocalEvent(OnConRemove); + } + + private void OnConRemove(Entity ent, ref EntRemovedFromContainerMessage args) + { + if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) + return; + + if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + { + EntityManager.RemoveComponents(args.Entity, entProto.Components); + } + } + + private void OnConInsert(Entity ent, ref EntInsertedIntoContainerMessage args) + { + if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) + return; + + if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + { + EntityManager.AddComponents(args.Entity, entProto.Components); + } + } +} diff --git a/Content.Shared/Containers/ContainerFillComponent.cs b/Content.Shared/Containers/ContainerFillComponent.cs index 8c63cbc66a..7ce5fa8850 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/ItemSlotsLockComponent.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs new file mode 100644 index 0000000000..0d8901028d --- /dev/null +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Containers.ItemSlots; + +/// +/// Updates the relevant ItemSlots locks based on +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemSlotsLockComponent : Component +{ + [DataField(required: true)] + public List Slots = new(); +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs new file mode 100644 index 0000000000..ee5178df95 --- /dev/null +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs @@ -0,0 +1,36 @@ +using Content.Shared.Lock; + +namespace Content.Shared.Containers.ItemSlots; + +public sealed partial class ItemSlotsSystem +{ + private void InitializeLock() + { + SubscribeLocalEvent(OnLockMapInit); + SubscribeLocalEvent(OnLockToggled); + } + + private void OnLockMapInit(Entity ent, ref MapInitEvent args) + { + if (!TryComp(ent.Owner, out LockComponent? lockComp)) + return; + + UpdateLocks(ent, lockComp.Locked); + } + + private void OnLockToggled(Entity ent, ref LockToggledEvent args) + { + UpdateLocks(ent, args.Locked); + } + + private void UpdateLocks(Entity ent, bool value) + { + foreach (var slot in ent.Comp.Slots) + { + if (!TryGetSlot(ent.Owner, slot, out var itemSlot)) + continue; + + SetLock(ent.Owner, itemSlot, value); + } + } +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index 48f4f07cbe..f41fa2b22d 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -24,7 +24,7 @@ namespace Content.Shared.Containers.ItemSlots /// Note when using popups on entities with many slots with InsertOnInteract, EjectOnInteract or EjectOnUse: /// A single use will try to insert to/eject from every slot and generate a popup for each that fails. /// - public sealed class ItemSlotsSystem : EntitySystem + public sealed partial class ItemSlotsSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; @@ -38,6 +38,8 @@ public override void Initialize() { base.Initialize(); + InitializeLock(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(Oninitialize); diff --git a/Content.Shared/Damage/Systems/DamageContactsSystem.cs b/Content.Shared/Damage/Systems/DamageContactsSystem.cs index b08ef77fed..3cc73a87c5 100644 --- a/Content.Shared/Damage/Systems/DamageContactsSystem.cs +++ b/Content.Shared/Damage/Systems/DamageContactsSystem.cs @@ -65,7 +65,7 @@ private void OnEntityEnter(EntityUid uid, DamageContactsComponent component, ref if (HasComp(otherUid)) return; - if (_whitelistSystem.IsWhitelistFail(component.IgnoreWhitelist, otherUid)) + if (_whitelistSystem.IsWhitelistPass(component.IgnoreWhitelist, otherUid)) return; var damagedByContact = EnsureComp(otherUid); diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs index 46249fdd0d..47edec135d 100644 --- a/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs @@ -19,6 +19,12 @@ public sealed partial class ItemToggleComponent : Component [DataField, AutoNetworkedField] public bool Activated = false; + /// + /// Can the entity be activated in the world. + /// + [DataField] + public bool OnActivate = true; + /// /// If this is set to false then the item can't be toggled by pressing Z. /// Use another system to do it then. @@ -52,12 +58,6 @@ public sealed partial class ItemToggleComponent : Component /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? SoundFailToActivate; - - /// - /// Whether or not to toggle the entity's lights on or off. - /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] - public bool ToggleLight = true; } /// diff --git a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs index 6b969d1d62..33b88dbaf8 100644 --- a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs @@ -1,8 +1,10 @@ +using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; using Content.Shared.Temperature; using Content.Shared.Toggleable; +using Content.Shared.Verbs; using Content.Shared.Wieldable; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; @@ -20,18 +22,23 @@ public sealed class ItemToggleSystem : EntitySystem [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + private EntityQuery _query; + public override void Initialize() { base.Initialize(); + _query = GetEntityQuery(); + SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(TurnOffOnUnwielded); SubscribeLocalEvent(TurnOnOnWielded); SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent>(OnActivateVerb); + SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnIsHotEvent); @@ -62,6 +69,32 @@ private void OnUseInHand(Entity ent, ref UseInHandEvent arg Toggle((ent, ent.Comp), args.User, predicted: ent.Comp.Predictable); } + private void OnActivateVerb(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + var user = args.User; + + args.Verbs.Add(new ActivationVerb() + { + Text = !ent.Comp.Activated ? Loc.GetString("item-toggle-activate") : Loc.GetString("item-toggle-deactivate"), + Act = () => + { + Toggle((ent.Owner, ent.Comp), user, predicted: ent.Comp.Predictable); + } + }); + } + + private void OnActivate(Entity ent, ref ActivateInWorldEvent args) + { + if (args.Handled || !ent.Comp.OnActivate) + return; + + args.Handled = true; + Toggle((ent.Owner, ent.Comp), args.User, predicted: ent.Comp.Predictable); + } + /// /// Used when an item is attempted to be toggled. /// Sets its state to the opposite of what it is. @@ -69,7 +102,7 @@ private void OnUseInHand(Entity ent, ref UseInHandEvent arg /// Same as public bool Toggle(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; return TrySetActive(ent, !ent.Comp.Activated, user, predicted); @@ -92,7 +125,7 @@ public bool TrySetActive(Entity ent, bool active, EntityUi /// public bool TryActivate(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; var uid = ent.Owner; @@ -135,7 +168,7 @@ public bool TryActivate(Entity ent, EntityUid? user = null /// public bool TryDeactivate(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; var uid = ent.Owner; @@ -199,16 +232,7 @@ private void UpdateVisuals(Entity ent) if (TryComp(ent, out AppearanceComponent? appearance)) { _appearance.SetData(ent, ToggleVisuals.Toggled, ent.Comp.Activated, appearance); - - if (ent.Comp.ToggleLight) - _appearance.SetData(ent, ToggleableLightVisuals.Enabled, ent.Comp.Activated, appearance); } - - if (!ent.Comp.ToggleLight) - return; - - if (_light.TryGetLight(ent, out var light)) - _light.SetEnabled(ent, ent.Comp.Activated, light); } /// @@ -230,7 +254,7 @@ private void TurnOnOnWielded(Entity ent, ref ItemWieldedEve public bool IsActivated(Entity ent) { - if (!Resolve(ent, ref ent.Comp, false)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return true; // assume always activated if no component return ent.Comp.Activated; diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 7924a0ec94..de4311e559 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -83,7 +83,7 @@ public sealed class LatheGetRecipesEvent : EntityEventArgs public bool getUnavailable; - public List> Recipes = new(); + public HashSet> Recipes = new(); public LatheGetRecipesEvent(EntityUid lathe, bool forced) { diff --git a/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs b/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs new file mode 100644 index 0000000000..6ac1bf236d --- /dev/null +++ b/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Light.Components; + +/// +/// Toggles point light on an entity whenever ItemToggle hits. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemTogglePointLightComponent : Component +{ + +} diff --git a/Content.Shared/Light/Components/SlimPoweredLightComponent.cs b/Content.Shared/Light/Components/SlimPoweredLightComponent.cs new file mode 100644 index 0000000000..bf6ae0e525 --- /dev/null +++ b/Content.Shared/Light/Components/SlimPoweredLightComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Light.Components; + +// All content light code is terrible and everything is baked-in. Power code got predicted before light code did. +/// +/// Handles turning a pointlight on / off based on power. Nothing else +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SlimPoweredLightComponent : Component +{ + /// + /// Used to make this as being lit. If unpowered then the light will still be off. + /// + [DataField, AutoNetworkedField] + public bool Enabled = true; +} diff --git a/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs b/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs new file mode 100644 index 0000000000..7030c538c1 --- /dev/null +++ b/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Toggleable; +using ItemTogglePointLightComponent = Content.Shared.Light.Components.ItemTogglePointLightComponent; + +namespace Content.Shared.Light.EntitySystems; + +/// +/// Handles ItemToggle for PointLight +/// +public sealed class ItemTogglePointLightSystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnLightToggled); + } + + private void OnLightToggled(Entity ent, ref ItemToggledEvent args) + { + if (!_light.TryGetLight(ent.Owner, out var light)) + return; + + _appearance.SetData(ent, ToggleableLightVisuals.Enabled, args.Activated); + _light.SetEnabled(ent.Owner, args.Activated, comp: light); + } +} diff --git a/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs b/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs new file mode 100644 index 0000000000..6d984ed19a --- /dev/null +++ b/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs @@ -0,0 +1,67 @@ +using Content.Shared.Light.Components; +using Content.Shared.Power; +using Content.Shared.Power.Components; +using Content.Shared.Power.EntitySystems; + +namespace Content.Shared.Light.EntitySystems; + +public sealed class SlimPoweredLightSystem : EntitySystem +{ + [Dependency] private readonly SharedPowerReceiverSystem _receiver = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; + + private bool _setting; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnLightAttempt); + SubscribeLocalEvent(OnLightPowerChanged); + } + + private void OnLightAttempt(Entity ent, ref AttemptPointLightToggleEvent args) + { + // Early-out to avoid having to trycomp stuff if we're the caller setting it + if (_setting) + return; + + if (args.Enabled && !_receiver.IsPowered(ent.Owner)) + args.Cancelled = true; + } + + private void OnLightPowerChanged(Entity ent, ref PowerChangedEvent args) + { + // Early out if we don't need to trycomp. + if (args.Powered) + { + if (!ent.Comp.Enabled) + return; + } + else + { + if (!ent.Comp.Enabled) + return; + } + + if (!_lights.TryGetLight(ent.Owner, out var light)) + return; + + var enabled = ent.Comp.Enabled && args.Powered; + _setting = true; + _lights.SetEnabled(ent.Owner, enabled, light); + _setting = false; + } + + public void SetEnabled(Entity entity, bool enabled) + { + if (!Resolve(entity.Owner, ref entity.Comp, false)) + return; + + if (entity.Comp.Enabled == enabled) + return; + + entity.Comp.Enabled = enabled; + Dirty(entity); + _lights.SetEnabled(entity.Owner, enabled); + } +} diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs index 42e55bea55..8754de5058 100644 --- a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -13,6 +13,8 @@ namespace Content.Shared.Light.EntitySystems; public sealed class UnpoweredFlashlightSystem : EntitySystem { + // TODO: Split some of this to ItemTogglePointLight + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; diff --git a/Content.Shared/Objectives/ObjectiveInfo.cs b/Content.Shared/Objectives/ObjectiveInfo.cs index 689fe17e6c..0b7e7a15f6 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/Payload/Components/PayloadTriggerComponent.cs b/Content.Shared/Payload/Components/PayloadTriggerComponent.cs index 6d3df41ac9..b064e91198 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/Power/Components/ItemSlotRequiresPowerComponent.cs b/Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs new file mode 100644 index 0000000000..6e3b9eaca0 --- /dev/null +++ b/Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Power.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemSlotRequiresPowerComponent : Component +{ + +} diff --git a/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs b/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs new file mode 100644 index 0000000000..3df8b91a98 --- /dev/null +++ b/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Power.Components; + +namespace Content.Shared.Power.EntitySystems; + +public sealed class ItemSlotRequiresPowerSystem : EntitySystem +{ + [Dependency] private readonly SharedPowerReceiverSystem _receiver = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInsertAttempt); + } + + private void OnInsertAttempt(Entity ent, ref ItemSlotInsertAttemptEvent args) + { + if (!_receiver.IsPowered(ent.Owner)) + { + args.Cancelled = true; + } + } +} diff --git a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs index 37ac751889..2bc2af7831 100644 --- a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs +++ b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Shared.Examine; using Content.Shared.Power.Components; @@ -5,6 +6,16 @@ namespace Content.Shared.Power.EntitySystems; public abstract class SharedPowerReceiverSystem : EntitySystem { + public abstract bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component); + + public bool IsPowered(Entity entity) + { + if (!ResolveApc(entity.Owner, ref entity.Comp)) + return true; + + return entity.Comp.Powered; + } + protected string GetExamineText(bool powered) { return Loc.GetString("power-receiver-component-on-examine-main", diff --git a/Content.Shared/Power/PowerChangedEvent.cs b/Content.Shared/Power/PowerChangedEvent.cs new file mode 100644 index 0000000000..578a34142a --- /dev/null +++ b/Content.Shared/Power/PowerChangedEvent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Power; + +/// +/// Raised whenever an ApcPowerReceiver becomes powered / unpowered. +/// Does nothing on the client. +/// +[ByRefEvent] +public readonly record struct PowerChangedEvent(bool Powered, float ReceivingPower); \ No newline at end of file diff --git a/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs b/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs new file mode 100644 index 0000000000..20e2d4fe02 --- /dev/null +++ b/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.PowerCell.Components; + +/// +/// Integrate PowerCellDraw and ItemToggle. +/// Make toggling this item require power, and deactivates the item when power runs out. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ToggleCellDrawComponent : Component; diff --git a/Content.Shared/PowerCell/PowerCellDrawComponent.cs b/Content.Shared/PowerCell/PowerCellDrawComponent.cs index 94de7c7787..7af44420a7 100644 --- a/Content.Shared/PowerCell/PowerCellDrawComponent.cs +++ b/Content.Shared/PowerCell/PowerCellDrawComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Item.ItemToggle.Components; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; @@ -8,7 +9,6 @@ namespace Content.Shared.PowerCell; /// /// /// With ActivatableUI it will activate and deactivate when the ui is opened and closed, drawing power inbetween. -/// Requires to work. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] public sealed partial class PowerCellDrawComponent : Component @@ -30,9 +30,8 @@ public sealed partial class PowerCellDrawComponent : Component #endregion /// - /// Whether drawing is enabled, regardless of ItemToggle. + /// Whether drawing is enabled. /// Having no cell will still disable it. - /// Only use this if you really don't want it to use power for some time. /// [DataField, AutoNetworkedField] public bool Enabled = true; diff --git a/Content.Shared/PowerCell/SharedPowerCellSystem.cs b/Content.Shared/PowerCell/SharedPowerCellSystem.cs index 2b2a836633..f098f575c4 100644 --- a/Content.Shared/PowerCell/SharedPowerCellSystem.cs +++ b/Content.Shared/PowerCell/SharedPowerCellSystem.cs @@ -1,6 +1,4 @@ using Content.Shared.Containers.ItemSlots; -using Content.Shared.Item.ItemToggle; -using Content.Shared.Item.ItemToggle.Components; using Content.Shared.PowerCell.Components; using Content.Shared.Rejuvenate; using Robust.Shared.Containers; @@ -13,19 +11,22 @@ public abstract class SharedPowerCellSystem : EntitySystem [Dependency] protected readonly IGameTiming Timing = default!; [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] protected readonly ItemToggleSystem Toggle = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnRejuvenate); SubscribeLocalEvent(OnCellInserted); SubscribeLocalEvent(OnCellRemoved); SubscribeLocalEvent(OnCellInsertAttempt); + } - SubscribeLocalEvent(OnActivateAttempt); - SubscribeLocalEvent(OnToggled); + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + QueueUpdate((ent, ent.Comp)); } private void OnRejuvenate(EntityUid uid, PowerCellSlotComponent component, RejuvenateEvent args) @@ -70,16 +71,13 @@ protected virtual void OnCellRemoved(EntityUid uid, PowerCellSlotComponent compo RaiseLocalEvent(uid, new PowerCellChangedEvent(true), false); } - private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) - { - if (!HasDrawCharge(ent, ent.Comp, user: args.User) - || !HasActivatableCharge(ent, ent.Comp, user: args.User)) - args.Cancelled = true; - } - - private void OnToggled(Entity ent, ref ItemToggledEvent args) + /// + /// Makes the draw logic update in the next tick. + /// + public void QueueUpdate(Entity ent) { - ent.Comp.NextUpdateTime = Timing.CurTime; + if (Resolve(ent, ref ent.Comp)) + ent.Comp.NextUpdateTime = Timing.CurTime; } public void SetDrawEnabled(Entity ent, bool enabled) diff --git a/Content.Shared/PowerCell/ToggleCellDrawSystem.cs b/Content.Shared/PowerCell/ToggleCellDrawSystem.cs new file mode 100644 index 0000000000..070937b8b4 --- /dev/null +++ b/Content.Shared/PowerCell/ToggleCellDrawSystem.cs @@ -0,0 +1,49 @@ +using Content.Shared.Item.ItemToggle; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.PowerCell.Components; + +namespace Content.Shared.PowerCell; + +/// +/// Handles events to integrate PowerCellDraw with ItemToggle +/// +public sealed class ToggleCellDrawSystem : EntitySystem +{ + [Dependency] private readonly ItemToggleSystem _toggle = default!; + [Dependency] private readonly SharedPowerCellSystem _cell = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnActivateAttempt); + SubscribeLocalEvent(OnToggled); + SubscribeLocalEvent(OnEmpty); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _cell.SetDrawEnabled(ent.Owner, _toggle.IsActivated(ent.Owner)); + } + + private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) + { + if (!_cell.HasDrawCharge(ent, user: args.User) + || !_cell.HasActivatableCharge(ent, user: args.User)) + args.Cancelled = true; + } + + private void OnToggled(Entity ent, ref ItemToggledEvent args) + { + var uid = ent.Owner; + var draw = Comp(uid); + _cell.QueueUpdate((uid, draw)); + _cell.SetDrawEnabled((uid, draw), args.Activated); + } + + private void OnEmpty(Entity ent, ref PowerCellSlotEmptyEvent args) + { + _toggle.TryDeactivate(ent.Owner); + } +} diff --git a/Content.Shared/Research/Components/BlueprintComponent.cs b/Content.Shared/Research/Components/BlueprintComponent.cs new file mode 100644 index 0000000000..71ed3da034 --- /dev/null +++ b/Content.Shared/Research/Components/BlueprintComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Research.Prototypes; +using Content.Shared.Research.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Research.Components; + +/// +/// This is used for an item that is inserted directly into a given lathe to provide it with a recipe. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(BlueprintSystem))] +public sealed partial class BlueprintComponent : Component +{ + /// + /// The recipes that this blueprint provides. + /// + [DataField(required: true)] + public HashSet> ProvidedRecipes = new(); +} diff --git a/Content.Shared/Research/Components/BlueprintReceiverComponent.cs b/Content.Shared/Research/Components/BlueprintReceiverComponent.cs new file mode 100644 index 0000000000..94c323eb86 --- /dev/null +++ b/Content.Shared/Research/Components/BlueprintReceiverComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Research.Systems; +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Research.Components; + +/// +/// This is used for a lathe that can utilize s to gain more recipes. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(BlueprintSystem))] +public sealed partial class BlueprintReceiverComponent : Component +{ + [DataField] + public string ContainerId = "blueprint"; + + [DataField(required: true)] + public EntityWhitelist Whitelist = new(); +} diff --git a/Content.Shared/Research/Systems/BlueprintSystem.cs b/Content.Shared/Research/Systems/BlueprintSystem.cs new file mode 100644 index 0000000000..237ff70300 --- /dev/null +++ b/Content.Shared/Research/Systems/BlueprintSystem.cs @@ -0,0 +1,114 @@ +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Lathe; +using Content.Shared.Popups; +using Content.Shared.Research.Components; +using Content.Shared.Research.Prototypes; +using Content.Shared.Whitelist; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Research.Systems; + +public sealed class BlueprintSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnGetRecipes); + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + _container.EnsureContainer(ent, ent.Comp.ContainerId); + } + + private void OnAfterInteract(Entity ent, ref AfterInteractUsingEvent args) + { + if (args.Handled || !args.CanReach || !TryComp(args.Used, out var blueprintComponent)) + return; + args.Handled = TryInsertBlueprint(ent, (args.Used, blueprintComponent), args.User); + } + + private void OnGetRecipes(Entity ent, ref LatheGetRecipesEvent args) + { + var recipes = GetBlueprintRecipes(ent); + foreach (var recipe in recipes) + { + args.Recipes.Add(recipe); + } + } + + public bool TryInsertBlueprint(Entity ent, Entity blueprint, EntityUid? user) + { + if (!CanInsertBlueprint(ent, blueprint, user)) + return false; + + if (user is not null) + { + var userId = Identity.Entity(user.Value, EntityManager); + var bpId = Identity.Entity(blueprint, EntityManager); + var machineId = Identity.Entity(ent, EntityManager); + var msg = Loc.GetString("blueprint-receiver-popup-insert", + ("user", userId), + ("blueprint", bpId), + ("receiver", machineId)); + _popup.PopupPredicted(msg, ent, user); + } + + _container.Insert(blueprint.Owner, _container.GetContainer(ent, ent.Comp.ContainerId)); + + var ev = new TechnologyDatabaseModifiedEvent(); + RaiseLocalEvent(ent, ref ev); + return true; + } + + public bool CanInsertBlueprint(Entity ent, Entity blueprint, EntityUid? user) + { + if (_entityWhitelist.IsWhitelistFail(ent.Comp.Whitelist, blueprint)) + { + return false; + } + + if (blueprint.Comp.ProvidedRecipes.Count == 0) + { + Log.Error($"Attempted to insert blueprint {ToPrettyString(blueprint)} with no recipes."); + return false; + } + + // Don't add new blueprints if there are no new recipes. + var currentRecipes = GetBlueprintRecipes(ent); + if (currentRecipes.Count != 0 && currentRecipes.IsSupersetOf(blueprint.Comp.ProvidedRecipes)) + { + _popup.PopupPredicted(Loc.GetString("blueprint-receiver-popup-recipe-exists"), ent, user); + return false; + } + + return _container.CanInsert(blueprint, _container.GetContainer(ent, ent.Comp.ContainerId)); + } + + public HashSet> GetBlueprintRecipes(Entity ent) + { + var contained = _container.GetContainer(ent, ent.Comp.ContainerId); + + var recipes = new HashSet>(); + foreach (var blueprint in contained.ContainedEntities) + { + if (!TryComp(blueprint, out var blueprintComponent)) + continue; + + foreach (var provided in blueprintComponent.ProvidedRecipes) + { + recipes.Add(provided); + } + } + + return recipes; + } +} diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs new file mode 100644 index 0000000000..a979a6ec50 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +/// +/// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent +{ +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index efc18abaa0..8733edf485 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Audio; using Content.Shared.Hands; -using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Maps; @@ -8,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Sound.Components; using Content.Shared.Throwing; +using Content.Shared.UserInterface; using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Audio; @@ -48,12 +48,18 @@ public override void Initialize() SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); SubscribeLocalEvent(OnEmitSoundOnInteractUsing); + SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(OnEmitSoundOnCollide); SubscribeLocalEvent(OnMobState); } + private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) + { + TryEmitSound(uid, component, args.User); + } + private void OnMobState(Entity entity, ref MobStateChangedEvent args) { // Disable this component rather than removing it because it can be brought back to life. diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.cs b/Content.Shared/Tools/Systems/SharedToolSystem.cs index 201eb19a88..86b91dcda4 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.cs @@ -33,6 +33,9 @@ public abstract partial class SharedToolSystem : EntitySystem [Dependency] private readonly TurfSystem _turfs = default!; [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainer = default!; + public const string CutQuality = "Cutting"; + public const string PulseQuality = "Pulsing"; + public override void Initialize() { InitializeMultipleTool(); diff --git a/Content.Shared/Verbs/SharedVerbSystem.cs b/Content.Shared/Verbs/SharedVerbSystem.cs index 319f927c7b..db17599d87 100644 --- a/Content.Shared/Verbs/SharedVerbSystem.cs +++ b/Content.Shared/Verbs/SharedVerbSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; using Robust.Shared.Containers; +using Robust.Shared.Map; namespace Content.Shared.Verbs { @@ -173,4 +174,27 @@ public virtual void ExecuteVerb(Verb verb, EntityUid user, EntityUid target, boo _interactionSystem.DoContactInteraction(user, target); } } + + // Does nothing on server + /// + /// Raised directed when trying to get the entity menu visibility for entities. + /// + [ByRefEvent] + public record struct MenuVisibilityEvent + { + public MapCoordinates TargetPos; + public MenuVisibility Visibility; + } + + // Does nothing on server + [Flags] + public enum MenuVisibility + { + // What entities can a user see on the entity menu? + Default = 0, // They can only see entities in FoV. + NoFov = 1 << 0, // They ignore FoV restrictions + InContainer = 1 << 1, // They can see through containers. + Invisible = 1 << 2, // They can see entities without sprites and the "HideContextMenu" tag is ignored. + All = NoFov | InContainer | Invisible + } } diff --git a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs index 5bf7480202..3add18365a 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/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index 6141902124..acd4305538 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -156,11 +156,14 @@ public void SetWeather(MapId mapId, WeatherPrototype? proto, TimeSpan? endTime) foreach (var (eProto, weather) in weatherComp.Weather) { + // if we turn off the weather, we don't want endTime = null + if (proto == null) + endTime ??= Timing.CurTime + WeatherComponent.ShutdownTime; + // Reset cooldown if it's an existing one. - if (proto == null || eProto == proto.ID) + if (proto is not null && eProto == proto.ID) { weather.EndTime = endTime; - if (weather.State == WeatherState.Ending) weather.State = WeatherState.Running; diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index da87e520e9..bd42b8ee7b 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -491,5 +491,13 @@ Entries: id: 61 time: '2024-08-23T00:11:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31045 +- author: PursuitInAshes + changes: + - message: The resave command is no longer usable with the mapping permission, instead + it requires host permissions. + type: Tweak + id: 62 + time: '2024-08-25T01:55:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31397 Name: Admin Order: 1 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e24e23a86d..7df53e2a84 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,195 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed singularity decay being underpowered, leading to continuous growth - on higher PA strengths. - type: Fix - id: 6701 - time: '2024-06-08T14:36:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28743 -- author: metalgearsloth - changes: - - message: Fix sometimes spawning without bags. - type: Fix - id: 6702 - time: '2024-06-08T18:48:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28734 -- author: UBlueberry - changes: - - message: The guidebook has been heavily reorganized to improve convenience for - all types of users. - type: Tweak - id: 6703 - time: '2024-06-08T23:00:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28603 -- author: Psychpsyo - changes: - - message: New lobby background art! - type: Add - id: 6704 - time: '2024-06-08T23:29:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28724 -- author: AJCM-git - changes: - - message: When people with less than an hour playing join the game, the guidebook - is automatically opened for them. - type: Tweak - id: 6705 - time: '2024-06-09T16:26:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28774 -- author: Aeshus - changes: - - message: Salvage has a comprehensive guide. - type: Add - - message: Cargo's guide is up-to-date. - type: Tweak - id: 6706 - time: '2024-06-09T18:28:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28775 -- author: Zonespace27 - changes: - - message: Fixed a typo under the "Cargonia" header in the glossary. - type: Fix - id: 6707 - time: '2024-06-10T13:19:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28818 -- author: EmoGarbage404 - changes: - - message: Fixed drinks page not having a search bar. - type: Fix - id: 6708 - time: '2024-06-10T13:20:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28815 -- author: Aquif - changes: - - message: It is now possible to save after chaining you job unavailable preference. - type: Fix - id: 6709 - time: '2024-06-11T02:48:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28839 -- author: lzk228 - changes: - - message: Added reward info in cargo bounty label. - type: Tweak - id: 6710 - time: '2024-06-11T09:33:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28853 -- author: Tayrtahn - changes: - - message: Announcements for the location of the evac shuttle, the armed nuke, and - more will no longer send you in the opposite direction. - type: Fix - id: 6711 - time: '2024-06-11T22:18:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28869 -- author: Boaz1111 - changes: - - message: Refactors Cluster's Armoury - type: Tweak - id: 6712 - time: '2024-06-12T01:07:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28854 -- author: Deserty0 - changes: - - message: '"no materials loaded" messege now appears in lathes!' - type: Fix - id: 6713 - time: '2024-06-12T10:32:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28885 -- author: robertGN - changes: - - message: Syndicate communications consoles can no longer recall the emergency - shuttle. - type: Fix - id: 6714 - time: '2024-06-12T13:32:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28803 -- author: deltanedas - changes: - - message: Fixed opening the PDA UI sometimes breaking. - type: Fix - id: 6715 - time: '2024-06-12T18:10:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28896 -- author: notafet - changes: - - message: The singularity is now safe to operate up to PA level 3. - type: Fix - id: 6716 - time: '2024-06-12T22:56:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28906 -- author: stalengd - changes: - - message: Players can now correctly toggle internals on pets. - type: Fix - id: 6717 - time: '2024-06-13T02:17:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28904 -- author: Cojoke-dot - changes: - - message: Tranquilizer Shotguns shells now have a unique sprite - type: Tweak - - message: You now print boxes of Tranquilizer Boxes rather than a single shell - type: Tweak - id: 6718 - time: '2024-06-13T02:17:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28903 -- author: Plykiya - changes: - - message: Gauze continues to heal even when you stop someone's bleeding. - type: Fix - id: 6719 - time: '2024-06-13T02:19:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28844 -- author: Doomsdrayk - changes: - - message: Fixed guns appearing to cycle their bolt when wielded. - type: Fix - id: 6720 - time: '2024-06-13T06:30:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28756 -- author: Doomsdrayk - changes: - - message: The Drozd and C-20r do not unwield on use again. - type: Fix - id: 6721 - time: '2024-06-13T18:10:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28728 -- author: EmoGarbage404 - changes: - - message: Fixed constructed items rotating strangely. - type: Fix - id: 6722 - time: '2024-06-13T18:21:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28427 -- author: lzk228 - changes: - - message: Added order quantity to cargo invoice label. - type: Tweak - id: 6723 - time: '2024-06-13T18:36:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28821 -- author: osjarw - changes: - - message: Added context menu action for scanning artifacts. - type: Add - id: 6724 - time: '2024-06-14T02:01:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26873 -- author: Cojoke-dot - changes: - - message: Lasers now pass over things unless clicked like projectiles - type: Tweak - id: 6725 - time: '2024-06-14T02:04:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28768 -- author: Boaz1111 - changes: - - message: The PKA can now mine rocks in one hit again. - type: Tweak - id: 6726 - time: '2024-06-14T02:40:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27476 - author: KyuPolaris changes: - message: Chickens now make a clucking sound when they speak. @@ -3870,3 +3679,189 @@ id: 7200 time: '2024-08-24T23:30:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31405 +- author: PJB3005 + changes: + - message: Fix the ChemVend jug names again + type: Fix + id: 7201 + time: '2024-08-25T02:02:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31398 +- author: metalgearsloth + changes: + - message: Fix grids sometimes overlapping on roundstart. + type: Fix + id: 7202 + time: '2024-08-25T04:48:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31413 +- author: themias + changes: + - message: Thin firelocks now respect rotation when built + type: Fix + id: 7203 + time: '2024-08-25T04:57:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31371 +- author: IProduceWidgets + changes: + - message: Oasis Voxbox is no longer a pressure bomb. (Thanks Delta) + type: Fix + id: 7204 + time: '2024-08-25T05:42:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31415 +- author: PopGamer46 + changes: + - message: Security cadets now spawn with jackboots instead of combat boots + type: Tweak + id: 7205 + time: '2024-08-25T06:58:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31419 +- author: ArtisticRoomba + changes: + - message: Added the greytide stamp. This stamp can be rarely found in maints lockers. + type: Add + id: 7206 + time: '2024-08-25T10:35:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30189 +- author: EmoGarbage404 + changes: + - message: Added blueprints! These can be found by salvagers and inserted into an + autolathe in order to unlock new recipes. + type: Add + id: 7207 + time: '2024-08-25T12:06:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31138 +- author: deltanedas + changes: + - message: Fixed borgs losing access when they run out of power. + type: Fix + id: 7208 + time: '2024-08-25T12:17:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31392 +- author: metalgearsloth + changes: + - message: Actions now activate on key-down, not key-up. + type: Tweak + id: 7209 + time: '2024-08-25T12:36:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31191 +- author: PJB3005 + changes: + - message: PACMAN and SUPERPACMAN now ramp their power output significantly faster. + type: Tweak + id: 7210 + time: '2024-08-25T16:11:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31403 +- author: Blackern5000 + changes: + - message: Space scanning technology is now T1 industrial, this includes cyborg + GPS modules and handheld mass scanners. + type: Tweak + id: 7211 + time: '2024-08-25T16:47:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31321 +- author: ShadowCommander + changes: + - message: Rollerbeds no longer buckle yourself when clicked on. + type: Remove + id: 7212 + time: '2024-08-25T17:09:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30001 +- author: lzk228 + changes: + - message: Cotton dough added to the game! Check the guidebook for new recipes. + type: Add + id: 7213 + time: '2024-08-26T02:46:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30668 +- author: Moomoobeef + changes: + - message: Silicons like medbots, janibots, and honkbots now make sound when speaking. + type: Fix + id: 7214 + time: '2024-08-26T09:09:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31471 +- author: Winkarst-cpu + changes: + - message: The color of the science radio channel was changed. + type: Tweak + id: 7215 + time: '2024-08-26T12:02:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31319 +- author: slarticodefast + changes: + - message: Fixed energy sword visuals. + type: Fix + id: 7216 + time: '2024-08-26T13:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31478 +- author: CuteBoi + changes: + - message: Replaced small fans on most shuttles with directional fans. + type: Fix + id: 7217 + time: '2024-08-26T22:24:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31495 +- author: 12rabbits + changes: + - message: The guidebook now remembers where you left off when re-opened. + type: Tweak + id: 7218 + time: '2024-08-26T23:06:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31375 +- author: Dimastra + changes: + - message: Fixed meat kudzu not dealing damage. + type: Fix + id: 7219 + time: '2024-08-27T00:30:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31494 +- author: JIPDawg + changes: + - message: Gas miners are now indestructible, can be pulled and only anchored. + type: Tweak + id: 7220 + time: '2024-08-27T00:48:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31370 +- author: SaphireLattice + changes: + - message: Safety Moth poster graphics for hardhats and pipes are no longer swapped + around + type: Fix + id: 7221 + time: '2024-08-27T11:32:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31507 +- author: Winkarst-cpu + changes: + - message: Explosive ammunition is now marked as a contraband. + type: Fix + id: 7222 + time: '2024-08-27T11:37:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31508 +- author: Winkarst-cpu + changes: + - message: Now the syndicate raid helmet is marked as a Syndicate contraband. + type: Fix + id: 7223 + time: '2024-08-27T13:01:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31512 +- author: Winkarst-cpu + changes: + - message: The explorer gas mask is now restricted to the cargo. + type: Fix + id: 7224 + time: '2024-08-27T13:19:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31514 +- author: Aeshus + changes: + - message: The Health Analyzer now displays the patient's picture, species, and + current status. + type: Add + id: 7225 + time: '2024-08-27T14:57:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30834 +- author: Aeshus + changes: + - message: Cryosleep no longer gives arrival shuttle directions. + type: Fix + id: 7226 + time: '2024-08-27T15:02:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30888 diff --git a/Resources/ConfigPresets/WizardsDen/salamander.toml b/Resources/ConfigPresets/WizardsDen/salamander.toml index 632dcae716..43ba4d8d04 100644 --- a/Resources/ConfigPresets/WizardsDen/salamander.toml +++ b/Resources/ConfigPresets/WizardsDen/salamander.toml @@ -1,7 +1,7 @@ # Configuration preset used on Wizard's Den Salamander [game] -desc = "Official English Space Station 14 servers. Medium roleplay ruleset. You must be whitelisted through Discord to play if there are more than 15 online players." +desc = "Official English Space Station 14 servers. Medium roleplay ruleset. you must be whitelisted by playing on other Wizard's Den servers if there are more than 15 online players." hostname = "[EN] Wizard's Den Salamander [US West RP]" soft_max_players = 130 @@ -10,8 +10,7 @@ rules_file = "MRPRuleset" [whitelist] enabled = true -reason = "whitelist-not-whitelisted-rp" -min_players = 15 +prototype_list = "salamanderMrpWhitelist" [shuttle] emergency_early_launch_allowed = true diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index cb735f4f67..4a6fe75e49 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, Aeshus, Aexxie, Afrokada, Agoichi, Ahion, Aidenkrz, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, bhenrich, BingoJohnson-zz, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, BombasterDS, brainfood1183, Brandon-Huu, Bright0, brndd, BYONDFuckery, c4llv07e, CaasGit, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, dffdff2423, diraven, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, 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, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, Ian321, icekot8, IgorAnt028, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JIPDawg, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, K-Dynamic, KaiShibaa, kalane15, kalanosh, Keer-Sar, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, laok233, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, marboww, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, MerrytheManokit, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, MureixloI, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, Spessmann, SphiraI, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, 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, Zonespace27, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aeshus, Aexxie, Afrokada, Agoichi, Ahion, Aidenkrz, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, bhenrich, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, BombasterDS, brainfood1183, Brandon-Huu, Bright0, brndd, c4llv07e, CaasGit, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, dffdff2423, DieselMohawk, diraven, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, 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, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, Ian321, icekot8, IgorAnt028, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JIPDawg, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, K-Dynamic, KaiShibaa, kalane15, kalanosh, Keer-Sar, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, laok233, lapatison, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, Magicalus, MagnusCrowe, ManelNavola, Mangohydra, marboww, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, MerrytheManokit, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, MureixloI, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, SaphireLattice, Sarahon, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, Spessmann, SphiraI, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, thetolbean, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Unkn0wnGh0st333, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, 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, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem diff --git a/Resources/Locale/en-US/access/ui/door-electronics-window.ftl b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl new file mode 100644 index 0000000000..6a7b1c95c2 --- /dev/null +++ b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl @@ -0,0 +1 @@ +door-electronics-configuration-title = Configure Access diff --git a/Resources/Locale/en-US/connection-messages.ftl b/Resources/Locale/en-US/connection-messages.ftl index 7b663d2286..190da3ebeb 100644 --- a/Resources/Locale/en-US/connection-messages.ftl +++ b/Resources/Locale/en-US/connection-messages.ftl @@ -1,16 +1,4 @@ -whitelist-not-whitelisted = You are not whitelisted. - -# proper handling for having a min/max or not -whitelist-playercount-invalid = {$min -> - [0] The whitelist for this server only applies below {$max} players. - *[other] The whitelist for this server only applies above {$min} {$max -> - [2147483647] -> players, so you may be able to join later. - *[other] -> players and below {$max} players, so you may be able to join later. - } -} -whitelist-not-whitelisted-rp = You are not whitelisted. To become whitelisted, visit our Discord (which can be found at https://spacestation14.io) and check the #rp-whitelist channel. - -cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. +cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. cmd-whitelistadd-help = Usage: whitelistadd cmd-whitelistadd-existing = {$username} is already on the whitelist! cmd-whitelistadd-added = {$username} added to the whitelist @@ -41,8 +29,30 @@ panic-bunker-account-denied-reason = This server is in panic bunker mode, often panic-bunker-account-reason-account = Your Space Station 14 account is too new. It must be older than {$minutes} minutes panic-bunker-account-reason-overall = Your overall playtime on the server must be greater than {$minutes} $minutes +whitelist-playtime = You do not have enough playtime to join this server. You need at least {$minutes} minutes of playtime to join this server. +whitelist-player-count = This server is currently not accepting players. Please try again later. +whitelist-notes = You currently have too many admin notes to join this server. You can check your notes by typing /adminremarks in chat. +whitelist-manual = You are not whitelisted on this server. +whitelist-blacklisted = You are blacklisted from this server. +whitelist-always-deny = You are not allowed to join this server. +whitelist-fail-prefix = Not whitelisted: {$msg} +whitelist-misconfigured = The server is misconfigured and is not accepting players. Please contact the server owner and try again later. + +cmd-blacklistadd-desc = Adds the player with the given username to the server blacklist. +cmd-blacklistadd-help = Usage: blacklistadd +cmd-blacklistadd-existing = {$username} is already on the blacklist! +cmd-blacklistadd-added = {$username} added to the blacklist +cmd-blacklistadd-not-found = Unable to find '{$username}' +cmd-blacklistadd-arg-player = [player] + +cmd-blacklistremove-desc = Removes the player with the given username from the server blacklist. +cmd-blacklistremove-help = Usage: blacklistremove +cmd-blacklistremove-existing = {$username} is not on the blacklist! +cmd-blacklistremove-removed = {$username} removed from the blacklist +cmd-blacklistremove-not-found = Unable to find '{$username}' +cmd-blacklistremove-arg-player = [player] + baby-jail-account-denied = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! baby-jail-account-denied-reason = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! Reason: "{$reason}" baby-jail-account-reason-account = Your Space Station 14 account is too old. It must be younger than {$minutes} minutes baby-jail-account-reason-overall = Your overall playtime on the server must be younger than {$minutes} $minutes - diff --git a/Resources/Locale/en-US/items/toggle.ftl b/Resources/Locale/en-US/items/toggle.ftl new file mode 100644 index 0000000000..bcf5c161a6 --- /dev/null +++ b/Resources/Locale/en-US/items/toggle.ftl @@ -0,0 +1,2 @@ +item-toggle-activate = Activate +item-toggle-deactivate = Deactivate 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 121e50b923..fe1f92e914 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,24 @@ 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-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-malnutrition = Severely malnourished +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/paper/stamp-component.ftl b/Resources/Locale/en-US/paper/stamp-component.ftl index c7dc1a1bda..36be70d61f 100644 --- a/Resources/Locale/en-US/paper/stamp-component.ftl +++ b/Resources/Locale/en-US/paper/stamp-component.ftl @@ -17,3 +17,4 @@ stamp-component-stamped-name-warden = Warden stamp-component-stamped-name-trader = Trader stamp-component-stamped-name-syndicate = Syndicate stamp-component-stamped-name-ce = Chief Engineer +stamp-component-stamped-name-greytide = Greytide diff --git a/Resources/Locale/en-US/research/components/blueprint.ftl b/Resources/Locale/en-US/research/components/blueprint.ftl new file mode 100644 index 0000000000..34c3a3c80e --- /dev/null +++ b/Resources/Locale/en-US/research/components/blueprint.ftl @@ -0,0 +1,2 @@ +blueprint-receiver-popup-insert = { CAPITALIZE(THE($user)) } inserted { THE($blueprint) } into { THE($receiver) }. +blueprint-receiver-popup-recipe-exists = The same blueprint was already inserted! diff --git a/Resources/Locale/en-US/shuttles/emergency.ftl b/Resources/Locale/en-US/shuttles/emergency.ftl index b4dcaa3e67..be3f0962fa 100644 --- a/Resources/Locale/en-US/shuttles/emergency.ftl +++ b/Resources/Locale/en-US/shuttles/emergency.ftl @@ -33,3 +33,7 @@ emergency-shuttle-ui-authorize = AUTHORIZE emergency-shuttle-ui-repeal = REPEAL emergency-shuttle-ui-authorizations = Authorizations emergency-shuttle-ui-remaining = Remaining: {$remaining} + +# Map Misc. +map-name-centcomm = Central Command +map-name-terminal = Arrivals Terminal \ No newline at end of file diff --git a/Resources/Locale/en-US/weather/weather.ftl b/Resources/Locale/en-US/weather/weather.ftl index de5dbd8890..67e6eec35f 100644 --- a/Resources/Locale/en-US/weather/weather.ftl +++ b/Resources/Locale/en-US/weather/weather.ftl @@ -1,3 +1,7 @@ cmd-weather-desc = Sets the weather for the current map. cmd-weather-help = weather cmd-weather-hint = Weather prototype + +cmd-weather-error-no-arguments = Not enough arguments! +cmd-weather-error-unknown-proto = Unknown Weather prototype! +cmd-weather-error-wrong-time = Time is in the wrong format! \ No newline at end of file diff --git a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml index be1ca4ffde..6649a01ce8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml @@ -117,7 +117,7 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 4 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml index 28e4dab515..bd792c425b 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml @@ -267,7 +267,7 @@ entities: - type: Transform pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml index 148577363f..413cdfb448 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml @@ -242,27 +242,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 8 components: - type: Transform - pos: -5.5,1.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 1 - uid: 9 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 1 - uid: 10 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 1 - uid: 11 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 1 - proto: BlastDoor entities: @@ -271,33 +275,21 @@ entities: - 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 @@ -650,108 +642,72 @@ entities: 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 diff --git a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml index 88b113d7fd..ce518370f8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml @@ -198,8 +198,6 @@ entities: - type: Transform pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: AirlockExternalShuttleSyndicateLocked entities: - uid: 142 @@ -232,11 +230,12 @@ entities: currentReceiving: 15106.935 currentSupply: 15107 supplyRampPosition: 0.064453125 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: - type: Transform + rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 325 - proto: Bed @@ -267,9 +266,6 @@ entities: occludes: True ents: - 331 - - type: DeviceLinkSink - links: - - 205 - uid: 191 components: - type: Transform @@ -282,9 +278,6 @@ entities: occludes: True ents: - 332 - - type: DeviceLinkSink - links: - - 205 - uid: 192 components: - type: Transform @@ -297,9 +290,6 @@ entities: occludes: True ents: - 333 - - type: DeviceLinkSink - links: - - 205 - uid: 193 components: - type: Transform @@ -312,9 +302,6 @@ entities: occludes: True ents: - 334 - - type: DeviceLinkSink - links: - - 205 - uid: 196 components: - type: Transform @@ -327,9 +314,6 @@ entities: occludes: True ents: - 337 - - type: DeviceLinkSink - links: - - 205 - uid: 198 components: - type: Transform @@ -342,9 +326,6 @@ entities: occludes: True ents: - 339 - - type: DeviceLinkSink - links: - - 205 - uid: 199 components: - type: Transform @@ -357,9 +338,6 @@ entities: occludes: True ents: - 340 - - type: DeviceLinkSink - links: - - 205 - uid: 200 components: - type: Transform @@ -372,9 +350,6 @@ entities: occludes: True ents: - 341 - - type: DeviceLinkSink - links: - - 205 - uid: 201 components: - type: Transform @@ -387,9 +362,6 @@ entities: occludes: True ents: - 342 - - type: DeviceLinkSink - links: - - 205 - uid: 202 components: - type: Transform @@ -402,9 +374,6 @@ entities: occludes: True ents: - 343 - - type: DeviceLinkSink - links: - - 205 - proto: BoxMRE entities: - uid: 320 @@ -825,6 +794,10 @@ entities: occludes: True ents: - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CyberPen entities: - uid: 77 @@ -1041,8 +1014,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: GasVentPump entities: - uid: 218 @@ -1054,8 +1025,6 @@ entities: address: Vnt-5f41a0ae transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 219 components: - type: Transform @@ -1066,8 +1035,6 @@ entities: address: Vnt-129c27d2 transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 220 components: - type: Transform @@ -1078,8 +1045,6 @@ entities: address: Vnt-11c4609d transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 221 components: - type: Transform @@ -1090,8 +1055,6 @@ entities: address: Vnt-6859729f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 222 components: - type: Transform @@ -1102,8 +1065,6 @@ entities: address: Vnt-19d24c7f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - proto: GeneratorBasic15kW entities: - uid: 41 @@ -1457,6 +1418,13 @@ entities: - type: Transform pos: 1.561105,-2.5567772 parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 - proto: PinpointerNuclear entities: - uid: 162 @@ -2379,11 +2347,4 @@ entities: occludes: True ents: - 346 -- proto: YellowOxygenTankFilled - entities: - - uid: 167 - components: - - type: Transform - pos: 1.60798,-0.3062118 - parent: 325 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml index d90fadba23..04eae18342 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml @@ -5,37 +5,49 @@ tilemap: 0: Space 29: FloorDark 84: FloorShuttleRed - 101: FloorSteelOffset 104: FloorTechMaint + 105: FloorTechMaint2 + 118: FloorWood 120: Lattice 121: Plating entities: - proto: "" entities: - - uid: 1 + - uid: 6 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - uid: 325 components: - type: MetaData - desc: Evacuation pod - name: Evacuation pod - type: Transform - parent: invalid + pos: 0.5638949,0.47865233 + parent: 6 - type: MapGrid chunks: -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAZQAAAAAA - version: 6 - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAaQAAAAAAHQAAAAABHQAAAAABHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAACHQAAAAAB version: 6 0,-1: ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAABeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAABHQAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,0: ind: 0,0 - tiles: ZQAAAAAAZQAAAAAAZQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: VAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -47,9 +59,7 @@ entities: - type: Fixtures fixtures: {} - type: OccluderTree - - type: SpreaderGrid - type: Shuttle - - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg @@ -58,104 +68,119 @@ entities: version: 2 nodes: - node: - color: '#A91409FF' - id: StandClearGreyscale + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 11: 1,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 5: -3,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 4: 1,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 3: -3,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 0: -1,-3 + 1: -2,-3 + 2: 0,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNe + decals: + 13: 1,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNw + decals: + 12: -3,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSe + decals: + 9: 1,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSw decals: - 18: 0,-1 + 10: -3,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNE + color: '#7F1C1FFF' + id: BrickTileWhiteLineS decals: - 15: -2,0 + 6: -2,-3 + 7: -1,-3 + 8: 0,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNW + color: '#FFFFFFFF' + id: Delivery decals: - 14: 2,0 + 23: 2,-2 + 24: -4,-2 - node: - color: '#A91409FF' - id: WarnEndGreyscaleN + color: '#FFFFFFFF' + id: WarnLineE decals: - 9: -2,1 - 10: 2,1 + 14: 1,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleE + color: '#FFFFFFFF' + id: WarnLineS decals: - 0: 2,0 - 8: 2,-1 - 17: 5,0 + 16: -3,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleN + color: '#FFFFFFFF' + id: WarnLineW decals: - 11: -1,0 - 12: 0,0 - 13: 1,0 + 15: -1,-1 - node: - color: '#A91409FF' - id: WarnLineGreyscaleS + color: '#FFFFFFFF' + id: WoodTrimThinLineN decals: - 1: 1,-1 - 2: 0,-1 - 3: -1,-1 - 4: -2,-1 - 5: 2,-1 + 17: -1,-5 + 18: 0,-5 + 19: -2,-5 - node: - color: '#A91409FF' - id: WarnLineGreyscaleW + color: '#FFFFFFFF' + id: WoodTrimThinLineS decals: - 6: -2,-1 - 7: -2,0 - 16: -5,0 + 20: -2,-6 + 21: -1,-6 + 22: 0,-6 - 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: 65535 0,-1: - 0: 2115 - 1: 29440 - -2,1: + 0: 65535 + -2,-1: + 0: 52424 + -1,-3: + 0: 65280 + -1,-2: + 0: 65535 + 0,-3: + 0: 30464 + 0,-2: + 0: 30583 + -2,0: 0: 8 - -1,1: - 0: 4096 + -1,0: + 0: 3839 0,0: - 1: 895 - 0: 18432 - 1,-1: - 0: 16913 - 1,0: - 1: 7 - 0: 64 - 1,1: - 0: 4098 + 0: 895 uniqueMixes: - - volume: 2500 - immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -173,1016 +198,2165 @@ entities: - 0 chunkSize: 4 - type: GasTileOverlay - - type: NavMap - type: RadiationGridResistance -- proto: AirlockShuttleSyndicate + - type: GravityShake + shakeTimes: 10 + - type: SpreaderGrid + - type: GridPathfinding +- proto: AirCanister entities: - - uid: 2 + - uid: 91 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,0.5 - parent: 1 - - uid: 3 + pos: -0.5,-8.5 + parent: 325 +- proto: AirlockExternalShuttleSyndicateLocked + entities: + - uid: 142 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,0.5 - parent: 1 -- proto: AirlockSyndicate + pos: -4.5,-1.5 + parent: 325 +- proto: AirlockSyndicateLocked entities: - - uid: 4 + - uid: 20 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 5 + pos: -0.5,-3.5 + parent: 325 + - uid: 88 components: - type: Transform - pos: -2.5,0.5 - parent: 1 + pos: -0.5,-6.5 + parent: 325 - proto: APCBasic entities: - - uid: 6 + - uid: 107 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 -- proto: AtmosDeviceFanTiny + pos: 0.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15107 + currentReceiving: 15106.935 + currentSupply: 15107 + supplyRampPosition: 0.064453125 +- proto: AtmosDeviceFanDirectional entities: - - uid: 7 + - uid: 168 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,0.5 - parent: 1 - - uid: 8 + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 325 +- proto: Bed + entities: + - uid: 76 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,0.5 - parent: 1 -- proto: BannerSyndicate + pos: 0.5,-5.5 + parent: 325 +- proto: BedsheetSyndie entities: - - uid: 9 + - uid: 164 components: - type: Transform - pos: 1.5,1.5 - parent: 1 -- proto: CableApcExtension + pos: 0.5,-5.5 + parent: 325 +- proto: BlastDoorOpen entities: - - uid: 10 + - uid: 190 components: - type: Transform - pos: -2.5,1.5 - parent: 1 - - uid: 11 + pos: 1.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 331 + - uid: 191 components: - type: Transform - pos: -2.5,0.5 - parent: 1 - - uid: 12 + pos: 1.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 332 + - uid: 192 components: - type: Transform - pos: -3.5,0.5 - parent: 1 - - uid: 13 + pos: -2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 333 + - uid: 193 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 14 + pos: -2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 334 + - uid: 196 components: - type: Transform - pos: -5.5,0.5 - parent: 1 - - uid: 15 + pos: 3.5,-1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 337 + - uid: 198 components: - type: Transform - pos: -1.5,0.5 - parent: 1 - - uid: 16 + pos: -1.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 339 + - uid: 199 components: - type: Transform - pos: -0.5,0.5 - parent: 1 - - uid: 17 + pos: -1.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 340 + - uid: 200 components: - type: Transform - pos: 0.5,0.5 - parent: 1 - - uid: 18 + pos: -0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 341 + - uid: 201 components: - type: Transform - pos: 1.5,0.5 - parent: 1 - - uid: 19 + pos: 0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 342 + - uid: 202 components: - type: Transform - pos: 2.5,0.5 - parent: 1 - - uid: 20 + pos: 0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 343 +- proto: BoxMRE + entities: + - uid: 320 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 21 + pos: 0.70504504,-7.29326 + parent: 325 +- proto: CableApcExtension + entities: + - uid: 120 components: - type: Transform - pos: 4.5,0.5 - parent: 1 - - uid: 22 + pos: 0.5,-6.5 + parent: 325 + - uid: 121 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 23 + pos: -0.5,-6.5 + parent: 325 + - uid: 122 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 24 + pos: -0.5,-7.5 + parent: 325 + - uid: 123 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 - - uid: 25 + pos: -0.5,-8.5 + parent: 325 + - uid: 124 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 26 + pos: -1.5,-8.5 + parent: 325 + - uid: 125 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 27 + pos: 0.5,-8.5 + parent: 325 + - uid: 126 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 28 + pos: 1.5,-8.5 + parent: 325 + - uid: 127 components: - type: Transform - pos: -0.5,-1.5 - parent: 1 - - uid: 29 + pos: -2.5,-8.5 + parent: 325 + - uid: 128 components: - type: Transform - pos: -1.5,-1.5 - parent: 1 - - uid: 30 + pos: -3.5,-8.5 + parent: 325 + - uid: 129 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 31 + pos: -3.5,-7.5 + parent: 325 + - uid: 130 components: - type: Transform - pos: 2.5,-1.5 - parent: 1 - - uid: 32 + pos: 2.5,-8.5 + parent: 325 + - uid: 131 components: - type: Transform - pos: 0.5,1.5 - parent: 1 -- proto: CableHV - entities: - - uid: 33 + pos: 2.5,-7.5 + parent: 325 + - uid: 132 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 34 + pos: -0.5,-5.5 + parent: 325 + - uid: 133 components: - type: Transform - pos: -1.5,-0.5 - parent: 1 - - uid: 35 + pos: -0.5,-4.5 + parent: 325 + - uid: 134 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 - - uid: 36 + pos: -0.5,-3.5 + parent: 325 + - uid: 135 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 37 + pos: -0.5,-2.5 + parent: 325 + - uid: 136 components: - type: Transform - pos: 1.5,-0.5 - parent: 1 - - uid: 38 + pos: -0.5,-1.5 + parent: 325 + - uid: 137 components: - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 39 + pos: -0.5,-0.5 + parent: 325 + - uid: 138 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 40 + pos: -0.5,0.5 + parent: 325 + - uid: 139 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 41 + pos: -0.5,1.5 + parent: 325 + - uid: 140 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 42 + pos: -0.5,2.5 + parent: 325 + - uid: 141 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: CableMV - entities: - - uid: 43 + pos: -1.5,1.5 + parent: 325 + - uid: 143 components: - type: Transform - pos: 3.5,1.5 - parent: 1 - - uid: 44 + pos: 0.5,1.5 + parent: 325 + - uid: 145 components: - type: Transform - pos: 2.5,1.5 - parent: 1 - - uid: 45 + pos: -1.5,-1.5 + parent: 325 + - uid: 146 components: - type: Transform - pos: 1.5,1.5 - parent: 1 - - uid: 46 + pos: -2.5,-1.5 + parent: 325 + - uid: 147 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 47 + pos: -3.5,-1.5 + parent: 325 + - uid: 148 components: - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 48 - components: + pos: -4.5,-1.5 + parent: 325 + - uid: 149 + components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 49 + pos: 0.5,-1.5 + parent: 325 + - uid: 150 components: - type: Transform - pos: -2.5,1.5 - parent: 1 -- proto: ChairPilotSeat - entities: - - uid: 50 + pos: 1.5,-1.5 + parent: 325 + - uid: 151 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,1.5 - parent: 1 - - uid: 51 + pos: 2.5,-1.5 + parent: 325 + - uid: 152 components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 52 + pos: 3.5,-1.5 + parent: 325 + - uid: 153 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: ClosetWallEmergencyFilledRandom - entities: - - uid: 53 + pos: 0.5,-4.5 + parent: 325 + - uid: 154 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-0.5 - parent: 1 -- proto: ClosetWallFireFilledRandom - entities: - - uid: 54 + pos: 1.5,-4.5 + parent: 325 + - uid: 155 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-0.5 - parent: 1 -- proto: ClothingHeadPyjamaSyndicateRed - entities: - - uid: 98 + pos: 1.5,-5.5 + parent: 325 + - uid: 156 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingNeckScarfStripedSyndieRed - entities: - - uid: 101 + pos: -1.5,-4.5 + parent: 325 + - uid: 157 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 102 + pos: -2.5,-4.5 + parent: 325 + - uid: 158 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ComputerShuttleSyndie + pos: -2.5,-5.5 + parent: 325 +- proto: CableHV entities: - - uid: 55 + - uid: 111 components: - type: Transform - pos: 0.5,2.5 - parent: 1 -- proto: CrateSyndicate - entities: - - uid: 92 + pos: 1.5,-7.5 + parent: 325 + - uid: 112 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 + pos: 0.5,-7.5 + parent: 325 + - uid: 113 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 325 + - uid: 114 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - uid: 115 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - uid: 116 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 +- proto: CableHVStack1 entities: - - uid: 93 + - uid: 235 components: - type: Transform - parent: 92 + parent: 41 + - type: Stack + count: 10 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: FaxMachineSyndie - entities: - - uid: 162 + - uid: 239 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: GeneratorWallmountAPU + parent: 56 + - type: Stack + count: 10 + - type: Physics + canCollide: False +- proto: CableMV entities: - - uid: 56 + - uid: 117 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 -- proto: GeneratorWallmountBasic - entities: - - uid: 57 + pos: -1.5,-6.5 + parent: 325 + - uid: 118 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 -- proto: Grille - entities: - - uid: 58 + pos: -0.5,-6.5 + parent: 325 + - uid: 119 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 59 + pos: 0.5,-6.5 + parent: 325 +- proto: CapacitorStockPart + entities: + - uid: 233 components: - type: Transform - pos: 0.5,3.5 - parent: 1 - - uid: 60 + parent: 41 + - type: Physics + canCollide: False + - uid: 234 components: - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 61 + parent: 41 + - type: Physics + canCollide: False + - uid: 237 components: - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 62 + parent: 56 + - type: Physics + canCollide: False + - uid: 238 components: - type: Transform - pos: 1.5,3.5 - parent: 1 -- proto: GrilleDiagonal - entities: - - uid: 63 + parent: 56 + - type: Physics + canCollide: False + - uid: 241 components: - type: Transform - pos: -2.5,2.5 - parent: 1 - - uid: 64 + parent: 58 + - type: Physics + canCollide: False + - uid: 242 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 65 + parent: 58 + - type: Physics + canCollide: False + - uid: 243 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 66 + parent: 58 + - type: Physics + canCollide: False + - uid: 254 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 67 + parent: 95 + - type: Physics + canCollide: False + - uid: 261 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 68 + parent: 96 + - type: Physics + canCollide: False + - uid: 268 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 -- proto: Gyroscope - entities: - - uid: 69 + parent: 97 + - type: Physics + canCollide: False + - uid: 275 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 -- proto: Paper - entities: - - uid: 95 + parent: 98 + - type: Physics + canCollide: False + - uid: 282 components: - type: Transform - parent: 92 + parent: 99 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 97 + - uid: 289 components: - type: Transform - parent: 92 + parent: 100 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 99 + - uid: 296 components: - type: Transform - parent: 92 + parent: 101 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 100 + - uid: 303 components: - type: Transform - parent: 92 + parent: 102 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: PlasmaWindowDiagonal +- proto: Carpet entities: - - uid: 70 + - uid: 74 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 71 + pos: -0.5,-4.5 + parent: 325 + - uid: 89 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 72 + pos: -0.5,-5.5 + parent: 325 +- proto: Catwalk + entities: + - uid: 159 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 - - uid: 73 + pos: -1.5,-7.5 + parent: 325 + - uid: 160 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 74 + pos: -0.5,-7.5 + parent: 325 + - uid: 161 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 75 + pos: 0.5,-7.5 + parent: 325 +- proto: ChairOfficeDark + entities: + - uid: 93 components: - type: Transform - pos: -2.5,2.5 - parent: 1 -- proto: Poweredlight + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 325 +- proto: ChairPilotSeat entities: - - uid: 76 + - uid: 78 components: - type: Transform rot: 3.141592653589793 rad - pos: 0.5,-1.5 - parent: 1 -- proto: PoweredSmallLight + pos: -0.5,0.5 + parent: 325 +- proto: ComputerIFFSyndicate + entities: + - uid: 40 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 +- proto: ComputerShuttleSyndie + entities: + - uid: 64 + components: + - type: Transform + pos: -0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CyberPen entities: - uid: 77 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 78 + pos: -1.1813428,-5.15565 + parent: 325 +- proto: DoorElectronics + entities: + - uid: 331 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 79 + parent: 190 + - type: Physics + canCollide: False + - uid: 332 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,1.5 - parent: 1 - - uid: 80 + parent: 191 + - type: Physics + canCollide: False + - uid: 333 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,1.5 - parent: 1 -- proto: RandomPosterContraband - entities: - - uid: 81 + parent: 192 + - type: Physics + canCollide: False + - uid: 334 components: - type: Transform - pos: -3.5,1.5 - parent: 1 - - uid: 82 + parent: 193 + - type: Physics + canCollide: False + - uid: 337 components: - type: Transform - pos: 4.5,1.5 - parent: 1 -- proto: ReinforcedPlasmaWindow - entities: - - uid: 83 + parent: 196 + - type: Physics + canCollide: False + - uid: 339 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,3.5 - parent: 1 - - uid: 84 + parent: 198 + - type: Physics + canCollide: False + - uid: 340 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,3.5 - parent: 1 - - uid: 85 + parent: 199 + - type: Physics + canCollide: False + - uid: 341 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 86 + parent: 200 + - type: Physics + canCollide: False + - uid: 342 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 1 - - uid: 87 + parent: 201 + - type: Physics + canCollide: False + - uid: 343 components: - type: Transform - pos: -1.5,2.5 - parent: 1 -- proto: RubberStampSyndicate - entities: - - uid: 94 + parent: 202 + - type: Physics + canCollide: False + - uid: 346 components: - type: Transform - parent: 92 + parent: 206 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: SubstationWallBasic +- proto: DresserFilled entities: - - uid: 88 + - uid: 85 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 325 +- proto: DrinkNukieCan + entities: + - uid: 144 + components: + - type: Transform + pos: -2.6964839,-2.109029 + parent: 325 +- proto: FaxMachineSyndie + entities: + - uid: 46 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 + - type: FaxMachine + name: Striker +- proto: filingCabinetRandom + entities: + - uid: 75 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 325 +- proto: Firelock + entities: + - uid: 224 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 350 + - type: DeviceNetwork + address: 44a24659 + receiveFrequency: 1621 + - uid: 225 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 351 + - type: DeviceNetwork + address: 6fdb75cf + receiveFrequency: 1621 +- proto: FirelockElectronics + entities: + - uid: 350 + components: + - type: Transform + parent: 224 + - type: Physics + canCollide: False + - uid: 351 + components: + - type: Transform + parent: 225 + - type: Physics + canCollide: False +- proto: FoodBoxDonut + entities: + - uid: 87 + components: + - type: Transform + pos: -2.470145,-2.3953476 + parent: 325 +- proto: GasPipeFourway + entities: + - uid: 216 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 325 +- proto: GasPipeStraight + entities: + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-6.5 + parent: 325 + - uid: 213 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 + - uid: 214 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - uid: 215 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 325 + - uid: 217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 325 +- proto: GasPipeTJunction + entities: + - uid: 210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 325 + - uid: 212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 325 +- proto: GasPort + entities: + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 325 +- proto: GasVentPump + entities: + - uid: 218 + components: + - type: Transform + pos: -0.5,0.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-5f41a0ae + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-129c27d2 + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-11c4609d + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-6859729f + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-19d24c7f + transmitFrequency: 1621 + receiveFrequency: 1621 +- proto: GeneratorBasic15kW + entities: + - uid: 41 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 232 + machine_parts: !type:Container + ents: + - 233 + - 234 + - 235 + - uid: 56 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 236 + machine_parts: !type:Container + ents: + - 237 + - 238 + - 239 +- proto: GravityGeneratorMini + entities: + - uid: 57 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 325 +- proto: Grille + entities: + - uid: 1 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 2 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 3 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 4 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 5 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 21 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 50 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 325 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 325 + - uid: 52 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 325 + - uid: 53 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 325 +- proto: Gyroscope + entities: + - uid: 58 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-8.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 240 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 241 + - 242 + - 243 + - 244 +- proto: GyroscopeMachineCircuitboard + entities: + - uid: 240 + components: + - type: Transform + parent: 58 + - type: Physics + canCollide: False +- proto: MedkitCombatFilled + entities: + - uid: 19 + components: + - type: Transform + pos: 1.48298,-0.3211529 + parent: 325 +- proto: MicroManipulatorStockPart + entities: + - uid: 250 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 251 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 252 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 253 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 257 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 258 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 259 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 260 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 264 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 265 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 266 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 267 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 271 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 272 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 273 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 274 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 278 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 279 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 280 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 281 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 285 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 286 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 287 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 288 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 292 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 293 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 294 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 295 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 299 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 300 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 301 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 302 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False +- proto: Mirror + entities: + - uid: 321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 325 +- proto: NitrogenTankFilled + entities: + - uid: 105 + components: + - type: Transform + pos: 1.373605,-0.2749618 + parent: 325 +- proto: NukeCodePaper + entities: + - uid: 323 + components: + - type: Transform + pos: 1.561105,-2.5567772 + parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 +- proto: PinpointerNuclear + entities: + - uid: 162 + components: + - type: Transform + pos: 1.3790641,-2.3161128 + parent: 325 + - type: Physics + canCollide: False +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 325 + - uid: 109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 325 +- proto: PlushieNuke + entities: + - uid: 47 + components: + - type: Transform + pos: 0.5061571,-5.233775 + parent: 325 +- proto: PortableGeneratorSuperPacmanMachineCircuitboard + entities: + - uid: 232 + components: + - type: Transform + parent: 41 + - type: Physics + canCollide: False + - uid: 236 + components: + - type: Transform + parent: 56 + - type: Physics + canCollide: False +- proto: PosterContrabandC20r + entities: + - uid: 24 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 325 +- proto: PosterContrabandEnergySwords + entities: + - uid: 227 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 325 +- proto: PosterContrabandNuclearDeviceInformational + entities: + - uid: 228 + components: + - type: Transform + pos: -2.5,0.5 + parent: 325 +- proto: PosterContrabandSyndicateRecruitment + entities: + - uid: 229 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 325 +- proto: Poweredlight + entities: + - uid: 94 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 325 +- proto: PoweredlightLED + entities: + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 184 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 83 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 325 + - uid: 84 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 325 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 14 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 15 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 16 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 17 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 18 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 26 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 42 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 325 + - uid: 70 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 325 + - uid: 71 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 325 + - uid: 72 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 325 +- proto: RemoteSignaller + entities: + - uid: 176 + components: + - type: Transform + pos: 1.3427892,-2.379079 + parent: 325 + - type: Physics + canCollide: False +- proto: SheetGlass1 + entities: + - uid: 244 + components: + - type: Transform + parent: 58 + - type: Stack + count: 2 + - type: Physics + canCollide: False +- proto: SheetSteel1 + entities: + - uid: 255 + components: + - type: Transform + parent: 95 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 262 + components: + - type: Transform + parent: 96 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 269 + components: + - type: Transform + parent: 97 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 276 + components: + - type: Transform + parent: 98 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 283 + components: + - type: Transform + parent: 99 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 290 + components: + - type: Transform + parent: 100 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 297 + components: + - type: Transform + parent: 101 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 304 + components: + - type: Transform + parent: 102 + - type: Stack + count: 5 + - type: Physics + canCollide: False +- proto: SignalButton + entities: + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - type: DeviceLinkSource + linkedPorts: + 193: + - Pressed: Toggle + 192: + - Pressed: Toggle + 190: + - Pressed: Toggle + 191: + - Pressed: Toggle + 196: + - Pressed: Toggle + 202: + - Pressed: Toggle + 201: + - Pressed: Toggle + 200: + - Pressed: Toggle + 199: + - Pressed: Toggle + 198: + - Pressed: Toggle +- proto: SignSpace + entities: + - uid: 230 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 325 +- proto: SoapSyndie + entities: + - uid: 90 + components: + - type: Transform + pos: 0.5436061,-7.5129323 + parent: 325 +- proto: SpawnPointNukies + entities: + - uid: 322 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 +- proto: StealthBox + entities: + - uid: 106 + components: + - type: Transform + pos: 0.49860507,-2.4513345 + parent: 325 + - type: Stealth + enabled: False + - type: EntityStorage + open: True +- proto: SubstationWallBasic + entities: + - uid: 103 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15106.935 + currentReceiving: 15105.06 + currentSupply: 15106.935 + supplyRampPosition: 1.875 +- proto: SuitStorageSyndie + entities: + - uid: 67 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 325 +- proto: SyndicateCommsComputerCircuitboard + entities: + - uid: 246 + components: + - type: Transform + parent: 65 + - type: Physics + canCollide: False +- proto: SyndicateComputerComms + entities: + - uid: 65 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 246 +- proto: SyndicateIDCard + entities: + - uid: 324 + components: + - type: Transform + pos: 1.57673,-2.3849022 + parent: 325 +- proto: SyndicateShuttleConsoleCircuitboard + entities: + - uid: 245 + components: + - type: Transform + parent: 64 + - type: Physics + canCollide: False +- proto: Table + entities: + - uid: 165 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 325 +- proto: TableWood + entities: + - uid: 45 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 +- proto: Thruster + entities: + - uid: 95 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 249 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 250 + - 251 + - 252 + - 253 + - 254 + - 255 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 256 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 257 + - 258 + - 259 + - 260 + - 261 + - 262 + - uid: 97 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 263 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 264 + - 265 + - 266 + - 267 + - 268 + - 269 + - uid: 98 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 270 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 271 + - 272 + - 273 + - 274 + - 275 + - 276 + - uid: 99 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 277 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 278 + - 279 + - 280 + - 281 + - 282 + - 283 + - uid: 100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 284 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 285 + - 286 + - 287 + - 288 + - 289 + - 290 + - uid: 101 + components: + - type: Transform + pos: -3.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 291 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 292 + - 293 + - 294 + - 295 + - 296 + - 297 + - uid: 102 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: SyndieDisasterVictimSpawner + pos: 2.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 298 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 299 + - 300 + - 301 + - 302 + - 303 + - 304 +- proto: ThrusterMachineCircuitboard entities: - - uid: 89 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 90 + - uid: 249 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 91 + parent: 95 + - type: Physics + canCollide: False + - uid: 256 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: TableGlass - entities: - - uid: 163 + parent: 96 + - type: Physics + canCollide: False + - uid: 263 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: Thruster - entities: - - uid: 103 + parent: 97 + - type: Physics + canCollide: False + - uid: 270 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-3.5 - parent: 1 - - uid: 104 + parent: 98 + - type: Physics + canCollide: False + - uid: 277 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-3.5 - parent: 1 - - uid: 105 + parent: 99 + - type: Physics + canCollide: False + - uid: 284 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-3.5 - parent: 1 - - uid: 106 + parent: 100 + - type: Physics + canCollide: False + - uid: 291 components: - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,-1.5 - parent: 1 - - uid: 107 + parent: 101 + - type: Physics + canCollide: False + - uid: 298 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-1.5 - parent: 1 + parent: 102 + - type: Physics + canCollide: False - proto: ToolboxSyndicateFilled entities: - - uid: 96 + - uid: 177 components: - type: Transform - parent: 92 + pos: 1.5699697,-0.44908836 + parent: 325 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: VendingMachineTankDispenserEVA +- proto: ToyFigurineNukie entities: - - uid: 108 + - uid: 10 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 + pos: -2.3371089,-2.140279 + parent: 325 +- proto: VendingMachineSyndieDrobe + entities: + - uid: 163 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 325 - proto: WallPlastitanium entities: - - uid: 109 + - uid: 7 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 - parent: 1 - - uid: 110 + pos: -2.5,0.5 + parent: 325 + - uid: 8 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,1.5 - parent: 1 - - uid: 111 + pos: -3.5,0.5 + parent: 325 + - uid: 9 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,5.5 - parent: 1 - - uid: 112 + pos: -3.5,-0.5 + parent: 325 + - uid: 11 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,6.5 - parent: 1 - - uid: 113 + pos: 1.5,0.5 + parent: 325 + - uid: 12 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,3.5 - parent: 1 - - uid: 114 + pos: 2.5,0.5 + parent: 325 + - uid: 13 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 1 - - uid: 115 + pos: -4.5,-0.5 + parent: 325 + - uid: 22 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,2.5 - parent: 1 - - uid: 116 + pos: 3.5,-0.5 + parent: 325 + - uid: 25 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,2.5 - parent: 1 - - uid: 117 + pos: 3.5,-2.5 + parent: 325 + - uid: 27 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,1.5 - parent: 1 - - uid: 118 + pos: -3.5,-2.5 + parent: 325 + - uid: 28 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-0.5 - parent: 1 - - uid: 119 + pos: -3.5,-6.5 + parent: 325 + - uid: 29 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,3.5 - parent: 1 - - uid: 120 + pos: 2.5,-6.5 + parent: 325 + - uid: 30 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,-0.5 - parent: 1 - - uid: 121 + pos: -2.5,-6.5 + parent: 325 + - uid: 31 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,3.5 - parent: 1 - - uid: 122 + pos: -3.5,-8.5 + parent: 325 + - uid: 32 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,1.5 - parent: 1 - - uid: 123 + pos: -2.5,-8.5 + parent: 325 + - uid: 33 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,4.5 - parent: 1 - - uid: 124 + pos: 1.5,-6.5 + parent: 325 + - uid: 34 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,1.5 - parent: 1 - - uid: 125 + pos: 1.5,-3.5 + parent: 325 + - uid: 35 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,-1.5 - parent: 1 - - uid: 126 + pos: -2.5,-9.5 + parent: 325 + - uid: 36 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 - - uid: 127 + pos: 1.5,-8.5 + parent: 325 + - uid: 37 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 1 - - uid: 128 + pos: 1.5,-9.5 + parent: 325 + - uid: 38 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,2.5 - parent: 1 - - uid: 129 + pos: -4.5,-2.5 + parent: 325 + - uid: 39 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-1.5 - parent: 1 - - uid: 130 + pos: 2.5,-3.5 + parent: 325 + - uid: 44 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,3.5 - parent: 1 - - uid: 131 + pos: 2.5,-8.5 + parent: 325 + - uid: 48 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,4.5 - parent: 1 - - uid: 132 + pos: 2.5,-7.5 + parent: 325 + - uid: 49 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,6.5 - parent: 1 - - uid: 133 + pos: -3.5,-7.5 + parent: 325 + - uid: 54 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,2.5 - parent: 1 - - uid: 134 + pos: -2.5,-3.5 + parent: 325 + - uid: 55 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,1.5 - parent: 1 - - uid: 135 + pos: -3.5,-3.5 + parent: 325 + - uid: 60 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-1.5 - parent: 1 - - uid: 136 + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 325 + - uid: 61 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 137 + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 325 + - uid: 62 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 138 + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - uid: 63 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 139 + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 325 + - uid: 66 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-1.5 - parent: 1 - - uid: 140 + pos: 0.5,-9.5 + parent: 325 + - uid: 69 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 141 + pos: -2.5,1.5 + parent: 325 + - uid: 73 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 142 + pos: 1.5,1.5 + parent: 325 + - uid: 80 components: - type: Transform - pos: -3.5,-2.5 - parent: 1 - - uid: 143 + pos: 2.5,-2.5 + parent: 325 + - uid: 81 components: - type: Transform - pos: 4.5,-2.5 - parent: 1 -- proto: WallPlastitaniumDiagonal - entities: - - uid: 144 + pos: 2.5,-0.5 + parent: 325 + - uid: 92 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,1.5 - parent: 1 - - uid: 145 + pos: -1.5,-9.5 + parent: 325 + - uid: 108 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-0.5 - parent: 1 - - uid: 146 + pos: -0.5,-9.5 + parent: 325 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 23 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-1.5 - parent: 1 - - uid: 147 + pos: -4.5,0.5 + parent: 325 + - uid: 43 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 + pos: 3.5,0.5 + parent: 325 + - uid: 68 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 + pos: 1.5,2.5 + parent: 325 + - uid: 79 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 + pos: -4.5,-3.5 + parent: 325 + - uid: 82 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-1.5 - parent: 1 - - uid: 159 + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 325 + - uid: 86 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 160 + pos: -2.5,2.5 + parent: 325 +- proto: WindoorSecure + entities: + - uid: 166 components: - type: Transform rot: 1.5707963267948966 rad - pos: -3.5,-3.5 - parent: 1 - - uid: 161 + pos: -3.5,-1.5 + parent: 325 + - uid: 206 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,-3.5 - parent: 1 + pos: -0.5,-0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 346 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml index 7b6812c493..eab4520910 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml @@ -169,16 +169,18 @@ entities: - type: Transform pos: 2.5,-1.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 5 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 1 - uid: 6 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-0.5 parent: 1 - proto: BarSignMaidCafe @@ -196,9 +198,6 @@ entities: - type: Transform pos: -0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 161 - proto: Bucket entities: - uid: 9 @@ -1017,7 +1016,7 @@ entities: - uid: 115 components: - type: Transform - pos: -2.4682944,-0.4437158 + pos: -2.4622643,-0.46992433 parent: 1 - proto: GeneratorWallmountAPU entities: @@ -1349,33 +1348,21 @@ entities: - 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 @@ -1459,7 +1446,7 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-6.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 164 components: diff --git a/Resources/Maps/Shuttles/arrivals.yml b/Resources/Maps/Shuttles/arrivals.yml index 2fe16cd303..b4609e1b0a 100644 --- a/Resources/Maps/Shuttles/arrivals.yml +++ b/Resources/Maps/Shuttles/arrivals.yml @@ -199,8 +199,6 @@ entities: - type: Transform pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: AirlockCommandGlassLocked entities: - uid: 278 @@ -218,24 +216,48 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -336.60016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 178 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -338.3335 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 179 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -332.80017 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 180 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -334.70016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - proto: APCBasic entities: - uid: 116 @@ -256,26 +278,30 @@ entities: - type: Transform pos: 3.5,3.5 parent: 292 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 164 components: - type: Transform - pos: 3.5,-2.5 + rot: -1.5707963267948966 rad + pos: -4.5,4.5 parent: 292 - uid: 165 components: - type: Transform + rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 - uid: 166 components: - type: Transform - pos: -4.5,4.5 + rot: 1.5707963267948966 rad + pos: 3.5,-2.5 parent: 292 - uid: 167 components: - type: Transform + rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 - proto: BlockGameArcade @@ -997,6 +1023,22 @@ entities: - type: Transform pos: 2.5,5.5 parent: 292 + - type: GroupExamine + group: + - hoverMessage: "" + contextText: verb-examine-group-other + icon: /Textures/Interface/examine-star.png + components: + - Armor + - ClothingSpeedModifier + entries: + - message: >- + It provides the following protection: + + - [color=orange]Explosion[/color] damage [color=white]to contents[/color] reduced by [color=lightblue]10%[/color]. + priority: 0 + component: Armor + title: null - proto: ClothingMaskBreath entities: - uid: 272 @@ -1049,8 +1091,6 @@ entities: - type: Transform pos: -0.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasPipeBend entities: - uid: 182 @@ -1221,8 +1261,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasVentPump entities: - uid: 212 @@ -1230,16 +1268,12 @@ entities: - type: Transform pos: -0.5,-2.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - uid: 213 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,4.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GeneratorBasic15kW entities: - uid: 114 diff --git a/Resources/Maps/Shuttles/briggle.yml b/Resources/Maps/Shuttles/briggle.yml index 4778896e02..0a7646393a 100644 --- a/Resources/Maps/Shuttles/briggle.yml +++ b/Resources/Maps/Shuttles/briggle.yml @@ -143,12 +143,12 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 1 - - type: Door - secondsUntilStateChange: -81.781815 - state: Opening - type: DeviceLinkSource lastSignals: DoorStatus: True + - type: Door + secondsUntilStateChange: -347.64847 + state: Opening - proto: AirlockSecurityGlassLocked entities: - uid: 73 @@ -170,9 +170,9 @@ entities: - type: Transform pos: -0.5,-7.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 83 + - uid: 57 components: - type: Transform pos: 0.5,-10.5 @@ -829,6 +829,14 @@ entities: Glip Glorp, NanoTrasen Motorpool Division +- proto: PlushieRouny + entities: + - uid: 83 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.53599805,-6.526394 + parent: 1 - proto: PortableGeneratorPacman entities: - uid: 41 diff --git a/Resources/Maps/Shuttles/cargo.yml b/Resources/Maps/Shuttles/cargo.yml index d8f3976e81..dab78a0102 100644 --- a/Resources/Maps/Shuttles/cargo.yml +++ b/Resources/Maps/Shuttles/cargo.yml @@ -166,8 +166,6 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: AirlockGlassShuttle entities: - uid: 45 @@ -201,27 +199,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 173 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 168 components: - type: Transform - pos: -5.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 173 - uid: 169 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 173 - uid: 170 components: - type: Transform - pos: 0.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 173 - uid: 171 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 173 - proto: BlastDoor entities: @@ -230,33 +232,21 @@ entities: - type: Transform pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 57 - uid: 3 components: - type: Transform pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 55 - uid: 54 components: - type: Transform pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 58 - uid: 56 components: - type: Transform pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 2 - proto: CableApcExtension entities: - uid: 100 @@ -606,108 +596,72 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 39 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 40 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 41 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 42 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 43 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 46 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 47 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 48 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 49 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 51 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 167 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - proto: GasPipeBend entities: - uid: 134 @@ -744,8 +698,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GasVentPump entities: - uid: 138 @@ -753,8 +705,6 @@ entities: - type: Transform pos: -2.5,2.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GeneratorBasic15kW entities: - uid: 83 diff --git a/Resources/Maps/Shuttles/cargo_core.yml b/Resources/Maps/Shuttles/cargo_core.yml index 0c495835b9..dcbd4a972c 100644 --- a/Resources/Maps/Shuttles/cargo_core.yml +++ b/Resources/Maps/Shuttles/cargo_core.yml @@ -169,8 +169,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 147 @@ -181,8 +179,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockGlassShuttle entities: - uid: 131 @@ -205,22 +201,26 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-7.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 139 + - uid: 29 components: - type: Transform - pos: -0.5,-2.5 + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 parent: 2 - - uid: 140 + - uid: 141 components: - type: Transform - pos: -0.5,-1.5 + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 parent: 2 - - uid: 141 +- proto: AtmosDeviceFanTiny + entities: + - uid: 140 components: - type: Transform - pos: -0.5,-4.5 + pos: -0.5,-1.5 parent: 2 - uid: 142 components: @@ -234,17 +234,11 @@ entities: - type: Transform pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 137 - uid: 136 components: - type: Transform pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 138 - proto: CableApcExtension entities: - uid: 104 @@ -588,36 +582,24 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 75 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 76 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - uid: 77 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - proto: GasPassiveVent entities: - uid: 143 @@ -625,8 +607,6 @@ entities: - type: Transform pos: -0.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 148 @@ -651,8 +631,6 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPressurePump entities: - uid: 150 @@ -661,8 +639,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 95 @@ -671,8 +647,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 144 @@ -681,8 +655,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 96 @@ -838,12 +810,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-3.5 parent: 2 - - uid: 29 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-4.5 - parent: 2 - uid: 30 components: - type: Transform @@ -856,6 +822,12 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 2 + - uid: 139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-4.5 + parent: 2 - proto: SignalButton entities: - uid: 137 diff --git a/Resources/Maps/Shuttles/cargo_fland.yml b/Resources/Maps/Shuttles/cargo_fland.yml index e91e228e5c..7a48231abb 100644 --- a/Resources/Maps/Shuttles/cargo_fland.yml +++ b/Resources/Maps/Shuttles/cargo_fland.yml @@ -183,8 +183,6 @@ entities: - type: Transform pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: Lock locked: True - proto: AirlockGlassShuttle @@ -196,7 +194,7 @@ entities: pos: 0.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4823.494 + secondsUntilStateChange: -4923.5425 state: Opening - uid: 51 components: @@ -205,7 +203,7 @@ entities: pos: 0.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4822.5273 + secondsUntilStateChange: -4922.5757 state: Opening - uid: 52 components: @@ -214,7 +212,7 @@ entities: pos: 6.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4821.5938 + secondsUntilStateChange: -4921.642 state: Opening - uid: 53 components: @@ -223,7 +221,7 @@ entities: pos: 6.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4836.5938 + secondsUntilStateChange: -4936.642 state: Opening - proto: APCBasic entities: @@ -233,27 +231,31 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 158 components: - type: Transform - pos: 0.5,0.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 1 - uid: 159 components: - type: Transform - pos: 0.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,0.5 parent: 1 - uid: 160 components: - type: Transform - pos: 6.5,2.5 + rot: -1.5707963267948966 rad + pos: 0.5,0.5 parent: 1 - uid: 161 components: - type: Transform - pos: 6.5,0.5 + rot: -1.5707963267948966 rad + pos: 0.5,2.5 parent: 1 - proto: BlastDoor entities: @@ -262,33 +264,21 @@ entities: - type: Transform pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 90 components: - type: Transform pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 99 components: - type: Transform pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - uid: 100 components: - type: Transform pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - proto: CableApcExtension entities: - uid: 124 @@ -610,72 +600,48 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 92 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 93 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 94 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 95 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 96 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 97 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 98 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - proto: DisposalPipe entities: - uid: 83 @@ -777,8 +743,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 115 @@ -787,16 +751,12 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 168 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 106 diff --git a/Resources/Maps/Shuttles/dart.yml b/Resources/Maps/Shuttles/dart.yml index c44dfe890d..a3c552b84a 100644 --- a/Resources/Maps/Shuttles/dart.yml +++ b/Resources/Maps/Shuttles/dart.yml @@ -838,22 +838,16 @@ entities: - type: Transform pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 127 components: - type: Transform pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 128 components: - type: Transform pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: AirlockAtmosphericsLocked entities: - uid: 419 @@ -933,12 +927,6 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 414 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-0.5 - parent: 1 - uid: 415 components: - type: Transform @@ -957,6 +945,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-2.5 parent: 1 + - uid: 813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 + parent: 1 - proto: AirlockGlass entities: - uid: 73 @@ -1008,37 +1002,43 @@ entities: rot: 3.141592653589793 rad pos: -1.5,4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 808 + - uid: 414 components: - type: Transform - pos: -9.5,-0.5 + rot: -1.5707963267948966 rad + pos: -9.5,-2.5 parent: 1 - - uid: 809 + - uid: 808 components: - type: Transform + rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 810 + - uid: 809 components: - type: Transform - pos: -9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 parent: 1 - - uid: 811 + - uid: 810 components: - type: Transform - pos: 8.5,-0.5 + rot: 1.5707963267948966 rad + pos: 8.5,-2.5 parent: 1 - - uid: 812 + - uid: 811 components: - type: Transform + rot: 1.5707963267948966 rad pos: 8.5,-1.5 parent: 1 - - uid: 813 + - uid: 812 components: - type: Transform - pos: 8.5,-2.5 + rot: 1.5707963267948966 rad + pos: 8.5,-0.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1099,89 +1099,56 @@ entities: - type: Transform pos: -5.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 807 components: - type: Transform pos: -5.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 816 components: - type: Transform pos: -5.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 817 components: - type: Transform pos: -0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 818 components: - type: Transform pos: 0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 819 components: - type: Transform pos: 4.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 820 components: - type: Transform pos: 4.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 821 components: - type: Transform pos: -1.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 824 components: - type: Transform pos: 4.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 825 components: - type: Transform pos: 4.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 826 components: - type: Transform pos: -5.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - proto: BoozeDispenser entities: - uid: 444 @@ -2700,13 +2667,6 @@ entities: - type: Transform pos: -3.882896,-2.509187 parent: 1 -- proto: chem_master - entities: - - uid: 891 - components: - - type: Transform - pos: -3.5,-4.5 - parent: 1 - proto: ChemDispenser entities: - uid: 783 @@ -2721,6 +2681,13 @@ entities: - type: Transform pos: -4.5,-5.5 parent: 1 +- proto: ChemMaster + entities: + - uid: 891 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 - proto: CloningPod entities: - uid: 926 @@ -2728,9 +2695,6 @@ entities: - type: Transform pos: -4.5,2.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: ClosetFireFilled entities: - uid: 194 @@ -3208,8 +3172,6 @@ entities: - type: Transform pos: -8.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 734 @@ -3217,8 +3179,6 @@ entities: - type: Transform pos: -8.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixerFlipped entities: - uid: 264 @@ -3229,8 +3189,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -3241,24 +3199,18 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 259 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 407 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPipeBend @@ -3904,11 +3856,15 @@ entities: - uid: 289 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,-5.5 parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 291 components: - type: Transform @@ -3989,8 +3945,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 146 @@ -3999,8 +3953,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 151 @@ -4009,8 +3961,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 360 @@ -4019,8 +3969,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 367 @@ -4029,8 +3977,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 368 @@ -4039,8 +3985,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPressurePump @@ -4053,8 +3997,6 @@ entities: parent: 1 - type: GasPressurePump targetPressure: 4500 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 326 @@ -4062,8 +4004,6 @@ entities: - type: Transform pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasVentPump @@ -4074,8 +4014,6 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 282 @@ -4084,8 +4022,6 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 283 @@ -4094,8 +4030,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 311 @@ -4104,8 +4038,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 312 @@ -4114,8 +4046,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 313 @@ -4124,8 +4054,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 314 @@ -4134,8 +4062,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 315 @@ -4144,8 +4070,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 316 @@ -4154,8 +4078,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 317 @@ -4164,8 +4086,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 318 @@ -4174,8 +4094,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 319 @@ -4184,8 +4102,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasVentScrubber @@ -4196,8 +4112,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 387 @@ -4205,8 +4119,6 @@ entities: - type: Transform pos: 3.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 405 @@ -4215,8 +4127,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 406 @@ -4225,8 +4135,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 411 @@ -4234,8 +4142,6 @@ entities: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GeneratorBasic15kW @@ -4583,9 +4489,6 @@ entities: - type: Transform pos: -4.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: MegaSprayBottle entities: - uid: 903 @@ -5303,7 +5206,7 @@ entities: - type: Transform pos: -1.5,-7.5 parent: 1 -- proto: SignChemistry1 +- proto: SignChem entities: - uid: 893 components: @@ -5377,7 +5280,7 @@ entities: - type: Transform pos: 2.4920845,-8.564493 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 785 components: @@ -5391,13 +5294,6 @@ entities: - type: Transform pos: 3.5,-9.5 parent: 1 -- proto: SpawnMobDrone - entities: - - uid: 987 - components: - - type: Transform - pos: 2.5,-18.5 - parent: 1 - proto: SpawnMobMedibot entities: - uid: 986 diff --git a/Resources/Maps/Shuttles/emergency.yml b/Resources/Maps/Shuttles/emergency.yml index d2b09201b2..e285d4a5ae 100644 --- a/Resources/Maps/Shuttles/emergency.yml +++ b/Resources/Maps/Shuttles/emergency.yml @@ -202,8 +202,6 @@ entities: - type: Transform pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: AirlockCommandGlassLocked entities: - uid: 353 @@ -292,47 +290,55 @@ entities: - type: Transform pos: -3.5,0.5 parent: 410 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 395 components: - type: Transform - pos: -7.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 410 - uid: 396 components: - type: Transform - pos: -7.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 410 - uid: 397 components: - type: Transform - pos: 2.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 410 - uid: 398 components: - type: Transform - pos: 2.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 410 - uid: 399 components: - type: Transform - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 410 - uid: 400 components: - type: Transform - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 410 - uid: 401 components: - type: Transform - pos: -7.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 410 - uid: 402 components: - type: Transform - pos: -7.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 410 - proto: BedsheetMedical entities: @@ -1251,8 +1257,6 @@ entities: - type: Transform pos: -1.5,-2.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPassiveVent entities: - uid: 270 @@ -1261,8 +1265,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPipeBend entities: - uid: 291 @@ -1459,8 +1461,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasVentPump entities: - uid: 242 @@ -1469,45 +1469,33 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 243 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 244 components: - type: Transform pos: 0.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 245 components: - type: Transform pos: -5.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 246 components: - type: Transform pos: -2.5,12.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 247 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GeneratorBasic15kW entities: - uid: 239 diff --git a/Resources/Maps/Shuttles/emergency_box.yml b/Resources/Maps/Shuttles/emergency_box.yml index 3aa6a3f7ea..49d082c995 100644 --- a/Resources/Maps/Shuttles/emergency_box.yml +++ b/Resources/Maps/Shuttles/emergency_box.yml @@ -26,7 +26,7 @@ entities: name: NT Evac Box - type: Transform pos: 0.06253052,0.58707 - parent: 484 + parent: invalid - type: MapGrid chunks: 0,0: @@ -492,18 +492,6 @@ entities: - type: GasTileOverlay - type: RadiationGridResistance - type: NavMap - - uid: 484 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 526 @@ -612,26 +600,30 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 - uid: 580 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,9.5 parent: 1 - uid: 581 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,7.5 parent: 1 - uid: 582 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 583 - components: - - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - proto: BookHowToSurvive diff --git a/Resources/Maps/Shuttles/emergency_cluster.yml b/Resources/Maps/Shuttles/emergency_cluster.yml index 3cc14505fe..82f178aaca 100644 --- a/Resources/Maps/Shuttles/emergency_cluster.yml +++ b/Resources/Maps/Shuttles/emergency_cluster.yml @@ -553,38 +553,43 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-18.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 472 components: - type: Transform - pos: 2.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-7.5 parent: 2 - uid: 473 components: - type: Transform - pos: 2.5,-9.5 + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 parent: 2 - uid: 475 components: - type: Transform - pos: 16.5,-9.5 + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 parent: 2 - uid: 476 components: - type: Transform + rot: 1.5707963267948966 rad pos: 16.5,-15.5 parent: 2 - uid: 477 components: - type: Transform - pos: 16.5,-17.5 + rot: -1.5707963267948966 rad + pos: 2.5,-9.5 parent: 2 - - uid: 586 + - uid: 503 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-17.5 parent: 2 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_courser.yml b/Resources/Maps/Shuttles/emergency_courser.yml index f9ff40b8fa..426fe055b4 100644 --- a/Resources/Maps/Shuttles/emergency_courser.yml +++ b/Resources/Maps/Shuttles/emergency_courser.yml @@ -598,55 +598,55 @@ entities: - type: Transform pos: 0.5,10.5 parent: 656 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 621 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,4.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 656 - uid: 622 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,4.5 parent: 656 - uid: 623 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-5.5 + rot: 1.5707963267948966 rad + pos: 6.5,-3.5 parent: 656 - uid: 624 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-3.5 + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 parent: 656 - uid: 625 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-3.5 + pos: -6.5,-5.5 parent: 656 - uid: 626 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-5.5 + pos: -6.5,-3.5 parent: 656 - uid: 627 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,2.5 + pos: -6.5,2.5 parent: 656 - uid: 628 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,4.5 + pos: -6.5,4.5 parent: 656 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_delta.yml b/Resources/Maps/Shuttles/emergency_delta.yml index 20419b2872..0c092e2363 100644 --- a/Resources/Maps/Shuttles/emergency_delta.yml +++ b/Resources/Maps/Shuttles/emergency_delta.yml @@ -24,7 +24,7 @@ entities: name: NT Evac Delta - type: Transform pos: -0.5625,0.671875 - parent: 761 + parent: invalid - type: MapGrid chunks: 0,0: @@ -395,18 +395,6 @@ entities: chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance - - uid: 761 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 326 @@ -610,43 +598,45 @@ entities: - type: Transform pos: -4.5,-17.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 583 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-8.5 parent: 1 - - uid: 658 + - uid: 696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-19.5 + rot: 1.5707963267948966 rad + pos: 2.5,-10.5 parent: 1 - - uid: 659 + - uid: 761 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-20.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 1 - - uid: 696 + - uid: 763 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 1 - - uid: 763 +- proto: AtmosDeviceFanTiny + entities: + - uid: 658 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-8.5 + pos: -5.5,-19.5 parent: 1 - - uid: 764 + - uid: 659 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-10.5 + pos: -5.5,-20.5 parent: 1 - proto: BorgCharger entities: diff --git a/Resources/Maps/Shuttles/emergency_lox.yml b/Resources/Maps/Shuttles/emergency_lox.yml index 0856b97c38..64455757de 100644 --- a/Resources/Maps/Shuttles/emergency_lox.yml +++ b/Resources/Maps/Shuttles/emergency_lox.yml @@ -850,47 +850,55 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,9.5 parent: 670 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 640 + - uid: 231 components: - type: Transform - pos: -7.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 670 - - uid: 641 + - uid: 232 components: - type: Transform - pos: -7.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 670 - - uid: 642 + - uid: 234 components: - type: Transform - pos: 2.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 670 - - uid: 643 + - uid: 240 components: - type: Transform - pos: 2.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 670 - - uid: 644 + - uid: 241 components: - type: Transform - pos: 2.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 670 - - uid: 645 + - uid: 242 components: - type: Transform - pos: 2.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 670 - - uid: 646 + - uid: 264 components: - type: Transform - pos: -7.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 670 - - uid: 647 + - uid: 270 components: - type: Transform - pos: -7.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 670 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index 091fe6a1f8..ba75195df9 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -669,45 +669,46 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-3.5 parent: 1 - - type: Apc - lastExternalState: Low - lastChargeState: Full - type: PowerNetworkBattery loadingNetworkDemand: 18077 currentReceiving: 18076.947 currentSupply: 18077 supplyRampPosition: 0.052734375 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 928 + - uid: 4 components: - type: Transform - pos: 14.5,1.5 + pos: -2.5,-11.5 parent: 1 - - uid: 929 + - uid: 33 components: - type: Transform - pos: 12.5,1.5 + rot: 3.141592653589793 rad + pos: 4.5,1.5 parent: 1 - - uid: 930 + - uid: 42 components: - type: Transform + rot: 3.141592653589793 rad pos: 6.5,1.5 parent: 1 - - uid: 931 + - uid: 43 components: - type: Transform - pos: 4.5,1.5 + pos: -1.5,-11.5 parent: 1 - - uid: 932 + - uid: 51 components: - type: Transform - pos: -1.5,-11.5 + rot: 3.141592653589793 rad + pos: 12.5,1.5 parent: 1 - - uid: 933 + - uid: 54 components: - type: Transform - pos: -2.5,-11.5 + rot: 3.141592653589793 rad + pos: 14.5,1.5 parent: 1 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_omega.yml b/Resources/Maps/Shuttles/emergency_omega.yml index e848b90e57..05ef0a6719 100644 --- a/Resources/Maps/Shuttles/emergency_omega.yml +++ b/Resources/Maps/Shuttles/emergency_omega.yml @@ -808,47 +808,55 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,8.5 parent: 603 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 73 components: - type: Transform - pos: 5.5,3.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 603 - uid: 77 components: - type: Transform - pos: -10.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,3.5 parent: 603 - uid: 81 components: - type: Transform - pos: -10.5,1.5 + rot: 1.5707963267948966 rad + pos: 5.5,1.5 parent: 603 - uid: 93 components: - type: Transform - pos: -10.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 603 - uid: 96 components: - type: Transform - pos: 5.5,1.5 + rot: -1.5707963267948966 rad + pos: -10.5,1.5 parent: 603 - uid: 108 components: - type: Transform - pos: 5.5,11.5 + rot: -1.5707963267948966 rad + pos: -10.5,3.5 parent: 603 - uid: 142 components: - type: Transform - pos: -10.5,3.5 + rot: -1.5707963267948966 rad + pos: -10.5,9.5 parent: 603 - uid: 237 components: - type: Transform - pos: 5.5,9.5 + rot: -1.5707963267948966 rad + pos: -10.5,11.5 parent: 603 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_raven.yml b/Resources/Maps/Shuttles/emergency_raven.yml index b7989a49cb..0d7948c234 100644 --- a/Resources/Maps/Shuttles/emergency_raven.yml +++ b/Resources/Maps/Shuttles/emergency_raven.yml @@ -1536,47 +1536,55 @@ entities: - type: Transform pos: 16.5,-21.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 2058 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 - uid: 2443 components: - type: Transform - pos: 0.5,-4.5 + rot: -1.5707963267948966 rad + pos: 0.5,5.5 parent: 1 - uid: 2444 components: - type: Transform - pos: 0.5,-2.5 + rot: -1.5707963267948966 rad + pos: 0.5,-4.5 parent: 1 - uid: 2445 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 parent: 1 - uid: 2446 components: - type: Transform - pos: 0.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-4.5 parent: 1 - uid: 2447 components: - type: Transform - pos: 22.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-2.5 parent: 1 - uid: 2448 components: - type: Transform + rot: 1.5707963267948966 rad pos: 22.5,3.5 parent: 1 - uid: 2449 components: - type: Transform - pos: 22.5,-2.5 - parent: 1 - - uid: 2450 - components: - - type: Transform - pos: 22.5,-4.5 + rot: 1.5707963267948966 rad + pos: 22.5,5.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1677,439 +1685,266 @@ entities: - type: Transform pos: 4.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2232 components: - type: Transform pos: 4.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2233 components: - type: Transform pos: 4.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2234 components: - type: Transform pos: 7.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2235 components: - type: Transform pos: 8.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2236 components: - type: Transform pos: 9.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2237 components: - type: Transform pos: 13.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2238 components: - type: Transform pos: 14.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2239 components: - type: Transform pos: 15.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2240 components: - type: Transform pos: 18.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2241 components: - type: Transform pos: 18.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2242 components: - type: Transform pos: 18.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2243 components: - type: Transform pos: 13.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2244 components: - type: Transform pos: 14.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2245 components: - type: Transform pos: 9.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2246 components: - type: Transform pos: 8.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2247 components: - type: Transform pos: 7.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2248 components: - type: Transform pos: 15.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2249 components: - type: Transform pos: 19.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2250 components: - type: Transform pos: 19.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2251 components: - type: Transform pos: 19.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2252 components: - type: Transform pos: 18.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2253 components: - type: Transform pos: 18.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2254 components: - type: Transform pos: 17.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2255 components: - type: Transform pos: 16.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2256 components: - type: Transform pos: 16.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2257 components: - type: Transform pos: 15.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2258 components: - type: Transform pos: 14.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2259 components: - type: Transform pos: 13.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2260 components: - type: Transform pos: 12.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2261 components: - type: Transform pos: 11.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2262 components: - type: Transform pos: 10.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2263 components: - type: Transform pos: 9.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2264 components: - type: Transform pos: 8.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2265 components: - type: Transform pos: 7.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2266 components: - type: Transform pos: 6.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2267 components: - type: Transform pos: 6.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2268 components: - type: Transform pos: 5.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2269 components: - type: Transform pos: 4.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2270 components: - type: Transform pos: 4.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2271 components: - type: Transform pos: 3.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2272 components: - type: Transform pos: 3.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2273 components: - type: Transform pos: 3.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2283 components: - type: Transform pos: 12.5,-6.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2284 components: - type: Transform pos: 12.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2285 components: - type: Transform pos: 15.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2286 components: - type: Transform pos: 16.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2287 components: - type: Transform pos: 17.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2290 components: - type: Transform pos: 10.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2291 components: - type: Transform pos: 11.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2292 components: - type: Transform pos: 12.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2451 components: - type: Transform pos: 4.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2452 components: - type: Transform pos: 18.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - proto: BoozeDispenser entities: - uid: 2127 @@ -6694,19 +6529,19 @@ entities: rot: 3.141592653589793 rad pos: 16.5,23.5 parent: 1 -- proto: chem_master +- proto: ChemDispenser entities: - - uid: 1904 + - uid: 1905 components: - type: Transform - pos: 11.5,-4.5 + pos: 10.5,-4.5 parent: 1 -- proto: ChemDispenser +- proto: ChemMaster entities: - - uid: 1905 + - uid: 1904 components: - type: Transform - pos: 10.5,-4.5 + pos: 11.5,-4.5 parent: 1 - proto: CigarGoldCase entities: @@ -8107,8 +7942,6 @@ entities: - type: Transform pos: 8.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 1323 @@ -8116,8 +7949,6 @@ entities: - type: Transform pos: 14.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixer entities: - uid: 1324 @@ -8129,8 +7960,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -8141,16 +7970,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 1376 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 1380 @@ -10449,8 +10274,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1498 @@ -10458,8 +10281,6 @@ entities: - type: Transform pos: 10.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1499 @@ -10468,8 +10289,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1500 @@ -10478,8 +10297,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1501 @@ -10488,8 +10305,6 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1502 @@ -10497,8 +10312,6 @@ entities: - type: Transform pos: 14.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1503 @@ -10507,8 +10320,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1504 @@ -10517,8 +10328,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1505 @@ -10527,8 +10336,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,-25.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1506 @@ -10536,8 +10343,6 @@ entities: - type: Transform pos: 18.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1507 @@ -10546,8 +10351,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1508 @@ -10556,8 +10359,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1509 @@ -10565,8 +10366,6 @@ entities: - type: Transform pos: 4.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1510 @@ -10575,8 +10374,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1511 @@ -10585,8 +10382,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1512 @@ -10595,8 +10390,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1513 @@ -10605,8 +10398,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1514 @@ -10615,8 +10406,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1515 @@ -10625,8 +10414,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1516 @@ -10634,8 +10421,6 @@ entities: - type: Transform pos: 6.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1517 @@ -10644,8 +10429,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1518 @@ -10654,8 +10437,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1519 @@ -10664,8 +10445,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1520 @@ -10674,8 +10453,6 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1521 @@ -10684,8 +10461,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1522 @@ -10694,8 +10469,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1523 @@ -10703,8 +10476,6 @@ entities: - type: Transform pos: 11.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1524 @@ -10712,8 +10483,6 @@ entities: - type: Transform pos: 10.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1525 @@ -10722,8 +10491,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1526 @@ -10732,8 +10499,6 @@ entities: rot: -1.5707963267948966 rad pos: 14.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1589 @@ -10742,8 +10507,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1590 @@ -10752,8 +10515,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1591 @@ -10761,8 +10522,6 @@ entities: - type: Transform pos: 6.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1592 @@ -10770,8 +10529,6 @@ entities: - type: Transform pos: 11.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1593 @@ -10779,8 +10536,6 @@ entities: - type: Transform pos: 16.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1594 @@ -10789,8 +10544,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1595 @@ -10799,8 +10552,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1596 @@ -10809,8 +10560,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1597 @@ -10819,8 +10568,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1598 @@ -10829,8 +10576,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1599 @@ -10839,8 +10584,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1600 @@ -10848,8 +10591,6 @@ entities: - type: Transform pos: 11.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1638 @@ -10858,8 +10599,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1639 @@ -10868,8 +10607,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1640 @@ -10878,8 +10615,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1641 @@ -10888,8 +10623,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1642 @@ -10898,8 +10631,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1644 @@ -10908,8 +10639,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1645 @@ -10918,8 +10647,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1646 @@ -10928,8 +10655,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1691 @@ -10938,8 +10663,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1692 @@ -10948,8 +10671,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1693 @@ -10958,8 +10679,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1694 @@ -10968,8 +10687,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1695 @@ -10978,8 +10695,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1696 @@ -10988,8 +10703,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1697 @@ -10998,8 +10711,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1698 @@ -11008,8 +10719,6 @@ entities: rot: 3.141592653589793 rad pos: 18.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1699 @@ -11018,8 +10727,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1700 @@ -11028,8 +10735,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1701 @@ -11038,8 +10743,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1738 @@ -11048,8 +10751,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1739 @@ -11058,8 +10759,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1741 @@ -11067,8 +10766,6 @@ entities: - type: Transform pos: 8.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1742 @@ -11076,8 +10773,6 @@ entities: - type: Transform pos: 11.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1743 @@ -11085,8 +10780,6 @@ entities: - type: Transform pos: 14.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1744 @@ -11095,8 +10788,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1745 @@ -11105,8 +10796,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1746 @@ -11115,8 +10804,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1747 @@ -11125,8 +10812,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 2293 @@ -11135,8 +10820,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GeneratorBasic15kW @@ -12897,41 +12580,26 @@ entities: - type: Transform pos: 9.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2279 components: - type: Transform pos: 10.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2280 components: - type: Transform pos: 11.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2281 components: - type: Transform pos: 12.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2282 components: - type: Transform pos: 13.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - proto: ShuttleWindow entities: - uid: 2 @@ -13772,7 +13440,7 @@ entities: - type: Transform pos: 8.5,-21.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 2128 components: diff --git a/Resources/Maps/Shuttles/emergency_rod.yml b/Resources/Maps/Shuttles/emergency_rod.yml index 4235e1d57f..cc9623712d 100644 --- a/Resources/Maps/Shuttles/emergency_rod.yml +++ b/Resources/Maps/Shuttles/emergency_rod.yml @@ -771,8 +771,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCommandLocked entities: - uid: 179 @@ -886,47 +884,55 @@ entities: - type: Transform pos: -4.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 395 + - uid: 236 components: - type: Transform - pos: -7.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,3.5 parent: 2 - - uid: 396 + - uid: 237 components: - type: Transform - pos: -7.5,1.5 + rot: 1.5707963267948966 rad + pos: 4.5,-6.5 parent: 2 - - uid: 397 + - uid: 238 components: - type: Transform - pos: 4.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,-4.5 parent: 2 - - uid: 398 + - uid: 239 components: - type: Transform + rot: 1.5707963267948966 rad pos: 4.5,1.5 parent: 2 - - uid: 399 + - uid: 240 components: - type: Transform - pos: 4.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,-6.5 parent: 2 - - uid: 400 + - uid: 241 components: - type: Transform - pos: 4.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,-4.5 parent: 2 - - uid: 401 + - uid: 242 components: - type: Transform - pos: -7.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,1.5 parent: 2 - - uid: 402 + - uid: 243 components: - type: Transform - pos: -7.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,3.5 parent: 2 - proto: BedsheetMedical entities: @@ -947,105 +953,66 @@ entities: - type: Transform pos: -6.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 706 components: - type: Transform pos: -6.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 707 components: - type: Transform pos: -5.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 708 components: - type: Transform pos: -4.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 709 components: - type: Transform pos: -3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 710 components: - type: Transform pos: -2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 711 components: - type: Transform pos: -1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 712 components: - type: Transform pos: -0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 713 components: - type: Transform pos: 0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 714 components: - type: Transform pos: 1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 715 components: - type: Transform pos: 3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 716 components: - type: Transform pos: 2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 717 components: - type: Transform pos: 3.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - proto: BoozeDispenser entities: - uid: 451 @@ -2466,8 +2433,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 325 @@ -2476,8 +2441,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 317 @@ -2910,8 +2873,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 413 @@ -2920,60 +2881,44 @@ entities: rot: 3.141592653589793 rad pos: 3.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 415 components: - type: Transform pos: 3.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 416 components: - type: Transform pos: -6.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 417 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 418 components: - type: Transform rot: 1.5707963267948966 rad pos: -6.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 419 components: - type: Transform pos: 3.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 420 components: - type: Transform pos: -6.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 344 @@ -3947,7 +3892,7 @@ entities: - type: Transform pos: -0.5,-10.5 parent: 2 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 450 components: diff --git a/Resources/Maps/Shuttles/emergency_wode.yml b/Resources/Maps/Shuttles/emergency_wode.yml index 7dcd4a60eb..96c75d012a 100644 --- a/Resources/Maps/Shuttles/emergency_wode.yml +++ b/Resources/Maps/Shuttles/emergency_wode.yml @@ -18,26 +18,13 @@ tilemap: entities: - proto: "" entities: - - uid: 1 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - - type: LoadedMap - uid: 2 components: - type: MetaData name: NT Evac Wode - type: Transform pos: -0.70836353,-1.958334 - parent: 1 + parent: invalid - type: MapGrid chunks: 0,0: @@ -669,55 +656,55 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 1 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,11.5 + parent: 2 - uid: 215 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,19.5 + pos: -7.5,9.5 parent: 2 - uid: 216 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,17.5 + pos: -7.5,17.5 parent: 2 - uid: 295 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,9.5 + pos: -7.5,19.5 parent: 2 - uid: 296 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,19.5 parent: 2 - uid: 342 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,19.5 + rot: 1.5707963267948966 rad + pos: 5.5,17.5 parent: 2 - uid: 374 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,17.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 2 - uid: 385 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,11.5 - parent: 2 - - uid: 386 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 2 - proto: BedsheetMedical entities: @@ -2271,7 +2258,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,18.5 parent: 2 - - type: DeviceNetwork - uid: 175 components: - type: Transform diff --git a/Resources/Maps/Shuttles/escape_pod_small.yml b/Resources/Maps/Shuttles/escape_pod_small.yml index d0670f3991..4746f0d297 100644 --- a/Resources/Maps/Shuttles/escape_pod_small.yml +++ b/Resources/Maps/Shuttles/escape_pod_small.yml @@ -121,7 +121,7 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,0.5 parent: 29 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 9 components: diff --git a/Resources/Maps/Shuttles/mining.yml b/Resources/Maps/Shuttles/mining.yml index f8a4f040b9..b72d361f77 100644 --- a/Resources/Maps/Shuttles/mining.yml +++ b/Resources/Maps/Shuttles/mining.yml @@ -564,23 +564,38 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,3.5 parent: 181 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 128 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-3.5 parent: 181 - uid: 129 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-2.5 parent: 181 - uid: 130 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-1.5 parent: 181 + - uid: 131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 181 + - uid: 133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 181 - proto: BlastDoorExterior1 entities: - uid: 37 @@ -588,25 +603,16 @@ entities: - type: Transform pos: -5.5,-2.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 47 components: - type: Transform pos: -5.5,-3.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 69 components: - type: Transform pos: -5.5,-1.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - proto: BorgModuleMining entities: - uid: 94 @@ -911,8 +917,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GasVentPump entities: - uid: 26 @@ -921,8 +925,6 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GeneratorBasic entities: - uid: 40 diff --git a/Resources/Maps/Shuttles/pirate.yml b/Resources/Maps/Shuttles/pirate.yml index 8d2912dbda..b0b3929054 100644 --- a/Resources/Maps/Shuttles/pirate.yml +++ b/Resources/Maps/Shuttles/pirate.yml @@ -578,23 +578,25 @@ entities: - type: Transform pos: -0.67882204,3.741016 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 27 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,15.5 + rot: -1.5707963267948966 rad + pos: -11.5,2.5 parent: 1 - uid: 28 components: - type: Transform - pos: -11.5,2.5 + rot: 1.5707963267948966 rad + pos: 8.5,2.5 parent: 1 - uid: 772 components: - type: Transform - pos: 8.5,2.5 + rot: 3.141592653589793 rad + pos: 3.5,15.5 parent: 1 - proto: Bed entities: @@ -2255,8 +2257,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPassiveVent entities: - uid: 329 @@ -2265,40 +2265,30 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 331 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 332 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 334 @@ -2725,16 +2715,12 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 406 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPressurePump entities: - uid: 407 @@ -2743,24 +2729,18 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 408 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 409 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 410 @@ -2768,94 +2748,70 @@ entities: - type: Transform pos: 2.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 411 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 413 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 414 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 415 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 416 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 417 components: - type: Transform pos: -2.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 418 components: - type: Transform pos: 3.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 419 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 420 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 421 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentScrubber entities: - uid: 422 @@ -2863,31 +2819,23 @@ entities: - type: Transform pos: 2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 423 components: - type: Transform pos: -6.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 424 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 425 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 426 @@ -3156,8 +3104,6 @@ entities: - type: Transform pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: OxygenCanister entities: - uid: 470 @@ -3165,36 +3111,26 @@ entities: - type: Transform pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 471 components: - type: Transform pos: -10.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 472 components: - type: Transform pos: -9.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 473 components: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 474 components: - type: Transform pos: 7.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: PaperBin5 entities: - uid: 475 @@ -3691,7 +3627,7 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 549 components: @@ -3797,8 +3733,6 @@ entities: - type: Transform pos: 4.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: SubstationBasic entities: - uid: 564 diff --git a/Resources/Maps/Shuttles/trading_outpost.yml b/Resources/Maps/Shuttles/trading_outpost.yml index 43dba98924..36432bb89a 100644 --- a/Resources/Maps/Shuttles/trading_outpost.yml +++ b/Resources/Maps/Shuttles/trading_outpost.yml @@ -402,8 +402,6 @@ entities: - 402 - 790 - 789 - - type: AtmosDevice - joinedGrid: 2 - uid: 803 components: - type: Transform @@ -419,8 +417,6 @@ entities: - 411 - 789 - 790 - - type: AtmosDevice - joinedGrid: 2 - uid: 805 components: - type: Transform @@ -436,8 +432,6 @@ entities: - 408 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - uid: 806 components: - type: Transform @@ -453,8 +447,6 @@ entities: - 409 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 387 @@ -465,8 +457,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCargo entities: - uid: 1 @@ -519,17 +509,17 @@ entities: parent: 2 - proto: AirlockExternalGlassShuttleLocked entities: - - uid: 313 + - uid: 20 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-3.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 560 + - uid: 313 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-5.5 + pos: -2.5,-3.5 parent: 2 - uid: 562 components: @@ -537,11 +527,11 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 563 + - uid: 950 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-5.5 + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 parent: 2 - proto: AirSensor entities: @@ -594,46 +584,54 @@ entities: - type: Transform pos: 2.5,-14.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 947 + - uid: 560 components: - type: Transform - pos: 13.5,-5.5 + rot: 1.5707963267948966 rad + pos: 13.5,-6.5 parent: 2 - - uid: 948 + - uid: 563 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 949 + - uid: 947 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - uid: 950 + - uid: 948 components: - type: Transform - pos: 13.5,-6.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 951 + - uid: 949 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - uid: 952 + - uid: 951 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-5.5 parent: 2 - - uid: 953 + - uid: 952 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-3.5 parent: 2 - - uid: 954 + - uid: 953 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - proto: BoxFolderClipboard @@ -2748,144 +2746,96 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 82 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 108 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 110 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 329 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 331 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 335 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 337 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 338 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 339 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 340 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 359 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 362 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 363 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 364 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - proto: ExtinguisherCabinetFilled entities: - uid: 360 @@ -2944,8 +2894,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 397 @@ -2954,16 +2902,12 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 316 @@ -3537,9 +3481,13 @@ entities: - uid: 511 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,5.5 parent: 2 + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 513 components: - type: Transform @@ -3651,8 +3599,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 398 @@ -3661,46 +3607,34 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 400 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 401 components: - type: Transform pos: 2.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 402 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 403 components: - type: Transform pos: 8.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 399 @@ -3709,46 +3643,34 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 408 components: - type: Transform pos: 1.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 409 components: - type: Transform pos: 9.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 410 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 411 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 413 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorRTG entities: - uid: 367 @@ -4332,8 +4254,6 @@ entities: - type: Transform pos: 5.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: LiquidOxygenCanister entities: - uid: 384 @@ -4341,8 +4261,6 @@ entities: - type: Transform pos: 4.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Paper entities: - uid: 775 @@ -4912,49 +4830,31 @@ entities: - type: Transform pos: 1.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 809 components: - type: Transform pos: 2.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 810 components: - type: Transform pos: 3.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 811 components: - type: Transform pos: 7.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 812 components: - type: Transform pos: 8.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 813 components: - type: Transform pos: 9.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - proto: SignalButton entities: - uid: 807 diff --git a/Resources/Maps/Shuttles/wizard.yml b/Resources/Maps/Shuttles/wizard.yml index a46944361d..7bdb8ca83d 100644 --- a/Resources/Maps/Shuttles/wizard.yml +++ b/Resources/Maps/Shuttles/wizard.yml @@ -343,7 +343,6 @@ entities: 74: -9,-3 75: -9,-1 76: 8,-1 - 77: 8,-3 - node: color: '#FFFFFFFF' id: WarnLineN @@ -604,7 +603,7 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,5.5 parent: 768 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 338 components: @@ -615,20 +614,20 @@ entities: - uid: 339 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-2.5 parent: 768 - uid: 340 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,-0.5 + pos: 9.5,-2.5 parent: 768 - uid: 341 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-0.5 parent: 768 - proto: AtmosFixNitrogenMarker entities: @@ -668,13 +667,6 @@ entities: - type: Transform pos: -1.5,-11.5 parent: 768 -- proto: BookFishing - entities: - - uid: 587 - components: - - type: Transform - pos: 3.5160534,-11.342207 - parent: 768 - proto: BookRandom entities: - uid: 217 @@ -687,6 +679,13 @@ entities: - type: Transform pos: -7.700435,2.7283878 parent: 768 +- proto: BookRandomStory + entities: + - uid: 587 + components: + - type: Transform + pos: 3.5160534,-11.342207 + parent: 768 - proto: BooksBag entities: - uid: 219 @@ -2188,8 +2187,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMinerOxygen entities: - uid: 248 @@ -2198,8 +2195,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMixerFlipped entities: - uid: 250 @@ -2211,8 +2206,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPassiveVent entities: - uid: 251 @@ -2221,16 +2214,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 252 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPipeBend entities: - uid: 253 @@ -2619,8 +2608,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasVentPump entities: - uid: 261 @@ -2629,109 +2616,81 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-9.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 264 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 292 components: - type: Transform pos: 5.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 293 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 294 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 303 components: - type: Transform pos: -0.5,-3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 327 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 328 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 329 components: - type: Transform pos: -0.5,8.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 330 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 331 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 332 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-2.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 362 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GeneratorBasic15kW entities: - uid: 358 @@ -3079,8 +3038,6 @@ entities: - type: Transform pos: -9.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: OxygenCanister entities: - uid: 602 @@ -3088,8 +3045,6 @@ entities: - type: Transform pos: -8.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: Paper entities: - uid: 622 diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 93ae89e9c3..b2c74352e1 100755 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -24,6 +24,7 @@ tilemap: 3: FloorGrayConcrete 2: FloorGrayConcreteMono 56: FloorGreenCircuit + 6: FloorHull 59: FloorHullReinforced 60: FloorHydro 63: FloorLaundry @@ -266,7 +267,7 @@ entities: version: 6 2,1: ind: 2,1 - tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAegAAAAAAegAAAAAAegAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 4,-2: ind: 4,-2 @@ -342,7 +343,7 @@ entities: version: 6 -5,1: ind: -5,1 - tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -5,0: ind: -5,0 @@ -402,7 +403,7 @@ entities: version: 6 -6,1: ind: -6,1 - tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -7,1: ind: -7,1 @@ -4060,6 +4061,7 @@ entities: 2814: 44,-15 2837: 48,-19 3484: 44,-25 + 3982: 40,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale @@ -4385,6 +4387,7 @@ entities: 2813: 44,-9 2838: 47,-18 3476: 44,-17 + 3983: 33,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale180 @@ -6400,18 +6403,21 @@ entities: 1: 136 2,-4: 1: 4369 - 0: 52228 + 0: 4 + 2: 52224 2,-5: 1: 4352 0: 58379 2,-3: 1: 33825 - 0: 140 + 2: 140 3,-4: - 0: 65419 + 0: 52363 + 2: 13056 3,-3: - 0: 35007 + 2: 51 1: 12288 + 0: 34956 3,-1: 1: 8739 0: 34952 @@ -6739,10 +6745,10 @@ entities: 0: 56797 5,-8: 0: 15359 - 2: 32768 + 3: 32768 5,-7: 0: 61491 - 2: 136 + 3: 136 5,-6: 0: 65535 5,-5: @@ -6753,9 +6759,9 @@ entities: 0: 65311 6,-8: 0: 255 - 2: 28672 + 3: 28672 6,-7: - 2: 119 + 3: 119 0: 61952 6,-6: 0: 61695 @@ -7979,8 +7985,7 @@ entities: 9,3: 0: 49080 10,4: - 0: 13107 - 1: 128 + 0: 13115 10,5: 0: 65535 10,6: @@ -7991,8 +7996,8 @@ entities: 10,3: 0: 48059 11,4: - 1: 560 - 0: 2184 + 0: 2187 + 1: 512 11,5: 0: 32767 11,6: @@ -8007,7 +8012,7 @@ entities: 0: 112 1: 28672 17,-7: - 3: 1 + 4: 1 1: 4104 17,-6: 1: 4593 @@ -8106,17 +8111,17 @@ entities: -13,7: 1: 39312 -12,8: - 4: 12 - 5: 3072 + 5: 12 + 6: 3072 -11,5: 0: 63351 -11,6: 0: 4607 1: 49152 -11,8: - 4: 1 + 5: 1 1: 17476 - 5: 256 + 6: 256 -11,7: 1: 17484 -10,5: @@ -8214,10 +8219,10 @@ entities: 0: 255 1: 57344 -8,11: - 6: 816 + 7: 816 1: 34952 -9,11: - 6: 2176 + 7: 2176 1: 8738 -8,12: 1: 34959 @@ -8228,7 +8233,7 @@ entities: -7,11: 0: 20206 -7,12: - 1: 16385 + 1: 49153 0: 1228 -6,9: 0: 65518 @@ -8237,7 +8242,7 @@ entities: -6,11: 0: 4095 -6,12: - 6: 61166 + 7: 61166 -5,9: 0: 65535 -5,10: @@ -8245,7 +8250,7 @@ entities: -5,11: 0: 36863 -5,12: - 6: 30515 + 7: 30515 0: 12 -4,9: 0: 65535 @@ -8255,7 +8260,7 @@ entities: 0: 4095 -4,12: 0: 1 - 6: 65518 + 7: 65518 -4,13: 1: 61680 -5,13: @@ -8269,7 +8274,7 @@ entities: -5,15: 1: 17487 -3,12: - 6: 13107 + 7: 13107 1: 34944 -3,13: 1: 47792 @@ -8335,7 +8340,7 @@ entities: 1: 61713 -12,9: 0: 16 - 6: 3084 + 7: 3084 -13,9: 1: 39305 -13,10: @@ -8344,19 +8349,19 @@ entities: 1: 35033 0: 12544 -12,10: - 3: 12 - 6: 3072 + 4: 12 + 7: 3072 -12,11: - 6: 12 + 7: 12 -11,9: - 6: 257 + 7: 257 1: 17476 -11,10: - 3: 1 - 6: 256 + 4: 1 + 7: 256 1: 17476 -11,11: - 6: 1 + 7: 1 1: 17476 -11,12: 1: 17487 @@ -8410,8 +8415,8 @@ entities: 1: 15 -13,12: 1: 34952 - 5: 48 - 4: 12288 + 6: 48 + 5: 12288 -12,13: 1: 61455 -13,13: @@ -8444,11 +8449,11 @@ entities: 1: 62671 -7,14: 1: 244 - 6: 57344 + 7: 57344 0: 1024 -7,15: 1: 61440 - 6: 238 + 7: 238 0: 1024 -7,16: 1: 65524 @@ -8507,8 +8512,8 @@ entities: -14,12: 0: 1 1: 8738 - 5: 128 - 4: 32768 + 6: 128 + 5: 32768 -17,12: 0: 52232 -16,13: @@ -8985,6 +8990,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 103.92799 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 235 moles: @@ -9367,8 +9387,8 @@ entities: id: docking43669 localAnchorB: -47.5,-40 localAnchorA: 0.5,0 - damping: 1560.1493 - stiffness: 14003.869 + damping: 1560.1505 + stiffness: 14003.88 - proto: AcousticGuitarInstrument entities: - uid: 2133 @@ -10505,18 +10525,6 @@ entities: - 24361 - 24358 - 9016 - - uid: 24662 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-14.5 - parent: 60 - - type: DeviceList - devices: - - 24659 - - 24661 - - 24665 - - 24657 - proto: AirAlarmElectronics entities: - uid: 13488 @@ -10536,6 +10544,20 @@ entities: rot: -1.5707963267948966 rad pos: -1.5599055,29.41489 parent: 60 +- proto: AirAlarmVox + entities: + - uid: 930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-14.5 + parent: 60 + - type: DeviceList + devices: + - 24661 + - 24665 + - 24657 + - 24659 - proto: AirCanister entities: - uid: 1679 @@ -12972,19 +12994,19 @@ entities: rot: -1.5707963267948966 rad pos: 48.5,-15.5 parent: 60 -- proto: AirlockQuartermasterGlassLocked +- proto: AirlockQuartermasterLocked entities: - - uid: 13086 + - uid: 1622 components: - type: MetaData - name: Quartermaster's Office + name: QM Room - type: Transform pos: 44.5,11.5 parent: 60 -- proto: AirlockQuartermasterLocked - entities: - uid: 13039 components: + - type: MetaData + name: QM Room - type: Transform pos: 46.5,13.5 parent: 60 @@ -13752,7 +13774,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: AltarSpawner entities: - uid: 14509 @@ -15000,6 +15022,83 @@ entities: - type: Transform pos: -45.5,40.5 parent: 60 +- proto: AtmosFixVoxMarker + entities: + - uid: 2925 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 60 + - uid: 21758 + components: + - type: Transform + pos: 10.5,-13.5 + parent: 60 + - uid: 21762 + components: + - type: Transform + pos: 10.5,-11.5 + parent: 60 + - uid: 24768 + components: + - type: Transform + pos: 11.5,-13.5 + parent: 60 + - uid: 24769 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 60 + - uid: 24770 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 60 + - uid: 24771 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 60 + - uid: 24772 + components: + - type: Transform + pos: 12.5,-12.5 + parent: 60 + - uid: 24773 + components: + - type: Transform + pos: 12.5,-11.5 + parent: 60 + - uid: 24774 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 60 + - uid: 24775 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 60 + - uid: 24776 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 60 + - uid: 24777 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 60 + - uid: 24778 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 60 + - uid: 24779 + components: + - type: Transform + pos: 13.5,-10.5 + parent: 60 - proto: Autolathe entities: - uid: 5288 @@ -15252,6 +15351,11 @@ entities: - type: Transform pos: 30.5,-14.5 parent: 60 + - uid: 2923 + components: + - type: Transform + pos: 45.5,16.5 + parent: 60 - uid: 3230 components: - type: Transform @@ -15262,11 +15366,6 @@ entities: - type: Transform pos: -63.5,3.5 parent: 60 - - uid: 4515 - components: - - type: Transform - pos: 44.5,15.5 - parent: 60 - uid: 4529 components: - type: Transform @@ -15541,10 +15640,10 @@ entities: parent: 60 - proto: BedsheetQM entities: - - uid: 2923 + - uid: 5932 components: - type: Transform - pos: 44.5,15.5 + pos: 45.5,16.5 parent: 60 - proto: BedsheetRD entities: @@ -55937,12 +56036,6 @@ entities: - type: Transform pos: -19.5,-16.5 parent: 60 - - uid: 2419 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.577686,12.682198 - parent: 60 - uid: 2590 components: - type: Transform @@ -55982,6 +56075,12 @@ entities: rot: -1.5707963267948966 rad pos: -66.5,12.5 parent: 60 + - uid: 4515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.634438,14.652265 + parent: 60 - uid: 4627 components: - type: Transform @@ -56120,11 +56219,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,9.5 parent: 60 - - uid: 13094 - components: - - type: Transform - pos: 44.5,14.5 - parent: 60 - uid: 13255 components: - type: Transform @@ -56282,6 +56376,12 @@ entities: - type: Transform pos: -44.5,-9.5 parent: 60 + - uid: 24780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.431313,14.60539 + parent: 60 - proto: ChairOfficeLight entities: - uid: 128 @@ -67326,15 +67426,15 @@ entities: - type: Transform pos: -44.5,2.5 parent: 60 - - uid: 5535 + - uid: 2419 components: - type: Transform - pos: -63.5,2.5 + pos: 43.5,15.5 parent: 60 - - uid: 5932 + - uid: 5535 components: - type: Transform - pos: 43.5,14.5 + pos: -63.5,2.5 parent: 60 - uid: 6352 components: @@ -67481,10 +67581,10 @@ entities: parent: 60 - proto: DresserQuarterMasterFilled entities: - - uid: 1622 + - uid: 12640 components: - type: Transform - pos: 45.5,15.5 + pos: 44.5,16.5 parent: 60 - proto: DresserResearchDirectorFilled entities: @@ -68611,11 +68711,6 @@ entities: - type: Transform pos: -53.5,8.5 parent: 60 - - uid: 15570 - components: - - type: Transform - pos: 10.5,17.5 - parent: 60 - uid: 16408 components: - type: Transform @@ -96513,7 +96608,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVentScrubber entities: - uid: 61 @@ -97868,7 +97963,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - uid: 24665 components: - type: Transform @@ -97877,7 +97972,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVolumePump entities: - uid: 14850 @@ -101566,6 +101661,11 @@ entities: - type: Transform pos: -79.5,12.5 parent: 60 + - uid: 13086 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 - uid: 13110 components: - type: Transform @@ -101616,26 +101716,6 @@ entities: - type: Transform pos: 58.5,10.5 parent: 60 - - uid: 13193 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 13194 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - - uid: 13195 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - - uid: 13196 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 13197 components: - type: Transform @@ -101664,7 +101744,7 @@ entities: - uid: 13202 components: - type: Transform - pos: 46.5,17.5 + pos: 43.5,17.5 parent: 60 - uid: 13251 components: @@ -103232,6 +103312,11 @@ entities: - type: Transform pos: 22.5,10.5 parent: 60 + - uid: 19408 + components: + - type: Transform + pos: 45.5,17.5 + parent: 60 - uid: 19409 components: - type: Transform @@ -108042,10 +108127,10 @@ entities: parent: 60 - proto: LockerQuarterMasterFilled entities: - - uid: 6038 + - uid: 15570 components: - type: Transform - pos: 43.5,15.5 + pos: 43.5,16.5 parent: 60 - proto: LockerResearchDirectorFilledHardsuit entities: @@ -111911,6 +111996,11 @@ entities: - type: Transform pos: -41.5,25.5 parent: 60 + - uid: 13193 + components: + - type: Transform + pos: -11.5,-26.5 + parent: 60 - uid: 17268 components: - type: Transform @@ -112028,14 +112118,6 @@ entities: - type: Transform pos: 34.5,9.5 parent: 60 - - uid: 21187 - components: - - type: Transform - pos: -10.5,-26.5 - parent: 60 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - uid: 21363 components: - type: Transform @@ -115019,6 +115101,12 @@ entities: rot: -1.5707963267948966 rad pos: 61.5,-27.5 parent: 60 + - uid: 13194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,15.5 + parent: 60 - uid: 13484 components: - type: Transform @@ -115309,14 +115397,6 @@ entities: parent: 60 - type: ApcPowerReceiver powerLoad: 0 - - uid: 19408 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,14.5 - parent: 60 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 19410 components: - type: Transform @@ -120187,11 +120267,6 @@ entities: - type: Transform pos: 21.5,27.5 parent: 60 - - uid: 11746 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - uid: 11749 components: - type: Transform @@ -120281,7 +120356,7 @@ entities: - uid: 11972 components: - type: Transform - pos: 45.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 11973 components: @@ -120384,21 +120459,11 @@ entities: - type: Transform pos: 51.5,30.5 parent: 60 - - uid: 12640 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 12644 components: - type: Transform pos: 25.5,27.5 parent: 60 - - uid: 12653 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - uid: 12656 components: - type: Transform @@ -120525,6 +120590,11 @@ entities: - type: Transform pos: 45.5,19.5 parent: 60 + - uid: 13094 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 - uid: 13097 components: - type: Transform @@ -120540,10 +120610,10 @@ entities: - type: Transform pos: 42.5,18.5 parent: 60 - - uid: 13192 + - uid: 13196 components: - type: Transform - pos: 46.5,17.5 + pos: 44.5,17.5 parent: 60 - uid: 13207 components: @@ -122580,6 +122650,18 @@ entities: - type: Transform pos: -33.5,-21.5 parent: 60 + - uid: 21085 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 + - uid: 21186 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 + - type: DeviceLinkSink + invokeCounter: 1 - uid: 21334 components: - type: Transform @@ -122603,33 +122685,18 @@ entities: - uid: 21753 components: - type: Transform - pos: 43.5,16.5 + pos: 43.5,11.5 parent: 60 - uid: 21754 components: - type: Transform - pos: 44.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 21755 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 21758 components: - type: Transform pos: 45.5,11.5 parent: 60 - - uid: 21759 - components: - - type: Transform - pos: 43.5,11.5 - parent: 60 - - uid: 21760 - components: - - type: Transform - pos: 44.5,11.5 - parent: 60 - uid: 22463 components: - type: Transform @@ -123180,25 +123247,6 @@ entities: linkedPorts: 11697: - Pressed: Toggle - - uid: 21762 - components: - - type: Transform - pos: 46.5,15.5 - parent: 60 - - type: DeviceLinkSource - linkedPorts: - 21753: - - Pressed: Toggle - 21754: - - Pressed: Toggle - 21755: - - Pressed: Toggle - 21759: - - Pressed: Toggle - 21760: - - Pressed: Toggle - 21758: - - Pressed: Toggle - proto: SignalButtonDirectional entities: - uid: 1240 @@ -123814,6 +123862,29 @@ entities: 24352: - On: On - Off: Off + - uid: 21187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,15.5 + parent: 60 + - type: DeviceLinkSource + linkedPorts: + 21186: + - On: Open + - Off: Close + 21085: + - On: Open + - Off: Close + 21754: + - On: Open + - Off: Close + 21753: + - On: Open + - Off: Close + 21755: + - On: Open + - Off: Close - proto: SignAnomaly entities: - uid: 9496 @@ -130930,17 +131001,26 @@ entities: - type: Transform pos: 4.5,-7.5 parent: 60 -- proto: SurveillanceCameraRouterGeneral +- proto: SurveillanceCameraRouterConstructed entities: - - uid: 21085 + - uid: 18878 components: - type: Transform - pos: 24.5,18.5 + pos: -106.5,26.5 parent: 60 - - uid: 21186 +- proto: SurveillanceCameraRouterEngineering + entities: + - uid: 11746 components: - type: Transform - pos: -49.5,7.5 + pos: 10.5,17.5 + parent: 60 +- proto: SurveillanceCameraRouterGeneral + entities: + - uid: 24662 + components: + - type: Transform + pos: 8.5,-29.5 parent: 60 - proto: SurveillanceCameraRouterMedical entities: @@ -130965,17 +131045,17 @@ entities: parent: 60 - proto: SurveillanceCameraRouterService entities: - - uid: 930 + - uid: 18645 components: - type: Transform - pos: -11.5,-26.5 + pos: -49.5,7.5 parent: 60 - proto: SurveillanceCameraRouterSupply entities: - - uid: 2925 + - uid: 6038 components: - type: Transform - pos: 8.5,-29.5 + pos: 43.5,12.5 parent: 60 - proto: SurveillanceCameraScience entities: @@ -131666,6 +131746,13 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Airlock 1 +- proto: SurveillanceCameraWirelessRouterConstructed + entities: + - uid: 21760 + components: + - type: Transform + pos: -116.5,26.5 + parent: 60 - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 17205 @@ -132340,6 +132427,11 @@ entities: - type: Transform pos: 36.5,-1.5 parent: 60 + - uid: 13192 + components: + - type: Transform + pos: 44.5,14.5 + parent: 60 - uid: 13204 components: - type: Transform @@ -134183,16 +134275,6 @@ entities: showEnts: False occludes: True ents: [] - - uid: 18645 - components: - - type: Transform - pos: -106.5,26.5 - parent: 60 - - uid: 18878 - components: - - type: Transform - pos: -116.5,26.5 - parent: 60 - uid: 18890 components: - type: Transform @@ -134338,6 +134420,11 @@ entities: - type: Transform pos: -51.5,8.5 parent: 60 + - uid: 21759 + components: + - type: Transform + pos: 24.5,18.5 + parent: 60 - proto: TelecomServerCircuitboard entities: - uid: 18879 @@ -141588,6 +141675,11 @@ entities: - type: Transform pos: 22.5,27.5 parent: 60 + - uid: 12653 + components: + - type: Transform + pos: 42.5,17.5 + parent: 60 - uid: 12674 components: - type: Transform @@ -141859,6 +141951,11 @@ entities: rot: -1.5707963267948966 rad pos: 57.5,16.5 parent: 60 + - uid: 13195 + components: + - type: Transform + pos: 46.5,17.5 + parent: 60 - uid: 13224 components: - type: Transform diff --git a/Resources/Maps/cog.yml b/Resources/Maps/cog.yml index 5f4fb44022..53aac9f5b7 100644 --- a/Resources/Maps/cog.yml +++ b/Resources/Maps/cog.yml @@ -99,7 +99,7 @@ entities: version: 6 -2,-2: ind: -2,-2 - tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB + tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB version: 6 -2,0: ind: -2,0 @@ -127,7 +127,7 @@ entities: version: 6 -3,-3: ind: -3,-3 - tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA + tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA version: 6 -4,-2: ind: -4,-2 @@ -179,7 +179,7 @@ entities: version: 6 2,0: ind: 2,0 - tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAgQAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAAgAAAAAAAwAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAABwAAAAAAgQAAAAAABwAAAAAAAwAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 2,-2: ind: 2,-2 @@ -283,15 +283,15 @@ entities: version: 6 2,1: ind: 2,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAYAAAAAADCwAAAAAAYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA version: 6 3,0: ind: 3,0 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,1: ind: 3,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,2: ind: 3,2 @@ -387,7 +387,7 @@ entities: version: 6 -4,3: ind: -4,3 - tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA + tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA version: 6 -3,3: ind: -3,3 @@ -687,11 +687,6 @@ entities: 2847: 31,47 2848: 30,47 2849: 29,47 - 2850: 29,45 - 2851: 30,45 - 2852: 33,45 - 2853: 34,45 - 2854: 35,45 2855: 35,46 2856: 35,47 2948: 59,42 @@ -1167,8 +1162,6 @@ entities: 1276: 54,-37 1277: 54,-20 1355: 19,3 - 1716: 41,13 - 1717: 41,11 1781: 33,35 1782: 33,36 1783: 33,37 @@ -1360,18 +1353,11 @@ entities: 1575: 39,8 1576: 38,7 1577: 37,6 - 1578: 36,7 1579: 35,7 1580: 34,7 1581: 34,7 1582: 34,8 1583: 35,8 - 1584: 37,8 - 1585: 37,8 - 1586: 36,6 - 1587: 36,6 - 1588: 37,7 - 1589: 36,7 1590: 38,8 1591: 39,7 1592: 34,10 @@ -1379,9 +1365,6 @@ entities: 1594: 36,10 1595: 36,10 1596: 35,10 - 1597: 41,12 - 1598: 41,12 - 1599: 41,12 1679: 52,22 1680: 52,23 1681: 53,24 @@ -1578,9 +1561,7 @@ entities: 4412: -34,-27 4413: -33,-29 4414: -37,-28 - 4415: -33,-26 4416: -30,-26 - 4417: -32,-25 4418: -36,-25 4419: -39,-23 4420: -41,-24 @@ -1593,7 +1574,6 @@ entities: 4427: -33,-21 4428: -25,-31 4429: -22,-29 - 4430: -23,-31 4431: -36,-48 4432: -32,-47 4433: -31,-48 @@ -1678,7 +1658,6 @@ entities: 4906: -15,-31 4907: -17,-30 4908: -13,-28 - 4909: -22,-31 4910: -22,-29 4911: -25,-29 4912: 13,-11 @@ -1956,6 +1935,73 @@ entities: 5728: -24,65 5729: -22,65 5730: -23,64 + 5970: 37,10 + 5971: 34,11 + 5972: 33,11 + 5973: 33,12 + 5974: 32,12 + 5975: 37,14 + 5976: 36,14 + 5977: 35,14 + 5978: 35,15 + 5979: 35,15 + 5980: 35,17 + 5981: 35,17 + 5982: 35,18 + 5983: 38,16 + 5984: 37,17 + 5985: 37,18 + 5986: 39,18 + 5987: 39,19 + 5988: 44,14 + 5989: 46,14 + 5990: 48,14 + 5991: 50,14 + 5992: 48,14 + 5993: 47,14 + 5994: 46,14 + 5995: 45,14 + 5996: 44,14 + 5997: 46,14 + 5998: 46,14 + 5999: 47,14 + 6000: 48,14 + 6001: 49,14 + 6002: 49,14 + 6003: 51,14 + 6004: 51,14 + 6005: 52,15 + 6006: 51,15 + 6007: 51,16 + 6008: 51,16 + 6009: 52,16 + 6010: 52,17 + 6011: 53,17 + 6012: 53,17 + 6013: 54,17 + 6014: 54,17 + 6015: 48,10 + 6016: 47,11 + 6017: 45,11 + 6018: 44,10 + 6019: 44,11 + 6020: 45,11 + 6021: 47,10 + 6022: 48,10 + 6023: 48,11 + 6024: 48,11 + 6025: 47,12 + 6026: 49,12 + 6027: 50,12 + 6028: 51,12 + 6029: 52,13 + 6030: 52,13 + 6031: 52,12 + 6032: 40,11 + 6033: 38,12 + 6034: 38,11 + 6035: 36,11 + 6036: 37,10 - node: cleanable: True color: '#FFFFFFFF' @@ -2305,7 +2351,6 @@ entities: 3282: 40,48 3283: 40,49 3284: 40,47 - 3285: 34,45 3286: 32,46 3287: 31,45 3288: 29,46 @@ -2665,7 +2710,6 @@ entities: 3661: -22,-47 3662: -21,-45 3663: -23,-45 - 3664: -27,-44 3665: -30,-43 3666: -31,-44 3667: -35,-44 @@ -2684,15 +2728,11 @@ entities: 3681: -30,-29 3682: -30,-27 3683: -33,-28 - 3684: -33,-27 - 3685: -29,-25 3686: -27,-25 3687: -26,-25 3688: -25,-25 3689: -26,-31 - 3690: -26,-29 3691: -24,-31 - 3692: -23,-31 3693: -22,-30 3694: -20,-25 3695: -22,-21 @@ -3394,6 +3434,11 @@ entities: id: Grassa4 decals: 2155: -1.7855573,23.949152 + - node: + color: '#FFFFFFFF' + id: Grassb4 + decals: + 6047: 0.3860445,30.988146 - node: color: '#FFFFFFFF' id: Grassb5 @@ -3440,6 +3485,11 @@ entities: 4079: 68.65254,42.701946 4080: 69.952675,44.10507 4081: 74.31514,52.17988 + 6042: 0.5364504,30.177677 + 6043: 1.2951236,30.04314 + 6044: 0.95249677,30.984898 + 6045: -3.5628335,30.935976 + 6046: -3.489414,24.993238 - node: color: '#FFFFFFFF' id: Grassd3 @@ -4077,8 +4127,6 @@ entities: decals: 72: -29,-26 73: -28,-26 - 74: -27,-26 - 75: -26,-26 76: -25,-26 94: -36,-29 95: -35,-29 @@ -4108,7 +4156,6 @@ entities: 3947: -31,-22 3948: -30,-22 4514: -32,-22 - 4515: -22,-32 4516: -26,-32 5602: -32,-40 5603: -31,-40 @@ -4284,6 +4331,9 @@ entities: 2809: 32,45 2810: 31,45 4966: 8,0 + 6038: 30,45 + 6040: 33,45 + 6041: 34,45 - node: color: '#FA750096' id: HalfTileOverlayGreyscale180 @@ -4293,6 +4343,9 @@ entities: 194: -30,-45 195: -31,-45 196: -35,-45 + 6048: -34,-45 + 6049: -32,-45 + 6050: -33,-45 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -4447,11 +4500,9 @@ entities: 616: -18,-21 617: -18,-20 4506: -27,-31 - 4507: -27,-30 - 4508: -27,-29 - 4509: -27,-28 4728: -18,-24 5607: -46,27 + 6090: -27,-30 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale270 @@ -4786,6 +4837,7 @@ entities: 638: -15,-20 5599: -30,-38 5600: -30,-39 + 6087: -22,-31 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale90 @@ -4958,12 +5010,15 @@ entities: 1357: 22,-1 1358: 20,-1 1359: 21,-1 + 6106: -27,-28 + 6108: -26,-28 - node: - angle: 1.5707963267948966 rad + angle: 3.141592653589793 rad color: '#FFFFFFFF' id: LoadingArea decals: - 1702: 36,6 + 6080: -26,-26 + 6081: -27,-26 - node: color: '#D381C996' id: MiniTileBoxOverlay @@ -5233,6 +5288,20 @@ entities: 2840: 44,49 4980: 12,-7 4981: 13,-7 + - node: + color: '#FA750096' + id: QuarterTileOverlayGreyscale + decals: + 6062: -34,-44 + 6063: -33,-44 + 6064: -32,-44 + 6065: -31,-44 + 6066: -30,-44 + 6067: -29,-44 + 6068: -28,-44 + 6069: -27,-44 + 6070: -26,-44 + 6071: -35,-44 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale180 @@ -5458,7 +5527,15 @@ entities: color: '#FA750096' id: QuarterTileOverlayGreyscale180 decals: - 201: -32,-45 + 6053: -35,-43 + 6054: -34,-43 + 6055: -33,-43 + 6056: -32,-43 + 6057: -31,-43 + 6058: -30,-43 + 6059: -29,-43 + 6060: -28,-43 + 6061: -27,-43 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale270 @@ -5538,6 +5615,7 @@ entities: decals: 122: -31,-29 5606: -32,-36 + 6095: -27,-29 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale270 @@ -5658,11 +5736,6 @@ entities: 5776: 29,-9 5777: 29,-8 5778: 29,-7 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale270 - decals: - 202: -34,-45 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 @@ -5871,11 +5944,6 @@ entities: 2610: 22,69 4955: 13,-12 5046: 28,43 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale90 - decals: - 203: -26,-43 - node: color: '#FFFFFFFF' id: Rock01 @@ -6110,6 +6178,7 @@ entities: 125: -24,-26 234: -43,-31 5601: -30,-40 + 6086: -22,-32 - node: color: '#D4D4D428' id: ThreeQuarterTileOverlayGreyscale180 @@ -6144,6 +6213,7 @@ entities: 1385: -21,-8 1386: -20,-7 2830: 48,47 + 6039: 35,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale180 @@ -6230,6 +6300,7 @@ entities: 1384: -25,-8 2826: 43,47 4963: 7,0 + 6037: 29,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale270 @@ -6301,6 +6372,7 @@ entities: id: ThreeQuarterTileOverlayGreyscale90 decals: 126: -24,-24 + 6084: -24,-28 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale90 @@ -6344,6 +6416,8 @@ entities: decals: 5192: 66,50 5194: -26,-51 + 5966: 37,19 + 5967: 43,14 - node: angle: 3.141592653589793 rad color: '#000000FF' @@ -6376,7 +6450,6 @@ entities: decals: 249: -28,-50 717: 32,-19 - 1703: 37,8 2226: -33,53 2227: -32,48 - node: @@ -6392,6 +6465,12 @@ entities: decals: 5193: 66,50 5195: -26,-51 + - node: + color: '#8C347FFF' + id: WarnBoxGreyscale + decals: + 5968: 37,19 + 5969: 43,14 - node: color: '#52B4E9FF' id: WarnCornerNE @@ -6694,8 +6773,6 @@ entities: 1413: -28,-4 1414: -28,-3 1431: -37,-11 - 1705: 36,7 - 1706: 36,8 1715: 36,17 2060: -13,5 2061: -13,6 @@ -6800,7 +6877,6 @@ entities: 1421: -36,-10 1514: 15,0 1515: 16,0 - 1704: 37,7 2222: -31,49 2223: -30,49 2375: -37,62 @@ -7334,7 +7410,7 @@ entities: -8,-9: 0: 26231 -7,-7: - 0: 65454 + 0: 65422 -7,-6: 0: 65311 -7,-8: @@ -7529,7 +7605,7 @@ entities: -8,-12: 0: 61687 -9,-12: - 0: 61695 + 0: 62719 -8,-11: 0: 4095 -9,-11: @@ -7878,11 +7954,11 @@ entities: 0: 238 8,1: 2: 15 - 0: 60928 + 0: 28160 8,2: - 0: 3886 + 0: 50982 8,3: - 0: 36623 + 0: 40759 9,-4: 0: 65295 9,-3: @@ -7939,30 +8015,30 @@ entities: 2: 15 0: 65280 9,2: - 0: 3887 + 0: 65327 9,3: - 0: 3855 + 0: 36623 9,4: 0: 61182 10,1: 2: 35 0: 59528 10,2: - 0: 44847 + 0: 47919 10,3: - 0: 12207 + 0: 10799 10,4: 0: 48059 11,1: 0: 12288 11,2: - 0: 57103 + 0: 65295 11,3: 0: 4063 11,4: 0: 63487 12,2: - 0: 44815 + 0: 48911 12,3: 0: 44943 8,-9: @@ -9228,10 +9304,14 @@ entities: 2: 4095 -15,13: 2: 4095 + -15,15: + 0: 3212 -14,13: 2: 20309 -14,15: - 0: 3780 + 0: 4079 + -14,14: + 0: 35016 -14,16: 2: 17604 -13,15: @@ -9559,6 +9639,12 @@ entities: parent: 2922 - type: InstantAction container: 2922 + - uid: 12128 + components: + - type: Transform + parent: 23717 + - type: InstantAction + container: 23717 - uid: 27130 components: - type: Transform @@ -9573,6 +9659,18 @@ entities: parent: 8997 - type: InstantAction container: 8997 + - uid: 12036 + components: + - type: Transform + parent: 4313 + - type: InstantAction + container: 4313 + - uid: 12037 + components: + - type: Transform + parent: 12064 + - type: InstantAction + container: 12064 - uid: 18678 components: - type: Transform @@ -10065,6 +10163,20 @@ entities: - 5280 - 10003 - 10026 + - uid: 12032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -50.5,-24.5 + parent: 12 + - type: DeviceList + devices: + - 9988 + - 801 + - 9987 + - 800 + - 23933 + - 23934 - uid: 13076 components: - type: Transform @@ -10636,6 +10748,7 @@ entities: - 1306 - 2094 - 25373 + - 12725 - uid: 25516 components: - type: Transform @@ -11197,6 +11310,11 @@ entities: - type: Transform pos: -22.5,-7.5 parent: 12 + - uid: 12143 + components: + - type: Transform + pos: 31.5,47.5 + parent: 12 - uid: 13514 components: - type: Transform @@ -11212,11 +11330,6 @@ entities: - type: Transform pos: -4.5,11.5 parent: 12 - - uid: 23700 - components: - - type: Transform - pos: 33.5,45.5 - parent: 12 - uid: 23899 components: - type: Transform @@ -11227,6 +11340,11 @@ entities: - type: Transform pos: -20.5,61.5 parent: 12 + - uid: 26068 + components: + - type: Transform + pos: 38.5,12.5 + parent: 12 - uid: 26913 components: - type: Transform @@ -12334,6 +12452,12 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,71.5 parent: 12 + - uid: 22328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,59.5 + parent: 12 - proto: AirlockExternalGlassAtmosphericsLocked entities: - uid: 4390 @@ -12454,6 +12578,12 @@ entities: - DoorStatus: DoorBolt 478: - DoorStatus: DoorBolt + - uid: 1061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,62.5 + parent: 12 - uid: 2041 components: - type: Transform @@ -12532,6 +12662,12 @@ entities: linkedPorts: 19847: - DoorStatus: DoorBolt + - uid: 22277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,60.5 + parent: 12 - uid: 27232 components: - type: Transform @@ -12684,6 +12820,12 @@ entities: - type: Transform pos: -16.5,-62.5 parent: 12 + - uid: 22322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 - uid: 24238 components: - type: Transform @@ -12696,11 +12838,6 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-39.5 parent: 12 - - uid: 29395 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - proto: AirlockExternalGlassShuttleLocked entities: - uid: 1968 @@ -12765,17 +12902,23 @@ entities: - type: Transform pos: -36.5,13.5 parent: 12 - - uid: 26256 + - uid: 22320 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-48.5 + rot: -1.5707963267948966 rad + pos: -57.5,62.5 parent: 12 - - uid: 29394 + - uid: 22321 components: - type: Transform rot: -1.5707963267948966 rad - pos: -54.5,62.5 + pos: -57.5,60.5 + parent: 12 + - uid: 26256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,-48.5 parent: 12 - proto: AirlockExternalLocked entities: @@ -13471,6 +13614,27 @@ entities: rot: 3.141592653589793 rad pos: 31.5,23.5 parent: 12 + - uid: 12011 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 12019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,12.5 + parent: 12 + - uid: 12028 + components: + - type: Transform + pos: 33.5,9.5 + parent: 12 + - uid: 12122 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 - uid: 14946 components: - type: Transform @@ -13536,6 +13700,11 @@ entities: - type: Transform pos: -12.5,-5.5 parent: 12 + - uid: 22304 + components: + - type: Transform + pos: 37.5,9.5 + parent: 12 - uid: 22340 components: - type: Transform @@ -13908,12 +14077,6 @@ entities: parent: 12 - proto: AirlockMedicalLocked entities: - - uid: 1081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-46.5 - parent: 12 - uid: 2431 components: - type: Transform @@ -13988,6 +14151,13 @@ entities: rot: 3.141592653589793 rad pos: -39.5,-48.5 parent: 12 +- proto: AirlockMedicalScienceLocked + entities: + - uid: 514 + components: + - type: Transform + pos: -36.5,-46.5 + parent: 12 - proto: AirlockQuartermasterLocked entities: - uid: 8437 @@ -14626,12 +14796,18 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-26.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9988 components: - type: Transform rot: 1.5707963267948966 rad pos: -53.5,-22.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9989 components: - type: Transform @@ -15634,11 +15810,6 @@ entities: - type: Transform pos: 5.3721876,30.61469 parent: 12 - - uid: 23716 - components: - - type: Transform - pos: 33.66482,47.484264 - parent: 12 - uid: 26399 components: - type: Transform @@ -15753,6 +15924,11 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-9.5 parent: 12 + - uid: 2448 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 - uid: 2543 components: - type: Transform @@ -15909,11 +16085,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 - - uid: 12086 + - uid: 11512 components: - type: Transform rot: 1.5707963267948966 rad - pos: 36.5,19.5 + pos: 36.5,18.5 parent: 12 - uid: 12423 components: @@ -16364,11 +16540,6 @@ entities: rot: 1.5707963267948966 rad pos: 64.5,-13.5 parent: 12 - - uid: 8533 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 9039 components: - type: Transform @@ -16413,6 +16584,24 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,76.5 parent: 12 + - uid: 12033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 + - uid: 12057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,62.5 + parent: 12 + - uid: 12645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,60.5 + parent: 12 - uid: 13558 components: - type: Transform @@ -16461,12 +16650,6 @@ entities: rot: 3.141592653589793 rad pos: -18.5,74.5 parent: 12 - - uid: 25445 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -54.5,62.5 - parent: 12 - proto: AtmosFixBlockerMarker entities: - uid: 93 @@ -17644,11 +17827,6 @@ entities: parent: 12 - proto: BaseComputer entities: - - uid: 689 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - uid: 9825 components: - type: Transform @@ -18362,16 +18540,6 @@ entities: - type: Transform pos: -47.5,51.5 parent: 12 - - uid: 11959 - components: - - type: Transform - pos: 38.5,14.5 - parent: 12 - - uid: 11960 - components: - - type: Transform - pos: 34.5,14.5 - parent: 12 - uid: 16503 components: - type: Transform @@ -18541,6 +18709,13 @@ entities: - type: Transform pos: 6.5,66.5 parent: 12 +- proto: BlockGameArcadeComputerCircuitboard + entities: + - uid: 22318 + components: + - type: Transform + pos: 34.946262,45.383537 + parent: 12 - proto: Bloodpack entities: - uid: 13830 @@ -19126,6 +19301,12 @@ entities: parent: 12 - proto: BoxingBell entities: + - uid: 12634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,53.5 + parent: 12 - uid: 22635 components: - type: Transform @@ -19621,6 +19802,11 @@ entities: - type: Transform pos: -43.5,-13.5 parent: 12 + - uid: 1087 + components: + - type: Transform + pos: 37.5,6.5 + parent: 12 - uid: 1315 components: - type: Transform @@ -22086,6 +22272,11 @@ entities: - type: Transform pos: 0.5,-34.5 parent: 12 + - uid: 3892 + components: + - type: Transform + pos: 51.5,12.5 + parent: 12 - uid: 4119 components: - type: Transform @@ -22506,6 +22697,11 @@ entities: - type: Transform pos: 63.5,-5.5 parent: 12 + - uid: 5038 + components: + - type: Transform + pos: 52.5,11.5 + parent: 12 - uid: 5052 components: - type: Transform @@ -22576,6 +22772,16 @@ entities: - type: Transform pos: 27.5,-1.5 parent: 12 + - uid: 5554 + components: + - type: Transform + pos: 52.5,10.5 + parent: 12 + - uid: 5555 + components: + - type: Transform + pos: 51.5,10.5 + parent: 12 - uid: 5643 components: - type: Transform @@ -25506,6 +25712,11 @@ entities: - type: Transform pos: -11.5,-8.5 parent: 12 + - uid: 8533 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 8773 components: - type: Transform @@ -25576,6 +25787,11 @@ entities: - type: Transform pos: 85.5,-33.5 parent: 12 + - uid: 8864 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 8877 components: - type: Transform @@ -26526,6 +26742,11 @@ entities: - type: Transform pos: 47.5,-0.5 parent: 12 + - uid: 11366 + components: + - type: Transform + pos: -53.5,61.5 + parent: 12 - uid: 11367 components: - type: Transform @@ -26536,6 +26757,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 + - uid: 11400 + components: + - type: Transform + pos: -52.5,61.5 + parent: 12 - uid: 11484 components: - type: Transform @@ -26546,11 +26772,61 @@ entities: - type: Transform pos: 31.5,30.5 parent: 12 + - uid: 11980 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 + - uid: 11981 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 11985 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11998 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 11999 + components: + - type: Transform + pos: 38.5,18.5 + parent: 12 + - uid: 12010 + components: + - type: Transform + pos: 30.5,17.5 + parent: 12 + - uid: 12012 + components: + - type: Transform + pos: 29.5,17.5 + parent: 12 + - uid: 12013 + components: + - type: Transform + pos: 28.5,17.5 + parent: 12 + - uid: 12029 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 12072 components: - type: Transform pos: -42.5,53.5 parent: 12 + - uid: 12077 + components: + - type: Transform + pos: 38.5,16.5 + parent: 12 - uid: 12087 components: - type: Transform @@ -26611,16 +26887,6 @@ entities: - type: Transform pos: 37.5,8.5 parent: 12 - - uid: 12099 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - - uid: 12100 - components: - - type: Transform - pos: 35.5,8.5 - parent: 12 - uid: 12101 components: - type: Transform @@ -26656,21 +26922,6 @@ entities: - type: Transform pos: 33.5,9.5 parent: 12 - - uid: 12108 - components: - - type: Transform - pos: 30.5,10.5 - parent: 12 - - uid: 12109 - components: - - type: Transform - pos: 31.5,10.5 - parent: 12 - - uid: 12110 - components: - - type: Transform - pos: 32.5,10.5 - parent: 12 - uid: 12111 components: - type: Transform @@ -26681,85 +26932,20 @@ entities: - type: Transform pos: 34.5,10.5 parent: 12 - - uid: 12113 - components: - - type: Transform - pos: 35.5,10.5 - parent: 12 - - uid: 12114 - components: - - type: Transform - pos: 36.5,10.5 - parent: 12 - uid: 12115 components: - type: Transform pos: 37.5,10.5 parent: 12 - - uid: 12116 - components: - - type: Transform - pos: 38.5,10.5 - parent: 12 - - uid: 12117 - components: - - type: Transform - pos: 39.5,10.5 - parent: 12 - - uid: 12118 - components: - - type: Transform - pos: 40.5,10.5 - parent: 12 - uid: 12119 components: - type: Transform pos: 41.5,10.5 parent: 12 - - uid: 12120 - components: - - type: Transform - pos: 42.5,10.5 - parent: 12 - - uid: 12121 - components: - - type: Transform - pos: 43.5,10.5 - parent: 12 - - uid: 12122 - components: - - type: Transform - pos: 44.5,10.5 - parent: 12 - - uid: 12123 - components: - - type: Transform - pos: 45.5,10.5 - parent: 12 - uid: 12124 components: - type: Transform - pos: 46.5,10.5 - parent: 12 - - uid: 12125 - components: - - type: Transform - pos: 47.5,10.5 - parent: 12 - - uid: 12126 - components: - - type: Transform - pos: 48.5,10.5 - parent: 12 - - uid: 12127 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - - uid: 12128 - components: - - type: Transform - pos: 49.5,11.5 + pos: 50.5,12.5 parent: 12 - uid: 12129 components: @@ -26806,36 +26992,6 @@ entities: - type: Transform pos: 41.5,12.5 parent: 12 - - uid: 12138 - components: - - type: Transform - pos: 40.5,12.5 - parent: 12 - - uid: 12139 - components: - - type: Transform - pos: 39.5,12.5 - parent: 12 - - uid: 12140 - components: - - type: Transform - pos: 38.5,12.5 - parent: 12 - - uid: 12141 - components: - - type: Transform - pos: 37.5,12.5 - parent: 12 - - uid: 12142 - components: - - type: Transform - pos: 36.5,12.5 - parent: 12 - - uid: 12143 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 12144 components: - type: Transform @@ -26851,46 +27007,11 @@ entities: - type: Transform pos: 32.5,12.5 parent: 12 - - uid: 12147 - components: - - type: Transform - pos: 31.5,12.5 - parent: 12 - - uid: 12148 - components: - - type: Transform - pos: 30.5,12.5 - parent: 12 - - uid: 12149 - components: - - type: Transform - pos: 30.5,11.5 - parent: 12 - - uid: 12150 - components: - - type: Transform - pos: 30.5,13.5 - parent: 12 - - uid: 12151 - components: - - type: Transform - pos: 30.5,14.5 - parent: 12 - - uid: 12152 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 12153 components: - type: Transform pos: 32.5,14.5 parent: 12 - - uid: 12154 - components: - - type: Transform - pos: 33.5,14.5 - parent: 12 - uid: 12155 components: - type: Transform @@ -26921,11 +27042,6 @@ entities: - type: Transform pos: 39.5,14.5 parent: 12 - - uid: 12161 - components: - - type: Transform - pos: 40.5,14.5 - parent: 12 - uid: 12162 components: - type: Transform @@ -27246,6 +27362,11 @@ entities: - type: Transform pos: 12.5,22.5 parent: 12 + - uid: 12636 + components: + - type: Transform + pos: 52.5,12.5 + parent: 12 - uid: 12714 components: - type: Transform @@ -34811,6 +34932,31 @@ entities: - type: Transform pos: 8.5,5.5 parent: 12 + - uid: 22298 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 22299 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 22300 + components: + - type: Transform + pos: 32.5,17.5 + parent: 12 + - uid: 22305 + components: + - type: Transform + pos: 31.5,17.5 + parent: 12 + - uid: 22313 + components: + - type: Transform + pos: 38.5,17.5 + parent: 12 - uid: 22519 components: - type: Transform @@ -34836,6 +34982,26 @@ entities: - type: Transform pos: 42.5,43.5 parent: 12 + - uid: 24196 + components: + - type: Transform + pos: -54.5,61.5 + parent: 12 + - uid: 24255 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 24256 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 + - uid: 24300 + components: + - type: Transform + pos: -52.5,60.5 + parent: 12 - uid: 24332 components: - type: Transform @@ -34846,6 +35012,26 @@ entities: - type: Transform pos: -28.5,10.5 parent: 12 + - uid: 24340 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 24456 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 + - uid: 24642 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 + - uid: 24651 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 24803 components: - type: Transform @@ -38671,11 +38857,6 @@ entities: - type: Transform pos: -52.5,62.5 parent: 12 - - uid: 29744 - components: - - type: Transform - pos: -53.5,62.5 - parent: 12 - uid: 29745 components: - type: Transform @@ -38811,21 +38992,6 @@ entities: - type: Transform pos: -41.5,68.5 parent: 12 - - uid: 29819 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - - uid: 29821 - components: - - type: Transform - pos: -54.5,62.5 - parent: 12 - - uid: 29823 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 29856 components: - type: Transform @@ -42671,6 +42837,11 @@ entities: - type: Transform pos: 10.5,17.5 parent: 12 + - uid: 11292 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 11313 components: - type: Transform @@ -42891,6 +43062,71 @@ entities: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 11986 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 11987 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 11988 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - uid: 11989 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 11990 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 11991 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 11992 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 11993 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11994 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 + - uid: 11995 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 11996 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 12125 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 12140 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 13080 components: - type: Transform @@ -51165,6 +51401,11 @@ entities: - type: Transform pos: -60.5,27.5 parent: 12 + - uid: 6281 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 6891 components: - type: Transform @@ -52610,6 +52851,11 @@ entities: - type: Transform pos: -47.5,15.5 parent: 12 + - uid: 11359 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 - uid: 11450 components: - type: Transform @@ -52630,6 +52876,16 @@ entities: - type: Transform pos: -46.5,53.5 parent: 12 + - uid: 11487 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 11517 + components: + - type: Transform + pos: 36.5,18.5 + parent: 12 - uid: 11525 components: - type: Transform @@ -52640,6 +52896,21 @@ entities: - type: Transform pos: -23.5,-24.5 parent: 12 + - uid: 12014 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 + - uid: 12142 + components: + - type: Transform + pos: 37.5,18.5 + parent: 12 + - uid: 12292 + components: + - type: Transform + pos: 39.5,17.5 + parent: 12 - uid: 12346 components: - type: Transform @@ -52865,11 +53136,6 @@ entities: - type: Transform pos: 37.5,19.5 parent: 12 - - uid: 12391 - components: - - type: Transform - pos: 36.5,19.5 - parent: 12 - uid: 12412 components: - type: Transform @@ -52935,6 +53201,11 @@ entities: - type: Transform pos: 50.5,25.5 parent: 12 + - uid: 12640 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 - uid: 12856 components: - type: Transform @@ -57250,21 +57521,56 @@ entities: - type: Transform pos: 40.5,-5.5 parent: 12 + - uid: 22311 + components: + - type: Transform + pos: 39.5,18.5 + parent: 12 + - uid: 22330 + components: + - type: Transform + pos: -53.5,57.5 + parent: 12 - uid: 22336 components: - type: Transform pos: -53.5,52.5 parent: 12 + - uid: 22338 + components: + - type: Transform + pos: -53.5,56.5 + parent: 12 - uid: 22524 components: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 23122 + components: + - type: Transform + pos: -53.5,58.5 + parent: 12 - uid: 23123 components: - type: Transform pos: -31.5,70.5 parent: 12 + - uid: 23713 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 23715 + components: + - type: Transform + pos: -57.5,61.5 + parent: 12 + - uid: 23716 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 - uid: 23897 components: - type: Transform @@ -57880,11 +58186,6 @@ entities: - type: Transform pos: -29.5,-42.5 parent: 12 - - uid: 25387 - components: - - type: Transform - pos: -53.5,55.5 - parent: 12 - uid: 25388 components: - type: Transform @@ -57910,6 +58211,21 @@ entities: - type: Transform pos: -53.5,51.5 parent: 12 + - uid: 25441 + components: + - type: Transform + pos: 40.5,17.5 + parent: 12 + - uid: 25443 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 25445 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 25446 components: - type: Transform @@ -57940,6 +58256,46 @@ entities: - type: Transform pos: -27.5,64.5 parent: 12 + - uid: 25471 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 25472 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 + - uid: 25473 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 25474 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 + - uid: 25475 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 25476 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 25477 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 25478 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 25479 components: - type: Transform @@ -57955,16 +58311,46 @@ entities: - type: Transform pos: 80.5,-0.5 parent: 12 + - uid: 25482 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 25483 components: - type: Transform pos: 80.5,2.5 parent: 12 + - uid: 25484 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 25539 components: - type: Transform pos: 12.5,-8.5 parent: 12 + - uid: 25542 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 25543 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 25544 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 25545 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 - uid: 25633 components: - type: Transform @@ -58095,6 +58481,21 @@ entities: - type: Transform pos: -30.5,12.5 parent: 12 + - uid: 25833 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 25837 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 25838 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 25870 components: - type: Transform @@ -60240,7 +60641,7 @@ entities: - uid: 13243 components: - type: Transform - pos: 47.56619,32.22632 + pos: 47.5362,32.56305 parent: 12 - uid: 13252 components: @@ -60262,6 +60663,18 @@ entities: - type: Transform pos: 50.394928,18.488558 parent: 12 + - uid: 22262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,36.5 + parent: 12 + - uid: 22267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,38.5 + parent: 12 - uid: 25974 components: - type: Transform @@ -60292,6 +60705,30 @@ entities: rot: -1.5707963267948966 rad pos: 40.87812,39.779 parent: 12 + - uid: 26093 + components: + - type: Transform + pos: 55.5,39.5 + parent: 12 + - uid: 26094 + components: + - type: Transform + pos: 55.5,35.5 + parent: 12 +- proto: CandleSmall + entities: + - uid: 16858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,39.5 + parent: 12 + - uid: 22266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,35.5 + parent: 12 - proto: CannabisSeeds entities: - uid: 4189 @@ -62359,12 +62796,24 @@ entities: rot: -1.5707963267948966 rad pos: -37.5,-21.5 parent: 12 + - uid: 12116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 12 - uid: 12806 components: - type: Transform rot: 1.5707963267948966 rad pos: 52.5,34.5 parent: 12 + - uid: 12884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 13096 components: - type: Transform @@ -62461,12 +62910,6 @@ entities: rot: 1.5707963267948966 rad pos: 48.5,38.5 parent: 12 - - uid: 13188 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 49.5,39.5 - parent: 12 - uid: 13189 components: - type: Transform @@ -62533,12 +62976,6 @@ entities: rot: 1.5707963267948966 rad pos: 51.5,41.5 parent: 12 - - uid: 13210 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - uid: 13211 components: - type: Transform @@ -63003,6 +63440,26 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-53.5 parent: 12 + - uid: 2301 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 2311 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 2322 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 2324 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 - uid: 2487 components: - type: Transform @@ -63365,6 +63822,30 @@ entities: rot: 1.5707963267948966 rad pos: 9.5,10.5 parent: 12 + - uid: 5556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,14.5 + parent: 12 + - uid: 5559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 5560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - uid: 5561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 - uid: 5805 components: - type: Transform @@ -64283,6 +64764,11 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-9.5 parent: 12 + - uid: 9511 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 9528 components: - type: Transform @@ -64634,6 +65120,11 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,68.5 parent: 12 + - uid: 11233 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 11285 components: - type: Transform @@ -64705,6 +65196,11 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,26.5 parent: 12 + - uid: 11333 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 11338 components: - type: Transform @@ -64715,6 +65211,11 @@ entities: - type: Transform pos: -3.5,9.5 parent: 12 + - uid: 11356 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 - uid: 11357 components: - type: Transform @@ -64802,6 +65303,58 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,62.5 parent: 12 + - uid: 12004 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 12052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - uid: 12073 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,13.5 + parent: 12 + - uid: 12075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,13.5 + parent: 12 + - uid: 12086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,12.5 + parent: 12 + - uid: 12108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,12.5 + parent: 12 + - uid: 12109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,12.5 + parent: 12 + - uid: 12147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,12.5 + parent: 12 + - uid: 12161 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 12701 components: - type: Transform @@ -65814,6 +66367,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-0.5 parent: 12 + - uid: 22286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 22291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,12.5 + parent: 12 + - uid: 22317 + components: + - type: Transform + pos: 41.5,10.5 + parent: 12 - uid: 22470 components: - type: Transform @@ -66494,6 +67064,34 @@ entities: - type: Transform pos: 32.5,17.5 parent: 12 + - uid: 24647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - uid: 24648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,12.5 + parent: 12 + - uid: 24649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,11.5 + parent: 12 + - uid: 24652 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 24653 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 - uid: 24670 components: - type: Transform @@ -68226,6 +68824,11 @@ entities: rot: 3.141592653589793 rad pos: 37.48719,-39.759666 parent: 12 + - uid: 22319 + components: + - type: Transform + pos: 35.647026,45.447662 + parent: 12 - proto: CentrifugeMachineCircuitboard entities: - uid: 13003 @@ -68509,6 +69112,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,23.5 parent: 12 + - uid: 12020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,10.5 + parent: 12 - uid: 12281 components: - type: Transform @@ -68575,12 +69184,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,28.5 parent: 12 - - uid: 13481 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,33.5 - parent: 12 - uid: 13482 components: - type: Transform @@ -70083,10 +70686,10 @@ entities: parent: 12 - proto: ChemistryHotplate entities: - - uid: 2301 + - uid: 12644 components: - type: Transform - pos: -32.5,-43.5 + pos: -32.5,-44.5 parent: 12 - uid: 26234 components: @@ -70141,6 +70744,14 @@ entities: rot: 3.141592653589793 rad pos: -14.476033,37.570534 parent: 12 +- proto: ChurchBell + entities: + - uid: 11461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,33.5 + parent: 12 - proto: ChurchOrganInstrument entities: - uid: 13110 @@ -70307,11 +70918,6 @@ entities: - type: Transform pos: 5.5,-15.5 parent: 12 - - uid: 8884 - components: - - type: Transform - pos: 55.5,-31.5 - parent: 12 - uid: 9567 components: - type: Transform @@ -70327,6 +70933,21 @@ entities: - type: Transform pos: -26.5,-5.5 parent: 12 + - uid: 11467 + components: + - type: Transform + pos: 76.5,-30.5 + parent: 12 + - uid: 12024 + components: + - type: Transform + pos: 49.5,11.5 + parent: 12 + - uid: 12031 + components: + - type: Transform + pos: 29.5,16.5 + parent: 12 - uid: 13940 components: - type: Transform @@ -70594,6 +71215,11 @@ entities: - type: Transform pos: 47.5,-36.5 parent: 12 + - uid: 12023 + components: + - type: Transform + pos: 49.5,10.5 + parent: 12 - uid: 13942 components: - type: Transform @@ -70836,10 +71462,20 @@ entities: - type: Transform pos: 37.5,-23.5 parent: 12 - - uid: 9511 + - uid: 12021 components: - type: Transform - pos: -52.5,61.5 + pos: 43.5,10.5 + parent: 12 + - uid: 12022 + components: + - type: Transform + pos: 36.5,10.5 + parent: 12 + - uid: 12113 + components: + - type: Transform + pos: -52.5,56.5 parent: 12 - uid: 12246 components: @@ -70916,6 +71552,11 @@ entities: - type: Transform pos: 0.5,54.5 parent: 12 + - uid: 24655 + components: + - type: Transform + pos: 30.5,10.5 + parent: 12 - uid: 24994 components: - type: Transform @@ -71176,6 +71817,11 @@ entities: - type: Transform pos: -26.5,52.5 parent: 12 + - uid: 23712 + components: + - type: Transform + pos: -54.5,63.5 + parent: 12 - uid: 25358 components: - type: Transform @@ -71200,6 +71846,11 @@ entities: - type: Transform pos: -27.5,49.5 parent: 12 + - uid: 23760 + components: + - type: Transform + pos: -52.5,63.5 + parent: 12 - uid: 25345 components: - type: Transform @@ -71223,7 +71874,7 @@ entities: - uid: 2043 components: - type: Transform - pos: -21.5,-19.5 + pos: -18.489782,-21.02709 parent: 12 - uid: 9108 components: @@ -71235,6 +71886,11 @@ entities: - type: Transform pos: -19.5,-3.5 parent: 12 + - uid: 12034 + components: + - type: Transform + pos: 29.404346,45.5935 + parent: 12 - uid: 16475 components: - type: Transform @@ -71540,11 +72196,6 @@ entities: - type: Transform pos: -21.489107,31.8025 parent: 12 - - uid: 23720 - components: - - type: Transform - pos: 33.493465,47.80226 - parent: 12 - proto: ClothingHeadHelmetRiot entities: - uid: 20866 @@ -71907,11 +72558,6 @@ entities: - type: Transform pos: -21.760761,31.400925 parent: 12 - - uid: 23721 - components: - - type: Transform - pos: 33.493465,47.484264 - parent: 12 - proto: ClothingOuterSuitMonkey entities: - uid: 2751 @@ -72545,6 +73191,11 @@ entities: rot: -1.5707963267948966 rad pos: 52.5,22.5 parent: 12 + - uid: 22307 + components: + - type: Transform + pos: 36.5,8.5 + parent: 12 - proto: ComputerCargoBounty entities: - uid: 8469 @@ -72850,10 +73501,11 @@ entities: parent: 12 - proto: ComputerRoboticsControl entities: - - uid: 2072 + - uid: 12138 components: - type: Transform - pos: -25.5,-27.5 + rot: 1.5707963267948966 rad + pos: -26.5,-30.5 parent: 12 - proto: ComputerSalvageExpedition entities: @@ -73507,6 +74159,102 @@ entities: rot: -1.5707963267948966 rad pos: 75.5,-37.5 parent: 12 + - uid: 11462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,-38.5 + parent: 12 + - uid: 11497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,16.5 + parent: 12 + - uid: 11498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,14.5 + parent: 12 + - uid: 11499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,14.5 + parent: 12 + - uid: 11507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,14.5 + parent: 12 + - uid: 11518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,14.5 + parent: 12 + - uid: 11519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,14.5 + parent: 12 + - uid: 11528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,14.5 + parent: 12 + - uid: 11529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,14.5 + parent: 12 + - uid: 11531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,14.5 + parent: 12 + - uid: 11532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,14.5 + parent: 12 + - uid: 11533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 11534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 11958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,14.5 + parent: 12 + - uid: 11959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,16.5 + parent: 12 + - uid: 11960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,15.5 + parent: 12 - uid: 11972 components: - type: Transform @@ -73533,514 +74281,106 @@ entities: pos: 35.5,15.5 parent: 12 - uid: 11977 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,14.5 - parent: 12 - - uid: 11978 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,14.5 - parent: 12 - - uid: 11979 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,14.5 - parent: 12 - - uid: 11980 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,14.5 - parent: 12 - - uid: 11981 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,14.5 - parent: 12 - - uid: 11982 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,14.5 - parent: 12 - - uid: 11983 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,14.5 - parent: 12 - - uid: 11985 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,8.5 - parent: 12 - - uid: 11986 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,9.5 - parent: 12 - - uid: 11987 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,10.5 - parent: 12 - - uid: 11988 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,14.5 - parent: 12 - - uid: 11989 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,14.5 + pos: 52.5,14.5 parent: 12 - - uid: 11990 + - uid: 12030 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,14.5 + pos: 34.5,14.5 parent: 12 - - uid: 11991 + - uid: 12079 components: - type: Transform rot: 1.5707963267948966 rad - pos: 43.5,14.5 + pos: 52.5,17.5 parent: 12 - - uid: 11992 + - uid: 12081 components: - type: Transform rot: 1.5707963267948966 rad - pos: 44.5,14.5 + pos: 53.5,17.5 parent: 12 - - uid: 11993 + - uid: 12082 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,14.5 + pos: 54.5,17.5 parent: 12 - - uid: 11994 + - uid: 12083 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,14.5 + pos: 55.5,17.5 parent: 12 - - uid: 11995 + - uid: 12123 components: - type: Transform rot: 1.5707963267948966 rad - pos: 47.5,14.5 + pos: 35.5,14.5 parent: 12 - - uid: 11996 + - uid: 12290 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,14.5 + pos: 35.5,6.5 parent: 12 - - uid: 11997 + - uid: 12610 components: - type: Transform rot: 1.5707963267948966 rad - pos: 49.5,14.5 + pos: 56.5,40.5 parent: 12 - - uid: 11998 + - uid: 12611 components: - type: Transform rot: 1.5707963267948966 rad - pos: 50.5,14.5 + pos: 57.5,40.5 parent: 12 - - uid: 11999 + - uid: 12612 components: - type: Transform rot: 1.5707963267948966 rad - pos: 51.5,14.5 - parent: 12 - - uid: 12000 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,14.5 - parent: 12 - - uid: 12001 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,15.5 - parent: 12 - - uid: 12002 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,16.5 - parent: 12 - - uid: 12003 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,11.5 - parent: 12 - - uid: 12004 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,12.5 - parent: 12 - - uid: 12005 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12006 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,14.5 - parent: 12 - - uid: 12007 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,10.5 - parent: 12 - - uid: 12008 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,10.5 - parent: 12 - - uid: 12009 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,10.5 - parent: 12 - - uid: 12010 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,10.5 - parent: 12 - - uid: 12011 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,9.5 - parent: 12 - - uid: 12012 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,8.5 - parent: 12 - - uid: 12013 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,8.5 - parent: 12 - - uid: 12014 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,8.5 + pos: 58.5,40.5 parent: 12 - - uid: 12015 + - uid: 12613 components: - type: Transform rot: 1.5707963267948966 rad - pos: 35.5,7.5 + pos: 59.5,40.5 parent: 12 - - uid: 12016 + - uid: 12632 components: - type: Transform rot: 1.5707963267948966 rad - pos: 34.5,7.5 - parent: 12 - - uid: 12017 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,7.5 - parent: 12 - - uid: 12018 - components: - - type: Transform - rot: -1.5707963267948966 rad pos: 33.5,6.5 parent: 12 - - uid: 12019 + - uid: 12633 components: - type: Transform - rot: -1.5707963267948966 rad + rot: 1.5707963267948966 rad pos: 34.5,6.5 parent: 12 - - uid: 12020 + - uid: 12642 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,6.5 - parent: 12 - - uid: 12021 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,10.5 - parent: 12 - - uid: 12022 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 39.5,10.5 - parent: 12 - - uid: 12023 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,10.5 - parent: 12 - - uid: 12024 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,10.5 - parent: 12 - - uid: 12025 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,10.5 - parent: 12 - - uid: 12026 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,10.5 - parent: 12 - - uid: 12027 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,10.5 - parent: 12 - - uid: 12028 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,10.5 - parent: 12 - - uid: 12029 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,10.5 - parent: 12 - - uid: 12030 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,10.5 + pos: 77.5,-38.5 parent: 12 - - uid: 12031 + - uid: 22295 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,10.5 - parent: 12 - - uid: 12032 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,10.5 - parent: 12 - - uid: 12033 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,11.5 - parent: 12 - - uid: 12034 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,12.5 - parent: 12 - - uid: 12035 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,12.5 - parent: 12 - - uid: 12036 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,12.5 - parent: 12 - - uid: 12037 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,12.5 - parent: 12 - - uid: 12038 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,12.5 - parent: 12 - - uid: 12039 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,12.5 - parent: 12 - - uid: 12040 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,12.5 - parent: 12 - - uid: 12041 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,12.5 - parent: 12 - - uid: 12042 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - uid: 12043 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - uid: 12044 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 + pos: 36.5,6.5 parent: 12 - - uid: 12045 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - uid: 12046 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - uid: 12047 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - uid: 12048 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - uid: 12049 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - uid: 12050 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,12.5 - parent: 12 - - uid: 12051 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - uid: 12052 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12053 + - uid: 22312 components: - type: Transform rot: 3.141592653589793 rad - pos: 31.5,13.5 - parent: 12 - - uid: 12054 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,14.5 - parent: 12 - - uid: 12079 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 52.5,17.5 - parent: 12 - - uid: 12081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 53.5,17.5 - parent: 12 - - uid: 12082 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 54.5,17.5 - parent: 12 - - uid: 12083 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 55.5,17.5 - parent: 12 - - uid: 12610 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 56.5,40.5 - parent: 12 - - uid: 12611 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 57.5,40.5 - parent: 12 - - uid: 12612 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,40.5 - parent: 12 - - uid: 12613 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,40.5 + pos: 39.5,15.5 parent: 12 - proto: CrateAirlockKit entities: @@ -74746,11 +75086,6 @@ entities: - type: Transform pos: -21.553009,31.481783 parent: 12 - - uid: 23719 - components: - - type: Transform - pos: 33.38331,47.39865 - parent: 12 - proto: CryogenicSleepUnit entities: - uid: 21356 @@ -75166,6 +75501,11 @@ entities: parent: 12 - proto: DefaultStationBeaconEscapePod entities: + - uid: 509 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 - uid: 627 components: - type: Transform @@ -75181,11 +75521,6 @@ entities: - type: Transform pos: -16.5,-61.5 parent: 12 - - uid: 6281 - components: - - type: Transform - pos: 34.5,-42.5 - parent: 12 - uid: 7275 components: - type: Transform @@ -75201,11 +75536,6 @@ entities: - type: Transform pos: -22.5,65.5 parent: 12 - - uid: 29722 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - proto: DefaultStationBeaconEvac entities: - uid: 7264 @@ -76018,6 +76348,28 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,17.5 parent: 12 + - uid: 12006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,12.5 + parent: 12 + - uid: 12007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 12008 + components: + - type: Transform + pos: 46.5,14.5 + parent: 12 + - uid: 12139 + components: + - type: Transform + pos: 41.5,19.5 + parent: 12 - uid: 12304 components: - type: Transform @@ -77202,6 +77554,12 @@ entities: rot: -1.5707963267948966 rad pos: -31.5,-42.5 parent: 12 + - uid: 789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,19.5 + parent: 12 - uid: 886 components: - type: Transform @@ -77220,6 +77578,18 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-10.5 parent: 12 + - uid: 1084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 1086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,19.5 + parent: 12 - uid: 1864 components: - type: Transform @@ -80011,6 +80381,26 @@ entities: rot: 1.5707963267948966 rad pos: 22.5,-17.5 parent: 12 + - uid: 11492 + components: + - type: Transform + pos: 41.5,18.5 + parent: 12 + - uid: 11493 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 11495 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 11496 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 - uid: 11961 components: - type: Transform @@ -80047,6 +80437,24 @@ entities: rot: 3.141592653589793 rad pos: 39.5,20.5 parent: 12 + - uid: 12002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - uid: 12003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,13.5 + parent: 12 + - uid: 12099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 - uid: 12295 components: - type: Transform @@ -80101,6 +80509,17 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,17.5 parent: 12 + - uid: 12391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 12635 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 12660 components: - type: Transform @@ -80279,6 +80698,12 @@ entities: rot: 1.5707963267948966 rad pos: 33.5,23.5 parent: 12 + - uid: 13188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 - uid: 13597 components: - type: Transform @@ -82321,6 +82746,17 @@ entities: - type: Transform pos: -25.5,27.5 parent: 12 + - uid: 22275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,19.5 + parent: 12 + - uid: 22308 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 - uid: 22418 components: - type: Transform @@ -84914,6 +85350,18 @@ entities: rot: -1.5707963267948966 rad pos: 47.5,17.5 parent: 12 + - uid: 12333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 12637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,19.5 + parent: 12 - uid: 12702 components: - type: Transform @@ -85346,6 +85794,13 @@ entities: - type: Transform pos: -8.5,-24.5 parent: 12 + - uid: 11503 + components: + - type: MetaData + name: disposal unit to waste ejection + - type: Transform + pos: 37.5,19.5 + parent: 12 - uid: 12307 components: - type: Transform @@ -86158,6 +86613,13 @@ entities: - type: Transform pos: 77.61463,48.901142 parent: 12 +- proto: ElectricGuitarInstrument + entities: + - uid: 13481 + components: + - type: Transform + pos: -31.423407,7.5807095 + parent: 12 - proto: EmergencyFunnyOxygenTankFilled entities: - uid: 27129 @@ -87809,6 +88271,21 @@ entities: - type: Transform pos: -21.497362,-25.426727 parent: 12 + - uid: 12149 + components: + - type: Transform + pos: 80.2891,-38.43335 + parent: 12 + - uid: 12293 + components: + - type: Transform + pos: 80.56647,-38.438786 + parent: 12 + - uid: 12921 + components: + - type: Transform + pos: 80.773125,-38.438786 + parent: 12 - uid: 13505 components: - type: Transform @@ -87844,16 +88321,6 @@ entities: - type: Transform pos: 49.010647,46.51752 parent: 12 - - uid: 23711 - components: - - type: Transform - pos: 35.217464,45.578423 - parent: 12 - - uid: 23722 - components: - - type: Transform - pos: 33.741333,47.545418 - parent: 12 - proto: FirelockEdge entities: - uid: 2114 @@ -89264,6 +89731,15 @@ entities: rot: 3.141592653589793 rad pos: 36.5,23.5 parent: 12 + - uid: 12725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 + - type: DeviceNetwork + deviceLists: + - 25448 - uid: 13165 components: - type: Transform @@ -90911,6 +91387,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23934 components: - type: Transform @@ -90920,6 +91397,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23935 components: - type: Transform @@ -91276,23 +91754,41 @@ entities: - uid: 4313 components: - type: Transform - pos: 78.68511,-38.520813 + pos: 79.504265,-32.459354 parent: 12 + - type: HandheldLight + toggleActionEntity: 12036 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12036 + - type: ActionsContainer - uid: 12064 components: - type: Transform - pos: 78.33654,-38.539158 - parent: 12 - - uid: 23759 - components: - - type: Transform - pos: 71.5,42.5 - parent: 12 - - uid: 23760 - components: - - type: Transform - pos: 71.5,55.5 + pos: 78.500854,-32.475662 parent: 12 + - type: HandheldLight + toggleActionEntity: 12037 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12037 + - type: ActionsContainer - proto: FloorDrain entities: - uid: 2303 @@ -93457,6 +93953,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 12047 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12671 components: - type: Transform @@ -94200,6 +94703,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22316 + components: + - type: Transform + pos: 48.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22552 components: - type: Transform @@ -94732,6 +95242,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 25092 components: - type: Transform @@ -96610,6 +97128,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 2072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2110 components: - type: Transform @@ -102966,6 +103492,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 10693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 10891 components: - type: Transform @@ -103470,6 +104004,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 11426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 11863 components: - type: Transform @@ -103598,6 +104148,70 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 11979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,9.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,8.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,14.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,10.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12276 components: - type: Transform @@ -112866,14 +113480,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 23122 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 23125 components: - type: Transform @@ -113667,6 +114273,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23884 components: - type: Transform @@ -114010,6 +114624,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 24644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 24804 components: - type: Transform @@ -114041,13 +114671,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 26070 - components: - - type: Transform - pos: 41.5,11.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 26201 components: - type: Transform @@ -115140,14 +115763,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' - - uid: 27736 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27894 components: - type: Transform @@ -115228,22 +115843,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' - - uid: 27914 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27915 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27916 components: - type: Transform @@ -115268,38 +115867,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 27919 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27920 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27921 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 28216 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 28217 components: - type: Transform @@ -116621,6 +117188,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' + - uid: 2309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2637 components: - type: Transform @@ -117168,14 +117743,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6154 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6751 components: - type: Transform @@ -117716,6 +118283,30 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12265 components: - type: Transform @@ -119050,6 +119641,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23720 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23948 components: - type: Transform @@ -119673,6 +120271,11 @@ entities: targetPressure: 4500 - type: AtmosPipeColor color: '#FF0000FF' + - uid: 12050 + components: + - type: Transform + pos: -45.5,-21.5 + parent: 12 - uid: 13521 components: - type: Transform @@ -119835,13 +120438,6 @@ entities: bodyType: Dynamic - proto: GasValve entities: - - uid: 789 - components: - - type: Transform - pos: -45.5,-21.5 - parent: 12 - - type: GasValve - open: False - uid: 4780 components: - type: Transform @@ -120438,6 +121034,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12735 components: - type: Transform @@ -120491,14 +121095,6 @@ entities: - 2611 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 12884 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,14.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12998 components: - type: Transform @@ -121107,6 +121703,14 @@ entities: - 22248 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,7.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22331 components: - type: Transform @@ -121331,6 +121935,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 26312 components: - type: Transform @@ -121627,12 +122239,18 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,-27.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 801 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,-23.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 993 components: - type: Transform @@ -123150,15 +123768,15 @@ entities: - type: Transform pos: 28.5,13.5 parent: 12 - - uid: 11532 + - uid: 11535 components: - type: Transform - pos: 47.5,11.5 + pos: 47.5,13.5 parent: 12 - - uid: 11535 + - uid: 11983 components: - type: Transform - pos: 47.5,13.5 + pos: 34.5,10.5 parent: 12 - uid: 12065 components: @@ -123183,6 +123801,12 @@ entities: - type: Transform pos: -3.5,16.5 parent: 12 + - uid: 22309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,11.5 + parent: 12 - uid: 23438 components: - type: Transform @@ -123251,11 +123875,6 @@ entities: - type: Transform pos: -44.677162,44.579002 parent: 12 - - uid: 23712 - components: - - type: Transform - pos: 35.731533,45.223732 - parent: 12 - uid: 29613 components: - type: Transform @@ -123806,12 +124425,6 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 508 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-26.5 - parent: 12 - uid: 520 components: - type: Transform @@ -124243,12 +124856,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1061 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1062 components: - type: Transform @@ -124261,6 +124868,12 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-45.5 parent: 12 + - uid: 1065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,56.5 + parent: 12 - uid: 1285 components: - type: Transform @@ -124337,6 +124950,11 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,-11.5 parent: 12 + - uid: 2048 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 2090 components: - type: Transform @@ -125341,11 +125959,6 @@ entities: - type: Transform pos: 46.5,0.5 parent: 12 - - uid: 5038 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 5079 components: - type: Transform @@ -125465,11 +126078,6 @@ entities: rot: 3.141592653589793 rad pos: -53.5,65.5 parent: 12 - - uid: 5858 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 5878 components: - type: Transform @@ -127339,11 +127947,6 @@ entities: rot: 3.141592653589793 rad pos: 12.5,22.5 parent: 12 - - uid: 11233 - components: - - type: Transform - pos: 44.5,-5.5 - parent: 12 - uid: 11242 components: - type: Transform @@ -127398,11 +128001,6 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,27.5 parent: 12 - - uid: 11292 - components: - - type: Transform - pos: 45.5,-1.5 - parent: 12 - uid: 11301 components: - type: Transform @@ -127415,16 +128013,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11356 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - - uid: 11359 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11360 components: - type: Transform @@ -127435,16 +128023,6 @@ entities: - type: Transform pos: 53.5,19.5 parent: 12 - - uid: 11428 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11429 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11448 components: - type: Transform @@ -127462,16 +128040,6 @@ entities: - type: Transform pos: 51.5,11.5 parent: 12 - - uid: 11461 - components: - - type: Transform - pos: 51.5,13.5 - parent: 12 - - uid: 11462 - components: - - type: Transform - pos: 52.5,13.5 - parent: 12 - uid: 11468 components: - type: Transform @@ -127499,16 +128067,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11511 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11512 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - uid: 11513 components: - type: Transform @@ -127524,36 +128082,11 @@ entities: - type: Transform pos: 49.5,15.5 parent: 12 - - uid: 11528 - components: - - type: Transform - pos: 46.5,11.5 - parent: 12 - - uid: 11529 - components: - - type: Transform - pos: 46.5,13.5 - parent: 12 - uid: 11530 components: - type: Transform pos: 44.5,13.5 parent: 12 - - uid: 11531 - components: - - type: Transform - pos: 43.5,13.5 - parent: 12 - - uid: 11533 - components: - - type: Transform - pos: 44.5,11.5 - parent: 12 - - uid: 11534 - components: - - type: Transform - pos: 43.5,11.5 - parent: 12 - uid: 11536 components: - type: Transform @@ -127920,6 +128453,17 @@ entities: - type: Transform pos: 59.5,38.5 parent: 12 + - uid: 11982 + components: + - type: Transform + pos: 33.5,13.5 + parent: 12 + - uid: 12055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 12231 components: - type: Transform @@ -130477,6 +131021,38 @@ entities: rot: 3.141592653589793 rad pos: -34.5,75.5 parent: 12 + - uid: 22276 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 22294 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22302 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 + - uid: 22303 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 + - uid: 22323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 22325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22337 components: - type: Transform @@ -130529,11 +131105,22 @@ entities: rot: 3.141592653589793 rad pos: -30.5,75.5 parent: 12 + - uid: 23759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 + parent: 12 - uid: 23887 components: - type: Transform pos: 49.5,9.5 parent: 12 + - uid: 24654 + components: + - type: Transform + pos: 30.5,11.5 + parent: 12 - uid: 24664 components: - type: Transform @@ -130573,16 +131160,6 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,51.5 parent: 12 - - uid: 25441 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - - uid: 25443 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 25447 components: - type: Transform @@ -131620,11 +132197,6 @@ entities: - type: Transform pos: -32.5,-45.5 parent: 12 - - uid: 27734 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27843 components: - type: Transform @@ -131993,11 +132565,6 @@ entities: - type: Transform pos: 74.5,-6.5 parent: 12 - - uid: 29095 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29096 components: - type: Transform @@ -132016,33 +132583,11 @@ entities: rot: 3.141592653589793 rad pos: 42.5,2.5 parent: 12 - - uid: 29099 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - - uid: 29104 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29113 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29148 components: - type: Transform pos: 49.5,-1.5 parent: 12 - - uid: 29160 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 29210 components: - type: Transform @@ -132284,6 +132829,11 @@ entities: - type: Transform pos: 44.5,-16.5 parent: 12 + - uid: 12027 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 12315 components: - type: Transform @@ -132773,6 +133323,18 @@ entities: - type: Transform pos: 66.5,45.5 parent: 12 + - uid: 12038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,42.5 + parent: 12 + - uid: 12039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,55.5 + parent: 12 - uid: 21359 components: - type: Transform @@ -132875,6 +133437,13 @@ entities: - type: Transform pos: 66.5,52.5 parent: 12 +- proto: HydroponicsTrayMachineCircuitboard + entities: + - uid: 12053 + components: + - type: Transform + pos: 35.258915,45.758537 + parent: 12 - proto: InflatableDoor entities: - uid: 28196 @@ -134351,6 +134920,11 @@ entities: parent: 12 - proto: LootSpawnerIndustrialFluff entities: + - uid: 2310 + components: + - type: Transform + pos: 34.5,6.5 + parent: 12 - uid: 2514 components: - type: Transform @@ -134396,11 +134970,6 @@ entities: - type: Transform pos: -12.5,68.5 parent: 12 - - uid: 25837 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 27004 components: - type: Transform @@ -134418,11 +134987,6 @@ entities: - type: Transform pos: 39.5,-19.5 parent: 12 - - uid: 25839 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 25951 components: - type: Transform @@ -134435,11 +134999,6 @@ entities: - type: Transform pos: -22.5,14.5 parent: 12 - - uid: 25840 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - proto: LootSpawnerMedicalClassy entities: - uid: 26302 @@ -134484,11 +135043,6 @@ entities: - type: Transform pos: -23.5,50.5 parent: 12 - - uid: 25838 - components: - - type: Transform - pos: 33.5,8.5 - parent: 12 - uid: 25952 components: - type: Transform @@ -134565,17 +135119,17 @@ entities: parent: 12 - proto: MachineCentrifuge entities: - - uid: 2324 + - uid: 12069 components: - type: Transform - pos: -30.5,-43.5 + pos: -30.5,-44.5 parent: 12 - proto: MachineElectrolysisUnit entities: - - uid: 2322 + - uid: 26090 components: - type: Transform - pos: -31.5,-43.5 + pos: -31.5,-44.5 parent: 12 - proto: MachineFrame entities: @@ -134691,6 +135245,11 @@ entities: - type: Transform pos: 35.5,-11.5 parent: 12 + - uid: 11490 + components: + - type: Transform + pos: 37.5,21.5 + parent: 12 - uid: 19550 components: - type: Transform @@ -134793,11 +135352,31 @@ entities: - type: Transform pos: 42.5,58.5 parent: 12 + - uid: 24658 + components: + - type: Transform + pos: 33.5,14.5 + parent: 12 + - uid: 24659 + components: + - type: Transform + pos: 40.5,19.5 + parent: 12 + - uid: 24660 + components: + - type: Transform + pos: 39.5,10.5 + parent: 12 - uid: 24684 components: - type: Transform pos: 23.5,61.5 parent: 12 + - uid: 25058 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 25809 components: - type: Transform @@ -134825,6 +135404,11 @@ entities: parent: 12 - proto: MaintenanceToolSpawner entities: + - uid: 689 + components: + - type: Transform + pos: 37.5,25.5 + parent: 12 - uid: 892 components: - type: Transform @@ -134880,6 +135464,11 @@ entities: - type: Transform pos: 2.5,64.5 parent: 12 + - uid: 24657 + components: + - type: Transform + pos: 30.5,14.5 + parent: 12 - uid: 24685 components: - type: Transform @@ -135144,7 +135733,7 @@ entities: - uid: 23435 components: - type: Transform - pos: 30.520699,45.458954 + pos: 30.665386,45.27058 parent: 12 - uid: 26224 components: @@ -135219,6 +135808,13 @@ entities: - type: Transform pos: 13.5,52.5 parent: 12 +- proto: MicrowaveMachineCircuitboard + entities: + - uid: 12035 + components: + - type: Transform + pos: 34.227154,45.685623 + parent: 12 - proto: Mirror entities: - uid: 60 @@ -135516,6 +136112,11 @@ entities: - type: Transform pos: -20.5,63.5 parent: 12 + - uid: 25839 + components: + - type: Transform + pos: 36.5,12.5 + parent: 12 - uid: 26386 components: - type: Transform @@ -135754,6 +136355,16 @@ entities: - type: Transform pos: -20.5,62.5 parent: 12 + - uid: 25840 + components: + - type: Transform + pos: 37.5,12.5 + parent: 12 + - uid: 26089 + components: + - type: Transform + pos: 30.5,16.5 + parent: 12 - uid: 26385 components: - type: Transform @@ -135809,8 +136420,16 @@ entities: - uid: 23717 components: - type: Transform - pos: 29.491083,45.55183 + pos: 30.165138,45.510162 parent: 12 + - type: GasTank + toggleActionEntity: 12128 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 12128 - proto: PackPaperRollingFilters entities: - uid: 506 @@ -136576,11 +137195,6 @@ entities: parent: 12 - proto: PlasticFlapsClear entities: - - uid: 514 - components: - - type: Transform - pos: -26.5,-26.5 - parent: 12 - uid: 7468 components: - type: Transform @@ -136591,25 +137205,15 @@ entities: - type: Transform pos: 47.5,-21.5 parent: 12 - - uid: 12056 - components: - - type: Transform - pos: 37.5,9.5 - parent: 12 - - uid: 12057 - components: - - type: Transform - pos: 33.5,9.5 - parent: 12 - - uid: 12058 + - uid: 11511 components: - type: Transform - pos: 35.5,16.5 + pos: 39.5,15.5 parent: 12 - - uid: 12059 + - uid: 22293 components: - type: Transform - pos: 40.5,14.5 + pos: 35.5,6.5 parent: 12 - proto: PlasticFlapsOpaque entities: @@ -136633,6 +137237,16 @@ entities: - type: Transform pos: 41.5,-15.5 parent: 12 + - uid: 12001 + components: + - type: Transform + pos: 34.5,14.5 + parent: 12 + - uid: 12141 + components: + - type: Transform + pos: 35.5,16.5 + parent: 12 - proto: Plunger entities: - uid: 22413 @@ -136745,6 +137359,11 @@ entities: - type: Transform pos: -35.5,-9.5 parent: 12 + - uid: 12025 + components: + - type: Transform + pos: 40.5,10.5 + parent: 12 - uid: 15859 components: - type: Transform @@ -136862,6 +137481,11 @@ entities: - type: Transform pos: 34.5,-30.5 parent: 12 + - uid: 12631 + components: + - type: Transform + pos: 33.5,47.5 + parent: 12 - uid: 16570 components: - type: Transform @@ -136877,11 +137501,6 @@ entities: - type: Transform pos: -24.5,20.5 parent: 12 - - uid: 23701 - components: - - type: Transform - pos: 31.5,47.5 - parent: 12 - uid: 23702 components: - type: Transform @@ -136904,12 +137523,6 @@ entities: parent: 12 - proto: PosterBroken entities: - - uid: 12227 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,11.5 - parent: 12 - uid: 12228 components: - type: Transform @@ -137847,11 +138460,6 @@ entities: - type: Transform pos: -26.5,-41.5 parent: 12 - - uid: 2478 - components: - - type: Transform - pos: -23.5,-41.5 - parent: 12 - uid: 2479 components: - type: Transform @@ -138739,6 +139347,48 @@ entities: rot: -1.5707963267948966 rad pos: -40.5,-33.5 parent: 12 + - uid: 12016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,18.5 + parent: 12 + - uid: 12148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-45.5 + parent: 12 + - uid: 12151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,55.5 + parent: 12 + - uid: 12152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,42.5 + parent: 12 + - uid: 12154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,55.5 + parent: 12 + - uid: 12227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,6.5 + parent: 12 + - uid: 12243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,29.5 + parent: 12 - uid: 12507 components: - type: Transform @@ -138788,12 +139438,6 @@ entities: - type: Transform pos: 42.5,31.5 parent: 12 - - uid: 12910 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,27.5 - parent: 12 - uid: 12914 components: - type: Transform @@ -139301,24 +139945,12 @@ entities: - type: Transform pos: 65.5,50.5 parent: 12 - - uid: 16852 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 69.5,42.5 - parent: 12 - uid: 16853 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,43.5 parent: 12 - - uid: 16854 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 73.5,42.5 - parent: 12 - uid: 16855 components: - type: Transform @@ -139331,16 +139963,6 @@ entities: rot: -1.5707963267948966 rad pos: 77.5,51.5 parent: 12 - - uid: 16857 - components: - - type: Transform - pos: 73.5,55.5 - parent: 12 - - uid: 16858 - components: - - type: Transform - pos: 69.5,55.5 - parent: 12 - uid: 16859 components: - type: Transform @@ -139376,12 +139998,6 @@ entities: - type: Transform pos: 72.5,45.5 parent: 12 - - uid: 16865 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,54.5 - parent: 12 - uid: 16866 components: - type: Transform @@ -139843,6 +140459,12 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-24.5 parent: 12 + - uid: 22329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,42.5 + parent: 12 - uid: 22499 components: - type: Transform @@ -140448,62 +141070,26 @@ entities: - type: Transform pos: 54.5,-18.5 parent: 12 - - uid: 12069 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,6.5 - parent: 12 - - uid: 12070 - components: - - type: Transform - pos: 34.5,8.5 - parent: 12 - - uid: 12071 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,11.5 - parent: 12 - - uid: 12073 + - uid: 12005 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,17.5 + pos: 40.5,25.5 parent: 12 - uid: 12074 components: - type: Transform pos: 29.5,17.5 parent: 12 - - uid: 12075 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12076 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,20.5 - parent: 12 - - uid: 12077 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,16.5 - parent: 12 - uid: 12078 components: - type: Transform pos: 50.5,20.5 parent: 12 - - uid: 12921 + - uid: 12291 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,24.5 + rot: 1.5707963267948966 rad + pos: 37.5,16.5 parent: 12 - uid: 12922 components: @@ -140517,12 +141103,6 @@ entities: rot: 1.5707963267948966 rad pos: 34.5,27.5 parent: 12 - - uid: 12924 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,22.5 - parent: 12 - uid: 12925 components: - type: Transform @@ -140772,6 +141352,12 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,54.5 parent: 12 + - uid: 22296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 - uid: 22709 components: - type: Transform @@ -140828,6 +141414,12 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,47.5 parent: 12 + - uid: 25413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,13.5 + parent: 12 - uid: 25586 components: - type: Transform @@ -141257,12 +141849,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,64.5 parent: 12 - - uid: 16374 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,-19.5 - parent: 12 - uid: 16451 components: - type: Transform @@ -141402,28 +141988,16 @@ entities: - type: Transform pos: 48.5,53.5 parent: 12 - - uid: 23704 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,45.5 - parent: 12 - uid: 23705 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,46.5 parent: 12 - - uid: 23706 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,47.5 - parent: 12 - - uid: 23715 + - uid: 24656 components: - type: Transform - pos: 33.5,47.5 + pos: 30.5,14.5 parent: 12 - uid: 25008 components: @@ -141879,17 +142453,17 @@ entities: - type: Transform pos: -29.5,-9.5 parent: 12 - - uid: 12290 + - uid: 12017 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,8.5 + rot: 3.141592653589793 rad + pos: 52.5,13.5 parent: 12 - - uid: 12291 + - uid: 12294 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,7.5 + rot: -1.5707963267948966 rad + pos: 40.5,16.5 parent: 12 - uid: 19862 components: @@ -141897,6 +142471,12 @@ entities: rot: 3.141592653589793 rad pos: 7.5,2.5 parent: 12 + - uid: 22287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,13.5 + parent: 12 - uid: 22594 components: - type: Transform @@ -142498,6 +143078,26 @@ entities: rot: 3.141592653589793 rad pos: -2.5,18.5 parent: 12 + - uid: 24665 + components: + - type: Transform + pos: 34.5,13.5 + parent: 12 + - uid: 25387 + components: + - type: Transform + pos: 34.5,9.5 + parent: 12 + - uid: 25394 + components: + - type: Transform + pos: 49.5,13.5 + parent: 12 + - uid: 25395 + components: + - type: Transform + pos: 36.5,19.5 + parent: 12 - uid: 25713 components: - type: Transform @@ -142540,6 +143140,11 @@ entities: - type: Transform pos: 9.5,-28.5 parent: 12 + - uid: 12628 + components: + - type: Transform + pos: 16.5,54.5 + parent: 12 - uid: 18633 components: - type: Transform @@ -142635,12 +143240,6 @@ entities: rot: 3.141592653589793 rad pos: 32.5,52.5 parent: 12 - - uid: 24300 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,53.5 - parent: 12 - uid: 24301 components: - type: Transform @@ -142836,11 +143435,21 @@ entities: - type: Transform pos: 31.5,10.5 parent: 12 + - uid: 5858 + components: + - type: Transform + pos: 36.5,14.5 + parent: 12 - uid: 6153 components: - type: Transform pos: 48.5,25.5 parent: 12 + - uid: 6154 + components: + - type: Transform + pos: 35.5,17.5 + parent: 12 - uid: 6156 components: - type: Transform @@ -142856,25 +143465,30 @@ entities: - type: Transform pos: 30.5,12.5 parent: 12 - - uid: 13969 + - uid: 13971 components: - type: Transform - pos: 36.5,14.5 + pos: 40.5,12.5 parent: 12 - - uid: 13970 + - uid: 21705 components: - type: Transform - pos: 45.5,10.5 + pos: 16.5,7.5 parent: 12 - - uid: 13971 + - uid: 23706 components: - type: Transform - pos: 40.5,12.5 + pos: -44.5,58.5 parent: 12 - - uid: 21705 + - uid: 23721 components: - type: Transform - pos: 16.5,7.5 + pos: -56.5,62.5 + parent: 12 + - uid: 23722 + components: + - type: Transform + pos: -52.5,60.5 parent: 12 - uid: 23982 components: @@ -143749,11 +144363,17 @@ entities: parent: 12 - proto: Recycler entities: - - uid: 28462 + - uid: 12076 components: - type: Transform rot: -1.5707963267948966 rad - pos: 39.5,14.5 + pos: 38.5,14.5 + parent: 12 + - uid: 26092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-38.5 parent: 12 - proto: ReinforcedPlasmaWindow entities: @@ -144155,10 +144775,11 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 509 + - uid: 510 components: - type: Transform - pos: -23.5,-26.5 + rot: -1.5707963267948966 rad + pos: -53.5,56.5 parent: 12 - uid: 519 components: @@ -144511,12 +145132,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1065 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1066 components: - type: Transform @@ -144632,11 +145247,6 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-62.5 parent: 12 - - uid: 2448 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 2454 components: - type: Transform @@ -144937,11 +145547,6 @@ entities: - type: Transform pos: 20.5,-33.5 parent: 12 - - uid: 3892 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - uid: 4110 components: - type: Transform @@ -146944,11 +147549,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11333 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 11336 components: - type: Transform @@ -146960,27 +147560,22 @@ entities: - type: Transform pos: 42.5,4.5 parent: 12 - - uid: 11363 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - uid: 11365 components: - type: Transform pos: 44.5,4.5 parent: 12 - - uid: 11366 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11444 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-44.5 parent: 12 + - uid: 11516 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 - uid: 11584 components: - type: Transform @@ -147264,6 +147859,11 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,-46.5 parent: 12 + - uid: 12015 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 - uid: 12224 components: - type: Transform @@ -147601,6 +148201,12 @@ entities: - type: Transform pos: 64.5,59.5 parent: 12 + - uid: 12639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 13049 components: - type: Transform @@ -149000,11 +149606,6 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,-7.5 parent: 12 - - uid: 22025 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 22074 components: - type: Transform @@ -149055,6 +149656,22 @@ entities: - type: Transform pos: -10.5,-13.5 parent: 12 + - uid: 22314 + components: + - type: Transform + pos: 44.5,15.5 + parent: 12 + - uid: 22315 + components: + - type: Transform + pos: 43.5,15.5 + parent: 12 + - uid: 22326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22856 components: - type: Transform @@ -149073,10 +149690,17 @@ entities: rot: 3.141592653589793 rad pos: 13.5,22.5 parent: 12 - - uid: 23177 + - uid: 23710 components: - type: Transform - pos: 45.5,-1.5 + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 23896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 parent: 12 - uid: 24192 components: @@ -149202,11 +149826,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-26.5 parent: 12 - - uid: 25833 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 25871 components: - type: Transform @@ -149634,11 +150253,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-25.5 parent: 12 - - uid: 27735 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27854 components: - type: Transform @@ -149896,17 +150510,6 @@ entities: rot: 3.141592653589793 rad pos: 50.5,-1.5 parent: 12 - - uid: 29094 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,-5.5 - parent: 12 - - uid: 29101 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29102 components: - type: Transform @@ -149919,18 +150522,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-4.5 parent: 12 - - uid: 29105 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29106 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - uid: 29107 components: - type: Transform @@ -149943,11 +150534,6 @@ entities: rot: 3.141592653589793 rad pos: 42.5,-3.5 parent: 12 - - uid: 29109 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29114 components: - type: Transform @@ -150826,6 +151412,11 @@ entities: - type: Transform pos: 59.56368,-40.504784 parent: 12 + - uid: 12121 + components: + - type: Transform + pos: 81.46926,-38.476837 + parent: 12 - uid: 22201 components: - type: Transform @@ -150925,11 +151516,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-22.5 parent: 12 + - uid: 11491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-26.5 + parent: 12 - uid: 14198 components: - type: Transform pos: 41.5,62.5 parent: 12 + - uid: 22278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-26.5 + parent: 12 - uid: 29667 components: - type: Transform @@ -151653,18 +152256,6 @@ entities: - Pressed: Toggle 9718: - Pressed: Toggle - - uid: 11958 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,15.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11960: - - Pressed: Toggle - 11959: - - Pressed: Toggle - uid: 13643 components: - type: Transform @@ -152714,10 +153305,11 @@ entities: parent: 12 - proto: SignRobo entities: - - uid: 2048 + - uid: 12638 components: - type: Transform - pos: -25.5,-26.5 + rot: 3.141592653589793 rad + pos: -23.5,-26.5 parent: 12 - proto: SignSalvage entities: @@ -152982,17 +153574,23 @@ entities: parent: 12 - proto: SmallLight entities: - - uid: 25412 + - uid: 13210 components: - type: Transform rot: -1.5707963267948966 rad - pos: -41.5,65.5 + pos: -52.5,57.5 parent: 12 - - uid: 25413 + - uid: 24254 components: - type: Transform - rot: 3.141592653589793 rad - pos: -52.5,61.5 + rot: 1.5707963267948966 rad + pos: -56.5,61.5 + parent: 12 + - uid: 25412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,65.5 parent: 12 - uid: 27184 components: @@ -154379,15 +154977,6 @@ entities: parent: 12 - type: Stack count: 110 -- proto: SpaceCash1000 - entities: - - uid: 17437 - components: - - type: Transform - pos: -31.339855,7.33164 - parent: 12 - - type: Stack - count: 2000 - proto: SpaceVillainArcadeFilled entities: - uid: 12223 @@ -155854,6 +156443,12 @@ entities: parent: 12 - proto: Stool entities: + - uid: 1081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.443993,16.6724 + parent: 12 - uid: 2240 components: - type: Transform @@ -155886,192 +156481,12 @@ entities: - type: Transform pos: 44.528526,-31.458952 parent: 12 - - uid: 12333 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 36.498535,7.7225566 - parent: 12 - - uid: 12628 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12629 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12630 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12631 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12632 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12633 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12634 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12635 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12636 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12637 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12638 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12639 + - uid: 11438 components: - type: Transform - anchored: True rot: 1.5707963267948966 rad pos: 52.5,38.5 parent: 12 - - type: Physics - bodyType: Static - - uid: 12640 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12641 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12642 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12643 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12644 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12645 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12646 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12647 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - uid: 12652 components: - type: Transform @@ -156108,6 +156523,12 @@ entities: - type: Transform pos: 43.618725,30.520502 parent: 12 + - uid: 13970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 14949 components: - type: Transform @@ -156132,6 +156553,12 @@ entities: rot: 3.141592653589793 rad pos: 9.5,31.5 parent: 12 + - uid: 16374 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,35.5 + parent: 12 - uid: 16513 components: - type: Transform @@ -156155,6 +156582,30 @@ entities: rot: 1.5707963267948966 rad pos: -14.507796,2.708015 parent: 12 + - uid: 16852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,34.5 + parent: 12 + - uid: 16854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,33.5 + parent: 12 + - uid: 16857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,36.5 + parent: 12 + - uid: 16865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,39.5 + parent: 12 - uid: 17114 components: - type: Transform @@ -156185,6 +156636,12 @@ entities: rot: 3.141592653589793 rad pos: 5.5,52.5 parent: 12 + - uid: 17437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,40.5 + parent: 12 - uid: 21348 components: - type: Transform @@ -156232,6 +156689,66 @@ entities: rot: 3.141592653589793 rad pos: -31.5,55.5 parent: 12 + - uid: 22025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,39.5 + parent: 12 + - uid: 22255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,41.5 + parent: 12 + - uid: 22256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,40.5 + parent: 12 + - uid: 22257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,39.5 + parent: 12 + - uid: 22258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,33.5 + parent: 12 + - uid: 22259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,38.5 + parent: 12 + - uid: 22260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,34.5 + parent: 12 + - uid: 22263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,36.5 + parent: 12 + - uid: 22264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,35.5 + parent: 12 + - uid: 22265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,41.5 + parent: 12 - uid: 22601 components: - type: Transform @@ -156292,6 +156809,29 @@ entities: rot: 3.141592653589793 rad pos: 8.585284,67.665504 parent: 12 + - uid: 26069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,7.5 + parent: 12 + - uid: 26070 + components: + - type: Transform + pos: 34.5,7.5 + parent: 12 + - uid: 26091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,36.5 + parent: 12 + - uid: 26095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,35.5 + parent: 12 - proto: StoolBar entities: - uid: 14997 @@ -157608,6 +158148,17 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Ship construction tool room + - uid: 25396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,18.5 + parent: 12 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Disposals - uid: 28426 components: - type: Transform @@ -158565,6 +159116,11 @@ entities: parent: 12 - proto: Table entities: + - uid: 508 + components: + - type: Transform + pos: 33.5,45.5 + parent: 12 - uid: 1196 components: - type: Transform @@ -158721,21 +159277,6 @@ entities: - type: Transform pos: -6.5,-52.5 parent: 12 - - uid: 2309 - components: - - type: Transform - pos: -32.5,-43.5 - parent: 12 - - uid: 2310 - components: - - type: Transform - pos: -31.5,-43.5 - parent: 12 - - uid: 2311 - components: - - type: Transform - pos: -30.5,-43.5 - parent: 12 - uid: 2472 components: - type: Transform @@ -159170,6 +159711,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,24.5 parent: 12 + - uid: 11437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-44.5 + parent: 12 - uid: 11524 components: - type: Transform @@ -159182,6 +159729,12 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,7.5 parent: 12 + - uid: 12120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-44.5 + parent: 12 - uid: 12271 components: - type: Transform @@ -159192,6 +159745,17 @@ entities: - type: Transform pos: 46.5,18.5 parent: 12 + - uid: 12629 + components: + - type: Transform + pos: 34.5,45.5 + parent: 12 + - uid: 12643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-44.5 + parent: 12 - uid: 12717 components: - type: Transform @@ -159867,6 +160431,29 @@ entities: rot: 1.5707963267948966 rad pos: -50.5,36.5 parent: 12 + - uid: 22269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-41.5 + parent: 12 + - uid: 22270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-44.5 + parent: 12 + - uid: 22271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-41.5 + parent: 12 + - uid: 22274 + components: + - type: Transform + pos: 35.5,45.5 + parent: 12 - uid: 22364 components: - type: Transform @@ -160344,25 +160931,6 @@ entities: parent: 12 - proto: TableCounterMetal entities: - - uid: 1084 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -35.5,-44.5 - parent: 12 - - uid: 1086 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-41.5 - parent: 12 - - type: Label - - uid: 1087 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,-41.5 - parent: 12 - uid: 1726 components: - type: Transform @@ -160858,6 +161426,12 @@ entities: rot: 1.5707963267948966 rad pos: -28.5,65.5 parent: 12 + - uid: 12114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 - uid: 13789 components: - type: Transform @@ -162010,7 +162584,7 @@ entities: - uid: 23708 components: - type: Transform - pos: 35.758244,47.302937 + pos: 33.80236,45.260162 parent: 12 - proto: ThermomachineHeaterMachineCircuitBoard entities: @@ -162022,7 +162596,7 @@ entities: - uid: 23707 components: - type: Transform - pos: 35.45225,47.645393 + pos: 33.333378,45.58308 parent: 12 - proto: Thruster entities: @@ -162246,6 +162820,11 @@ entities: - type: Transform pos: -7.5195446,10.430849 parent: 12 + - uid: 22272 + components: + - type: Transform + pos: 35.611034,46.54325 + parent: 12 - uid: 23672 components: - type: Transform @@ -162261,7 +162840,7 @@ entities: - uid: 8874 components: - type: Transform - pos: 79.6497,-38.50015 + pos: 79.54402,-38.46053 parent: 12 - uid: 9250 components: @@ -162283,11 +162862,6 @@ entities: - type: Transform pos: 17.45795,68.52991 parent: 12 - - uid: 23713 - components: - - type: Transform - pos: 35.611134,46.38351 - parent: 12 - uid: 23714 components: - type: Transform @@ -162337,6 +162911,11 @@ entities: - type: Transform pos: -22.5,-4.5 parent: 12 + - uid: 11488 + components: + - type: Transform + pos: 35.4026,46.314083 + parent: 12 - uid: 16474 components: - type: Transform @@ -163103,15 +163682,11 @@ entities: - Left: Forward - Middle: Off - Right: Forward - 11980: - - Left: Forward - - Right: Reverse - - Middle: Off - 11979: + 11959: - Left: Forward - Right: Reverse - Middle: Off - 11978: + 11960: - Left: Forward - Right: Reverse - Middle: Off @@ -163119,214 +163694,67 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 11981: - - Left: Forward - - Right: Reverse - - Middle: Off - 11982: - - Left: Forward - - Right: Reverse - - Middle: Off - 11983: - - Left: Forward - - Right: Reverse - - Middle: Off - 28462: - - Left: Forward - - Right: Reverse - - Middle: Off - 11988: - - Left: Forward - - Right: Reverse - - Middle: Off - 11989: - - Left: Forward - - Right: Reverse - - Middle: Off - 11990: - - Left: Forward - - Right: Reverse - - Middle: Off - 11991: - - Left: Forward - - Right: Reverse - - Middle: Off - 11992: - - Left: Forward - - Right: Reverse - - Middle: Off - 11993: - - Left: Forward - - Right: Reverse - - Middle: Off - 11995: - - Left: Forward - - Right: Reverse - - Middle: Off - 11994: - - Left: Forward - - Right: Reverse - - Middle: Off - 11996: - - Left: Forward - - Right: Reverse - - Middle: Off - 11997: - - Left: Forward - - Right: Reverse - - Middle: Off - 11998: - - Left: Forward - - Right: Reverse - - Middle: Off - 11999: + 11518: - Left: Forward - Right: Reverse - Middle: Off - 12006: + 11519: - Left: Forward - Right: Reverse - Middle: Off - 12005: + 11531: - Left: Forward - Right: Reverse - Middle: Off - 12004: + 11529: - Left: Forward - Right: Reverse - Middle: Off - 12003: - - Left: Forward - - Right: Reverse - - Middle: Off - 12007: - - Left: Forward - - Right: Reverse - - Middle: Off - 12008: - - Left: Forward - - Right: Reverse - - Middle: Off - 12009: - - Left: Forward - - Right: Reverse - - Middle: Off - 12010: - - Left: Forward - - Right: Reverse - - Middle: Off - 12011: - - Left: Forward - - Right: Reverse - - Middle: Off - 12012: - - Left: Forward - - Right: Reverse - - Middle: Off - 12013: - - Left: Forward - - Right: Reverse - - Middle: Off - 12014: - - Left: Forward - - Right: Reverse - - Middle: Off - 12017: - - Left: Forward - - Right: Reverse - - Middle: Off - 12016: - - Left: Forward - - Right: Reverse - - Middle: Off - 12015: - - Left: Forward - - Right: Reverse - - Middle: Off - 12018: - - Left: Forward - - Right: Reverse - - Middle: Off - 12019: - - Left: Forward - - Right: Reverse - - Middle: Off - 12020: - - Left: Forward - - Right: Reverse - - Middle: Off - 12054: - - Left: Forward - - Right: Reverse - - Middle: Off - 12000: - - Left: Forward - - Right: Reverse - - Middle: Off - 12001: - - Left: Forward - - Right: Reverse - - Middle: Off - 12002: - - Left: Forward - - Right: Reverse - - Middle: Off - 2489: - - Left: Forward - - Middle: Off - - Right: Forward - - uid: 12055 - components: - - type: Transform - pos: 38.5,8.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11985: + 11532: - Left: Forward - Right: Reverse - Middle: Off - 11986: + 11533: - Left: Forward - Right: Reverse - Middle: Off - 11987: + 11534: - Left: Forward - Right: Reverse - Middle: Off - 12021: + 11497: - Left: Forward - Right: Reverse - Middle: Off - 12022: + 11958: - Left: Forward - Right: Reverse - Middle: Off - 12023: + 22312: - Left: Forward - Right: Reverse - Middle: Off - 12024: + 11507: - Left: Forward - Right: Reverse - Middle: Off - 12025: + 12076: - Left: Forward - Right: Reverse - Middle: Off - 12026: + 11498: - Left: Forward - Right: Reverse - Middle: Off - 12027: + 11528: - Left: Forward - Right: Reverse - Middle: Off - 12028: + 11499: - Left: Forward - Right: Reverse - Middle: Off - 12029: + 12123: - Left: Forward - Right: Reverse - Middle: Off @@ -163334,145 +163762,114 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 12031: - - Left: Forward - - Right: Reverse - - Middle: Off - 12032: - - Left: Forward - - Right: Reverse - - Middle: Off - 12033: - - Left: Forward - - Right: Reverse - - Middle: Off - 12034: - - Left: Forward - - Right: Reverse - - Middle: Off - 12035: - - Left: Forward - - Right: Reverse - - Middle: Off - 12036: - - Left: Forward - - Right: Reverse - - Middle: Off - 12037: - - Left: Forward - - Right: Reverse - - Middle: Off - 12038: - - Left: Forward - - Right: Reverse - - Middle: Off - 12039: - - Left: Forward - - Right: Reverse - - Middle: Off - 12040: - - Left: Forward - - Right: Reverse - - Middle: Off - 12041: - - Left: Forward - - Right: Reverse - - Middle: Off - 12042: - - Left: Forward - - Right: Reverse - - Middle: Off - 12043: - - Left: Forward - - Right: Reverse - - Middle: Off - 12044: - - Left: Forward - - Right: Reverse - - Middle: Off - 12045: - - Left: Forward - - Right: Reverse - - Middle: Off - 12046: + 2489: - Left: Forward - - Right: Reverse - Middle: Off - 12047: + - Right: Forward + - uid: 12085 + components: + - type: Transform + pos: 51.5,16.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12083: - Left: Forward - Right: Reverse - Middle: Off - 12049: + 12082: - Left: Forward - Right: Reverse - Middle: Off - 12048: + 12081: - Left: Forward - Right: Reverse - Middle: Off - 12050: + 12079: - Left: Forward - Right: Reverse - Middle: Off - 12051: + - uid: 12127 + components: + - type: Transform + pos: 78.5,-38.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12642: - Left: Forward - Right: Reverse - Middle: Off - 12052: + 26092: - Left: Forward - Right: Reverse - Middle: Off - 12053: + 11462: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12085 + - uid: 12615 components: - type: Transform - pos: 51.5,16.5 + pos: 56.5,39.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12083: + 12614: + - Left: Open + - Right: Open + - Middle: Close + 12613: - Left: Forward - Right: Reverse - Middle: Off - 12082: + 12612: - Left: Forward - Right: Reverse - Middle: Off - 12081: + 12611: - Left: Forward - Right: Reverse - Middle: Off - 12079: + 12610: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12615 + - uid: 12924 components: - type: Transform - pos: 56.5,39.5 + pos: -25.5,-28.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12614: + 11491: - Left: Open - Right: Open - Middle: Close - 12613: + 22278: + - Left: Open + - Right: Open + - Middle: Close + - uid: 13969 + components: + - type: Transform + pos: 33.5,7.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12632: - Left: Forward - Right: Reverse - Middle: Off - 12612: + 12633: - Left: Forward - Right: Reverse - Middle: Off - 12611: + 12290: - Left: Forward - Right: Reverse - Middle: Off - 12610: + 22295: - Left: Forward - Right: Reverse - Middle: Off @@ -164128,10 +164525,10 @@ entities: parent: 12 - proto: VendingMachineTankDispenserEVA entities: - - uid: 8864 + - uid: 12059 components: - type: Transform - pos: 76.5,-30.5 + pos: 55.5,-31.5 parent: 12 - uid: 16412 components: @@ -164182,15 +164579,15 @@ entities: - type: Transform pos: 43.5,-38.5 parent: 12 - - uid: 23651 + - uid: 12630 components: - type: Transform - pos: 48.5,52.5 + pos: 35.5,47.5 parent: 12 - - uid: 23703 + - uid: 23651 components: - type: Transform - pos: 34.5,45.5 + pos: 48.5,52.5 parent: 12 - proto: VendingMachineViroDrobe entities: @@ -170207,15 +170604,21 @@ entities: - type: Transform pos: 27.5,20.5 parent: 12 - - uid: 11435 + - uid: 11428 components: - type: Transform - pos: 36.5,15.5 + rot: 1.5707963267948966 rad + pos: 36.5,19.5 parent: 12 - - uid: 11437 + - uid: 11429 components: - type: Transform - pos: 36.5,19.5 + pos: 42.5,1.5 + parent: 12 + - uid: 11435 + components: + - type: Transform + pos: 36.5,15.5 parent: 12 - uid: 11439 components: @@ -170623,6 +171026,41 @@ entities: - type: Transform pos: 59.5,37.5 parent: 12 + - uid: 12009 + components: + - type: Transform + pos: 42.5,14.5 + parent: 12 + - uid: 12056 + components: + - type: Transform + pos: 44.5,-2.5 + parent: 12 + - uid: 12058 + components: + - type: Transform + pos: 42.5,5.5 + parent: 12 + - uid: 12100 + components: + - type: Transform + pos: 43.5,13.5 + parent: 12 + - uid: 12110 + components: + - type: Transform + pos: 44.5,1.5 + parent: 12 + - uid: 12117 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 12 + - uid: 12118 + components: + - type: Transform + pos: 42.5,-6.5 + parent: 12 - uid: 12392 components: - type: Transform @@ -170713,6 +171151,21 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,28.5 parent: 12 + - uid: 12641 + components: + - type: Transform + pos: 45.5,0.5 + parent: 12 + - uid: 12646 + components: + - type: Transform + pos: 45.5,-1.5 + parent: 12 + - uid: 12647 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 12 - uid: 12724 components: - type: Transform @@ -170729,6 +171182,16 @@ entities: - type: Transform pos: 31.5,26.5 parent: 12 + - uid: 12868 + components: + - type: Transform + pos: 44.5,5.5 + parent: 12 + - uid: 12910 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 12 - uid: 13197 components: - type: Transform @@ -173461,6 +173924,53 @@ entities: rot: -1.5707963267948966 rad pos: 32.5,-5.5 parent: 12 + - uid: 22279 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 12 + - uid: 22280 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 12 + - uid: 22281 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 12 + - uid: 22282 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 12 + - uid: 22283 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 12 + - uid: 22284 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 12 + - uid: 22290 + components: + - type: Transform + pos: 42.5,13.5 + parent: 12 + - uid: 22324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,59.5 + parent: 12 + - uid: 22327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,55.5 + parent: 12 - uid: 22339 components: - type: Transform @@ -173496,6 +174006,48 @@ entities: rot: 3.141592653589793 rad pos: 14.5,22.5 parent: 12 + - uid: 23177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,63.5 + parent: 12 + - uid: 23700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,59.5 + parent: 12 + - uid: 23701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -54.5,59.5 + parent: 12 + - uid: 23703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,63.5 + parent: 12 + - uid: 23704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,59.5 + parent: 12 + - uid: 23709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,59.5 + parent: 12 + - uid: 23719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,63.5 + parent: 12 - uid: 23773 components: - type: Transform @@ -175083,12 +175635,6 @@ entities: rot: -1.5707963267948966 rad pos: 31.5,18.5 parent: 12 - - uid: 11438 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,15.5 - parent: 12 - uid: 11441 components: - type: Transform @@ -175376,11 +175922,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-20.5 parent: 12 - - uid: 25396 - components: - - type: Transform - pos: -54.5,60.5 - parent: 12 - uid: 25403 components: - type: Transform @@ -175687,11 +176228,6 @@ entities: - type: Transform pos: -18.5,-23.5 parent: 12 - - uid: 510 - components: - - type: Transform - pos: -25.5,-26.5 - parent: 12 - uid: 511 components: - type: Transform @@ -176379,6 +176915,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-46.5 parent: 12 + - uid: 2478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,10.5 + parent: 12 - uid: 2596 components: - type: Transform @@ -177073,21 +177615,6 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,-32.5 parent: 12 - - uid: 5554 - components: - - type: Transform - pos: 29.5,-19.5 - parent: 12 - - uid: 5555 - components: - - type: Transform - pos: 29.5,-24.5 - parent: 12 - - uid: 5556 - components: - - type: Transform - pos: 32.5,-24.5 - parent: 12 - uid: 5557 components: - type: Transform @@ -177098,21 +177625,6 @@ entities: - type: Transform pos: -22.5,-17.5 parent: 12 - - uid: 5559 - components: - - type: Transform - pos: 35.5,-24.5 - parent: 12 - - uid: 5560 - components: - - type: Transform - pos: 36.5,-24.5 - parent: 12 - - uid: 5561 - components: - - type: Transform - pos: 36.5,-23.5 - parent: 12 - uid: 5577 components: - type: Transform @@ -177897,6 +178409,11 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,26.5 parent: 12 + - uid: 8884 + components: + - type: Transform + pos: 35.5,10.5 + parent: 12 - uid: 9133 components: - type: Transform @@ -178176,12 +178693,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,18.5 parent: 12 - - uid: 10693 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,16.5 - parent: 12 - uid: 10694 components: - type: Transform @@ -178321,6 +178832,11 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,20.5 parent: 12 + - uid: 11363 + components: + - type: Transform + pos: 40.5,14.5 + parent: 12 - uid: 11390 components: - type: Transform @@ -178368,11 +178884,6 @@ entities: - type: Transform pos: 48.5,13.5 parent: 12 - - uid: 11467 - components: - - type: Transform - pos: 48.5,11.5 - parent: 12 - uid: 11475 components: - type: Transform @@ -178403,66 +178914,6 @@ entities: - type: Transform pos: 39.5,9.5 parent: 12 - - uid: 11487 - components: - - type: Transform - pos: 42.5,11.5 - parent: 12 - - uid: 11488 - components: - - type: Transform - pos: 42.5,13.5 - parent: 12 - - uid: 11490 - components: - - type: Transform - pos: 45.5,11.5 - parent: 12 - - uid: 11491 - components: - - type: Transform - pos: 40.5,11.5 - parent: 12 - - uid: 11492 - components: - - type: Transform - pos: 39.5,11.5 - parent: 12 - - uid: 11493 - components: - - type: Transform - pos: 38.5,11.5 - parent: 12 - - uid: 11495 - components: - - type: Transform - pos: 36.5,11.5 - parent: 12 - - uid: 11496 - components: - - type: Transform - pos: 35.5,11.5 - parent: 12 - - uid: 11497 - components: - - type: Transform - pos: 34.5,11.5 - parent: 12 - - uid: 11498 - components: - - type: Transform - pos: 33.5,11.5 - parent: 12 - - uid: 11499 - components: - - type: Transform - pos: 32.5,11.5 - parent: 12 - - uid: 11503 - components: - - type: Transform - pos: 33.5,13.5 - parent: 12 - uid: 11504 components: - type: Transform @@ -178478,11 +178929,6 @@ entities: - type: Transform pos: 36.5,13.5 parent: 12 - - uid: 11507 - components: - - type: Transform - pos: 37.5,13.5 - parent: 12 - uid: 11508 components: - type: Transform @@ -179135,6 +179581,17 @@ entities: - type: Transform pos: 41.5,33.5 parent: 12 + - uid: 12000 + components: + - type: Transform + pos: 40.5,15.5 + parent: 12 + - uid: 12054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-26.5 + parent: 12 - uid: 12066 components: - type: Transform @@ -181596,11 +182053,6 @@ entities: - type: Transform pos: 51.5,9.5 parent: 12 - - uid: 25471 - components: - - type: Transform - pos: 46.5,15.5 - parent: 12 - uid: 25492 components: - type: Transform @@ -181738,11 +182190,6 @@ entities: rot: 3.141592653589793 rad pos: -43.5,61.5 parent: 12 - - uid: 26542 - components: - - type: Transform - pos: 45.5,15.5 - parent: 12 - uid: 26939 components: - type: Transform @@ -181910,12 +182357,6 @@ entities: - type: Transform pos: -48.5,66.5 parent: 12 - - uid: 11400 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,11.5 - parent: 12 - uid: 11520 components: - type: Transform @@ -181928,10 +182369,22 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,34.5 parent: 12 - - uid: 12868 + - uid: 11978 components: - type: Transform - pos: 32.5,13.5 + pos: 33.5,11.5 + parent: 12 + - uid: 12018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,11.5 + parent: 12 + - uid: 12071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,15.5 parent: 12 - uid: 12953 components: @@ -182194,12 +182647,33 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,64.5 parent: 12 + - uid: 22273 + components: + - type: Transform + pos: 32.5,11.5 + parent: 12 + - uid: 22285 + components: + - type: Transform + pos: 37.5,13.5 + parent: 12 + - uid: 22301 + components: + - type: Transform + pos: 36.5,16.5 + parent: 12 - uid: 23894 components: - type: Transform rot: -1.5707963267948966 rad pos: 41.5,63.5 parent: 12 + - uid: 24650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,12.5 + parent: 12 - uid: 25591 components: - type: Transform @@ -182647,11 +183121,6 @@ entities: - type: Transform pos: 53.5,-10.5 parent: 12 - - uid: 12725 - components: - - type: Transform - pos: 49.5,32.5 - parent: 12 - uid: 16645 components: - type: Transform @@ -182677,6 +183146,11 @@ entities: - type: Transform pos: -6.5,58.5 parent: 12 + - uid: 22306 + components: + - type: Transform + pos: 49.5,32.5 + parent: 12 - uid: 24169 components: - type: Transform @@ -183053,15 +183527,15 @@ entities: - type: Transform pos: 43.5,47.5 parent: 12 - - uid: 12243 + - uid: 12026 components: - type: Transform - pos: 50.5,16.5 + pos: 46.5,10.5 parent: 12 - - uid: 12294 + - uid: 12070 components: - type: Transform - pos: 32.5,16.5 + pos: 33.5,17.5 parent: 12 - uid: 16463 components: @@ -183113,11 +183587,6 @@ entities: - type: Transform pos: 48.5,-32.5 parent: 12 - - uid: 25058 - components: - - type: Transform - pos: 52.5,11.5 - parent: 12 - uid: 26803 components: - type: Transform @@ -183443,6 +183912,11 @@ entities: rot: 3.141592653589793 rad pos: 52.5,-30.5 parent: 12 + - uid: 12126 + components: + - type: Transform + pos: -33.5,-45.5 + parent: 12 - uid: 12234 components: - type: Transform @@ -183617,6 +184091,12 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-43.5 parent: 12 + - uid: 22268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-45.5 + parent: 12 - proto: WindoorSecureCommandLocked entities: - uid: 6 @@ -184157,16 +184637,6 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,14.5 parent: 12 - - uid: 11426 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11427 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11485 components: - type: Transform @@ -184182,26 +184652,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11516 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11517 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - - uid: 11518 - components: - - type: Transform - pos: 43.5,15.5 - parent: 12 - - uid: 11519 - components: - - type: Transform - pos: 44.5,15.5 - parent: 12 - uid: 11538 components: - type: Transform @@ -184282,6 +184732,11 @@ entities: - type: Transform pos: 41.5,35.5 parent: 12 + - uid: 11997 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 - uid: 12524 components: - type: Transform @@ -184802,6 +185257,16 @@ entities: - type: Transform pos: 53.5,10.5 parent: 12 + - uid: 22292 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22297 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 22688 components: - type: Transform @@ -185516,18 +185981,6 @@ entities: - type: Transform pos: 46.5,-12.5 parent: 12 - - uid: 12292 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12293 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,13.5 - parent: 12 - uid: 12326 components: - type: Transform @@ -186124,18 +186577,6 @@ entities: - type: Transform pos: 44.512337,53.244392 parent: 12 - - uid: 23709 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.45002,45.578423 - parent: 12 - - uid: 23710 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.596897,45.394962 - parent: 12 - uid: 27207 components: - type: Transform diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index 2f80b9d840..2065fa90eb 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -129,7 +129,7 @@ entities: version: 6 -2,2: ind: -2,2 - tiles: XQAAAAADXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAegAAAAADegAAAAADegAAAAADJgAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAACegAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAABegAAAAAAegAAAAACegAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAegAAAAADegAAAAACegAAAAADfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAABHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAdAAAAAACcwAAAAAAdAAAAAADdAAAAAABfgAAAAAAbAAAAAAAfgAAAAAAbQAAAAAAHwAAAAACHwAAAAAAHwAAAAABHwAAAAADJAAAAAACHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAJAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATQAAAAACTQAAAAACTQAAAAABfQAAAAAAfgAAAAAAXQAAAAACXQAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAHwAAAAABHwAAAAADHwAAAAACfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAACXQAAAAADXQAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAADXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAA + tiles: XQAAAAADXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAegAAAAADegAAAAADegAAAAADJgAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAACegAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAABegAAAAAAegAAAAACegAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAegAAAAADegAAAAACegAAAAADfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAABHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAdAAAAAACcwAAAAAAdAAAAAADdAAAAAABfgAAAAAAbAAAAAAAfgAAAAAAbQAAAAAAHwAAAAACHwAAAAAAHwAAAAABHwAAAAADJAAAAAACHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAJAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATQAAAAACTQAAAAACTQAAAAABfQAAAAAAfgAAAAAAXQAAAAACXQAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABfgAAAAAAHwAAAAABHwAAAAADHwAAAAACfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAA version: 6 -3,2: ind: -3,2 @@ -153,7 +153,7 @@ entities: version: 6 -2,3: ind: -2,3 - tiles: XQAAAAACXQAAAAACXQAAAAAAHwAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAACHwAAAAABfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAACXQAAAAADHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAABHwAAAAADHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAABfgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABXQAAAAABHwAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAABegAAAAACegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAUgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XQAAAAACXQAAAAACXQAAAAAAHwAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAACHwAAAAABfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAACXQAAAAADHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAABHwAAAAADHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAABfgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABXQAAAAABHwAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAABegAAAAACegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -3,4: ind: -3,4 @@ -165,15 +165,15 @@ entities: version: 6 -1,2: ind: -1,2 - tiles: HwAAAAAAHwAAAAABHwAAAAABQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAHwAAAAABHwAAAAACHwAAAAAAJAAAAAADHwAAAAACegAAAAADHwAAAAACHwAAAAADfgAAAAAAQAAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAACQAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAHwAAAAACegAAAAABHwAAAAADHwAAAAABfgAAAAAAQAAAAAAAegAAAAACLwAAAAAALwAAAAADLwAAAAADegAAAAACQAAAAAAAfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAegAAAAACegAAAAADegAAAAABegAAAAAAegAAAAABQAAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAegAAAAABegAAAAAAHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAbAAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADJAAAAAADHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAABHwAAAAACJAAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAACHwAAAAADDAAAAAACDAAAAAACDAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAAAHwAAAAADHwAAAAADHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADHwAAAAACHwAAAAABJAAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAA + tiles: HwAAAAAAHwAAAAABHwAAAAABQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAHwAAAAABHwAAAAACHwAAAAAAJAAAAAADHwAAAAACegAAAAADHwAAAAACHwAAAAADfgAAAAAAQAAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAACQAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAHwAAAAACegAAAAABHwAAAAADHwAAAAABfgAAAAAAQAAAAAAAegAAAAACLwAAAAAALwAAAAADLwAAAAADegAAAAACQAAAAAAAfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAegAAAAACegAAAAADegAAAAABegAAAAAAegAAAAABQAAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAegAAAAABegAAAAAAHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAbAAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADJAAAAAADHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAABHwAAAAACJAAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAACHwAAAAADDAAAAAACDAAAAAACDAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAAAHwAAAAADHwAAAAADHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADHwAAAAACHwAAAAABJAAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAA version: 6 0,2: ind: 0,2 - tiles: egAAAAADegAAAAADegAAAAABegAAAAADegAAAAABegAAAAACfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAACegAAAAACegAAAAACegAAAAABKAAAAAABXQAAAAADXQAAAAADXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAOAAAAAAAHwAAAAADOAAAAAAAHwAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAABfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA + tiles: egAAAAADegAAAAADegAAAAABegAAAAADegAAAAABegAAAAACfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAACegAAAAACegAAAAACegAAAAABKAAAAAABXQAAAAADXQAAAAADXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAOAAAAAAAHwAAAAADOAAAAAAAHwAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAABfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA version: 6 -1,3: ind: -1,3 - tiles: AAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAA + tiles: AAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAA version: 6 1,1: ind: 1,1 @@ -285,7 +285,7 @@ entities: version: 6 0,3: ind: 0,3 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAADfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAAAegAAAAABegAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAADfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAAAegAAAAABegAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 3,2: ind: 3,2 @@ -373,19 +373,19 @@ entities: version: 6 0,4: ind: 0,4 - tiles: HwAAAAACHwAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHwAAAAADHwAAAAACbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HwAAAAACHwAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHwAAAAADHwAAAAACbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAcAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,4: ind: -1,4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAHwAAAAABHwAAAAABHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACTwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAHwAAAAABHwAAAAABHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAcAAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAA version: 6 -1,5: ind: -1,5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAATwAAAAAAEQAAAAAAHwAAAAACHwAAAAABHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAATwAAAAAAEQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,5: ind: 0,5 - tiles: fgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAHwAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAACHwAAAAADEQAAAAAATwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAABfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAEQAAAAAATwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,3: ind: 2,3 @@ -9136,13 +9136,6 @@ entities: parent: 30 - proto: AirlockCaptainLocked entities: - - uid: 1357 - components: - - type: MetaData - name: Drone Storage - - type: Transform - pos: -37.5,25.5 - parent: 30 - uid: 4935 components: - type: Transform @@ -9341,6 +9334,18 @@ entities: - type: Transform pos: -19.5,41.5 parent: 30 + - uid: 20883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,73.5 + parent: 30 + - uid: 20885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,67.5 + parent: 30 - proto: AirlockDetectiveLocked entities: - uid: 783 @@ -9427,6 +9432,11 @@ entities: - type: Transform pos: -40.5,16.5 parent: 30 + - uid: 1357 + components: + - type: Transform + pos: -37.5,25.5 + parent: 30 - uid: 3198 components: - type: Transform @@ -10572,6 +10582,52 @@ entities: - type: Transform pos: -8.5,-13.5 parent: 30 +- proto: AirlockMaintCommandLocked + entities: + - uid: 20265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,66.5 + parent: 30 + - uid: 20266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,66.5 + parent: 30 + - uid: 20267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,74.5 + parent: 30 + - uid: 20736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,74.5 + parent: 30 + - uid: 20981 + components: + - type: Transform + pos: 5.5,73.5 + parent: 30 + - uid: 20983 + components: + - type: Transform + pos: -6.5,73.5 + parent: 30 + - uid: 20985 + components: + - type: Transform + pos: 5.5,67.5 + parent: 30 + - uid: 20987 + components: + - type: Transform + pos: -6.5,67.5 + parent: 30 - proto: AirlockMaintDetectiveLocked entities: - uid: 1423 @@ -10810,46 +10866,6 @@ entities: - type: Transform pos: -45.5,-25.5 parent: 30 - - uid: 20264 - components: - - type: Transform - pos: -3.5,66.5 - parent: 30 - - uid: 20265 - components: - - type: Transform - pos: -6.5,67.5 - parent: 30 - - uid: 20266 - components: - - type: Transform - pos: 2.5,66.5 - parent: 30 - - uid: 20267 - components: - - type: Transform - pos: 5.5,67.5 - parent: 30 - - uid: 20268 - components: - - type: Transform - pos: 2.5,74.5 - parent: 30 - - uid: 20269 - components: - - type: Transform - pos: 5.5,73.5 - parent: 30 - - uid: 20270 - components: - - type: Transform - pos: -3.5,74.5 - parent: 30 - - uid: 20271 - components: - - type: Transform - pos: -6.5,73.5 - parent: 30 - proto: AirlockMaintMedLocked entities: - uid: 7067 @@ -10999,7 +11015,7 @@ entities: pos: -20.5,-5.5 parent: 30 - type: Door - secondsUntilStateChange: -22976.215 + secondsUntilStateChange: -25025.113 state: Opening - type: DeviceLinkSource lastSignals: @@ -12297,11 +12313,29 @@ entities: - type: Transform pos: 0.5,85.5 parent: 30 + - uid: 20226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,66.5 + parent: 30 + - uid: 20227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,75.5 + parent: 30 - uid: 20367 components: - type: Transform pos: 1.5,-42.5 parent: 30 + - uid: 20828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,66.5 + parent: 30 - uid: 22213 components: - type: MetaData @@ -19213,6 +19247,11 @@ entities: - type: Transform pos: 9.5,35.5 parent: 30 + - uid: 5646 + components: + - type: Transform + pos: -3.5,75.5 + parent: 30 - uid: 5735 components: - type: Transform @@ -27158,6 +27197,11 @@ entities: - type: Transform pos: -79.5,-57.5 parent: 30 + - uid: 18249 + components: + - type: Transform + pos: -2.5,75.5 + parent: 30 - uid: 18814 components: - type: Transform @@ -29468,16 +29512,6 @@ entities: - type: Transform pos: -0.5,78.5 parent: 30 - - uid: 20206 - components: - - type: Transform - pos: -0.5,77.5 - parent: 30 - - uid: 20207 - components: - - type: Transform - pos: -0.5,76.5 - parent: 30 - uid: 20208 components: - type: Transform @@ -29568,16 +29602,6 @@ entities: - type: Transform pos: -2.5,66.5 parent: 30 - - uid: 20226 - components: - - type: Transform - pos: -3.5,66.5 - parent: 30 - - uid: 20227 - components: - - type: Transform - pos: -4.5,66.5 - parent: 30 - uid: 20228 components: - type: Transform @@ -29636,12 +29660,7 @@ entities: - uid: 20239 components: - type: Transform - pos: -4.5,74.5 - parent: 30 - - uid: 20240 - components: - - type: Transform - pos: -3.5,74.5 + pos: -8.5,66.5 parent: 30 - uid: 20241 components: @@ -29663,16 +29682,6 @@ entities: - type: Transform pos: 1.5,74.5 parent: 30 - - uid: 20245 - components: - - type: Transform - pos: 2.5,74.5 - parent: 30 - - uid: 20246 - components: - - type: Transform - pos: 3.5,74.5 - parent: 30 - uid: 20247 components: - type: Transform @@ -29726,17 +29735,12 @@ entities: - uid: 20257 components: - type: Transform - pos: 4.5,66.5 - parent: 30 - - uid: 20258 - components: - - type: Transform - pos: 3.5,66.5 + pos: -7.5,66.5 parent: 30 - uid: 20259 components: - type: Transform - pos: 2.5,66.5 + pos: 7.5,66.5 parent: 30 - uid: 20260 components: @@ -29748,6 +29752,11 @@ entities: - type: Transform pos: 0.5,66.5 parent: 30 + - uid: 20263 + components: + - type: Transform + pos: 6.5,66.5 + parent: 30 - uid: 20320 components: - type: Transform @@ -30478,6 +30487,31 @@ entities: - type: Transform pos: -56.5,51.5 parent: 30 + - uid: 21240 + components: + - type: Transform + pos: 5.5,65.5 + parent: 30 + - uid: 21243 + components: + - type: Transform + pos: 5.5,64.5 + parent: 30 + - uid: 21246 + components: + - type: Transform + pos: 6.5,64.5 + parent: 30 + - uid: 21247 + components: + - type: Transform + pos: -7.5,65.5 + parent: 30 + - uid: 21248 + components: + - type: Transform + pos: -7.5,64.5 + parent: 30 - uid: 21263 components: - type: Transform @@ -36997,6 +37031,326 @@ entities: - type: Transform pos: -26.5,-41.5 parent: 30 + - uid: 20737 + components: + - type: Transform + pos: -2.5,37.5 + parent: 30 + - uid: 20738 + components: + - type: Transform + pos: -0.5,40.5 + parent: 30 + - uid: 20739 + components: + - type: Transform + pos: -0.5,39.5 + parent: 30 + - uid: 20740 + components: + - type: Transform + pos: -0.5,38.5 + parent: 30 + - uid: 20741 + components: + - type: Transform + pos: -0.5,37.5 + parent: 30 + - uid: 20742 + components: + - type: Transform + pos: -1.5,37.5 + parent: 30 + - uid: 20753 + components: + - type: Transform + pos: -0.5,41.5 + parent: 30 + - uid: 20754 + components: + - type: Transform + pos: -0.5,43.5 + parent: 30 + - uid: 20755 + components: + - type: Transform + pos: -0.5,42.5 + parent: 30 + - uid: 20756 + components: + - type: Transform + pos: -0.5,44.5 + parent: 30 + - uid: 20757 + components: + - type: Transform + pos: -0.5,45.5 + parent: 30 + - uid: 20758 + components: + - type: Transform + pos: -0.5,46.5 + parent: 30 + - uid: 20759 + components: + - type: Transform + pos: -0.5,48.5 + parent: 30 + - uid: 20760 + components: + - type: Transform + pos: -0.5,47.5 + parent: 30 + - uid: 20761 + components: + - type: Transform + pos: -0.5,49.5 + parent: 30 + - uid: 20762 + components: + - type: Transform + pos: -0.5,50.5 + parent: 30 + - uid: 20763 + components: + - type: Transform + pos: -0.5,51.5 + parent: 30 + - uid: 20764 + components: + - type: Transform + pos: -0.5,52.5 + parent: 30 + - uid: 20765 + components: + - type: Transform + pos: -0.5,53.5 + parent: 30 + - uid: 20766 + components: + - type: Transform + pos: -0.5,54.5 + parent: 30 + - uid: 20767 + components: + - type: Transform + pos: -0.5,55.5 + parent: 30 + - uid: 20768 + components: + - type: Transform + pos: -0.5,56.5 + parent: 30 + - uid: 20769 + components: + - type: Transform + pos: -0.5,57.5 + parent: 30 + - uid: 20770 + components: + - type: Transform + pos: -0.5,58.5 + parent: 30 + - uid: 20771 + components: + - type: Transform + pos: -0.5,59.5 + parent: 30 + - uid: 20772 + components: + - type: Transform + pos: -0.5,60.5 + parent: 30 + - uid: 20773 + components: + - type: Transform + pos: -0.5,61.5 + parent: 30 + - uid: 20774 + components: + - type: Transform + pos: -0.5,62.5 + parent: 30 + - uid: 20775 + components: + - type: Transform + pos: -0.5,63.5 + parent: 30 + - uid: 20776 + components: + - type: Transform + pos: -0.5,64.5 + parent: 30 + - uid: 20777 + components: + - type: Transform + pos: -0.5,65.5 + parent: 30 + - uid: 20779 + components: + - type: Transform + pos: -0.5,66.5 + parent: 30 + - uid: 20780 + components: + - type: Transform + pos: -0.5,67.5 + parent: 30 + - uid: 20781 + components: + - type: Transform + pos: -0.5,69.5 + parent: 30 + - uid: 20782 + components: + - type: Transform + pos: -0.5,68.5 + parent: 30 + - uid: 20783 + components: + - type: Transform + pos: -0.5,70.5 + parent: 30 + - uid: 20784 + components: + - type: Transform + pos: -0.5,71.5 + parent: 30 + - uid: 20785 + components: + - type: Transform + pos: -0.5,73.5 + parent: 30 + - uid: 20786 + components: + - type: Transform + pos: -0.5,74.5 + parent: 30 + - uid: 20794 + components: + - type: Transform + pos: -0.5,75.5 + parent: 30 + - uid: 20795 + components: + - type: Transform + pos: -0.5,72.5 + parent: 30 + - uid: 20796 + components: + - type: Transform + pos: -0.5,76.5 + parent: 30 + - uid: 20797 + components: + - type: Transform + pos: -0.5,77.5 + parent: 30 + - uid: 20800 + components: + - type: Transform + pos: -0.5,78.5 + parent: 30 + - uid: 20801 + components: + - type: Transform + pos: 0.5,78.5 + parent: 30 + - uid: 20802 + components: + - type: Transform + pos: 1.5,78.5 + parent: 30 + - uid: 20803 + components: + - type: Transform + pos: 2.5,78.5 + parent: 30 + - uid: 20804 + components: + - type: Transform + pos: 3.5,78.5 + parent: 30 + - uid: 20808 + components: + - type: Transform + pos: 4.5,78.5 + parent: 30 + - uid: 20809 + components: + - type: Transform + pos: 4.5,79.5 + parent: 30 + - uid: 20810 + components: + - type: Transform + pos: 4.5,80.5 + parent: 30 + - uid: 20811 + components: + - type: Transform + pos: 4.5,81.5 + parent: 30 + - uid: 20812 + components: + - type: Transform + pos: 4.5,82.5 + parent: 30 + - uid: 20813 + components: + - type: Transform + pos: 4.5,83.5 + parent: 30 + - uid: 20814 + components: + - type: Transform + pos: 3.5,83.5 + parent: 30 + - uid: 20815 + components: + - type: Transform + pos: 2.5,83.5 + parent: 30 + - uid: 20816 + components: + - type: Transform + pos: 1.5,83.5 + parent: 30 + - uid: 20817 + components: + - type: Transform + pos: 0.5,83.5 + parent: 30 + - uid: 20991 + components: + - type: Transform + pos: -1.5,74.5 + parent: 30 + - uid: 20993 + components: + - type: Transform + pos: -2.5,74.5 + parent: 30 + - uid: 20994 + components: + - type: Transform + pos: -3.5,74.5 + parent: 30 + - uid: 20995 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 + - uid: 20996 + components: + - type: Transform + pos: -4.5,75.5 + parent: 30 + - uid: 20997 + components: + - type: Transform + pos: -4.5,76.5 + parent: 30 - uid: 21289 components: - type: Transform @@ -38466,6 +38820,21 @@ entities: - type: Transform pos: 8.5,42.5 parent: 30 + - uid: 5642 + components: + - type: Transform + pos: -4.5,83.5 + parent: 30 + - uid: 5643 + components: + - type: Transform + pos: -4.5,82.5 + parent: 30 + - uid: 5645 + components: + - type: Transform + pos: -3.5,83.5 + parent: 30 - uid: 5863 components: - type: Transform @@ -40891,6 +41260,11 @@ entities: - type: Transform pos: 23.5,-5.5 parent: 30 + - uid: 16931 + components: + - type: Transform + pos: -3.5,78.5 + parent: 30 - uid: 17584 components: - type: Transform @@ -41556,6 +41930,51 @@ entities: - type: Transform pos: 0.5,85.5 parent: 30 + - uid: 20206 + components: + - type: Transform + pos: -4.5,78.5 + parent: 30 + - uid: 20207 + components: + - type: Transform + pos: -4.5,81.5 + parent: 30 + - uid: 20240 + components: + - type: Transform + pos: -0.5,78.5 + parent: 30 + - uid: 20245 + components: + - type: Transform + pos: -1.5,78.5 + parent: 30 + - uid: 20246 + components: + - type: Transform + pos: -4.5,80.5 + parent: 30 + - uid: 20258 + components: + - type: Transform + pos: -2.5,78.5 + parent: 30 + - uid: 20262 + components: + - type: Transform + pos: 0.5,78.5 + parent: 30 + - uid: 20268 + components: + - type: Transform + pos: -2.5,83.5 + parent: 30 + - uid: 20269 + components: + - type: Transform + pos: -4.5,79.5 + parent: 30 - uid: 20338 components: - type: Transform @@ -41581,6 +42000,266 @@ entities: - type: Transform pos: 1.5,-42.5 parent: 30 + - uid: 20829 + components: + - type: Transform + pos: 1.5,78.5 + parent: 30 + - uid: 20830 + components: + - type: Transform + pos: 2.5,78.5 + parent: 30 + - uid: 20831 + components: + - type: Transform + pos: 3.5,78.5 + parent: 30 + - uid: 20832 + components: + - type: Transform + pos: 3.5,79.5 + parent: 30 + - uid: 20833 + components: + - type: Transform + pos: 3.5,80.5 + parent: 30 + - uid: 20834 + components: + - type: Transform + pos: 3.5,81.5 + parent: 30 + - uid: 20835 + components: + - type: Transform + pos: 3.5,82.5 + parent: 30 + - uid: 20836 + components: + - type: Transform + pos: 3.5,83.5 + parent: 30 + - uid: 20837 + components: + - type: Transform + pos: 2.5,83.5 + parent: 30 + - uid: 20838 + components: + - type: Transform + pos: 1.5,83.5 + parent: 30 + - uid: 20839 + components: + - type: Transform + pos: -0.5,77.5 + parent: 30 + - uid: 20840 + components: + - type: Transform + pos: -0.5,76.5 + parent: 30 + - uid: 20841 + components: + - type: Transform + pos: -0.5,75.5 + parent: 30 + - uid: 20842 + components: + - type: Transform + pos: -0.5,74.5 + parent: 30 + - uid: 20843 + components: + - type: Transform + pos: -0.5,73.5 + parent: 30 + - uid: 20844 + components: + - type: Transform + pos: -0.5,72.5 + parent: 30 + - uid: 20845 + components: + - type: Transform + pos: -0.5,71.5 + parent: 30 + - uid: 20846 + components: + - type: Transform + pos: -0.5,70.5 + parent: 30 + - uid: 20847 + components: + - type: Transform + pos: -0.5,69.5 + parent: 30 + - uid: 20848 + components: + - type: Transform + pos: -0.5,68.5 + parent: 30 + - uid: 20849 + components: + - type: Transform + pos: -0.5,67.5 + parent: 30 + - uid: 20850 + components: + - type: Transform + pos: -0.5,66.5 + parent: 30 + - uid: 20851 + components: + - type: Transform + pos: -1.5,66.5 + parent: 30 + - uid: 20852 + components: + - type: Transform + pos: -2.5,66.5 + parent: 30 + - uid: 20853 + components: + - type: Transform + pos: -3.5,66.5 + parent: 30 + - uid: 20854 + components: + - type: Transform + pos: -4.5,66.5 + parent: 30 + - uid: 20855 + components: + - type: Transform + pos: -5.5,66.5 + parent: 30 + - uid: 20856 + components: + - type: Transform + pos: -6.5,66.5 + parent: 30 + - uid: 20857 + components: + - type: Transform + pos: -8.5,66.5 + parent: 30 + - uid: 20858 + components: + - type: Transform + pos: -7.5,66.5 + parent: 30 + - uid: 20859 + components: + - type: Transform + pos: 0.5,66.5 + parent: 30 + - uid: 20860 + components: + - type: Transform + pos: 1.5,66.5 + parent: 30 + - uid: 20861 + components: + - type: Transform + pos: 2.5,66.5 + parent: 30 + - uid: 20862 + components: + - type: Transform + pos: 3.5,66.5 + parent: 30 + - uid: 20863 + components: + - type: Transform + pos: 4.5,66.5 + parent: 30 + - uid: 20864 + components: + - type: Transform + pos: 5.5,66.5 + parent: 30 + - uid: 20865 + components: + - type: Transform + pos: 6.5,66.5 + parent: 30 + - uid: 20866 + components: + - type: Transform + pos: 7.5,66.5 + parent: 30 + - uid: 20867 + components: + - type: Transform + pos: -1.5,74.5 + parent: 30 + - uid: 20868 + components: + - type: Transform + pos: -2.5,74.5 + parent: 30 + - uid: 20869 + components: + - type: Transform + pos: -3.5,74.5 + parent: 30 + - uid: 20870 + components: + - type: Transform + pos: -3.5,75.5 + parent: 30 + - uid: 20871 + components: + - type: Transform + pos: -6.5,67.5 + parent: 30 + - uid: 20872 + components: + - type: Transform + pos: -6.5,68.5 + parent: 30 + - uid: 20873 + components: + - type: Transform + pos: -6.5,69.5 + parent: 30 + - uid: 20874 + components: + - type: Transform + pos: -6.5,70.5 + parent: 30 + - uid: 20875 + components: + - type: Transform + pos: -6.5,71.5 + parent: 30 + - uid: 20876 + components: + - type: Transform + pos: -6.5,72.5 + parent: 30 + - uid: 20877 + components: + - type: Transform + pos: -6.5,73.5 + parent: 30 + - uid: 20878 + components: + - type: Transform + pos: -6.5,74.5 + parent: 30 + - uid: 20879 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - uid: 20882 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 - uid: 20893 components: - type: Transform @@ -46782,6 +47461,71 @@ entities: - type: Transform pos: -59.5,4.5 parent: 30 + - uid: 21002 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 + - uid: 21003 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - uid: 21005 + components: + - type: Transform + pos: -6.5,74.5 + parent: 30 + - uid: 21006 + components: + - type: Transform + pos: -6.5,68.5 + parent: 30 + - uid: 21034 + components: + - type: Transform + pos: -6.5,69.5 + parent: 30 + - uid: 21048 + components: + - type: Transform + pos: -6.5,70.5 + parent: 30 + - uid: 21049 + components: + - type: Transform + pos: -6.5,71.5 + parent: 30 + - uid: 21164 + components: + - type: Transform + pos: -6.5,72.5 + parent: 30 + - uid: 21181 + components: + - type: Transform + pos: 5.5,72.5 + parent: 30 + - uid: 21183 + components: + - type: Transform + pos: 5.5,71.5 + parent: 30 + - uid: 21184 + components: + - type: Transform + pos: 5.5,70.5 + parent: 30 + - uid: 21186 + components: + - type: Transform + pos: 5.5,69.5 + parent: 30 + - uid: 21191 + components: + - type: Transform + pos: 5.5,68.5 + parent: 30 - uid: 21610 components: - type: Transform @@ -51947,6 +52691,11 @@ entities: - type: Transform pos: -61.5,-20.5 parent: 30 + - uid: 20887 + components: + - type: Transform + pos: -6.5,76.5 + parent: 30 - proto: ComputerAnalysisConsole entities: - uid: 15282 @@ -52121,25 +52870,17 @@ entities: parent: 30 - proto: ComputerFrame entities: - - uid: 20279 - components: - - type: Transform - pos: -6.5,76.5 - parent: 30 - - uid: 20280 + - uid: 21198 components: - type: Transform - pos: -4.5,76.5 - parent: 30 - - uid: 20281 - components: - - type: Transform - pos: -5.5,76.5 + rot: 1.5707963267948966 rad + pos: -3.5,62.5 parent: 30 - - uid: 20283 + - uid: 21199 components: - type: Transform - pos: 4.5,76.5 + rot: 1.5707963267948966 rad + pos: -3.5,64.5 parent: 30 - proto: ComputerId entities: @@ -52217,6 +52958,11 @@ entities: rot: 1.5707963267948966 rad pos: -8.5,-45.5 parent: 30 + - uid: 20886 + components: + - type: Transform + pos: -5.5,76.5 + parent: 30 - proto: ComputerRadar entities: - uid: 22100 @@ -52254,6 +53000,11 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,9.5 parent: 30 + - uid: 20961 + components: + - type: Transform + pos: 4.5,76.5 + parent: 30 - proto: ComputerRoboticsControl entities: - uid: 10251 @@ -52307,6 +53058,11 @@ entities: - type: Transform pos: -64.5,44.5 parent: 30 + - uid: 20888 + components: + - type: Transform + pos: -4.5,76.5 + parent: 30 - proto: ComputerStationRecords entities: - uid: 1397 @@ -59842,6 +60598,11 @@ entities: - type: Transform pos: 22.5,22.5 parent: 30 + - uid: 20960 + components: + - type: Transform + pos: 5.5,76.5 + parent: 30 - proto: ExtendedEmergencyOxygenTankFilled entities: - uid: 20295 @@ -94815,16 +95576,6 @@ entities: - type: Transform pos: -0.5,76.5 parent: 30 - - uid: 20262 - components: - - type: Transform - pos: -0.5,67.5 - parent: 30 - - uid: 20263 - components: - - type: Transform - pos: -0.5,73.5 - parent: 30 - proto: HolofanProjector entities: - uid: 21278 @@ -95187,11 +95938,17 @@ entities: parent: 30 - proto: IntercomCommand entities: - - uid: 22513 + - uid: 21194 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,82.5 + rot: 3.141592653589793 rad + pos: 0.5,73.5 + parent: 30 + - uid: 21195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,62.5 parent: 30 - proto: IntercomCommon entities: @@ -95240,12 +95997,6 @@ entities: rot: -1.5707963267948966 rad pos: 8.5,-33.5 parent: 30 - - uid: 22514 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,82.5 - parent: 30 - proto: IntercomMedical entities: - uid: 7346 @@ -95260,11 +96011,6 @@ entities: rot: 1.5707963267948966 rad pos: -16.5,-8.5 parent: 30 - - uid: 22516 - components: - - type: Transform - pos: -1.5,85.5 - parent: 30 - proto: IntercomScience entities: - uid: 14357 @@ -95285,12 +96031,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,23.5 parent: 30 - - uid: 22518 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,84.5 - parent: 30 - proto: IntercomSecurity entities: - uid: 4377 @@ -95316,12 +96056,6 @@ entities: rot: 1.5707963267948966 rad pos: -49.5,44.5 parent: 30 - - uid: 22515 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,81.5 - parent: 30 - proto: IntercomService entities: - uid: 4386 @@ -95340,11 +96074,6 @@ entities: - type: Transform pos: -9.5,15.5 parent: 30 - - uid: 22517 - components: - - type: Transform - pos: -0.5,85.5 - parent: 30 - proto: IntercomSupply entities: - uid: 22295 @@ -95359,12 +96088,6 @@ entities: rot: 3.141592653589793 rad pos: 30.5,-8.5 parent: 30 - - uid: 22519 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,84.5 - parent: 30 - proto: IronRockMining entities: - uid: 1955 @@ -100049,7 +100772,7 @@ entities: - uid: 20308 components: - type: Transform - pos: -0.61799335,65.47986 + pos: 2.470478,63.557354 parent: 30 - proto: PhoneInstrument entities: @@ -100377,11 +101100,6 @@ entities: - type: Transform pos: -19.5,-37.5 parent: 30 - - uid: 21948 - components: - - type: Transform - pos: 0.5,84.5 - parent: 30 - proto: PortableScrubber entities: - uid: 8285 @@ -103781,6 +104499,12 @@ entities: parent: 30 - type: ApcPowerReceiver powerLoad: 0 + - uid: 21229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 30 - uid: 21362 components: - type: Transform @@ -103843,6 +104567,48 @@ entities: - type: Transform pos: -12.5,-58.5 parent: 30 + - uid: 20747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,71.5 + parent: 30 + - uid: 20749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,71.5 + parent: 30 + - uid: 20751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,63.5 + parent: 30 + - uid: 20752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,63.5 + parent: 30 + - uid: 21230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,84.5 + parent: 30 + - uid: 21238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,84.5 + parent: 30 + - uid: 21239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,90.5 + parent: 30 - proto: PoweredlightLED entities: - uid: 10291 @@ -110661,6 +111427,11 @@ entities: - type: Transform pos: -25.514673,-43.671646 parent: 30 + - uid: 20979 + components: + - type: Transform + pos: 3.6399727,76.41426 + parent: 30 - proto: SheetPlasma entities: - uid: 11365 @@ -110894,6 +111665,11 @@ entities: - type: Transform pos: -21.483423,-47.53102 parent: 30 + - uid: 20966 + components: + - type: Transform + pos: 3.4368477,76.554886 + parent: 30 - proto: SheetUranium entities: - uid: 19800 @@ -111398,6 +112174,11 @@ entities: - type: Transform pos: -1.5,60.5 parent: 30 + - uid: 20734 + components: + - type: Transform + pos: -18.5,41.5 + parent: 30 - proto: SignalButton entities: - uid: 381 @@ -113034,11 +113815,6 @@ entities: - type: Transform pos: -20.5,41.5 parent: 30 - - uid: 22461 - components: - - type: Transform - pos: -18.5,41.5 - parent: 30 - proto: SignSecureMedRed entities: - uid: 2407 @@ -116385,6 +117161,252 @@ entities: parent: 30 - proto: SurveillanceCameraCommand entities: + - uid: 20270 + components: + - type: Transform + pos: -0.5,87.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,83.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20279 + components: + - type: Transform + pos: 4.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,79.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E + - uid: 20283 + components: + - type: Transform + pos: 0.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20284 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext W + - uid: 20735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,83.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20743 + components: + - type: Transform + pos: -3.5,68.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20744 + components: + - type: Transform + pos: 2.5,68.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,72.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,72.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20818 + components: + - type: Transform + pos: -0.5,90.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext N + - uid: 20819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core Core + - uid: 20820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Entrance + - uid: 20821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core + - uid: 20822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core + - uid: 20823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,71.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext W + - uid: 20824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,71.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E + - uid: 20825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,63.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext SE + - uid: 20826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,63.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext SW + - uid: 20827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,58.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext S - uid: 21172 components: - type: Transform @@ -116471,6 +117493,70 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 21201 + components: + - type: Transform + pos: 0.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Airlock + - uid: 21202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,38.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Airlock + - uid: 21209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP Bedroom + - uid: 21218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bathroom + - uid: 21227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Junction + - uid: 21228 + components: + - type: Transform + pos: -18.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Tube - uid: 21286 components: - type: Transform @@ -116666,6 +117752,166 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Atmos Hall + - uid: 21313 + components: + - type: Transform + pos: 1.5,-41.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Entrance + - uid: 21314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Room + - uid: 21356 + components: + - type: Transform + pos: -1.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Room + - uid: 21361 + components: + - type: Transform + pos: -5.5,-36.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: CE Office + - uid: 21377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering + - uid: 21392 + components: + - type: Transform + pos: -15.5,-37.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Secure Storage + - uid: 21393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: AME Room + - uid: 21394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Breakroom + - uid: 21395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-46.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Lockerroom + - uid: 21396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: PA Entrance + - uid: 21397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-54.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Particle Accelerator + - uid: 21398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-58.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Singulo Cage + - uid: 21399 + components: + - type: Transform + pos: -9.5,-56.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Tesla Storage + - uid: 21451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,26.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Materials Room + - uid: 21452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -63.5,44.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NW - proto: SurveillanceCameraGeneral entities: - uid: 1039 @@ -116711,6 +117957,49 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Game Room + - uid: 21210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Hallway + - uid: 21214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Toolroom + - uid: 21216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,24.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Material Room + - uid: 21217 + components: + - type: Transform + pos: -33.5,35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Security - uid: 21231 components: - type: Transform @@ -116777,6 +118066,313 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Tool Room + - uid: 21254 + components: + - type: Transform + pos: 14.5,25.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall robotics + - uid: 21255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,28.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Dorms + - uid: 21256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bathroom + - uid: 21280 + components: + - type: Transform + pos: 21.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Laundry Room + - uid: 21308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,29.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Shower Room + - uid: 21309 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryosleep + - uid: 21400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-18.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Atmos + - uid: 21401 + components: + - type: Transform + pos: -60.5,-35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Courtyard + - uid: 21402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -60.5,-51.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Farm + - uid: 21403 + components: + - type: Transform + pos: -79.5,-40.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Office + - uid: 21404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -73.5,-42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Courtyard + - uid: 21405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,-39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Airlock + - uid: 21406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -63.5,-62.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library + - uid: 21407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -73.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Kitchen + - uid: 21408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -75.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Kitchen + - uid: 21409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-22.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Tunnel + - uid: 21410 + components: + - type: Transform + pos: -58.5,-9.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,10.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,0.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21426 + components: + - type: Transform + pos: -31.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Jani + - uid: 21430 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,11.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Arrivals + - uid: 21450 + components: + - type: Transform + pos: -43.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Evac + - uid: 21453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,23.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Musician Room + - uid: 21459 + components: + - type: Transform + pos: 3.5,6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bar + - uid: 21460 + components: + - type: Transform + pos: 3.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Theater Room + - uid: 21461 + components: + - type: Transform + pos: 10.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Cargo + - uid: 21466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-3.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Spacebucks + - uid: 21469 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Spacebucks + - uid: 21495 + components: + - type: Transform + pos: -20.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Botany - proto: SurveillanceCameraMedical entities: - uid: 8290 @@ -117085,6 +118681,48 @@ entities: - SurveillanceCameraScience nameSet: True id: Sci Lobby + - uid: 21257 + components: + - type: Transform + pos: 30.5,18.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Anomaly Gen + - uid: 21258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RD Bedroom + - uid: 21261 + components: + - type: Transform + pos: 26.5,7.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RND + - uid: 21279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,11.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Sci Server Room - proto: SurveillanceCameraSecurity entities: - uid: 1947 @@ -117288,6 +118926,17 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Lawyer's Office + - uid: 21310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,41.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Court Room - proto: SurveillanceCameraService entities: - uid: 1944 @@ -117367,6 +119016,37 @@ entities: - SurveillanceCameraService nameSet: True id: Freezer + - uid: 21429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Jani Closet + - uid: 21457 + components: + - type: Transform + pos: -23.5,15.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Backroom + - uid: 21458 + components: + - type: Transform + pos: -30.5,12.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Jani Backroom - proto: SurveillanceCameraSupply entities: - uid: 15202 @@ -117445,6 +119125,27 @@ entities: - SurveillanceCameraSupply nameSet: True id: Quartermaster's Room + - uid: 21311 + components: + - type: Transform + pos: 37.5,-6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 2 + - uid: 21312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-2.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 1 - proto: SynthesizerInstrument entities: - uid: 15112 @@ -118548,6 +120249,12 @@ entities: rot: 3.141592653589793 rad pos: 12.5,-26.5 parent: 30 + - uid: 20264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,63.5 + parent: 30 - uid: 20272 components: - type: Transform @@ -120499,13 +122206,6 @@ entities: - type: Transform pos: 6.5231524,64.57765 parent: 30 -- proto: ToyAi - entities: - - uid: 20307 - components: - - type: Transform - pos: -0.49299335,82.64046 - parent: 30 - proto: ToyFigurineSpaceDragon entities: - uid: 20547 @@ -120784,11 +122484,6 @@ entities: - type: Transform pos: 23.5,22.5 parent: 30 - - uid: 20284 - components: - - type: Transform - pos: 5.5,76.5 - parent: 30 - uid: 21161 components: - type: Transform @@ -136787,58 +138482,6 @@ entities: - type: Transform pos: -22.590364,53.546127 parent: 30 -- proto: WeaponTurretSyndicateBroken - entities: - - uid: 22089 - components: - - type: Transform - pos: -4.5,79.5 - parent: 30 - - uid: 22090 - components: - - type: Transform - pos: 3.5,79.5 - parent: 30 - - uid: 22091 - components: - - type: Transform - pos: 4.5,83.5 - parent: 30 - - uid: 22092 - components: - - type: Transform - pos: 3.5,87.5 - parent: 30 - - uid: 22093 - components: - - type: Transform - pos: -4.5,87.5 - parent: 30 - - uid: 22094 - components: - - type: Transform - pos: -5.5,83.5 - parent: 30 - - uid: 22095 - components: - - type: Transform - pos: -3.5,71.5 - parent: 30 - - uid: 22096 - components: - - type: Transform - pos: -3.5,69.5 - parent: 30 - - uid: 22097 - components: - - type: Transform - pos: 2.5,69.5 - parent: 30 - - uid: 22098 - components: - - type: Transform - pos: 2.5,71.5 - parent: 30 - proto: Welder entities: - uid: 1633 @@ -137905,33 +139548,12 @@ entities: rot: -1.5707963267948966 rad pos: -17.5,43.5 parent: 30 - - uid: 5642 - components: - - type: Transform - pos: -19.5,44.5 - parent: 30 - - uid: 5643 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,43.5 - parent: 30 - uid: 5644 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,42.5 parent: 30 - - uid: 5645 - components: - - type: Transform - pos: -18.5,44.5 - parent: 30 - - uid: 5646 - components: - - type: Transform - pos: -20.5,44.5 - parent: 30 - uid: 5827 components: - type: Transform @@ -138502,17 +140124,17 @@ entities: rot: 1.5707963267948966 rad pos: -35.5,-34.5 parent: 30 - - uid: 22456 + - uid: 20748 components: - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,43.5 + rot: -1.5707963267948966 rad + pos: -17.5,44.5 parent: 30 - - uid: 22457 + - uid: 20750 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,43.5 + rot: 1.5707963267948966 rad + pos: -18.5,44.5 parent: 30 - uid: 22458 components: diff --git a/Resources/Maps/meta.yml b/Resources/Maps/meta.yml index b9844b5a3b..2e577ea311 100644 --- a/Resources/Maps/meta.yml +++ b/Resources/Maps/meta.yml @@ -171,7 +171,7 @@ entities: version: 6 3,-2: ind: 3,-2 - tiles: eQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 3,-1: ind: 3,-1 @@ -283,11 +283,11 @@ entities: version: 6 4,-1: ind: 4,-1 - tiles: eQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,-2: ind: 4,-2 - tiles: eAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAA + tiles: eAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAA version: 6 3,-3: ind: 3,-3 @@ -411,7 +411,7 @@ entities: version: 6 6,0: ind: 6,0 - tiles: HQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAADHQAAAAABHQAAAAACHQAAAAACeQAAAAAAHQAAAAAAHQAAAAABHQAAAAABeQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAABeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACeQAAAAAAHQAAAAADHQAAAAADHQAAAAACHQAAAAABHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAACHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAEQAAAAAAHQAAAAACEQAAAAAAEQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAEQAAAAAAeQAAAAAANgAAAAAAeQAAAAAAEQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAANgAAAAAAHQAAAAABEQAAAAAAHQAAAAACHQAAAAABHQAAAAACEQAAAAAAHQAAAAADNgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAHQAAAAABeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA + tiles: HQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAADHQAAAAABHQAAAAACHQAAAAACeQAAAAAAHQAAAAAAHQAAAAABHQAAAAABeQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAABeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACeQAAAAAATQAAAAAAHQAAAAADHQAAAAACHQAAAAABTQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAACHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAEQAAAAAAHQAAAAACEQAAAAAAEQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAEQAAAAAAeQAAAAAANgAAAAAAeQAAAAAAEQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAANgAAAAAAHQAAAAABEQAAAAAAHQAAAAACHQAAAAABHQAAAAACEQAAAAAAHQAAAAADNgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAHQAAAAABeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA version: 6 6,-1: ind: 6,-1 @@ -630,6 +630,7 @@ entities: 3259: 45,17 3260: 49,7 3261: 49,9 + 3515: 62,-1 - node: color: '#FFFFFFFF' id: BotGreyscale @@ -3616,6 +3617,11 @@ entities: 95: -16,-17 1967: 106,-1 1968: 105,-1 + 3504: 59,-3 + 3505: 61,-3 + 3506: 58,-3 + 3507: 60,-3 + 3508: 62,-3 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale180 @@ -4214,6 +4220,12 @@ entities: 1944: 106,1 1945: 105,1 1946: 105,2 + 3509: 62,1 + 3510: 61,1 + 3511: 60,1 + 3512: 59,1 + 3513: 58,1 + 3514: 57,1 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale90 @@ -10244,13 +10256,6 @@ entities: - type: Transform pos: 9.5,2.5 parent: 5350 - - uid: 8919 - components: - - type: MetaData - name: Drone Closet - - type: Transform - pos: 44.5,-1.5 - parent: 5350 - proto: AirlockCargoGlassLocked entities: - uid: 3393 @@ -10420,6 +10425,18 @@ entities: - type: Transform pos: 0.5,-17.5 parent: 5350 + - uid: 10775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-1.5 + parent: 5350 + - uid: 12075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-2.5 + parent: 5350 - uid: 26226 components: - type: Transform @@ -10483,6 +10500,11 @@ entities: - DoorStatus: DoorBolt - proto: AirlockEngineeringLocked entities: + - uid: 1032 + components: + - type: Transform + pos: 44.5,-1.5 + parent: 5350 - uid: 1109 components: - type: Transform @@ -10804,7 +10826,7 @@ entities: pos: -42.5,29.5 parent: 5350 - type: Door - secondsUntilStateChange: -2186.3599 + secondsUntilStateChange: -3920.309 state: Opening - type: DeviceLinkSink invokeCounter: 2 @@ -15461,6 +15483,12 @@ entities: - type: Transform pos: 57.5,1.5 parent: 5350 + - uid: 26810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,0.5 + parent: 5350 - proto: BoxBeaker entities: - uid: 3708 @@ -34400,6 +34428,56 @@ entities: - type: Transform pos: 18.5,-27.5 parent: 5350 + - uid: 26658 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 5350 + - uid: 26659 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 5350 + - uid: 26660 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 5350 + - uid: 26686 + components: + - type: Transform + pos: 10.5,-14.5 + parent: 5350 + - uid: 26767 + components: + - type: Transform + pos: -6.5,61.5 + parent: 5350 + - uid: 26768 + components: + - type: Transform + pos: -7.5,61.5 + parent: 5350 + - uid: 26769 + components: + - type: Transform + pos: -5.5,61.5 + parent: 5350 + - uid: 26842 + components: + - type: Transform + pos: 76.5,5.5 + parent: 5350 + - uid: 26843 + components: + - type: Transform + pos: 76.5,4.5 + parent: 5350 + - uid: 26844 + components: + - type: Transform + pos: 76.5,3.5 + parent: 5350 - proto: CableApcStack entities: - uid: 1550 @@ -37644,6 +37722,11 @@ entities: - type: Transform pos: 42.5,-17.5 parent: 5350 + - uid: 12076 + components: + - type: Transform + pos: 97.5,0.5 + parent: 5350 - uid: 12385 components: - type: Transform @@ -42589,11 +42672,26 @@ entities: - type: Transform pos: 31.5,-46.5 parent: 5350 + - uid: 22700 + components: + - type: Transform + pos: 99.5,0.5 + parent: 5350 + - uid: 22704 + components: + - type: Transform + pos: 95.5,0.5 + parent: 5350 - uid: 22769 components: - type: Transform pos: -11.5,-43.5 parent: 5350 + - uid: 23129 + components: + - type: Transform + pos: 96.5,0.5 + parent: 5350 - uid: 23399 components: - type: Transform @@ -43234,6 +43332,11 @@ entities: - type: Transform pos: 47.5,-23.5 parent: 5350 + - uid: 25808 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 - uid: 25988 components: - type: Transform @@ -43254,6 +43357,21 @@ entities: - type: Transform pos: 111.5,2.5 parent: 5350 + - uid: 26232 + components: + - type: Transform + pos: 100.5,0.5 + parent: 5350 + - uid: 26304 + components: + - type: Transform + pos: 101.5,0.5 + parent: 5350 + - uid: 26305 + components: + - type: Transform + pos: 102.5,0.5 + parent: 5350 - uid: 26389 components: - type: Transform @@ -43274,6 +43392,101 @@ entities: - type: Transform pos: 110.5,-0.5 parent: 5350 + - uid: 26416 + components: + - type: Transform + pos: 103.5,0.5 + parent: 5350 + - uid: 26417 + components: + - type: Transform + pos: 104.5,0.5 + parent: 5350 + - uid: 26811 + components: + - type: Transform + pos: 98.5,0.5 + parent: 5350 + - uid: 26812 + components: + - type: Transform + pos: 104.5,1.5 + parent: 5350 + - uid: 26813 + components: + - type: Transform + pos: 104.5,2.5 + parent: 5350 + - uid: 26814 + components: + - type: Transform + pos: 104.5,3.5 + parent: 5350 + - uid: 26815 + components: + - type: Transform + pos: 104.5,4.5 + parent: 5350 + - uid: 26816 + components: + - type: Transform + pos: 104.5,5.5 + parent: 5350 + - uid: 26817 + components: + - type: Transform + pos: 104.5,6.5 + parent: 5350 + - uid: 26818 + components: + - type: Transform + pos: 103.5,6.5 + parent: 5350 + - uid: 26819 + components: + - type: Transform + pos: 102.5,6.5 + parent: 5350 + - uid: 26820 + components: + - type: Transform + pos: 102.5,7.5 + parent: 5350 + - uid: 26821 + components: + - type: Transform + pos: 102.5,8.5 + parent: 5350 + - uid: 26822 + components: + - type: Transform + pos: 102.5,9.5 + parent: 5350 + - uid: 26823 + components: + - type: Transform + pos: 102.5,10.5 + parent: 5350 + - uid: 26824 + components: + - type: Transform + pos: 102.5,11.5 + parent: 5350 + - uid: 26825 + components: + - type: Transform + pos: 102.5,12.5 + parent: 5350 + - uid: 26826 + components: + - type: Transform + pos: 103.5,12.5 + parent: 5350 + - uid: 26827 + components: + - type: Transform + pos: 103.5,13.5 + parent: 5350 - proto: CableHVStack entities: - uid: 1551 @@ -50188,11 +50401,6 @@ entities: - type: Transform pos: 105.5,6.5 parent: 5350 - - uid: 25976 - components: - - type: Transform - pos: 105.5,7.5 - parent: 5350 - uid: 25977 components: - type: Transform @@ -50353,6 +50561,56 @@ entities: - type: Transform pos: 8.5,-27.5 parent: 5350 + - uid: 26830 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 + - uid: 26831 + components: + - type: Transform + pos: 104.5,12.5 + parent: 5350 + - uid: 26832 + components: + - type: Transform + pos: 105.5,12.5 + parent: 5350 + - uid: 26833 + components: + - type: Transform + pos: 106.5,12.5 + parent: 5350 + - uid: 26834 + components: + - type: Transform + pos: 106.5,11.5 + parent: 5350 + - uid: 26835 + components: + - type: Transform + pos: 106.5,10.5 + parent: 5350 + - uid: 26836 + components: + - type: Transform + pos: 106.5,9.5 + parent: 5350 + - uid: 26837 + components: + - type: Transform + pos: 106.5,8.5 + parent: 5350 + - uid: 26838 + components: + - type: Transform + pos: 106.5,7.5 + parent: 5350 + - uid: 26839 + components: + - type: Transform + pos: 105.5,7.5 + parent: 5350 - proto: CableMVStack entities: - uid: 1548 @@ -50434,6 +50692,12 @@ entities: rot: 3.141592653589793 rad pos: 47.5,-24.5 parent: 5350 + - uid: 25869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 103.5,12.5 + parent: 5350 - uid: 25992 components: - type: Transform @@ -60650,6 +60914,11 @@ entities: - type: Transform pos: 41.583923,-36.62425 parent: 5350 + - uid: 26807 + components: + - type: Transform + pos: 61.47438,1.4628983 + parent: 5350 - proto: ClothingMaskBreathMedical entities: - uid: 15675 @@ -62662,6 +62931,11 @@ entities: - 0 - 0 - 0 + - uid: 26793 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 5350 - proto: CrateEngineeringCableHV entities: - uid: 17216 @@ -63049,6 +63323,11 @@ entities: - type: Transform pos: 22.529781,-29.351112 parent: 5350 + - uid: 26804 + components: + - type: Transform + pos: 59.646255,1.4628983 + parent: 5350 - proto: CrowbarRed entities: - uid: 1535 @@ -70419,6 +70698,11 @@ entities: - type: Transform pos: -26.549986,39.52742 parent: 5350 + - uid: 26806 + components: + - type: Transform + pos: 61.38063,1.6503983 + parent: 5350 - proto: EmergencyRollerBedSpawnFolded entities: - uid: 22948 @@ -73360,6 +73644,11 @@ entities: - type: Transform pos: 12.432602,37.803913 parent: 5350 + - uid: 26805 + components: + - type: Transform + pos: 60.427505,1.5878983 + parent: 5350 - proto: FlashlightSeclite entities: - uid: 10004 @@ -115114,16 +115403,6 @@ entities: - type: Transform pos: 56.5,37.5 parent: 5350 - - uid: 12075 - components: - - type: Transform - pos: 57.5,-2.5 - parent: 5350 - - uid: 12076 - components: - - type: Transform - pos: 57.5,-1.5 - parent: 5350 - uid: 26234 components: - type: Transform @@ -115564,6 +115843,12 @@ entities: rot: 1.5707963267948966 rad pos: 103.5,8.5 parent: 5350 + - uid: 26808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-0.5 + parent: 5350 - proto: IntercomCommon entities: - uid: 24804 @@ -124117,6 +124402,11 @@ entities: parent: 5350 - type: ApcPowerReceiver powerLoad: 0 + - uid: 26845 + components: + - type: Transform + pos: 76.5,1.5 + parent: 5350 - proto: PoweredlightSodium entities: - uid: 23878 @@ -131986,26 +132276,6 @@ entities: - type: Transform pos: 1.5,-13.5 parent: 5350 - - uid: 26459 - components: - - type: Transform - pos: 103.5,2.5 - parent: 5350 - - uid: 26460 - components: - - type: Transform - pos: 105.5,2.5 - parent: 5350 - - uid: 26461 - components: - - type: Transform - pos: 105.5,-2.5 - parent: 5350 - - uid: 26462 - components: - - type: Transform - pos: 103.5,-2.5 - parent: 5350 - proto: ShowcaseRobotAntique entities: - uid: 1975 @@ -132659,6 +132929,13 @@ entities: - type: Transform pos: 56.5,-0.5 parent: 5350 +- proto: SignAiUpload + entities: + - uid: 24179 + components: + - type: Transform + pos: -8.5,11.5 + parent: 5350 - proto: SignalButton entities: - uid: 1369 @@ -134064,6 +134341,30 @@ entities: - type: Transform pos: 74.5,31.5 parent: 5350 +- proto: SignRedOne + entities: + - uid: 26775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,49.5 + parent: 5350 +- proto: SignRedThree + entities: + - uid: 26777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,49.5 + parent: 5350 +- proto: SignRedTwo + entities: + - uid: 26776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,49.5 + parent: 5350 - proto: SignRND entities: - uid: 22989 @@ -134167,11 +134468,6 @@ entities: - type: Transform pos: -12.5,11.5 parent: 5350 - - uid: 10775 - components: - - type: Transform - pos: -8.5,11.5 - parent: 5350 - uid: 14060 components: - type: Transform @@ -134197,6 +134493,12 @@ entities: - type: Transform pos: 20.5,-48.5 parent: 5350 + - uid: 26809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-3.5 + parent: 5350 - proto: SignSecureMedRed entities: - uid: 10471 @@ -134781,10 +135083,10 @@ entities: - type: Transform pos: 109.5,2.5 parent: 5350 - - uid: 25869 + - uid: 26828 components: - type: Transform - pos: 104.5,13.5 + pos: 103.5,13.5 parent: 5350 - proto: SmokingPipeFilledCannabis entities: @@ -137820,6 +138122,11 @@ entities: - type: Transform pos: 108.5,2.5 parent: 5350 + - uid: 26829 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 - proto: SuitStorageCaptain entities: - uid: 1505 @@ -138111,6 +138418,17 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 8919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 112.5,-4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E - uid: 10749 components: - type: Transform @@ -138174,6 +138492,17 @@ entities: - SurveillanceCameraCommand nameSet: True id: Telecomms + - uid: 25814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,1.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel - uid: 26400 components: - type: Transform @@ -138282,6 +138611,60 @@ entities: rot: 3.141592653589793 rad pos: 92.5,5.5 parent: 5350 + - uid: 26418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bathroom + - uid: 26657 + components: + - type: Transform + pos: -4.5,-16.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Showroom + - uid: 26782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,-0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel + - uid: 26801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 105.5,-2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Telecomms Command Room + - uid: 26846 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel - proto: SurveillanceCameraEngineering entities: - uid: 11516 @@ -138490,6 +138873,167 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Grav Gen + - uid: 26745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-5.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Desk + - uid: 26764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,44.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NW + - uid: 26783 + components: + - type: Transform + pos: 56.5,-30.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Oxy + - uid: 26784 + components: + - type: Transform + pos: 52.5,-30.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Nitro + - uid: 26785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-19.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Co2 + - uid: 26786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Plasma + - uid: 26787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-11.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Waste + - uid: 26788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Mixer + - uid: 26789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,-23.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Exterior + - uid: 26792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Materials Room + - uid: 26794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NE + - uid: 26795 + components: + - type: Transform + pos: 56.5,43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Grav Gen Exterior + - uid: 26802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 99.5,-3.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Telecomms Entrance + - uid: 26849 + components: + - type: Transform + pos: 37.5,-60.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars SE + - uid: 26850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-62.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars SW - proto: SurveillanceCameraGeneral entities: - uid: 23189 @@ -138599,6 +139143,451 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Tool Room + - uid: 26419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-3.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall HoP + - uid: 26420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cargo Lobby + - uid: 26459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library + - uid: 26460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: GameRoom + - uid: 26461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Librarian Room + - uid: 26462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Chem + - uid: 26645 + components: + - type: Transform + pos: -6.5,-63.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evac 1 + - uid: 26646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-69.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evac 2 + - uid: 26648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-67.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel + - uid: 26649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Evac + - uid: 26650 + components: + - type: Transform + pos: -25.5,-67.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Office + - uid: 26651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-70.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Funerary + - uid: 26652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-48.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Genetics + - uid: 26653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Robotics + - uid: 26656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Showroom + - uid: 26696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Vault + - uid: 26742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Botany + - uid: 26747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Captain + - uid: 26748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Bar + - uid: 26749 + components: + - type: Transform + pos: 6.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Courtroom + - uid: 26750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Cargo + - uid: 26751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,1.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Arrivals + - uid: 26752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,-2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Club + - uid: 26753 + components: + - type: Transform + pos: -59.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -54.5,6.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -64.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26757 + components: + - type: Transform + pos: -72.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,-17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Docks + - uid: 26762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,23.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Jani + - uid: 26779 + components: + - type: Transform + pos: 33.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Boxing Ring + - uid: 26780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Holodeck + - uid: 26781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,29.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorms Hall + - uid: 26790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Theater Room + - uid: 26791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Engi + - uid: 26796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,47.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Boxing Ring Escape Pod + - uid: 26797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,20.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryosleep + - uid: 26799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Sec + - uid: 26800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,6.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Shop + - uid: 26847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Tool Room + - uid: 26848 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,11.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Bridge - proto: SurveillanceCameraMedical entities: - uid: 14402 @@ -138720,6 +139709,113 @@ entities: - SurveillanceCameraMedical nameSet: True id: Cryonics + - uid: 26501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-33.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Storage + - uid: 26502 + components: + - type: Transform + pos: -30.5,-47.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Surgery Hallway + - uid: 26503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-49.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: 'Medical Hall ' + - uid: 26526 + components: + - type: Transform + pos: -18.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical South + - uid: 26636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-57.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Storage 2 + - uid: 26637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-54.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Breakroom + - uid: 26640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -49.5,-56.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology + - uid: 26643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Viro Chamber + - uid: 26644 + components: + - type: Transform + pos: -53.5,-52.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Viro Room 1 + - uid: 26655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-31.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Paramedic Garage - proto: SurveillanceCameraRouterCommand entities: - uid: 24071 @@ -138897,6 +139993,80 @@ entities: - SurveillanceCameraScience nameSet: True id: Sci Lobby + - uid: 26654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-29.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Robotics Bay + - uid: 26704 + components: + - type: Transform + pos: 8.5,-32.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Entrance + - uid: 26705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Center + - uid: 26738 + components: + - type: Transform + pos: 10.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Toxins + - uid: 26739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-54.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Lockerroom + - uid: 26740 + components: + - type: Transform + pos: 26.5,-43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Hall + - uid: 26741 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-28.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Artifact Lab - proto: SurveillanceCameraSecurity entities: - uid: 10469 @@ -139048,6 +140218,113 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Gun Range + - uid: 26647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-70.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evac Security post + - uid: 26765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,38.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Security Hall + - uid: 26766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,48.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Hall + - uid: 26770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,57.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Exterior + - uid: 26771 + components: + - type: Transform + pos: -3.5,63.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Exterior + - uid: 26772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 3 + - uid: 26773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 2 + - uid: 26774 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 1 + - uid: 26778 + components: + - type: Transform + pos: 1.5,50.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Med + - uid: 26798 + components: + - type: Transform + pos: 13.5,17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Law Office - proto: SurveillanceCameraService entities: - uid: 23214 @@ -139071,6 +140348,39 @@ entities: - SurveillanceCameraService nameSet: True id: Freezer + - uid: 26743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Hydroponics + - uid: 26744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-22.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Backroom + - uid: 26746 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Bar - proto: SurveillanceCameraSupply entities: - uid: 23184 @@ -139128,6 +140438,60 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Bay + - uid: 26423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,10.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Breakroom + - uid: 26759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,31.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Salvage Dock + - uid: 26760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,19.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 1 + - uid: 26761 + components: + - type: Transform + pos: -44.5,15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 2 + - uid: 26763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,22.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Bay North - proto: SurveillanceCameraWirelessRouterConstructed entities: - uid: 26558 @@ -142831,6 +144195,16 @@ entities: showEnts: False occludes: True ents: [] + - uid: 26840 + components: + - type: Transform + pos: 108.5,9.5 + parent: 5350 + - uid: 26841 + components: + - type: Transform + pos: 100.5,9.5 + parent: 5350 - proto: TeslaCoil entities: - uid: 23612 @@ -143135,11 +144509,6 @@ entities: parent: 5350 - proto: ToiletEmpty entities: - - uid: 1032 - components: - - type: Transform - pos: 8.5,2.5 - parent: 5350 - uid: 7817 components: - type: Transform @@ -143178,6 +144547,13 @@ entities: - type: Transform pos: -39.5,-10.5 parent: 5350 +- proto: ToiletGoldenDirtyWater + entities: + - uid: 25811 + components: + - type: Transform + pos: 8.5,2.5 + parent: 5350 - proto: TomatoSeeds entities: - uid: 3141 @@ -143322,11 +144698,6 @@ entities: - type: Transform pos: 1.5618443,-16.342892 parent: 5350 - - uid: 26423 - components: - - type: Transform - pos: 104.485725,8.611769 - parent: 5350 - proto: ToyAmongPequeno entities: - uid: 14514 @@ -153357,11 +154728,6 @@ entities: - type: Transform pos: 103.5,14.5 parent: 5350 - - uid: 25808 - components: - - type: Transform - pos: 103.5,13.5 - parent: 5350 - uid: 25809 components: - type: Transform @@ -153372,11 +154738,6 @@ entities: - type: Transform pos: 105.5,14.5 parent: 5350 - - uid: 25811 - components: - - type: Transform - pos: 105.5,13.5 - parent: 5350 - uid: 25812 components: - type: Transform @@ -153387,11 +154748,6 @@ entities: - type: Transform pos: 101.5,13.5 parent: 5350 - - uid: 25814 - components: - - type: Transform - pos: 106.5,13.5 - parent: 5350 - uid: 25815 components: - type: Transform @@ -153622,6 +154978,11 @@ entities: - type: Transform pos: 108.5,-11.5 parent: 5350 + - uid: 25976 + components: + - type: Transform + pos: 105.5,13.5 + parent: 5350 - uid: 26215 components: - type: Transform @@ -153642,6 +155003,11 @@ entities: - type: Transform pos: 108.5,-2.5 parent: 5350 + - uid: 26231 + components: + - type: Transform + pos: 106.5,13.5 + parent: 5350 - uid: 26335 components: - type: Transform @@ -161898,31 +163264,6 @@ entities: parent: 5350 - proto: WeaponTurretSyndicateBroken entities: - - uid: 26416 - components: - - type: Transform - pos: 106.5,2.5 - parent: 5350 - - uid: 26417 - components: - - type: Transform - pos: 102.5,2.5 - parent: 5350 - - uid: 26418 - components: - - type: Transform - pos: 104.5,6.5 - parent: 5350 - - uid: 26419 - components: - - type: Transform - pos: 107.5,6.5 - parent: 5350 - - uid: 26420 - components: - - type: Transform - pos: 101.5,6.5 - parent: 5350 - uid: 26421 components: - type: Transform @@ -167197,4 +168538,9 @@ entities: - type: Transform pos: 45.520813,-8.421944 parent: 5350 + - uid: 26803 + components: + - type: Transform + pos: 59.615005,1.5566483 + parent: 5350 ... diff --git a/Resources/Maps/oasis.yml b/Resources/Maps/oasis.yml index 7ad734af15..3263b62a34 100755 --- a/Resources/Maps/oasis.yml +++ b/Resources/Maps/oasis.yml @@ -174,7 +174,7 @@ entities: version: 6 2,-3: ind: 2,-3 - tiles: gQAAAAAAbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAKQAAAAACbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAKQAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAAAAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAABgQAAAAAAKQAAAAABKQAAAAADgQAAAAAAKQAAAAADKQAAAAACKQAAAAADKQAAAAACKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAACgQAAAAAAKQAAAAACKQAAAAABIQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAADKQAAAAACgQAAAAAAgQAAAAAAJAAAAAAAgQAAAAAAdwAAAAAAYAAAAAADYAAAAAADgQAAAAAAKQAAAAAAKQAAAAAAgQAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADgQAAAAAAKQAAAAADKQAAAAABKQAAAAADdwAAAAADYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAACKQAAAAACdwAAAAABYAAAAAABYAAAAAAAYAAAAAABYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAIQAAAAACgQAAAAAAgQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADIQAAAAABKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAACgQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABKQAAAAADgQAAAAAAgQAAAAAAJAAAAAADgQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAACKQAAAAAAKQAAAAACKQAAAAACIQAAAAAAKQAAAAABKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABgQAAAAAAbwAAAAAAbwAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAADKQAAAAABKQAAAAACKQAAAAABKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: gQAAAAAAbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAKQAAAAACbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAKQAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAAAAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAABgQAAAAAAKQAAAAABKQAAAAADgQAAAAAAKQAAAAADKQAAAAACKQAAAAADKQAAAAACKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAACgQAAAAAAKQAAAAACKQAAAAABIQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAADKQAAAAACgQAAAAAAgQAAAAAAJAAAAAAAgQAAAAAAdwAAAAAAYAAAAAADYAAAAAADgQAAAAAAKQAAAAAAKQAAAAAAgQAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADgQAAAAAAKQAAAAADKQAAAAABKQAAAAADdwAAAAADYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAACKQAAAAACdwAAAAABYAAAAAABYAAAAAAAYAAAAAABYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAIQAAAAACgQAAAAAAgQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADIQAAAAABKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAACgQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABKQAAAAADgQAAAAAAgQAAAAAAJAAAAAADgQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAACKQAAAAAAKQAAAAACKQAAAAACIQAAAAAAKQAAAAABKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABgQAAAAAAbwAAAAAAbwAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAADKQAAAAABKQAAAAACKQAAAAABKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 2,-1: ind: 2,-1 @@ -202,11 +202,11 @@ entities: version: 6 -3,0: ind: -3,0 - tiles: YAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAKQAAAAABKQAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAACYAAAAAABYAAAAAACYAAAAAAAgQAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAABYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: YAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAKQAAAAABKQAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAACYAAAAAABYAAAAAACYAAAAAAAgQAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAABYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 -3,1: ind: -3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 0,-4: ind: 0,-4 @@ -6668,7 +6668,7 @@ entities: -8,-8: 0: 65327 -8,-9: - 0: 62207 + 0: 62079 -9,-8: 0: 43071 -8,-7: @@ -6688,7 +6688,7 @@ entities: -7,-6: 0: 57583 -7,-9: - 0: 61679 + 0: 61695 -6,-8: 0: 65039 -6,-7: @@ -6781,13 +6781,13 @@ entities: 4,-10: 0: 16383 -8,-12: - 0: 30591 + 0: 30583 -9,-12: 0: 2039 -8,-11: 0: 28791 -8,-10: - 0: 61559 + 0: 28791 -9,-11: 0: 61559 -9,-10: @@ -6799,7 +6799,7 @@ entities: -7,-11: 0: 65295 -7,-10: - 0: 57599 + 0: 61695 -7,-13: 0: 65287 -6,-12: @@ -6893,7 +6893,7 @@ entities: 9,-13: 0: 4369 10,-12: - 0: 14560 + 0: 7904 10,-11: 0: 65295 10,-10: @@ -7021,7 +7021,7 @@ entities: 0: 65427 -13,-12: 0: 56524 - 6: 17 + 7: 17 -12,-11: 0: 60931 -13,-11: @@ -7034,20 +7034,22 @@ entities: 0: 30583 -12,-8: 0: 4087 + -11,-10: + 0: 61167 + -11,-9: + 0: 65534 -11,-12: 0: 61166 -11,-11: 0: 61166 - -11,-10: - 0: 3808 - -11,-9: - 0: 1636 + -11,-8: + 0: 61438 -10,-12: 0: 32767 -10,-11: 0: 30583 -10,-10: - 0: 26222 + 0: 30590 -10,-9: 0: 61158 -10,-8: @@ -7064,8 +7066,6 @@ entities: 0: 119 -13,-5: 0: 58982 - -11,-8: - 0: 61424 -11,-7: 0: 61422 -11,-5: @@ -7129,23 +7129,22 @@ entities: 3: 34952 -11,2: 3: 255 - 1: 57344 + 4: 57344 -12,4: 3: 53192 -11,3: 3: 61440 - 4: 224 + 5: 224 -10,1: 0: 40847 -10,2: - 3: 8755 - 0: 34952 + 3: 51 + 0: 43656 -10,3: - 3: 12834 - 0: 34952 + 3: 12288 + 0: 35498 -10,4: - 3: 8738 - 0: 34952 + 0: 43690 -13,4: 3: 32630 -12,7: @@ -7158,27 +7157,26 @@ entities: 3: 34952 -11,6: 3: 61440 - 6: 224 + 7: 224 -11,7: 3: 65535 -12,8: 3: 34952 -11,4: - 5: 224 - 6: 57344 + 6: 224 + 7: 57344 -11,5: - 6: 57568 + 7: 57568 -11,8: 3: 65535 -10,6: - 3: 12834 - 0: 34952 + 3: 12288 + 0: 35498 -10,7: 3: 13107 0: 34952 -10,5: - 3: 8738 - 0: 34952 + 0: 43690 -10,8: 3: 62259 0: 136 @@ -7245,7 +7243,7 @@ entities: -2,-14: 0: 65520 -9,-15: - 6: 2048 + 7: 2048 -8,-14: 0: 4080 -9,-14: @@ -7255,11 +7253,11 @@ entities: -9,-13: 0: 4095 -7,-15: - 6: 61184 + 7: 61184 -7,-14: 0: 32752 -6,-15: - 6: 256 + 7: 256 0: 32768 -6,-14: 0: 65528 @@ -7268,31 +7266,31 @@ entities: -13,-16: 3: 65520 -12,-15: - 6: 53128 + 7: 53128 -12,-14: 0: 30483 - 6: 4 + 7: 4 -13,-14: 0: 52232 3: 23 -11,-16: - 6: 4352 + 7: 4352 -11,-15: - 6: 65425 + 7: 65425 -11,-14: 0: 65520 -11,-13: 0: 831 -10,-15: - 6: 14327 + 7: 14327 -10,-14: 0: 16304 -10,-13: 0: 2187 -10,-16: - 6: 8704 + 7: 8704 -10,-17: - 6: 49152 + 7: 49152 -16,-7: 3: 52416 -16,-6: @@ -7317,7 +7315,7 @@ entities: 0: 52416 -15,-9: 0: 34952 - 6: 256 + 7: 256 -14,-8: 0: 49080 -14,-7: @@ -7337,31 +7335,31 @@ entities: -13,-7: 0: 26214 -16,-12: - 6: 32 + 7: 32 -16,-11: - 6: 32768 + 7: 32768 -16,-10: - 6: 8 + 7: 8 -15,-11: - 6: 13036 + 7: 13036 0: 32768 -15,-10: - 6: 307 + 7: 307 0: 34952 -15,-12: - 6: 51336 + 7: 51336 -14,-12: - 6: 4607 + 7: 4607 0: 49152 -14,-11: - 6: 17 + 7: 17 0: 61644 -14,-10: 0: 65535 -14,-13: - 6: 59392 + 7: 59392 -13,-13: - 6: 4352 + 7: 4352 0: 1604 8,9: 0: 65535 @@ -7390,7 +7388,7 @@ entities: 10,10: 0: 3549 10,11: - 6: 275 + 7: 275 10,12: 0: 305 3: 3276 @@ -7570,9 +7568,9 @@ entities: 14,-9: 0: 36623 15,-8: - 6: 16 + 7: 16 15,-6: - 6: 16 + 7: 16 0: 4096 3: 32768 15,-9: @@ -7580,16 +7578,16 @@ entities: 16,-5: 3: 304 12,-11: - 6: 49156 + 7: 49156 12,-12: 3: 12 12,-13: 3: 52303 13,-12: 3: 15 - 6: 16384 + 7: 16384 13,-11: - 6: 65228 + 7: 65228 13,-10: 0: 65520 13,-13: @@ -7597,7 +7595,7 @@ entities: 14,-12: 3: 15 14,-11: - 6: 65521 + 7: 65521 14,-10: 0: 65392 14,-13: @@ -7605,14 +7603,14 @@ entities: 15,-12: 3: 1 15,-11: - 6: 4112 + 7: 4112 15,-10: - 6: 52451 + 7: 52451 0: 4096 15,-13: 3: 4511 16,-10: - 6: 19 + 7: 19 -4,9: 0: 7421 -5,9: @@ -7627,13 +7625,13 @@ entities: 0: 32767 -4,12: 0: 34945 - 6: 13072 + 7: 13072 -3,9: 0: 4095 -3,10: 0: 65535 -3,11: - 6: 61408 + 7: 61408 -2,9: 0: 4095 -2,10: @@ -7677,7 +7675,7 @@ entities: 0: 65535 -5,12: 0: 13111 - 6: 34816 + 7: 34816 -12,9: 3: 65497 -13,9: @@ -7686,19 +7684,19 @@ entities: 3: 52428 -11,9: 3: 4607 - 6: 49152 + 7: 49152 -11,10: 3: 33041 - 6: 204 + 7: 204 -12,11: 3: 136 -11,11: 3: 248 -10,9: 3: 52479 - 6: 4096 + 7: 4096 -10,10: - 6: 17 + 7: 17 3: 34952 -10,11: 3: 2296 @@ -7753,14 +7751,14 @@ entities: 3: 49 -5,13: 0: 51 - 6: 51208 + 7: 51208 -5,14: - 6: 264 + 7: 264 -4,13: - 6: 29443 + 7: 29443 0: 136 -4,14: - 6: 3 + 7: 3 -3,12: 0: 65520 -3,13: @@ -7776,7 +7774,7 @@ entities: 0,13: 0: 35003 1,13: - 0: 8866 + 0: 41634 1,14: 0: 8710 3: 34952 @@ -7787,7 +7785,7 @@ entities: 0: 8738 3: 34952 2,13: - 0: 184 + 0: 4280 2,14: 3: 49023 2,15: @@ -7799,7 +7797,8 @@ entities: 3,14: 3: 44847 3,15: - 3: 44975 + 3: 44463 + 0: 512 3,16: 3: 12207 4,14: @@ -7807,15 +7806,15 @@ entities: 4,15: 3: 44971 4,13: - 0: 224 + 0: 49376 4,16: 3: 65515 5,15: - 3: 1279 - 0: 8192 + 0: 8243 + 3: 1228 5,13: 0: 8738 - 6: 136 + 7: 136 5,14: 0: 546 3: 16384 @@ -7990,7 +7989,7 @@ entities: -15,-16: 3: 65520 -15,-13: - 6: 64 + 7: 64 -14,-16: 3: 24404 -14,-15: @@ -8095,7 +8094,7 @@ entities: -10,-19: 3: 4096 -10,-18: - 0: 4 + 7: 4 -18,-12: 3: 68 -18,-13: @@ -8188,7 +8187,7 @@ entities: temperature: 293.15 moles: - 0 - - 6666.982 + - 103.92799 - 0 - 0 - 0 @@ -8229,6 +8228,21 @@ entities: - 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: @@ -9549,18 +9563,6 @@ entities: - 15445 - 1922 - 412 - - uid: 7089 - components: - - type: Transform - pos: -10.5,18.5 - parent: 2 - - type: DeviceList - devices: - - 9276 - - 29004 - - 29003 - - 29050 - - 28969 - uid: 8130 components: - type: Transform @@ -11149,13 +11151,20 @@ entities: - 2175 - 28966 - 29041 -- proto: AirAlarmAssembly +- proto: AirAlarmVox entities: - - uid: 2171 + - uid: 231 components: - type: Transform - pos: -16.5,18.5 + pos: -10.5,18.5 parent: 2 + - type: DeviceList + devices: + - 29003 + - 29004 + - 29050 + - 9276 + - 28969 - proto: AirCanister entities: - uid: 4223 @@ -12083,12 +12092,6 @@ entities: rot: 1.5707963267948966 rad pos: 45.5,26.5 parent: 2 - - uid: 21027 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-46.5 - parent: 2 - uid: 23669 components: - type: Transform @@ -14311,7 +14314,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28169.445 + secondsUntilStateChange: -34766 state: Opening - uid: 6934 components: @@ -14323,7 +14326,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28172.08 + secondsUntilStateChange: -34768.633 state: Opening - uid: 6935 components: @@ -14335,7 +14338,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28170.93 + secondsUntilStateChange: -34767.484 state: Opening - uid: 6936 components: @@ -14346,7 +14349,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28170.146 + secondsUntilStateChange: -34766.7 state: Opening - proto: AirlockTheatreLocked entities: @@ -14438,7 +14441,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - uid: 18245 components: - type: Transform @@ -34825,6 +34828,11 @@ entities: parent: 21002 - proto: AtmosDeviceFanDirectional entities: + - uid: 5191 + components: + - type: Transform + pos: -13.5,-58.5 + parent: 2 - uid: 10677 components: - type: Transform @@ -34867,59 +34875,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-68.5 parent: 2 - - uid: 13210 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-80.5 - parent: 2 - - uid: 13747 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-82.5 - parent: 2 - - uid: 13773 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-17.5 - parent: 2 - - uid: 16803 - components: - - type: Transform - pos: -13.5,-58.5 - parent: 2 - - uid: 18705 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-80.5 - parent: 2 - - uid: 19542 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-82.5 - parent: 2 - - uid: 25960 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-1.5 - parent: 2 - - uid: 26097 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-5.5 - parent: 2 - - uid: 26114 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-80.5 - parent: 2 - proto: AtmosDeviceFanTiny entities: - uid: 45 @@ -36121,144 +36076,146 @@ entities: - type: Transform pos: -42.5,11.5 parent: 2 - - uid: 29002 +- proto: AtmosFixOxygenMarker + entities: + - uid: 5580 components: - type: Transform - pos: -11.5,16.5 + pos: -42.5,13.5 parent: 2 - - uid: 29018 + - uid: 9284 components: - type: Transform - pos: -11.5,17.5 + pos: -41.5,13.5 parent: 2 - - uid: 29019 + - uid: 9285 components: - type: Transform - pos: -10.5,17.5 + pos: -40.5,13.5 parent: 2 - - uid: 29020 +- proto: AtmosFixPlasmaMarker + entities: + - uid: 9287 components: - type: Transform - pos: -11.5,18.5 + pos: -40.5,17.5 parent: 2 - - uid: 29021 + - uid: 9288 components: - type: Transform - pos: -11.5,19.5 + pos: -41.5,17.5 parent: 2 - - uid: 29022 + - uid: 9289 components: - type: Transform - pos: -12.5,19.5 + pos: -42.5,17.5 parent: 2 - - uid: 29023 +- proto: AtmosFixVoxMarker + entities: + - uid: 10285 components: - type: Transform - pos: -13.5,19.5 + pos: -15.5,17.5 parent: 2 - - uid: 29024 + - uid: 10466 components: - type: Transform - pos: -14.5,19.5 + pos: -14.5,16.5 parent: 2 - - uid: 29025 + - uid: 10655 components: - type: Transform - pos: -14.5,18.5 + pos: -15.5,16.5 parent: 2 - - uid: 29026 + - uid: 10656 components: - type: Transform - pos: -13.5,18.5 + pos: -14.5,18.5 parent: 2 - - uid: 29027 + - uid: 10691 components: - type: Transform - pos: -12.5,18.5 + pos: -13.5,19.5 parent: 2 - - uid: 29028 + - uid: 11130 components: - type: Transform - pos: -12.5,17.5 + pos: -13.5,18.5 parent: 2 - - uid: 29029 + - uid: 12566 components: - type: Transform pos: -13.5,17.5 parent: 2 - - uid: 29030 + - uid: 12567 components: - type: Transform - pos: -14.5,17.5 + pos: -13.5,16.5 parent: 2 - - uid: 29031 + - uid: 12882 components: - type: Transform - pos: -15.5,17.5 + pos: -12.5,16.5 parent: 2 - - uid: 29032 + - uid: 12883 components: - type: Transform - pos: -16.5,17.5 + pos: -11.5,16.5 parent: 2 - - uid: 29033 + - uid: 12884 components: - type: Transform - pos: -16.5,16.5 + pos: -14.5,19.5 parent: 2 - - uid: 29034 + - uid: 12885 components: - type: Transform - pos: -15.5,16.5 + pos: -14.5,17.5 parent: 2 - - uid: 29035 + - uid: 12886 components: - type: Transform - pos: -14.5,16.5 + pos: -11.5,17.5 parent: 2 - - uid: 29036 + - uid: 12888 components: - type: Transform - pos: -13.5,16.5 + pos: -12.5,17.5 parent: 2 - - uid: 29037 + - uid: 12889 components: - type: Transform - pos: -12.5,16.5 + pos: -12.5,19.5 parent: 2 -- proto: AtmosFixOxygenMarker - entities: - - uid: 5580 + - uid: 12934 components: - type: Transform - pos: -42.5,13.5 + pos: -10.5,17.5 parent: 2 - - uid: 9284 + - uid: 12935 components: - type: Transform - pos: -41.5,13.5 + pos: -11.5,19.5 parent: 2 - - uid: 9285 + - uid: 12937 components: - type: Transform - pos: -40.5,13.5 + pos: -11.5,18.5 parent: 2 -- proto: AtmosFixPlasmaMarker - entities: - - uid: 9287 + - uid: 12938 components: - type: Transform - pos: -40.5,17.5 + pos: -12.5,18.5 parent: 2 - - uid: 9288 + - uid: 13010 components: - type: Transform - pos: -41.5,17.5 + pos: -16.5,16.5 parent: 2 - - uid: 9289 + - uid: 13030 components: - type: Transform - pos: -42.5,17.5 + pos: -16.5,17.5 parent: 2 - proto: Autolathe entities: @@ -37290,35 +37247,6 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-6.5 parent: 2 - - uid: 7941 - components: - - type: Transform - pos: 51.5,16.5 - parent: 2 - - type: EntityStorage - open: True - removedMasks: 20 - - type: Fixtures - fixtures: - fix1: - shape: !type:PolygonShape - radius: 0.01 - vertices: - - -0.45,-0.45 - - 0.45,-0.45 - - 0.45,0.45 - - -0.45,0.45 - mask: - - Impassable - - TableLayer - - LowImpassable - layer: - - BulletImpassable - - Opaque - density: 190 - hard: True - restitution: 0 - friction: 0.4 - uid: 10179 components: - type: Transform @@ -37330,6 +37258,11 @@ entities: - type: Transform pos: -7.5,-54.5 parent: 2 + - uid: 29023 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 - proto: BoxBeaker entities: - uid: 10428 @@ -39440,11 +39373,6 @@ entities: - type: Transform pos: 31.5,6.5 parent: 2 - - uid: 2494 - components: - - type: Transform - pos: 31.5,6.5 - parent: 2 - uid: 2495 components: - type: Transform @@ -47475,11 +47403,6 @@ entities: - type: Transform pos: 40.5,-44.5 parent: 2 - - uid: 11130 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - uid: 11131 components: - type: Transform @@ -54850,6 +54773,11 @@ entities: - type: Transform pos: 43.5,61.5 parent: 21002 + - uid: 25960 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 - uid: 26463 components: - type: Transform @@ -55335,6 +55263,16 @@ entities: - type: Transform pos: -44.5,37.5 parent: 2 + - uid: 29036 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 29077 + components: + - type: Transform + pos: -14.5,20.5 + parent: 2 - proto: CableApcStack1 entities: - uid: 23589 @@ -55356,11 +55294,6 @@ entities: parent: 2 - proto: CableHV entities: - - uid: 231 - components: - - type: Transform - pos: 44.5,-46.5 - parent: 2 - uid: 1409 components: - type: Transform @@ -58606,16 +58539,6 @@ entities: - type: Transform pos: 4.5,-57.5 parent: 2 - - uid: 10656 - components: - - type: Transform - pos: 41.5,-46.5 - parent: 2 - - uid: 10691 - components: - - type: Transform - pos: 42.5,-46.5 - parent: 2 - uid: 10716 components: - type: Transform @@ -59096,16 +59019,6 @@ entities: - type: Transform pos: 52.5,19.5 parent: 2 - - uid: 12888 - components: - - type: Transform - pos: 44.5,24.5 - parent: 2 - - uid: 12889 - components: - - type: Transform - pos: 45.5,24.5 - parent: 2 - uid: 12890 components: - type: Transform @@ -59311,16 +59224,6 @@ entities: - type: Transform pos: 56.5,13.5 parent: 2 - - uid: 12937 - components: - - type: Transform - pos: 44.5,11.5 - parent: 2 - - uid: 12938 - components: - - type: Transform - pos: 45.5,11.5 - parent: 2 - uid: 12959 components: - type: Transform @@ -59466,6 +59369,31 @@ entities: - type: Transform pos: 56.5,9.5 parent: 2 + - uid: 13034 + components: + - type: Transform + pos: 43.5,-45.5 + parent: 2 + - uid: 13037 + components: + - type: Transform + pos: 51.5,23.5 + parent: 2 + - uid: 13210 + components: + - type: Transform + pos: 51.5,22.5 + parent: 2 + - uid: 13747 + components: + - type: Transform + pos: 51.5,20.5 + parent: 2 + - uid: 13773 + components: + - type: Transform + pos: 51.5,21.5 + parent: 2 - uid: 15404 components: - type: Transform @@ -59511,6 +59439,11 @@ entities: - type: Transform pos: 31.5,39.5 parent: 2 + - uid: 18705 + components: + - type: Transform + pos: 42.5,-45.5 + parent: 2 - uid: 18738 components: - type: Transform @@ -60781,16 +60714,6 @@ entities: - type: Transform pos: 40.5,-44.5 parent: 2 - - uid: 19956 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - - uid: 19959 - components: - - type: Transform - pos: 43.5,-46.5 - parent: 2 - uid: 19983 components: - type: Transform @@ -62716,6 +62639,106 @@ entities: - type: Transform pos: 22.5,-24.5 parent: 21002 + - uid: 29022 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 + - uid: 29025 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 + - uid: 29033 + components: + - type: Transform + pos: 41.5,-45.5 + parent: 2 + - uid: 29151 + components: + - type: Transform + pos: 60.5,10.5 + parent: 2 + - uid: 29152 + components: + - type: Transform + pos: 60.5,11.5 + parent: 2 + - uid: 29153 + components: + - type: Transform + pos: 60.5,12.5 + parent: 2 + - uid: 29154 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 29155 + components: + - type: Transform + pos: 60.5,14.5 + parent: 2 + - uid: 29156 + components: + - type: Transform + pos: 60.5,15.5 + parent: 2 + - uid: 29157 + components: + - type: Transform + pos: 60.5,16.5 + parent: 2 + - uid: 29158 + components: + - type: Transform + pos: 59.5,16.5 + parent: 2 + - uid: 29159 + components: + - type: Transform + pos: 58.5,16.5 + parent: 2 + - uid: 29160 + components: + - type: Transform + pos: 57.5,16.5 + parent: 2 + - uid: 29161 + components: + - type: Transform + pos: 56.5,16.5 + parent: 2 + - uid: 29162 + components: + - type: Transform + pos: 55.5,16.5 + parent: 2 + - uid: 29163 + components: + - type: Transform + pos: 54.5,16.5 + parent: 2 + - uid: 29164 + components: + - type: Transform + pos: 53.5,16.5 + parent: 2 + - uid: 29165 + components: + - type: Transform + pos: 53.5,17.5 + parent: 2 + - uid: 29166 + components: + - type: Transform + pos: 53.5,19.5 + parent: 2 + - uid: 29167 + components: + - type: Transform + pos: 53.5,18.5 + parent: 2 - proto: CableMV entities: - uid: 418 @@ -66713,41 +66736,6 @@ entities: - type: Transform pos: 52.5,17.5 parent: 2 - - uid: 12882 - components: - - type: Transform - pos: 53.5,18.5 - parent: 2 - - uid: 12883 - components: - - type: Transform - pos: 54.5,18.5 - parent: 2 - - uid: 12884 - components: - - type: Transform - pos: 54.5,17.5 - parent: 2 - - uid: 12885 - components: - - type: Transform - pos: 54.5,16.5 - parent: 2 - - uid: 12886 - components: - - type: Transform - pos: 55.5,16.5 - parent: 2 - - uid: 12934 - components: - - type: Transform - pos: 56.5,16.5 - parent: 2 - - uid: 12935 - components: - - type: Transform - pos: 57.5,16.5 - parent: 2 - uid: 12992 components: - type: Transform @@ -66803,46 +66791,6 @@ entities: - type: Transform pos: 57.5,11.5 parent: 2 - - uid: 13030 - components: - - type: Transform - pos: 60.5,12.5 - parent: 2 - - uid: 13031 - components: - - type: Transform - pos: 60.5,12.5 - parent: 2 - - uid: 13032 - components: - - type: Transform - pos: 60.5,13.5 - parent: 2 - - uid: 13033 - components: - - type: Transform - pos: 60.5,14.5 - parent: 2 - - uid: 13034 - components: - - type: Transform - pos: 60.5,15.5 - parent: 2 - - uid: 13035 - components: - - type: Transform - pos: 60.5,16.5 - parent: 2 - - uid: 13036 - components: - - type: Transform - pos: 59.5,16.5 - parent: 2 - - uid: 13037 - components: - - type: Transform - pos: 58.5,16.5 - parent: 2 - uid: 13072 components: - type: Transform @@ -68399,12 +68347,6 @@ entities: - type: Transform pos: 52.5,20.5 parent: 2 - - uid: 10285 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 41.5,-47.5 - parent: 2 - uid: 16678 components: - type: Transform @@ -68451,6 +68393,18 @@ entities: - type: Transform pos: 22.5,-23.5 parent: 21002 + - uid: 29019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-45.5 + parent: 2 + - uid: 29149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,19.5 + parent: 2 - proto: Candle entities: - uid: 23174 @@ -71638,18 +71592,6 @@ entities: rot: -1.5707963267948966 rad pos: 38.5,-44.5 parent: 2 - - uid: 12566 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,-44.5 - parent: 2 - - uid: 12567 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,-44.5 - parent: 2 - uid: 12568 components: - type: Transform @@ -72334,6 +72276,12 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,29.5 parent: 2 + - uid: 13035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-46.5 + parent: 2 - uid: 13135 components: - type: Transform @@ -74027,6 +73975,18 @@ entities: rot: 3.141592653589793 rad pos: 57.5,-31.5 parent: 2 + - uid: 29021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-44.5 + parent: 2 + - uid: 29024 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-45.5 + parent: 2 - proto: Chair entities: - uid: 495 @@ -76907,6 +76867,12 @@ entities: rot: -1.5707963267948966 rad pos: -48.5,-37.5 parent: 2 + - uid: 29138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,9.5 + parent: 2 - proto: Cobweb2 entities: - uid: 2182 @@ -76919,6 +76885,11 @@ entities: - type: Transform pos: 41.5,23.5 parent: 2 + - uid: 29136 + components: + - type: Transform + pos: 44.5,23.5 + parent: 2 - proto: ComfyChair entities: - uid: 1044 @@ -92359,7 +92330,7 @@ entities: pos: -13.5,-1.5 parent: 2 - type: Door - secondsUntilStateChange: -19493.426 + secondsUntilStateChange: -26089.98 - type: DeviceNetwork deviceLists: - 18275 @@ -92367,7 +92338,7 @@ entities: - 18282 - 18271 - type: Firelock - emergencyCloseCooldown: 16782.4165529 + emergencyCloseCooldown: 16782.4165528 - uid: 167 components: - type: Transform @@ -126246,7 +126217,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - proto: GasVentScrubber entities: - uid: 53 @@ -128166,7 +128137,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - uid: 29003 @@ -128177,7 +128148,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - uid: 29004 @@ -128188,7 +128159,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasVolumePump @@ -136687,7 +136658,7 @@ entities: pos: 36.5,-35.5 parent: 2 - type: Door - secondsUntilStateChange: -56325.273 + secondsUntilStateChange: -62921.83 state: Opening - uid: 5211 components: @@ -137858,6 +137829,11 @@ entities: - type: Transform pos: 12.5,43.5 parent: 2 + - uid: 26114 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 - proto: LockerEngineerFilled entities: - uid: 6703 @@ -138917,6 +138893,11 @@ entities: - type: Transform pos: -18.5,18.5 parent: 2 + - uid: 21027 + components: + - type: Transform + pos: 40.5,-44.5 + parent: 2 - uid: 23232 components: - type: Transform @@ -138952,11 +138933,6 @@ entities: - type: Transform pos: -22.5,20.5 parent: 2 - - uid: 28882 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - proto: MaintenanceToolSpawner entities: - uid: 10274 @@ -141561,11 +141537,6 @@ entities: - type: Transform pos: 42.5,5.5 parent: 2 - - uid: 13010 - components: - - type: Transform - pos: 61.5,17.5 - parent: 2 - uid: 13013 components: - type: Transform @@ -141676,6 +141647,11 @@ entities: - type: Transform pos: 3.5,-41.5 parent: 2 + - uid: 29026 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 - proto: PottedPlantRD entities: - uid: 9902 @@ -144418,6 +144394,12 @@ entities: rot: -1.5707963267948966 rad pos: -11.5,-56.5 parent: 2 + - uid: 13036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-46.5 + parent: 2 - uid: 13533 components: - type: Transform @@ -144686,12 +144668,6 @@ entities: rot: 3.141592653589793 rad pos: 64.5,-3.5 parent: 2 - - uid: 20194 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,-45.5 - parent: 2 - uid: 20197 components: - type: Transform @@ -155322,6 +155298,13 @@ entities: parent: 2 - proto: SMESBasic entities: + - uid: 2494 + components: + - type: MetaData + name: SE Solars + - type: Transform + pos: 42.5,-45.5 + parent: 2 - uid: 6414 components: - type: MetaData @@ -155379,11 +155362,6 @@ entities: - type: Transform pos: 14.5,42.5 parent: 2 - - uid: 10260 - components: - - type: Transform - pos: 41.5,-46.5 - parent: 2 - uid: 10731 components: - type: Transform @@ -155396,6 +155374,8 @@ entities: parent: 2 - uid: 19639 components: + - type: MetaData + name: SW Solars - type: Transform pos: -46.5,-53.5 parent: 2 @@ -157882,10 +157862,11 @@ entities: - type: Transform pos: 13.5,61.5 parent: 2 - - uid: 28414 + - uid: 29074 components: - type: Transform - pos: 51.5,16.5 + rot: 3.141592653589793 rad + pos: 59.5,18.5 parent: 2 - proto: SpawnPointBotanist entities: @@ -159401,6 +159382,58 @@ entities: parent: 2 - proto: SurveillanceCameraCommand entities: + - uid: 13031 + components: + - type: Transform + pos: 35.5,20.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's lavatory + - uid: 19542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge 2 + - uid: 19956 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bedroom 2 + - uid: 19959 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Closet + - uid: 20194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP bedroom - uid: 20877 components: - type: Transform @@ -159408,6 +159441,8 @@ entities: pos: 22.5,9.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand id: Bridge - uid: 20878 components: @@ -159430,6 +159465,8 @@ entities: pos: 40.5,12.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand id: Captain's Bedroom - uid: 20881 components: @@ -159438,7 +159475,10 @@ entities: pos: 39.5,-4.5 parent: 2 - type: SurveillanceCamera - id: HoP's + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP office - uid: 20882 components: - type: Transform @@ -159463,6 +159503,17 @@ entities: parent: 2 - type: SurveillanceCamera id: Board Storage + - uid: 20902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Briefing - uid: 20911 components: - type: Transform @@ -159502,6 +159553,49 @@ entities: parent: 2 - type: SurveillanceCamera id: Telecoms + - uid: 29135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Compliance N + - uid: 29137 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Compliance S + - uid: 29141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HOS' Office + - uid: 29178 + components: + - type: Transform + pos: -49.5,5.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: QM's Bedroom - proto: SurveillanceCameraEngineering entities: - uid: 20897 @@ -159518,7 +159612,10 @@ entities: pos: -32.5,12.5 parent: 2 - type: SurveillanceCamera - id: Atmos 1 + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Distro - uid: 20899 components: - type: Transform @@ -159526,7 +159623,10 @@ entities: pos: -30.5,24.5 parent: 2 - type: SurveillanceCamera - id: Atmos 2 + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos W - uid: 20901 components: - type: Transform @@ -159535,14 +159635,6 @@ entities: parent: 2 - type: SurveillanceCamera id: Atmos Lockeroom - - uid: 20902 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,47.5 - parent: 2 - - type: SurveillanceCamera - id: TEG - uid: 20903 components: - type: Transform @@ -159567,8 +159659,8 @@ entities: - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering - id: Main Engine - - type: ActiveUserInterface + nameSet: True + id: Main Engine E - uid: 20906 components: - type: Transform @@ -159607,7 +159699,7 @@ entities: pos: 47.5,27.5 parent: 2 - type: SurveillanceCamera - id: East Solars + id: E Solars - uid: 23805 components: - type: Transform @@ -159641,7 +159733,28 @@ entities: - SurveillanceCameraEngineering nameSet: True id: SMES C - - uid: 28860 + - uid: 28861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Pressure Bank + - uid: 29027 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG S + - uid: 29028 components: - type: Transform rot: 3.141592653589793 rad @@ -159651,20 +159764,284 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Atmos 3 - - uid: 28861 + id: Atmos N + - uid: 29107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Courtyard Power + - uid: 29113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos S + - uid: 29114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos E + - uid: 29115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Primary Airlock + - uid: 29116 + components: + - type: Transform + pos: -30.5,8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Gas Tanks + - uid: 29117 components: - type: Transform rot: 3.141592653589793 rad - pos: -27.5,37.5 + pos: -20.5,53.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Pressure Bank + id: TEG N + - uid: 29118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Center + - uid: 29119 + components: + - type: Transform + pos: -2.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Misc Storage + - uid: 29123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: CE's Bedroom + - uid: 29124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Desk + - uid: 29125 + components: + - type: Transform + pos: 4.5,49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Airlock + - uid: 29126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Main Engine W + - uid: 29127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering W + - uid: 29128 + components: + - type: Transform + pos: 25.5,42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Hall A + - uid: 29129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering E + - uid: 29130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Backrooms + - uid: 29131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Hall B + - uid: 29133 + components: + - type: Transform + pos: 36.5,48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Dock + - uid: 29150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engine Storage + - uid: 29169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,-52.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SW Solars + - uid: 29170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SE Solars - proto: SurveillanceCameraGeneral entities: + - uid: 7089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium B + - uid: 10260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Redress + - uid: 10262 + components: + - type: Transform + pos: -8.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court C + - uid: 13032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway E + - uid: 20943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,3.5 + parent: 2 - uid: 20951 components: - type: Transform @@ -159672,7 +160049,10 @@ entities: pos: -3.5,2.5 parent: 2 - type: SurveillanceCamera - id: Rotunda + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Rotunda West - uid: 20952 components: - type: Transform @@ -159680,7 +160060,10 @@ entities: pos: -16.5,11.5 parent: 2 - type: SurveillanceCamera - id: Parkway NW + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court A - uid: 20953 components: - type: Transform @@ -159688,14 +160071,20 @@ entities: pos: 11.5,17.5 parent: 2 - type: SurveillanceCamera - id: Parkway NE + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway N - uid: 20954 components: - type: Transform pos: -10.5,-16.5 parent: 2 - type: SurveillanceCamera - id: Zoo 1 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo S - uid: 20955 components: - type: Transform @@ -159703,7 +160092,10 @@ entities: pos: -16.5,-10.5 parent: 2 - type: SurveillanceCamera - id: Zoo 2 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo W - uid: 20956 components: - type: Transform @@ -159711,7 +160103,10 @@ entities: pos: -9.5,-8.5 parent: 2 - type: SurveillanceCamera - id: Zoo 3 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo Center - uid: 20957 components: - type: Transform @@ -159719,7 +160114,10 @@ entities: pos: 8.5,-6.5 parent: 2 - type: SurveillanceCamera - id: Parkway SE + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium A - uid: 20958 components: - type: Transform @@ -159757,7 +160155,10 @@ entities: pos: -3.5,-56.5 parent: 2 - type: SurveillanceCamera - id: Arrivals + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals N - uid: 23677 components: - type: Transform @@ -159768,6 +160169,415 @@ entities: - SurveillanceCameraGeneral nameSet: True id: North Dock + - uid: 29018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,-4.5 + parent: 2 + - uid: 29035 + components: + - type: Transform + pos: 11.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium C + - uid: 29037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Rotunda East + - uid: 29075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway W + - uid: 29076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court B + - uid: 29079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo N + - uid: 29081 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo E + - uid: 29082 + components: + - type: Transform + pos: -18.5,-19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo Serpents + - uid: 29088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Games + - uid: 29092 + components: + - type: Transform + pos: 2.5,-62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals S + - uid: 29093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway W-1 + - uid: 29094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway W-2 + - uid: 29095 + components: + - type: Transform + pos: -11.5,-80.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock A-1 + - uid: 29096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock A-2 + - uid: 29097 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall C + - uid: 29098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway E-1 + - uid: 29099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway E-2 + - uid: 29100 + components: + - type: Transform + pos: 7.5,-80.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock B-1 + - uid: 29101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock B-2 + - uid: 29102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall B + - uid: 29103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall A + - uid: 29105 + components: + - type: Transform + pos: -24.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall A + - uid: 29108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall B + - uid: 29109 + components: + - type: Transform + pos: -46.5,-4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall C + - uid: 29110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall B + - uid: 29111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall A + - uid: 29112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall C + - uid: 29120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall C + - uid: 29121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall B + - uid: 29122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall A + - uid: 29132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,53.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Pods + - uid: 29142 + components: + - type: Transform + pos: 22.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall A + - uid: 29143 + components: + - type: Transform + pos: 34.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall B + - uid: 29144 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall C + - uid: 29171 + components: + - type: Transform + pos: -38.5,-8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Washroom + - uid: 29172 + components: + - type: Transform + pos: -38.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm A + - uid: 29173 + components: + - type: Transform + pos: -38.5,-21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm B + - uid: 29174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm C + - uid: 29181 + components: + - type: Transform + pos: -18.5,27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Gambling Den - proto: SurveillanceCameraMedical entities: - uid: 20915 @@ -159822,7 +160632,10 @@ entities: pos: -32.5,-16.5 parent: 2 - type: SurveillanceCamera - id: Virology + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology W - uid: 20925 components: - type: Transform @@ -159858,7 +160671,10 @@ entities: pos: -37.5,-44.5 parent: 2 - type: SurveillanceCamera - id: Psych + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych S - uid: 20929 components: - type: Transform @@ -159873,7 +160689,95 @@ entities: pos: -25.5,-38.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical id: OR I + - uid: 29083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology E + - uid: 29084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Backrooms + - uid: 29085 + components: + - type: Transform + pos: -12.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: EMS + - uid: 29086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Inpatient Ward + - uid: 29087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Cloning + - uid: 29089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych Lobby + - uid: 29090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych N + - uid: 29091 + components: + - type: Transform + pos: -28.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Admin Hall - proto: SurveillanceCameraMonitorCircuitboard entities: - uid: 5815 @@ -159978,7 +160882,10 @@ entities: pos: 7.5,-35.5 parent: 2 - type: SurveillanceCamera - id: Xeno Lab + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Xeno Lab N - uid: 20936 components: - type: Transform @@ -160002,6 +160909,39 @@ entities: parent: 2 - type: SurveillanceCamera id: Server Room + - uid: 29104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Xeno Lab S + - uid: 29106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RD's Bedroom + - uid: 29168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Test Chamber - proto: SurveillanceCameraSecurity entities: - uid: 13070 @@ -160075,8 +161015,8 @@ entities: - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity - id: Armory - - type: ActiveUserInterface + nameSet: True + id: Armory A - uid: 20886 components: - type: Transform @@ -160092,7 +161032,10 @@ entities: pos: 30.5,-33.5 parent: 2 - type: SurveillanceCamera - id: Lockeroom + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lockerroom W - uid: 20888 components: - type: Transform @@ -160137,8 +161080,104 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Security Desk + - uid: 29134 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Detective's Office + - uid: 29139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Range + - uid: 29140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + - uid: 29145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,-3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Main Entrance + - uid: 29146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evidence + - uid: 29147 + components: + - type: Transform + pos: 27.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Back Entrance + - uid: 29148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lockerroom E - proto: SurveillanceCameraService entities: + - uid: 3264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Apse + - uid: 7941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chaplain's Office - uid: 9387 components: - type: Transform @@ -160147,6 +161186,27 @@ entities: parent: 2 - type: SurveillanceCamera id: Engi Bar + - uid: 10210 + components: + - type: Transform + pos: 4.5,-23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Crematorium + - uid: 10263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-22.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Priory - uid: 20939 components: - type: Transform @@ -160154,6 +161214,8 @@ entities: pos: -5.5,22.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Kitchen - uid: 20940 components: @@ -160178,14 +161240,6 @@ entities: parent: 2 - type: SurveillanceCamera id: Law Office - - uid: 20943 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,38.5 - parent: 2 - - type: SurveillanceCamera - id: Library - uid: 20944 components: - type: Transform @@ -160193,7 +161247,10 @@ entities: pos: 23.5,-22.5 parent: 2 - type: SurveillanceCamera - id: Chapel + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Sanctuary - uid: 20945 components: - type: Transform @@ -160209,6 +161266,8 @@ entities: pos: 6.5,24.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Botany - uid: 20948 components: @@ -160225,7 +161284,94 @@ entities: pos: 4.5,-53.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Arrival Stand + - uid: 29078 + components: + - type: Transform + pos: -15.5,21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Freezer + - uid: 29080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Lockers + - uid: 29175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Reporter + - uid: 29176 + components: + - type: Transform + pos: -55.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Disposals + - uid: 29180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Pun Pun's Office + - uid: 29182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Librarian's Office + - uid: 29183 + components: + - type: Transform + pos: -10.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Library W + - uid: 29184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Library E - proto: SurveillanceCameraSupply entities: - uid: 20893 @@ -160235,6 +161381,8 @@ entities: pos: -50.5,-1.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply id: Cargo Desk - uid: 20894 components: @@ -160260,6 +161408,27 @@ entities: parent: 2 - type: SurveillanceCamera id: Salvage + - uid: 29177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -60.5,-4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock S + - uid: 29179 + components: + - type: Transform + pos: -60.5,-2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock N - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 23224 @@ -168850,11 +170019,6 @@ entities: - type: Transform pos: 35.5,9.5 parent: 2 - - uid: 5191 - components: - - type: Transform - pos: -39.5,-31.5 - parent: 2 - uid: 5197 components: - type: Transform @@ -172210,12 +173374,6 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,-11.5 parent: 2 - - uid: 10210 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,-45.5 - parent: 2 - uid: 10224 components: - type: Transform @@ -172264,18 +173422,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-36.5 parent: 2 - - uid: 10262 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,-47.5 - parent: 2 - - uid: 10263 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,-47.5 - parent: 2 - uid: 10287 components: - type: Transform @@ -172319,12 +173465,6 @@ entities: - type: Transform pos: -38.5,-9.5 parent: 2 - - uid: 10466 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-45.5 - parent: 2 - uid: 10482 components: - type: Transform @@ -172411,12 +173551,6 @@ entities: - type: Transform pos: 5.5,-63.5 parent: 2 - - uid: 10655 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-44.5 - parent: 2 - uid: 10657 components: - type: Transform @@ -181212,6 +182346,12 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-52.5 parent: 2 + - uid: 13033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-44.5 + parent: 2 - uid: 13615 components: - type: Transform @@ -181714,6 +182854,38 @@ entities: rot: 3.141592653589793 rad pos: 18.5,-7.5 parent: 2 + - uid: 29029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-31.5 + parent: 2 + - uid: 29031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-47.5 + parent: 2 + - uid: 29032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-47.5 + parent: 2 + - uid: 29034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-44.5 + parent: 2 +- proto: WallSolidDiagonal + entities: + - uid: 29030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-45.5 + parent: 2 - proto: WallSolidRust entities: - uid: 24642 @@ -183076,6 +184248,12 @@ entities: rot: 3.141592653589793 rad pos: 33.5,49.5 parent: 2 + - uid: 26097 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-46.5 + parent: 2 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 3412 @@ -184203,6 +185381,11 @@ entities: rot: -1.5707963267948966 rad pos: -14.5,-12.5 parent: 2 + - uid: 2171 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 - uid: 2329 components: - type: Transform @@ -184426,6 +185609,12 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-41.5 parent: 2 + - uid: 16803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-45.5 + parent: 2 - uid: 20823 components: - type: Transform @@ -184510,6 +185699,21 @@ entities: rot: 3.141592653589793 rad pos: -15.5,15.5 parent: 2 + - uid: 28414 + components: + - type: Transform + pos: -13.5,16.5 + parent: 2 + - uid: 28860 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - uid: 28882 + components: + - type: Transform + pos: -15.5,16.5 + parent: 2 - uid: 28976 components: - type: Transform @@ -184546,6 +185750,16 @@ entities: rot: 3.141592653589793 rad pos: -10.5,15.5 parent: 2 + - uid: 29002 + components: + - type: Transform + pos: -16.5,16.5 + parent: 2 + - uid: 29020 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 - uid: 29042 components: - type: Transform @@ -184627,7 +185841,7 @@ entities: pos: 24.5,2.5 parent: 21002 - type: Door - secondsUntilStateChange: -401529.88 + secondsUntilStateChange: -408126.44 state: Opening - uid: 28863 components: diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 47fb4ad451..a6663b31ec 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -358,7 +358,7 @@ sprite: Clothing/Head/Helmets/ert_janitor.rsi - type: entity - parent: [ ClothingHeadHelmetBasic, BaseSyndicateContraband ] + parent: [ BaseSyndicateContraband, ClothingHeadHelmetBasic ] id: ClothingHeadHelmetRaid name: syndicate raid helmet description: An armored helmet for use with the syndicate raid suit. Very stylish. diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 6fda8e495d..50a175ee7f 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -112,7 +112,7 @@ - type: IngestionBlocker - type: entity - parent: ClothingMaskGas + parent: [ClothingMaskGas, BaseCargoContraband] id: ClothingMaskGasExplorer name: explorer gas mask description: A military-grade gas mask that can be connected to an air supply. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index a04bdde31f..0f1b9536da 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -160,6 +160,7 @@ lastVisibility: 0.1 - type: PowerCellDraw drawRate: 1.8 # 200 seconds on the default cell + - type: ToggleCellDraw # throwing star ability - type: ItemCreator action: ActionCreateThrowingStar diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index fae8717223..ea4c9d9c7c 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -116,6 +116,7 @@ price: 500 - type: PowerCellDraw drawRate: 4 + - type: ToggleCellDraw - type: ItemSlots slots: cell_slot: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml index 5e128e8f96..61b3d10817 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml @@ -207,6 +207,7 @@ id: SalvageEquipmentRare table: !type:GroupSelector children: + - id: BlueprintFlare - id: FultonBeacon - id: Fulton amount: !type:RangeNumberSelector @@ -228,6 +229,8 @@ id: SalvageEquipmentLegendary table: !type:GroupSelector children: + - id: BlueprintFulton + - id: BlueprintSeismicCharge - id: WeaponCrusherGlaive - id: ClothingOuterHardsuitSalvage - id: OmnizineChemistryBottle diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index e41321d14b..a0dca90661 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -160,6 +160,7 @@ - id: CigarGold - id: ClothingUniformJumpsuitFamilyGuy - id: WristwatchGold + - id: RubberStampGreytide - type: entity name: Maint Loot Spawner diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index b701bbd8f4..d56b7fb7e7 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -120,12 +120,13 @@ - type: ItemToggle activated: false # gets activated when a mind is added onUse: false # no item-borg toggling sorry - toggleLight: false + - type: ItemTogglePointLight - type: AccessToggle # TODO: refactor movement to just be based on toggle like speedboots but for the boots themselves # TODO: or just have sentient speedboots be fast idk - type: PowerCellDraw drawRate: 0.6 + # no ToggleCellDraw since dont want to lose access when power is gone - type: ItemSlots slots: cell_slot: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 8f3d9c6537..520c2750d5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -103,6 +103,7 @@ - Robotics - type: Speech speechVerb: Robotic + speechSounds: Pai #couldn't decide if this should be borg or pai sounds so I flipped a coin. - type: TypingIndicator proto: robot - type: ZombieImmune diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 31e92931db..0fb3df4d27 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -121,6 +121,67 @@ - Bread - Slice +- type: entity + name: cotton bread + parent: FoodBreadBase + id: FoodBreadCotton + description: Bread, but for moff. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton + - type: SliceableFood + slice: FoodBreadCottonSlice + - type: Tag + tags: + - ClothMade + - Bread + - type: SolutionContainerManager + solutions: + food: + maxVol: 26 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: cotton bread slice + parent: FoodBreadSliceBase + id: FoodBreadCottonSlice + description: A slice of (maybe) delicious cotton bread. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Bread + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Fiber + Quantity: 2 + - type: entity name: cornbread parent: FoodBreadBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 652c60722d..ff38363c9e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -618,3 +618,66 @@ Quantity: 2 # Tastes like crust, tomato, cheese, radiation. + +- type: entity + name: cotton pizza + parent: FoodPizzaBase + id: FoodPizzaCotton + description: Flat fabric cotton dough with cotton topping. Incredible. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-pizza + - type: Food + requiresSpecialDigestion: true + - type: SliceableFood + slice: FoodPizzaCottonSlice + - type: Tag + tags: + - ClothMade + - Pizza + - type: SolutionContainerManager + solutions: + food: + maxVol: 40 + reagents: + - ReagentId: Nutriment + Quantity: 20 + - ReagentId: Vitamin + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: slice of cotton pizza + parent: FoodPizzaSliceBase + id: FoodPizzaCottonSlice + description: A slice of cotton pizza. Cotton included. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Pizza + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 6 + reagents: + - ReagentId: Nutriment + Quantity: 3.5 + - ReagentId: Vitamin + Quantity: 0.8 + - ReagentId: Fiber + Quantity: 1.5 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index 4d352be287..8a8dea75b1 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -414,6 +414,38 @@ graph: Tortilla node: flat +- type: entity + name: cotton dough + parent: FoodBakingBase + id: FoodDoughCotton + description: A piece of fabric dough. + components: + - type: FlavorProfile + flavors: + - dough + - cotton + - type: Sprite + state: cotton-dough + # - type: SliceableFood # TODO add it + # count: 3 + # slice: FoodDoughCottonSlice + - type: Construction + graph: CottonPizza + node: start + - type: Tag + tags: + - Ingredient + - ClothMade + - type: SolutionContainerManager + solutions: + food: + maxVol: 18 + reagents: + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + - type: entity name: raw pastry base parent: FoodBakingBase @@ -456,6 +488,18 @@ count: 3 slice: FoodCroissantRaw +- type: entity + name: flat cotton dough + parent: FoodBakingBase + id: FoodDoughCottonFlat + description: A flattened cotton dough. + components: + - type: Sprite + state: cotton-dough-flat + - type: Construction + graph: CottonPizza + node: flat + - type: entity name: pizza bread parent: FoodBakingBase diff --git a/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml b/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml index 259323fede..c377519ddb 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml @@ -9,3 +9,4 @@ - type: PowerCellDraw drawRate: 0 useRate: 20 + - type: ToggleCellDraw diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index ac564eac66..4ae62527e1 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -120,8 +120,8 @@ abstract: true components: - type: ItemToggle - toggleLight: false onUse: false + - type: ItemTogglePointLight - type: HealthAnalyzer scanDelay: 1 scanningEndSound: diff --git a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml index fc362bb9c7..66ff215f30 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml @@ -271,3 +271,16 @@ stampState: "paper_stamp-detective" - type: Sprite state: stamp-detective + +- type: entity + name: greytide's rubber stamp + parent: RubberStampBase + id: RubberStampGreytide + description: A rubber stamp for stamping important documents. The tide washes over you, just looking at it... + components: + - type: Stamp + stampedName: stamp-component-stamped-name-greytide + stampedColor: "#323232" + stampState: "paper_stamp-greytide" + - type: Sprite + state: stamp-greytide diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml index 97a41a50df..e3f2e1cd1e 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml @@ -47,6 +47,7 @@ components: - type: PowerCellDraw drawRate: 1.2 #Calculated for 5 minutes on a small cell + - type: ToggleCellDraw - type: ActivatableUIRequiresPowerCell - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 929f509710..ff53218e22 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -68,6 +68,7 @@ - type: PowerCellDraw drawRate: 1 useRate: 0 + - type: ToggleCellDraw - type: entity id: AnomalyLocatorEmpty @@ -101,6 +102,7 @@ - type: PowerCellDraw drawRate: 1 useRate: 0 + - type: ToggleCellDraw - type: entity id: AnomalyLocatorWideEmpty diff --git a/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml new file mode 100644 index 0000000000..ba26baf362 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml @@ -0,0 +1,49 @@ +- type: entity + parent: BaseItem + id: BaseBlueprint + name: blueprint + description: A blueprint for some machine. It can be inserted into an autolathe. + abstract: true + components: + - type: Sprite + sprite: Objects/Tools/blueprint.rsi + state: icon + - type: Item + sprite: Objects/Tools/blueprint.rsi + size: Normal + - type: Blueprint + - type: StaticPrice + price: 1000 + - type: Tag + tags: + - BlueprintAutolathe + +- type: entity + parent: BaseBlueprint + id: BlueprintFulton + name: fulton blueprint + description: A blueprint with a schematic of a fulton. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - Fulton + +- type: entity + parent: BaseBlueprint + id: BlueprintSeismicCharge + name: seismic charge blueprint + description: A blueprint with a schematic of a seismic charge. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - SeismicCharge + +- type: entity + parent: BaseBlueprint + id: BlueprintFlare + name: flare blueprint + description: A blueprint with a schematic of a flare. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - Flare diff --git a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml index de45119cdd..e10c5b84af 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml @@ -26,6 +26,7 @@ False: { visible: false } - type: PowerCellDraw drawRate: 1.5 + - type: ToggleCellDraw - type: ActivatableUI key: enum.RadarConsoleUiKey.Key inHandsOnly: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml index 04d405e881..42bd054ac7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml @@ -3,7 +3,7 @@ - type: entity id: CartridgeRocket name: PG-7VL grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. Has tubular shape. components: - type: Tag @@ -23,7 +23,7 @@ - type: entity id: CartridgeRocketSlow name: PG-7VL grenade "Snail-Rocket" - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. It's unusually slow. components: - type: Tag @@ -45,7 +45,7 @@ - type: entity id: BaseGrenade name: base grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -122,7 +122,7 @@ - type: SpentAmmoVisuals state: frag suffix: false - + - type: entity id: GrenadeEMP name: EMP grenade @@ -145,7 +145,7 @@ - type: entity id: BaseCannonBall name: base cannon ball - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -154,7 +154,7 @@ - type: Item size: Small - type: Sprite - + - type: entity id: CannonBall name: cannonball diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index aeab9003e9..524fc27501 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -169,6 +169,7 @@ - type: ItemToggle onUse: false - type: PowerCellDraw + - type: ToggleCellDraw - type: Sprite sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi layers: @@ -216,6 +217,7 @@ - type: ItemToggle onUse: false - type: PowerCellDraw + - type: ToggleCellDraw - type: Sprite sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index e364809b50..0b0719e77f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -22,6 +22,7 @@ - type: ItemToggleHot - type: ItemToggleSize activatedSize: Huge + - type: ItemTogglePointLight - type: ItemToggleMeleeWeapon activatedSoundOnHit: path: /Audio/Weapons/eblade1.ogg diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml index 3f4306e4aa..c728d27933 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml @@ -52,5 +52,3 @@ layer: - HighImpassable - MidImpassable - - type: Transform - noRot: true diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index f7b1be8ecd..965c8261cc 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -55,6 +55,7 @@ rotation: -90 buckleOffset: "0,0.15" unbuckleOffset: "0,0.15" + buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index f66a8e8de2..9bfd3ea0eb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -89,7 +89,7 @@ id: Autolathe parent: BaseLatheLube name: autolathe - description: It produces basic items using metal and glass. + description: It produces basic items using metal and glass. Has the ability to process blueprints to print new recipes. components: - type: Sprite sprite: Structures/Machines/autolathe.rsi @@ -226,6 +226,18 @@ - RiotShield - SpeedLoaderMagnum - SpeedLoaderMagnumEmpty + - type: BlueprintReceiver + whitelist: + tags: + - BlueprintAutolathe + - type: ContainerContainer + containers: + machine_board: !type:Container + machine_parts: !type:Container + blueprint: !type:Container + - type: EmptyOnMachineDeconstruct + containers: + - blueprint - type: entity id: AutolatheHyperConvection diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml index 64dd38accb..71e171fc50 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml @@ -11,19 +11,20 @@ - type: Physics canCollide: false - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: .4 + density: 190 + mask: + - MachineMask - type: Transform anchored: true - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Metallic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 100 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - type: Anchorable + flags: + - Anchorable + - type: Pullable - type: Sprite sprite: Structures/Piping/Atmospherics/miners.rsi state: miner diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index 86cfb0f799..c822e0c0b3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -182,6 +182,9 @@ - output_mv sprite: Structures/Power/Generation/portable_generator.rsi state: portgen0 + - type: PowerSupplier + supplyRampRate: 5000 + supplyRampTolerance: 1500 - type: entity name: S.U.P.E.R.P.A.C.M.A.N.-type portable generator @@ -235,6 +238,9 @@ - output_mv sprite: Structures/Power/Generation/portable_generator.rsi state: portgen1 + - type: PowerSupplier + supplyRampRate: 7500 + supplyRampTolerance: 2500 - type: entity name: J.R.P.A.C.M.A.N.-type portable generator diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index f1db2b71f1..93124b377d 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -999,9 +999,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothHardhat - name: "Safety Moth - Hardhats" - description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" + id: PosterLegitSafetyMothPiping + name: "Safety Moth - Piping" + description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" components: - type: Sprite state: poster45_legit @@ -1017,9 +1017,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothPiping - name: "Safety Moth - Piping" - description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" + id: PosterLegitSafetyMothHardhat + name: "Safety Moth - Hardhats" + description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" components: - type: Sprite state: poster47_legit diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml new file mode 100644 index 0000000000..2292d4d299 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml @@ -0,0 +1,13 @@ +- type: constructionGraph + id: CottonPizza + start: start + graph: + - node: start + entity: FoodDoughCotton + edges: + - to: flat + steps: + - tool: Rolling + doAfter: 1 + - node: flat + entity: FoodDoughCottonFlat diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml index 74ac16eabd..6b6d5c4895 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml @@ -138,6 +138,9 @@ steps: - tool: Anchoring doAfter: 0.25 + completed: + - !type:SnapToGrid + southRotation: true - node: FirelockGlassFrame edges: @@ -168,6 +171,9 @@ steps: - tool: Anchoring doAfter: 1 + completed: + - !type:SnapToGrid + southRotation: true - node: FirelockEdge entity: FirelockEdge diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index 2adf8c8502..a273f66740 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -774,6 +774,7 @@ state: closed objectType: Structure placementMode: SnapgridCenter + canRotate: false canBuildInImpassable: false conditions: - !type:TileNotBlocked @@ -791,6 +792,7 @@ state: closed objectType: Structure placementMode: SnapgridCenter + canRotate: false canBuildInImpassable: false conditions: - !type:TileNotBlocked diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 9a59ab5023..ce38125627 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -399,6 +399,14 @@ solids: FoodDough: 1 +- type: microwaveMealRecipe + id: RecipeBreadCotton + name: cotton bread recipe + result: FoodBreadCotton + time: 10 + solids: + FoodDoughCotton: 1 + - type: microwaveMealRecipe id: RecipeSausageBread name: sausage bread recipe @@ -602,6 +610,15 @@ FoodTomato: 2 SheetUranium1: 2 +- type: microwaveMealRecipe + id: RecipeCottonPizza + name: cotton pizza recipe + result: FoodPizzaCotton + time: 30 + solids: + FoodDoughCottonFlat: 1 + CottonBol: 4 + #Italian - type: microwaveMealRecipe id: RecipeBoiledSpaghetti diff --git a/Resources/Prototypes/Recipes/Lathes/salvage.yml b/Resources/Prototypes/Recipes/Lathes/salvage.yml index 84047ae75d..2def767e91 100644 --- a/Resources/Prototypes/Recipes/Lathes/salvage.yml +++ b/Resources/Prototypes/Recipes/Lathes/salvage.yml @@ -1,20 +1,32 @@ - type: latheRecipe id: Fulton result: Fulton1 + category: Tools completetime: 1 materials: Steel: 200 - Cloth: 100 + Cloth: 500 - type: latheRecipe id: FultonBeacon result: FultonBeacon + category: Tools completetime: 5 materials: Steel: 1000 Glass: 500 # If they get spammed make it cost silver. +- type: latheRecipe + id: SeismicCharge + result: SeismicCharge + category: Tools + completetime: 1 + materials: + Plastic: 1500 + Steel: 100 + Silver: 100 + - type: latheRecipe id: MiningDrill result: MiningDrill diff --git a/Resources/Prototypes/Recipes/Reactions/food.yml b/Resources/Prototypes/Recipes/Reactions/food.yml index 24dca890ed..7d524a9c7a 100644 --- a/Resources/Prototypes/Recipes/Reactions/food.yml +++ b/Resources/Prototypes/Recipes/Reactions/food.yml @@ -72,6 +72,22 @@ - !type:CreateEntityReactionEffect entity: FoodDoughTortilla +- type: reaction + id: CreateDoughCotton + impact: Low + quantized: true + conserveEnergy: false + reactants: + Fiber: + amount: 10 + Flour: + amount: 5 + Water: + amount: 10 + effects: + - !type:CreateEntityReactionEffect + entity: FoodDoughCotton + - type: reaction id: CreateCakeBatter impact: Low diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index a3a02e4e28..ff8caee6fe 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -18,6 +18,20 @@ - OreProcessorIndustrialMachineCircuitboard - ClothingMaskWeldingGas +- type: technology + id: SpaceScanning + name: research-technology-space-scanning + icon: + sprite: Objects/Tools/handheld_mass_scanner.rsi + state: icon + discipline: Industrial + tier: 1 + cost: 5000 + recipeUnlocks: + - RadarConsoleCircuitboard + - HandHeldMassScanner + - BorgModuleGPS + - type: technology id: AdvancedPowercells name: research-technology-advanced-powercells @@ -110,20 +124,6 @@ # Tier 2 -- type: technology - id: SpaceScanning - name: research-technology-space-scanning - icon: - sprite: Objects/Tools/handheld_mass_scanner.rsi - state: icon - discipline: Industrial - tier: 2 - cost: 7500 - recipeUnlocks: - - RadarConsoleCircuitboard - - HandHeldMassScanner - - BorgModuleGPS - - type: technology id: Shuttlecraft name: research-technology-shuttlecraft diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index f688371449..6cf5fa4a53 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -28,7 +28,7 @@ - type: startingGear id: SecurityCadetGear equipment: - shoes: ClothingShoesBootsCombatFilled + shoes: ClothingShoesBootsJackFilled outerClothing: ClothingOuterArmorBasic id: SecurityCadetPDA ears: ClothingHeadsetSecurity diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index a249218d71..c39bf1f379 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -3,7 +3,7 @@ id: Scream name: chat-emote-name-scream category: Vocal - icon: Interface/Actions/scream.png + icon: Interface/Emotes/scream.png whitelist: components: - Vocal diff --git a/Resources/Prototypes/radio_channels.yml b/Resources/Prototypes/radio_channels.yml index 1c69bbe7e6..9cb8bf4daa 100644 --- a/Resources/Prototypes/radio_channels.yml +++ b/Resources/Prototypes/radio_channels.yml @@ -39,7 +39,7 @@ name: chat-radio-science keycode: 'n' frequency: 1351 - color: "#b05efa" + color: "#cd7ccd" - type: radioChannel id: Security diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 131ee59bb9..531a57c6cf 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -60,6 +60,9 @@ - type: Tag id: Bloodpack +- type: Tag + id: BlueprintAutolathe + - type: Tag id: BodyBag diff --git a/Resources/Prototypes/whitelists.yml b/Resources/Prototypes/whitelists.yml new file mode 100644 index 0000000000..8a99aa30ea --- /dev/null +++ b/Resources/Prototypes/whitelists.yml @@ -0,0 +1,7 @@ +- type: playerConnectionWhitelist + id: basicWhitelist # Basic whitelist using only the ManualWhitelist condition + conditions: + - !type:ConditionManualWhitelistMembership + action: Allow # Allow connection if matched + - !type:ConditionAlwaysMatch # Condition that always matches + action: Deny # Deny connection if matched diff --git a/Resources/Prototypes/wizardsDenWhitelists.yml b/Resources/Prototypes/wizardsDenWhitelists.yml new file mode 100644 index 0000000000..c21d01e5a8 --- /dev/null +++ b/Resources/Prototypes/wizardsDenWhitelists.yml @@ -0,0 +1,39 @@ +# This is the whitelist used for Wizard's Den Salamander + +- type: playerConnectionWhitelist + id: salamanderMrpWhitelist + conditions: + - !type:ConditionManualBlacklistMembership # Deny blacklisted (MRP ban) + action: Deny + - !type:ConditionNotesPlaytimeRange # Deny for high severity notes in the last 30 days + includeExpired: false + minimumSeverity: 3 # High + minimumNotes: 1 + range: 30 # 30 days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=2 medium severity notes in the last 14 days + includeExpired: false + minimumSeverity: 2 # Medium + minimumNotes: 1 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=3 low severity notes in the last 14 days + includeExpired: false + minimumSeverity: 1 # Low + minimumNotes: 3 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionManualWhitelistMembership # Allow whitelisted players + action: Allow + - !type:ConditionPlayerCount # Allow when <= 15 players are online + minimumPlayers: 0 + maximumPlayers: 15 + action: Allow + #- !type:ConditionPlaytime + # minimumPlaytime: 1200 # 20 hours to be whitelisted + # action: Deny + - !type:ConditionAlwaysMatch + action: Deny diff --git a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml index 450f5f088b..3eb9c2ca2f 100644 --- a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml +++ b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml @@ -22,9 +22,15 @@ WARNING: This is not an automatically generated list, things here may become out - Chocolate = 6 Cocoa Powder, 2 Milk, 2 Sugar - Uncooked Animal Protein: Grind Raw Meat +Buzz! Don't forget about Moth diet! +- Cotton Dough = 5 Flour, 10 Fabric, 10 Water +- Cotton bread baked the same as default but with cotton dough instead +- Cotton Pizza: Microwave 1 Flat Cotton Dough and 4 Cotton Bolls for 30 Seconds + + diff --git a/Resources/Textures/Interface/Emotes/attributions.yml b/Resources/Textures/Interface/Emotes/attributions.yml index c65eeb25da..4cb2faa076 100644 --- a/Resources/Textures/Interface/Emotes/attributions.yml +++ b/Resources/Textures/Interface/Emotes/attributions.yml @@ -76,6 +76,11 @@ copyright: "Created by Sarahon" source: "https://github.com/Sarahon" +- files: ["scream.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by lzk228(discord 455630609641897984), based on sprite by Sarahon" + source: "https://github.com/lzk228" + - files: ["sigh.png"] license: "CC-BY-SA-3.0" copyright: "Created by Sarahon" @@ -98,7 +103,7 @@ - files: ["vocal.png"] license: "CC-BY-SA-3.0" - copyright: "Created by Sarahon" + copyright: "Created by Sarahon, modified by lzk228(discord 455630609641897984)" source: "https://github.com/Sarahon" - files: ["weh.png"] diff --git a/Resources/Textures/Interface/Emotes/scream.png b/Resources/Textures/Interface/Emotes/scream.png new file mode 100644 index 0000000000..e4e36ed3a4 Binary files /dev/null and b/Resources/Textures/Interface/Emotes/scream.png differ diff --git a/Resources/Textures/Interface/Emotes/vocal.png b/Resources/Textures/Interface/Emotes/vocal.png index 55cddaa02e..73c5042b22 100644 Binary files a/Resources/Textures/Interface/Emotes/vocal.png and b/Resources/Textures/Interface/Emotes/vocal.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png new file mode 100644 index 0000000000..0b92e30ae1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png new file mode 100644 index 0000000000..baa9dc777f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json index 2761d79f98..f35aa5f4ce 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955", + "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380)", "size": { "x": 32, "y": 32 @@ -70,6 +70,12 @@ { "name": "crostini" }, + { + "name": "cotton" + }, + { + "name": "cotton-slice" + }, { "name": "french-toast" }, diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png new file mode 100644 index 0000000000..e047c757fc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice.png new file mode 100644 index 0000000000..34a9a34933 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json index cb676a06ef..607a9cf8f3 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, Spicy Rock Pizza modified from margherita pizza by mkanke", + "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, Spicy Rock Pizza modified from margherita pizza by mkanke, cotton made by mlexf (discord 1143460554963427380)", "size": { "x": 32, "y": 32 @@ -43,6 +43,12 @@ { "name": "base-8" }, + { + "name": "cotton-pizza" + }, + { + "name": "cotton-slice" + }, { "name": "dank" }, diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough-flat.png b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough-flat.png new file mode 100644 index 0000000000..e13da227bf Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough-flat.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough.png b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough.png new file mode 100644 index 0000000000..831c58a93c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json index 6132ff89da..366f39f96a 100644 --- a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and baystation and modified by potato1234x at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 and https://github.com/Baystation12/Baystation12/commit/a6067826de7fd8f698793f6d84e6c2f1f9b1f188. Tofu and tofu-slice were created by Discord user rosysyntax#6514. Chevrelog and chevredisk created by Github user deathride58, tortilladough tortillaflat and tortillaslice added by Phunny, butter-slice and croissant-raw taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955", + "copyright": "Taken from tgstation and baystation and modified by potato1234x at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 and https://github.com/Baystation12/Baystation12/commit/a6067826de7fd8f698793f6d84e6c2f1f9b1f188. Tofu and tofu-slice were created by Discord user rosysyntax#6514. Chevrelog and chevredisk created by Github user deathride58, tortilladough tortillaflat and tortillaslice added by Phunny, butter-slice and croissant-raw taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380)", "size": { "x": 32, "y": 32 @@ -40,6 +40,12 @@ { "name": "cornmealdough-slice" }, + { + "name": "cotton-dough-flat" + }, + { + "name": "cotton-dough" + }, { "name": "dough" }, diff --git a/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json b/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json index af1f3ce5d3..17ac88cefd 100644 --- a/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/bureaucracy.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. paper_stamp-syndicate by Veritius. paper_receipt, paper_receipt_horizontal by eoineoineoin.", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. paper_stamp-syndicate by Veritius. paper_receipt, paper_receipt_horizontal by eoineoineoin. paper_stamp-greytide by ubaser", "size": { "x": 32, "y": 32 @@ -224,6 +224,9 @@ }, { "name": "paper_stamp-generic" + }, + { + "name": "paper_stamp-greytide" } ] } diff --git a/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-greytide.png b/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-greytide.png new file mode 100644 index 0000000000..067be8405b Binary files /dev/null and b/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-greytide.png differ diff --git a/Resources/Textures/Objects/Misc/stamps.rsi/meta.json b/Resources/Textures/Objects/Misc/stamps.rsi/meta.json index 8ce4882a2f..4e3d2cda76 100644 --- a/Resources/Textures/Objects/Misc/stamps.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/stamps.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. New stamp- icons taken from tgstation at https://github.com/tgstation/tgstation/commit/fb1012102257b7b0a08d861fd2b8ba963c416e93. stamp-warden is a darker version of stamp-hos. stamp-lawyer is a darker version of stamp-cap.", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. New stamp- icons taken from tgstation at https://github.com/tgstation/tgstation/commit/fb1012102257b7b0a08d861fd2b8ba963c416e93. stamp-warden is a darker version of stamp-hos. stamp-lawyer is a darker version of stamp-cap. paper_stamp-greytide is a grey and shaded in version of stamp-hos.", "size": { "x": 32, "y": 32 @@ -60,6 +60,9 @@ }, { "name": "stamp-warden" + }, + { + "name": "stamp-greytide" } ] } diff --git a/Resources/Textures/Objects/Misc/stamps.rsi/stamp-greytide.png b/Resources/Textures/Objects/Misc/stamps.rsi/stamp-greytide.png new file mode 100644 index 0000000000..064c74a2a8 Binary files /dev/null and b/Resources/Textures/Objects/Misc/stamps.rsi/stamp-greytide.png differ diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/icon.png b/Resources/Textures/Objects/Tools/blueprint.rsi/icon.png new file mode 100644 index 0000000000..fe8b37fa25 Binary files /dev/null and b/Resources/Textures/Objects/Tools/blueprint.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-left.png b/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-left.png new file mode 100644 index 0000000000..8aecdd7268 Binary files /dev/null and b/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png new file mode 100644 index 0000000000..37dd59e5c3 Binary files /dev/null and b/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json b/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json new file mode 100644 index 0000000000..ab9e7fb2a9 --- /dev/null +++ b/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/dd749c36c416a6960782732cecf25e5ebac326e8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png b/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png index ede821777a..823bf998c9 100644 Binary files a/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png and b/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png differ diff --git a/RobustToolbox b/RobustToolbox index 36a5b672e5..f2ee9a43f9 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 36a5b672e5f4d0c569a4a17f7f833d72dad2d16d +Subproject commit f2ee9a43f94288be4662861e6e591da10234c0c7 diff --git a/shell.nix b/shell.nix index da363feda9..9a1b0ca429 100644 --- a/shell.nix +++ b/shell.nix @@ -12,7 +12,6 @@ let SDL2 libGL openal - glibc freetype fluidsynth soundfont-fluid