From 31419b48dc0bf6bfcbb09a78237564f208e9adf7 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 25 Dec 2022 19:24:48 -0500 Subject: [PATCH 1/9] porting shipyard code --- .../Commands/PurchaseShuttleCommand.cs | 44 +++++++++++ .../Shuttles/Systems/ShipyardSystem.cs | 79 +++++++++++++++++++ .../Shuttles/Systems/ShuttleSystem.cs | 2 + 3 files changed, 125 insertions(+) create mode 100644 Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs create mode 100644 Content.Server/Shuttles/Systems/ShipyardSystem.cs diff --git a/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs b/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs new file mode 100644 index 0000000000..0d98b5fc3a --- /dev/null +++ b/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs @@ -0,0 +1,44 @@ +using Content.Server.Administration; +using Content.Server.Maps; +using Content.Server.Shuttles.Systems; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Shuttles.Commands; + +/// +/// purchases a shuttle. +/// +[AdminCommand(AdminFlags.Fun)] +public sealed class PurchaseShuttleCommand : IConsoleCommand +{ + public string Command => "purchaseshuttle"; + public string Description => "spawns and docks a specified shuttle from a grid file"; + public string Help => $"{Command}"; + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (!int.TryParse(args[0], out var stationId)) + { + shell.WriteError($"{args[0]} is not a valid integer."); + return; + } + + var shuttlePath = args[1]; + var system = IoCManager.Resolve().GetEntitySystem(); + var station = new EntityUid(stationId); + system.PurchaseShuttle(station, shuttlePath); + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + switch (args.Length) + { + case 1: + return CompletionResult.FromHint(Loc.GetString("station-id")); + case 2: + var opts = CompletionHelper.PrototypeIDs(); + return CompletionResult.FromHintOptions(opts, Loc.GetString("cmd-hint-savemap-path")); + } + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Shuttles/Systems/ShipyardSystem.cs b/Content.Server/Shuttles/Systems/ShipyardSystem.cs new file mode 100644 index 0000000000..ed59ec014f --- /dev/null +++ b/Content.Server/Shuttles/Systems/ShipyardSystem.cs @@ -0,0 +1,79 @@ +using Content.Server.Shuttles.Components; +using Content.Server.Station.Components; +using Content.Server.Cargo.Systems; +using Robust.Server.Maps; +using Robust.Shared.Map; + +namespace Content.Server.Shuttles.Systems; + +public sealed partial class ShuttleSystem +{ + public MapId? ShipyardMap { get; private set; } + + [Dependency] private readonly PricingSystem _pricing = default!; + private void InitializeShipyard() + { + SubscribeLocalEvent(OnShipyardStartup); + } + + private void OnShipyardStartup(EntityUid uid, StationDataComponent component, ComponentInit args) + { + SetupShipyard(); + } + + /// + /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station + /// + public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) + { + if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) return; + + var targetGrid = _station.GetLargestGrid(stationData); + + if (targetGrid == null) return; + + var price = _pricing.AppraiseGrid(shuttle.Owner, null); + + TryFTLDock(shuttle, targetGrid.Value); + + _sawmill.Warning($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); + } + /// + /// loads a paused shuttle into the ShipyardMap from a file path + /// + private EntityUid? AddShuttle(string shuttlePath) + { + if (ShipyardMap == null) return null; + + //only dealing with a single grid at a time for now + var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), new MapLoadOptions() {Offset = new Vector2(500f + _shuttleIndex, 0f)}); + + if (shuttle == null) + { + _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); + return null; + } + + _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; + + return (EntityUid) shuttle; + } + private void CleanupShipyard() + { + if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) + { + ShipyardMap = null; + return; + } + + _mapManager.DeleteMap(ShipyardMap.Value); + } + private void SetupShipyard() + { + if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) return; + + ShipyardMap = _mapManager.CreateMap(); + + _mapManager.SetMapPaused(ShipyardMap.Value, true); + } +} diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index fab9a07722..7fc5c4981b 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -39,6 +39,7 @@ public override void Initialize() InitializeFTL(); InitializeIFF(); InitializeImpact(); + InitializeShipyard(); SubscribeLocalEvent(OnShuttleAdd); SubscribeLocalEvent(OnShuttleStartup); @@ -62,6 +63,7 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev) CleanupEmergencyConsole(); CleanupEmergencyShuttle(); CleanupHyperspace(); + CleanupShipyard(); } public override void Shutdown() From 2a0dc418439036b3966a2f4ecb97d4670155b4b2 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 25 Dec 2022 19:24:48 -0500 Subject: [PATCH 2/9] porting shipyard code --- .../Commands/PurchaseShuttleCommand.cs | 44 +++++++++++ .../Shuttles/Systems/ShipyardSystem.cs | 79 +++++++++++++++++++ .../Shuttles/Systems/ShuttleSystem.cs | 2 + 3 files changed, 125 insertions(+) create mode 100644 Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs create mode 100644 Content.Server/Shuttles/Systems/ShipyardSystem.cs diff --git a/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs b/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs new file mode 100644 index 0000000000..0d98b5fc3a --- /dev/null +++ b/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs @@ -0,0 +1,44 @@ +using Content.Server.Administration; +using Content.Server.Maps; +using Content.Server.Shuttles.Systems; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Shuttles.Commands; + +/// +/// purchases a shuttle. +/// +[AdminCommand(AdminFlags.Fun)] +public sealed class PurchaseShuttleCommand : IConsoleCommand +{ + public string Command => "purchaseshuttle"; + public string Description => "spawns and docks a specified shuttle from a grid file"; + public string Help => $"{Command}"; + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (!int.TryParse(args[0], out var stationId)) + { + shell.WriteError($"{args[0]} is not a valid integer."); + return; + } + + var shuttlePath = args[1]; + var system = IoCManager.Resolve().GetEntitySystem(); + var station = new EntityUid(stationId); + system.PurchaseShuttle(station, shuttlePath); + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + switch (args.Length) + { + case 1: + return CompletionResult.FromHint(Loc.GetString("station-id")); + case 2: + var opts = CompletionHelper.PrototypeIDs(); + return CompletionResult.FromHintOptions(opts, Loc.GetString("cmd-hint-savemap-path")); + } + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Shuttles/Systems/ShipyardSystem.cs b/Content.Server/Shuttles/Systems/ShipyardSystem.cs new file mode 100644 index 0000000000..ed59ec014f --- /dev/null +++ b/Content.Server/Shuttles/Systems/ShipyardSystem.cs @@ -0,0 +1,79 @@ +using Content.Server.Shuttles.Components; +using Content.Server.Station.Components; +using Content.Server.Cargo.Systems; +using Robust.Server.Maps; +using Robust.Shared.Map; + +namespace Content.Server.Shuttles.Systems; + +public sealed partial class ShuttleSystem +{ + public MapId? ShipyardMap { get; private set; } + + [Dependency] private readonly PricingSystem _pricing = default!; + private void InitializeShipyard() + { + SubscribeLocalEvent(OnShipyardStartup); + } + + private void OnShipyardStartup(EntityUid uid, StationDataComponent component, ComponentInit args) + { + SetupShipyard(); + } + + /// + /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station + /// + public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) + { + if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) return; + + var targetGrid = _station.GetLargestGrid(stationData); + + if (targetGrid == null) return; + + var price = _pricing.AppraiseGrid(shuttle.Owner, null); + + TryFTLDock(shuttle, targetGrid.Value); + + _sawmill.Warning($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); + } + /// + /// loads a paused shuttle into the ShipyardMap from a file path + /// + private EntityUid? AddShuttle(string shuttlePath) + { + if (ShipyardMap == null) return null; + + //only dealing with a single grid at a time for now + var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), new MapLoadOptions() {Offset = new Vector2(500f + _shuttleIndex, 0f)}); + + if (shuttle == null) + { + _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); + return null; + } + + _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; + + return (EntityUid) shuttle; + } + private void CleanupShipyard() + { + if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) + { + ShipyardMap = null; + return; + } + + _mapManager.DeleteMap(ShipyardMap.Value); + } + private void SetupShipyard() + { + if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) return; + + ShipyardMap = _mapManager.CreateMap(); + + _mapManager.SetMapPaused(ShipyardMap.Value, true); + } +} diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index fab9a07722..7fc5c4981b 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -39,6 +39,7 @@ public override void Initialize() InitializeFTL(); InitializeIFF(); InitializeImpact(); + InitializeShipyard(); SubscribeLocalEvent(OnShuttleAdd); SubscribeLocalEvent(OnShuttleStartup); @@ -62,6 +63,7 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev) CleanupEmergencyConsole(); CleanupEmergencyShuttle(); CleanupHyperspace(); + CleanupShipyard(); } public override void Shutdown() From cf1e07d5e619ef1eb22abd81819ef335abfa01b3 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sat, 31 Dec 2022 04:49:11 -0500 Subject: [PATCH 3/9] sell --- .../Cargo/Systems/CargoSystem.Shuttle.cs | 2 +- .../Shuttles/Commands/SellShuttleCommand.cs | 44 ++++++++++++++++ .../Shuttles/Systems/ShipyardSystem.cs | 50 ++++++++++++++++++- 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 Content.Server/Shuttles/Commands/SellShuttleCommand.cs diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs index 0887fc56c8..0ab1ab07bc 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs @@ -534,7 +534,7 @@ private bool IsBlocked(CargoShuttleComponent component) return FoundOrganics(component.Owner, mobQuery, xformQuery); } - private bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) + public bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) { var xform = xformQuery.GetComponent(uid); var childEnumerator = xform.ChildEnumerator; diff --git a/Content.Server/Shuttles/Commands/SellShuttleCommand.cs b/Content.Server/Shuttles/Commands/SellShuttleCommand.cs new file mode 100644 index 0000000000..4aab87e8bd --- /dev/null +++ b/Content.Server/Shuttles/Commands/SellShuttleCommand.cs @@ -0,0 +1,44 @@ +using Content.Server.Administration; +using Content.Server.Shuttles.Systems; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Shuttles.Commands; + +/// +/// sells a shuttle. +/// +[AdminCommand(AdminFlags.Fun)] +public sealed class SellShuttleCommand : IConsoleCommand +{ + public string Command => "sellshuttle"; + public string Description => "appraises and sells a selected grid connected to selected station"; + public string Help => $"{Command}"; + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (!EntityUid.TryParse(args[0], out var stationId)) + { + shell.WriteError($"{args[0]} is not a valid entity uid."); + return; + } + if (!EntityUid.TryParse(args[1], out var shuttleId)) + { + shell.WriteError($"{args[0]} is not a valid entity uid."); + return; + }; + var system = IoCManager.Resolve().GetEntitySystem(); + system.SellShuttle(stationId, shuttleId); + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + switch (args.Length) + { + case 1: + return CompletionResult.FromHint(Loc.GetString("station-id")); + case 2: + return CompletionResult.FromHint(Loc.GetString("shuttle-id")); + } + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Shuttles/Systems/ShipyardSystem.cs b/Content.Server/Shuttles/Systems/ShipyardSystem.cs index ed59ec014f..526a190455 100644 --- a/Content.Server/Shuttles/Systems/ShipyardSystem.cs +++ b/Content.Server/Shuttles/Systems/ShipyardSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Cargo.Systems; using Robust.Server.Maps; using Robust.Shared.Map; +using Content.Shared.MobState.Components; namespace Content.Server.Shuttles.Systems; @@ -11,6 +12,7 @@ public sealed partial class ShuttleSystem public MapId? ShipyardMap { get; private set; } [Dependency] private readonly PricingSystem _pricing = default!; + [Dependency] private readonly CargoSystem _cargo = default!; private void InitializeShipyard() { SubscribeLocalEvent(OnShipyardStartup); @@ -34,9 +36,10 @@ public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) var price = _pricing.AppraiseGrid(shuttle.Owner, null); + //can do FTLTravel later instead if we want to open that door TryFTLDock(shuttle, targetGrid.Value); - _sawmill.Warning($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); + _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); } /// /// loads a paused shuttle into the ShipyardMap from a file path @@ -58,6 +61,51 @@ public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) return (EntityUid) shuttle; } + public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) + { + if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) return; + + var targetGrid = _station.GetLargestGrid(stationGrid); + + if (targetGrid == null) return; + + var gridDocks = GetDocks((EntityUid) targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + var isDocked = false; + + foreach (var shuttleDock in shuttleDocks) + { + foreach (var gridDock in gridDocks) + { + if (shuttleDock.DockedWith == gridDock.Owner) + { + isDocked = true; + break; + }; + }; + if (isDocked) break; + }; + + if (!isDocked) + { + _sawmill.Warning($"shuttle is not docked to that station"); + return; + }; + + var mobQuery = GetEntityQuery(); + var xformQuery = GetEntityQuery(); + + if (_cargo.FoundOrganics(shuttleUid, mobQuery, xformQuery) == true) + { + _sawmill.Warning($"organics on board"); + return; + }; + + //just yeet and delete for now. Might want to split it into another function later to send back to the shipyard map first to pause for something + var price = _pricing.AppraiseGrid(shuttleUid); + _mapManager.DeleteGrid(shuttleUid); + _sawmill.Info($"Sold shuttle {shuttleUid} for {price}"); + } private void CleanupShipyard() { if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) From 0b19a721cdfde2f6fe621669ba3edc39999defe8 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sat, 31 Dec 2022 23:17:45 -0500 Subject: [PATCH 4/9] split --- .../Shuttles/Systems/ShipyardSystem.cs | 127 --------------- .../Systems/ShuttleSystem.EmergencyShuttle.cs | 2 +- .../Shuttles/Systems/ShuttleSystem.cs | 2 - .../Commands/PurchaseShuttleCommand.cs | 6 +- .../Shipyard}/Commands/SellShuttleCommand.cs | 6 +- .../Shipyard/Systems/ShipyardSystem.cs | 151 ++++++++++++++++++ 6 files changed, 158 insertions(+), 136 deletions(-) delete mode 100644 Content.Server/Shuttles/Systems/ShipyardSystem.cs rename Content.Server/{Shuttles => _Citadel/Shipyard}/Commands/PurchaseShuttleCommand.cs (92%) rename Content.Server/{Shuttles => _Citadel/Shipyard}/Commands/SellShuttleCommand.cs (91%) create mode 100644 Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs diff --git a/Content.Server/Shuttles/Systems/ShipyardSystem.cs b/Content.Server/Shuttles/Systems/ShipyardSystem.cs deleted file mode 100644 index 526a190455..0000000000 --- a/Content.Server/Shuttles/Systems/ShipyardSystem.cs +++ /dev/null @@ -1,127 +0,0 @@ -using Content.Server.Shuttles.Components; -using Content.Server.Station.Components; -using Content.Server.Cargo.Systems; -using Robust.Server.Maps; -using Robust.Shared.Map; -using Content.Shared.MobState.Components; - -namespace Content.Server.Shuttles.Systems; - -public sealed partial class ShuttleSystem -{ - public MapId? ShipyardMap { get; private set; } - - [Dependency] private readonly PricingSystem _pricing = default!; - [Dependency] private readonly CargoSystem _cargo = default!; - private void InitializeShipyard() - { - SubscribeLocalEvent(OnShipyardStartup); - } - - private void OnShipyardStartup(EntityUid uid, StationDataComponent component, ComponentInit args) - { - SetupShipyard(); - } - - /// - /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station - /// - public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) - { - if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) return; - - var targetGrid = _station.GetLargestGrid(stationData); - - if (targetGrid == null) return; - - var price = _pricing.AppraiseGrid(shuttle.Owner, null); - - //can do FTLTravel later instead if we want to open that door - TryFTLDock(shuttle, targetGrid.Value); - - _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); - } - /// - /// loads a paused shuttle into the ShipyardMap from a file path - /// - private EntityUid? AddShuttle(string shuttlePath) - { - if (ShipyardMap == null) return null; - - //only dealing with a single grid at a time for now - var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), new MapLoadOptions() {Offset = new Vector2(500f + _shuttleIndex, 0f)}); - - if (shuttle == null) - { - _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); - return null; - } - - _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; - - return (EntityUid) shuttle; - } - public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) - { - if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) return; - - var targetGrid = _station.GetLargestGrid(stationGrid); - - if (targetGrid == null) return; - - var gridDocks = GetDocks((EntityUid) targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - var isDocked = false; - - foreach (var shuttleDock in shuttleDocks) - { - foreach (var gridDock in gridDocks) - { - if (shuttleDock.DockedWith == gridDock.Owner) - { - isDocked = true; - break; - }; - }; - if (isDocked) break; - }; - - if (!isDocked) - { - _sawmill.Warning($"shuttle is not docked to that station"); - return; - }; - - var mobQuery = GetEntityQuery(); - var xformQuery = GetEntityQuery(); - - if (_cargo.FoundOrganics(shuttleUid, mobQuery, xformQuery) == true) - { - _sawmill.Warning($"organics on board"); - return; - }; - - //just yeet and delete for now. Might want to split it into another function later to send back to the shipyard map first to pause for something - var price = _pricing.AppraiseGrid(shuttleUid); - _mapManager.DeleteGrid(shuttleUid); - _sawmill.Info($"Sold shuttle {shuttleUid} for {price}"); - } - private void CleanupShipyard() - { - if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) - { - ShipyardMap = null; - return; - } - - _mapManager.DeleteMap(ShipyardMap.Value); - } - private void SetupShipyard() - { - if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) return; - - ShipyardMap = _mapManager.CreateMap(); - - _mapManager.SetMapPaused(ShipyardMap.Value, true); - } -} diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs index 68c82b5abc..2cefd19795 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs @@ -378,7 +378,7 @@ public void CallEmergencyShuttle() _commsConsole.UpdateCommsConsoleInterface(); } - private List GetDocks(EntityUid uid) + public List GetDocks(EntityUid uid) { var result = new List(); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 7fc5c4981b..fab9a07722 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -39,7 +39,6 @@ public override void Initialize() InitializeFTL(); InitializeIFF(); InitializeImpact(); - InitializeShipyard(); SubscribeLocalEvent(OnShuttleAdd); SubscribeLocalEvent(OnShuttleStartup); @@ -63,7 +62,6 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev) CleanupEmergencyConsole(); CleanupEmergencyShuttle(); CleanupHyperspace(); - CleanupShipyard(); } public override void Shutdown() diff --git a/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs b/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs similarity index 92% rename from Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs rename to Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs index 0d98b5fc3a..731b63782a 100644 --- a/Content.Server/Shuttles/Commands/PurchaseShuttleCommand.cs +++ b/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs @@ -1,10 +1,10 @@ using Content.Server.Administration; using Content.Server.Maps; -using Content.Server.Shuttles.Systems; +using Content.Server.Shipyard.Systems; using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.Shuttles.Commands; +namespace Content.Server.Shipyard.Commands; /// /// purchases a shuttle. @@ -24,7 +24,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) } var shuttlePath = args[1]; - var system = IoCManager.Resolve().GetEntitySystem(); + var system = IoCManager.Resolve().GetEntitySystem(); var station = new EntityUid(stationId); system.PurchaseShuttle(station, shuttlePath); } diff --git a/Content.Server/Shuttles/Commands/SellShuttleCommand.cs b/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs similarity index 91% rename from Content.Server/Shuttles/Commands/SellShuttleCommand.cs rename to Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs index 4aab87e8bd..cc142cc91b 100644 --- a/Content.Server/Shuttles/Commands/SellShuttleCommand.cs +++ b/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs @@ -1,9 +1,9 @@ using Content.Server.Administration; -using Content.Server.Shuttles.Systems; +using Content.Server.Shipyard.Systems; using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.Shuttles.Commands; +namespace Content.Server.Shipyard.Commands; /// /// sells a shuttle. @@ -26,7 +26,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) shell.WriteError($"{args[0]} is not a valid entity uid."); return; }; - var system = IoCManager.Resolve().GetEntitySystem(); + var system = IoCManager.Resolve().GetEntitySystem(); system.SellShuttle(stationId, shuttleId); } diff --git a/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs new file mode 100644 index 0000000000..65ee37e4fb --- /dev/null +++ b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs @@ -0,0 +1,151 @@ +using System; +using Content.Server.Shuttles.Systems; +using Content.Server.Shuttles.Components; +using Content.Server.Station.Components; +using Content.Server.Cargo.Systems; +using Content.Server.Station.Systems; +using Content.Shared.MobState.Components; +using Content.Shared.GameTicking; +using Robust.Server.GameObjects; +using Robust.Server.Maps; +using Robust.Shared.Map; +using Robust.Shared.GameObjects; + +namespace Content.Server.Shipyard.Systems +{ + + public sealed partial class ShipyardSystem : EntitySystem + { + public MapId? ShipyardMap { get; private set; } + + private float _shuttleIndex; + + private const float ShuttleSpawnBuffer = 1f; + + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly PricingSystem _pricing = default!; + [Dependency] private readonly ShuttleSystem _shuttle = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly CargoSystem _cargo = default!; + [Dependency] private readonly MapLoaderSystem _map = default!; + private ISawmill _sawmill = default!; + + public override void Initialize() + { + base.Initialize(); + _sawmill = Logger.GetSawmill("shipyard"); + SubscribeLocalEvent(OnShipyardStartup); + SubscribeLocalEvent(OnRoundRestart); + } + + private void OnShipyardStartup(EntityUid uid, BecomesStationComponent component, ComponentStartup args) + { + SetupShipyard(); + } + private void OnRoundRestart(RoundRestartCleanupEvent ev) + { + CleanupShipyard(); + } + /// + /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station + /// + public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) + { + if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) return; + + var targetGrid = _station.GetLargestGrid(stationData); + + if (targetGrid == null) return; + + var price = _pricing.AppraiseGrid(shuttle.Owner, null); + + //can do FTLTravel later instead if we want to open that door + _shuttle.TryFTLDock(shuttle, targetGrid.Value); + + _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); + } + /// + /// loads a paused shuttle into the ShipyardMap from a file path + /// + private EntityUid? AddShuttle(string shuttlePath) + { + if (ShipyardMap == null) return null; + + //only dealing with a single grid at a time for now + var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), new MapLoadOptions() {Offset = new Vector2(500f + _shuttleIndex, 0f)}); + + if (shuttle == null) + { + _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); + return null; + } + + _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; + + return (EntityUid) shuttle; + } + public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) + { + if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) return; + + var targetGrid = _station.GetLargestGrid(stationGrid); + + if (targetGrid == null) return; + + var gridDocks = _shuttle.GetDocks((EntityUid) targetGrid); + var shuttleDocks = _shuttle.GetDocks(shuttleUid); + var isDocked = false; + + foreach (var shuttleDock in shuttleDocks) + { + foreach (var gridDock in gridDocks) + { + if (shuttleDock.DockedWith == gridDock.Owner) + { + isDocked = true; + break; + }; + }; + if (isDocked) break; + }; + + if (!isDocked) + { + _sawmill.Warning($"shuttle is not docked to that station"); + return; + }; + + var mobQuery = GetEntityQuery(); + var xformQuery = GetEntityQuery(); + + if (_cargo.FoundOrganics(shuttleUid, mobQuery, xformQuery) == true) + { + _sawmill.Warning($"organics on board"); + return; + }; + + //just yeet and delete for now. Might want to split it into another function later to send back to the shipyard map first to pause for something + var price = _pricing.AppraiseGrid(shuttleUid); + _mapManager.DeleteGrid(shuttleUid); + _sawmill.Info($"Sold shuttle {shuttleUid} for {price}"); + } + private void CleanupShipyard() + { + if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) + { + ShipyardMap = null; + return; + } + + _mapManager.DeleteMap(ShipyardMap.Value); + } + private void SetupShipyard() + { + if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) return; + + ShipyardMap = _mapManager.CreateMap(); + + _mapManager.SetMapPaused(ShipyardMap.Value, true); + } + } +} From 086aa3b2e17f4965bb4fc46222dea01dadde9ced Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 1 Jan 2023 00:29:45 -0500 Subject: [PATCH 5/9] cleanup --- .../Commands/PurchaseShuttleCommand.cs | 10 +-- .../Shipyard/Commands/SellShuttleCommand.cs | 13 ++-- .../Shipyard/Systems/ShipyardSystem.cs | 62 +++++++++++++------ 3 files changed, 59 insertions(+), 26 deletions(-) diff --git a/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs b/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs index 731b63782a..09c8d4e1b8 100644 --- a/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs +++ b/Content.Server/_Citadel/Shipyard/Commands/PurchaseShuttleCommand.cs @@ -7,14 +7,15 @@ namespace Content.Server.Shipyard.Commands; /// -/// purchases a shuttle. +/// Purchases a shuttle and docks it to a station. /// [AdminCommand(AdminFlags.Fun)] public sealed class PurchaseShuttleCommand : IConsoleCommand { + [Dependency] private readonly IEntitySystemManager _entityManager = default!; public string Command => "purchaseshuttle"; - public string Description => "spawns and docks a specified shuttle from a grid file"; - public string Help => $"{Command}"; + public string Description => "Spawns and docks a specified shuttle from a grid file"; + public string Help => $"{Command} "; public void Execute(IConsoleShell shell, string argStr, string[] args) { if (!int.TryParse(args[0], out var stationId)) @@ -24,7 +25,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) } var shuttlePath = args[1]; - var system = IoCManager.Resolve().GetEntitySystem(); + var system = _entityManager.GetEntitySystem(); var station = new EntityUid(stationId); system.PurchaseShuttle(station, shuttlePath); } @@ -39,6 +40,7 @@ public CompletionResult GetCompletion(IConsoleShell shell, string[] args) var opts = CompletionHelper.PrototypeIDs(); return CompletionResult.FromHintOptions(opts, Loc.GetString("cmd-hint-savemap-path")); } + return CompletionResult.Empty; } } diff --git a/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs b/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs index cc142cc91b..2d6b150339 100644 --- a/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs +++ b/Content.Server/_Citadel/Shipyard/Commands/SellShuttleCommand.cs @@ -6,14 +6,16 @@ namespace Content.Server.Shipyard.Commands; /// -/// sells a shuttle. +/// Sells a shuttle docked to a station. /// [AdminCommand(AdminFlags.Fun)] public sealed class SellShuttleCommand : IConsoleCommand { + [Dependency] private readonly IEntitySystemManager _entityManager = default!; + public string Command => "sellshuttle"; - public string Description => "appraises and sells a selected grid connected to selected station"; - public string Help => $"{Command}"; + public string Description => "Appraises and sells a selected grid connected to selected station"; + public string Help => $"{Command} "; public void Execute(IConsoleShell shell, string argStr, string[] args) { if (!EntityUid.TryParse(args[0], out var stationId)) @@ -21,12 +23,14 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) shell.WriteError($"{args[0]} is not a valid entity uid."); return; } + if (!EntityUid.TryParse(args[1], out var shuttleId)) { shell.WriteError($"{args[0]} is not a valid entity uid."); return; }; - var system = IoCManager.Resolve().GetEntitySystem(); + + var system = _entityManager.GetEntitySystem(); system.SellShuttle(stationId, shuttleId); } @@ -39,6 +43,7 @@ public CompletionResult GetCompletion(IConsoleShell shell, string[] args) case 2: return CompletionResult.FromHint(Loc.GetString("shuttle-id")); } + return CompletionResult.Empty; } } diff --git a/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs index 65ee37e4fb..6974dc3bb3 100644 --- a/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs +++ b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs @@ -10,29 +10,27 @@ using Robust.Server.Maps; using Robust.Shared.Map; using Robust.Shared.GameObjects; +using static Content.Server.Power.Pow3r.PowerState; namespace Content.Server.Shipyard.Systems { public sealed partial class ShipyardSystem : EntitySystem { - public MapId? ShipyardMap { get; private set; } - - private float _shuttleIndex; - - private const float ShuttleSpawnBuffer = 1f; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly PricingSystem _pricing = default!; [Dependency] private readonly ShuttleSystem _shuttle = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly CargoSystem _cargo = default!; [Dependency] private readonly MapLoaderSystem _map = default!; + + public MapId? ShipyardMap { get; private set; } + private float _shuttleIndex; + private const float ShuttleSpawnBuffer = 1f; private ISawmill _sawmill = default!; public override void Initialize() { - base.Initialize(); _sawmill = Logger.GetSawmill("shipyard"); SubscribeLocalEvent(OnShipyardStartup); SubscribeLocalEvent(OnRoundRestart); @@ -42,20 +40,26 @@ private void OnShipyardStartup(EntityUid uid, BecomesStationComponent component, { SetupShipyard(); } + private void OnRoundRestart(RoundRestartCleanupEvent ev) { CleanupShipyard(); } + /// /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station /// + /// + /// public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) { - if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) return; + if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) + return; var targetGrid = _station.GetLargestGrid(stationData); - if (targetGrid == null) return; + if (targetGrid == null) + return; var price = _pricing.AppraiseGrid(shuttle.Owner, null); @@ -63,16 +67,26 @@ public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) _shuttle.TryFTLDock(shuttle, targetGrid.Value); _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); - } + } + /// - /// loads a paused shuttle into the ShipyardMap from a file path + /// Loads a paused shuttle into the ShipyardMap from a file path /// + /// + /// private EntityUid? AddShuttle(string shuttlePath) { - if (ShipyardMap == null) return null; + if (ShipyardMap == null) + return null; //only dealing with a single grid at a time for now - var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), new MapLoadOptions() {Offset = new Vector2(500f + _shuttleIndex, 0f)}); + + var loadOptions = new MapLoadOptions() + { + Offset = (500f + _shuttleIndex, 0f) + }; + + var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), loadOptions); if (shuttle == null) { @@ -82,15 +96,23 @@ public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; - return (EntityUid) shuttle; + return shuttle.Value; } + + /// + /// Checks a shuttle to make sure that it is docked to the given station, and that there are no lifeforms aboard. Then it appraises the grid, outputs to the server log, and deletes the grid + /// + /// + /// public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) { - if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) return; + if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) + return; var targetGrid = _station.GetLargestGrid(stationGrid); - if (targetGrid == null) return; + if (targetGrid == null) + return; var gridDocks = _shuttle.GetDocks((EntityUid) targetGrid); var shuttleDocks = _shuttle.GetDocks(shuttleUid); @@ -106,7 +128,8 @@ public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) break; }; }; - if (isDocked) break; + if (isDocked) + break; }; if (!isDocked) @@ -129,6 +152,7 @@ public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) _mapManager.DeleteGrid(shuttleUid); _sawmill.Info($"Sold shuttle {shuttleUid} for {price}"); } + private void CleanupShipyard() { if (ShipyardMap == null || !_mapManager.MapExists(ShipyardMap.Value)) @@ -139,9 +163,11 @@ private void CleanupShipyard() _mapManager.DeleteMap(ShipyardMap.Value); } + private void SetupShipyard() { - if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) return; + if (ShipyardMap != null && _mapManager.MapExists(ShipyardMap.Value)) + return; ShipyardMap = _mapManager.CreateMap(); From 62abcb045400df38908912c6dba2f7e00348e9b2 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 1 Jan 2023 00:55:01 -0500 Subject: [PATCH 6/9] reset cargo and shuttle systems --- .../Cargo/Systems/CargoSystem.Shuttle.cs | 2 +- .../Systems/ShuttleSystem.EmergencyShuttle.cs | 2 +- .../Maps/Shuttles/Shipyard/Small/pts.yml | 1369 +++++++++++++++++ 3 files changed, 1371 insertions(+), 2 deletions(-) create mode 100644 Resources/Maps/Shuttles/Shipyard/Small/pts.yml diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs index 0ab1ab07bc..0887fc56c8 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs @@ -534,7 +534,7 @@ private bool IsBlocked(CargoShuttleComponent component) return FoundOrganics(component.Owner, mobQuery, xformQuery); } - public bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) + private bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) { var xform = xformQuery.GetComponent(uid); var childEnumerator = xform.ChildEnumerator; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs index 2cefd19795..68c82b5abc 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs @@ -378,7 +378,7 @@ public void CallEmergencyShuttle() _commsConsole.UpdateCommsConsoleInterface(); } - public List GetDocks(EntityUid uid) + private List GetDocks(EntityUid uid) { var result = new List(); diff --git a/Resources/Maps/Shuttles/Shipyard/Small/pts.yml b/Resources/Maps/Shuttles/Shipyard/Small/pts.yml new file mode 100644 index 0000000000..8e082ce22f --- /dev/null +++ b/Resources/Maps/Shuttles/Shipyard/Small/pts.yml @@ -0,0 +1,1369 @@ +meta: + format: 3 + name: DemoStation + author: Space-Wizards + postmapinit: false +tilemap: + 0: Space + 1: FloorArcadeBlue + 2: FloorArcadeBlue2 + 3: FloorArcadeRed + 4: FloorAsteroidCoarseSand0 + 5: FloorAsteroidCoarseSandDug + 6: FloorAsteroidIronsand1 + 7: FloorAsteroidIronsand2 + 8: FloorAsteroidIronsand3 + 9: FloorAsteroidIronsand4 + 10: FloorAsteroidSand + 11: FloorAsteroidTile + 12: FloorBar + 13: FloorBlue + 14: FloorBlueCircuit + 15: FloorBoxing + 16: FloorCarpetClown + 17: FloorCarpetOffice + 18: FloorCave + 19: FloorCaveDrought + 20: FloorClown + 21: FloorDark + 22: FloorDarkDiagonal + 23: FloorDarkDiagonalMini + 24: FloorDarkHerringbone + 25: FloorDarkMini + 26: FloorDarkMono + 27: FloorDarkOffset + 28: FloorDarkPavement + 29: FloorDarkPavementVertical + 30: FloorDarkPlastic + 31: FloorDirt + 32: FloorEighties + 33: FloorElevatorShaft + 34: FloorFreezer + 35: FloorGlass + 36: FloorGold + 37: FloorGrass + 38: FloorGrassDark + 39: FloorGrassJungle + 40: FloorGrassLight + 41: FloorGreenCircuit + 42: FloorGym + 43: FloorHydro + 44: FloorKitchen + 45: FloorLaundry + 46: FloorLino + 47: FloorMetalDiamond + 48: FloorMime + 49: FloorMono + 50: FloorPlastic + 51: FloorRGlass + 52: FloorReinforced + 53: FloorRockVault + 54: FloorShowroom + 55: FloorShuttleBlue + 56: FloorShuttleOrange + 57: FloorShuttlePurple + 58: FloorShuttleRed + 59: FloorShuttleWhite + 60: FloorSilver + 61: FloorSnow + 62: FloorSteel + 63: FloorSteelDiagonal + 64: FloorSteelDiagonalMini + 65: FloorSteelDirty + 66: FloorSteelHerringbone + 67: FloorSteelMini + 68: FloorSteelMono + 69: FloorSteelOffset + 70: FloorSteelPavement + 71: FloorSteelPavementVertical + 72: FloorTechMaint + 73: FloorTechMaint2 + 74: FloorTechMaint3 + 75: FloorWhite + 76: FloorWhiteDiagonal + 77: FloorWhiteDiagonalMini + 78: FloorWhiteHerringbone + 79: FloorWhiteMini + 80: FloorWhiteMono + 81: FloorWhiteOffset + 82: FloorWhitePavement + 83: FloorWhitePavementVertical + 84: FloorWhitePlastic + 85: FloorWood + 86: FloorWoodTile + 87: Lattice + 88: Plating +entities: +- uid: 0 + components: + - type: MetaData + - pos: 0.6064911,0.49290404 + parent: invalid + type: Transform + - chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAFgAAABJAAAASQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAHgAAAx4AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAARAAAAB4AAAJEAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAWAAAAEQAAAMeAAACRAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAHgAAAh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAaAAAAWAAAABoAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAFQAAAlgAAAAeAAABHgAAAw== + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAGgAAAlgAAAAaAAADHgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAWAAAAB4AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAWAAAABUAAAIVAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAVAAAAFQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + 0,0: + ind: 0,0 + tiles: GgAAAlgAAAAaAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAACWAAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAAAFgAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABYAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAABRAAAA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAEQAAAJYAAAAVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAACWAAAABoAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAFgAAAAVAAADWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + type: MapGrid + - type: Broadphase + - angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + type: Physics + - fixtures: [] + type: Fixtures + - type: OccluderTree + - type: Shuttle + - nextUpdate: 947.0341944 + type: GridPathfinding + - gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + type: Gravity + - chunkCollection: + 0,-1: + 1: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: 0,-2 + 2: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: 2,-2 + 14: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: 0,-2 + 15: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: 2,-2 + 17: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: 1,-4 + 18: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: 1,-5 + 0,0: + 3: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + 4: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: 2,0 + 13: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + 16: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: 2,0 + -1,0: + 5: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: -4,0 + 7: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: -2,0 + 11: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -4,0 + 12: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -2,0 + -1,-1: + 6: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: -4,-2 + 8: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + coordinates: -2,-2 + 9: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -2,-2 + 10: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -4,-2 + 19: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -3,-4 + 20: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -3,-5 + 21: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -1,-4 + 22: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + coordinates: -1,-5 + type: DecalGrid + - tiles: + -2,-2: 0 + -2,-1: 0 + -1,-2: 0 + -1,-1: 0 + -2,0: 0 + -1,0: 0 + 0,0: 0 + 0,-2: 0 + 0,-1: 0 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + type: GridAtmosphere + - type: GasTileOverlay + - type: RadiationGridResistance + - id: PTS + type: BecomesStation +- uid: 1 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -4.5,-0.5 + parent: 0 + type: Transform +- uid: 2 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 0 + type: Transform +- uid: 3 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 0 + type: Transform +- uid: 4 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 0 + type: Transform +- uid: 5 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -4.5,-0.5 + parent: 0 + type: Transform +- uid: 6 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 0 + type: Transform +- uid: 7 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 0 + type: Transform +- uid: 8 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 0 + type: Transform +- uid: 9 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -4.5,1.5 + parent: 0 + type: Transform +- uid: 10 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 0 + type: Transform +- uid: 11 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,1.5 + parent: 0 + type: Transform +- uid: 12 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -3.5,-2.5 + parent: 0 + type: Transform +- uid: 13 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 0 + type: Transform +- uid: 14 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 3.5,-2.5 + parent: 0 + type: Transform +- uid: 15 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 0 + type: Transform +- uid: 16 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 0 + type: Transform +- uid: 17 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 3.5,1.5 + parent: 0 + type: Transform +- uid: 18 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,1.5 + parent: 0 + type: Transform +- uid: 19 + type: Window + components: + - rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 0 + type: Transform +- uid: 20 + type: Window + components: + - rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 0 + type: Transform +- uid: 21 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 0 + type: Transform +- uid: 22 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 0 + type: Transform +- uid: 23 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 0 + type: Transform +- uid: 24 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,2.5 + parent: 0 + type: Transform +- uid: 25 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,4.5 + parent: 0 + type: Transform +- uid: 26 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,4.5 + parent: 0 + type: Transform +- uid: 27 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 0 + type: Transform +- uid: 28 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 0 + type: Transform +- uid: 29 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -0.5,4.5 + parent: 0 + type: Transform +- uid: 30 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 0 + type: Transform +- uid: 31 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 0 + type: Transform +- uid: 32 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 0 + type: Transform +- uid: 33 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 0 + type: Transform +- uid: 34 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -0.5,4.5 + parent: 0 + type: Transform +- uid: 35 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 0 + type: Transform +- uid: 36 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 0 + type: Transform +- uid: 37 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 0 + type: Transform +- uid: 38 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 0 + type: Transform +- uid: 39 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 0 + type: Transform +- uid: 40 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 0 + type: Transform +- uid: 41 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 0 + type: Transform +- uid: 42 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 0 + type: Transform +- uid: 43 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 0 + type: Transform +- uid: 44 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,-5.5 + parent: 0 + type: Transform +- uid: 45 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: -2.5,-7.5 + parent: 0 + type: Transform +- uid: 46 + type: WallReinforced + components: + - rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 0 + type: Transform +- uid: 47 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 0 + type: Transform +- uid: 48 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 0 + type: Transform +- uid: 49 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 0 + type: Transform +- uid: 50 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 0 + type: Transform +- uid: 51 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 0 + type: Transform +- uid: 52 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 0 + type: Transform +- uid: 53 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -2.5,-6.5 + parent: 0 + type: Transform +- uid: 54 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 0 + type: Transform +- uid: 55 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -2.5,-6.5 + parent: 0 + type: Transform +- uid: 56 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 0 + type: Transform +- uid: 57 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -3.5,-4.5 + parent: 0 + type: Transform +- uid: 58 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 0 + type: Transform +- uid: 59 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 0 + type: Transform +- uid: 60 + type: Grille + components: + - rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 0 + type: Transform +- uid: 61 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 0 + type: Transform +- uid: 62 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: -3.5,-4.5 + parent: 0 + type: Transform +- uid: 63 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 0 + type: Transform +- uid: 64 + type: ReinforcedWindow + components: + - rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 0 + type: Transform +- uid: 65 + type: GeneratorPlasma + components: + - pos: 0.5,-6.5 + parent: 0 + type: Transform +- uid: 66 + type: GravityGeneratorMini + components: + - pos: -0.5,-6.5 + parent: 0 + type: Transform +- uid: 67 + type: Gyroscope + components: + - pos: -1.5,-6.5 + parent: 0 + type: Transform +- uid: 68 + type: SubstationWallBasic + components: + - rot: 3.141592653589793 rad + pos: -2.5,-5.5 + parent: 0 + type: Transform + - canCollide: False + type: Physics +- uid: 69 + type: APCBasic + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 0 + type: Transform +- uid: 70 + type: CableHV + components: + - pos: 0.5,-6.5 + parent: 0 + type: Transform +- uid: 71 + type: CableHV + components: + - pos: 0.5,-5.5 + parent: 0 + type: Transform +- uid: 72 + type: CableHV + components: + - pos: -0.5,-5.5 + parent: 0 + type: Transform +- uid: 73 + type: CableHV + components: + - pos: -1.5,-5.5 + parent: 0 + type: Transform +- uid: 74 + type: CableHV + components: + - pos: -2.5,-5.5 + parent: 0 + type: Transform +- uid: 75 + type: CableMV + components: + - pos: -2.5,-5.5 + parent: 0 + type: Transform +- uid: 76 + type: CableMV + components: + - pos: -1.5,-5.5 + parent: 0 + type: Transform +- uid: 77 + type: CableMV + components: + - pos: -0.5,-5.5 + parent: 0 + type: Transform +- uid: 78 + type: CableMV + components: + - pos: 0.5,-5.5 + parent: 0 + type: Transform +- uid: 79 + type: CableMV + components: + - pos: 1.5,-5.5 + parent: 0 + type: Transform +- uid: 80 + type: CableApcExtension + components: + - pos: 1.5,-5.5 + parent: 0 + type: Transform +- uid: 81 + type: CableApcExtension + components: + - pos: 1.5,-4.5 + parent: 0 + type: Transform +- uid: 82 + type: CableApcExtension + components: + - pos: 1.5,-3.5 + parent: 0 + type: Transform +- uid: 83 + type: CableApcExtension + components: + - pos: 1.5,-2.5 + parent: 0 + type: Transform +- uid: 84 + type: CableApcExtension + components: + - pos: 1.5,-1.5 + parent: 0 + type: Transform +- uid: 85 + type: CableApcExtension + components: + - pos: 1.5,-0.5 + parent: 0 + type: Transform +- uid: 86 + type: CableApcExtension + components: + - pos: 1.5,0.5 + parent: 0 + type: Transform +- uid: 87 + type: CableApcExtension + components: + - pos: 0.5,0.5 + parent: 0 + type: Transform +- uid: 88 + type: CableApcExtension + components: + - pos: 0.5,1.5 + parent: 0 + type: Transform +- uid: 89 + type: CableApcExtension + components: + - pos: 0.5,2.5 + parent: 0 + type: Transform +- uid: 90 + type: CableApcExtension + components: + - pos: 0.5,3.5 + parent: 0 + type: Transform +- uid: 91 + type: CableApcExtension + components: + - pos: -0.5,3.5 + parent: 0 + type: Transform +- uid: 92 + type: CableApcExtension + components: + - pos: -1.5,3.5 + parent: 0 + type: Transform +- uid: 93 + type: CableApcExtension + components: + - pos: -1.5,2.5 + parent: 0 + type: Transform +- uid: 94 + type: CableApcExtension + components: + - pos: -1.5,1.5 + parent: 0 + type: Transform +- uid: 95 + type: CableApcExtension + components: + - pos: -1.5,0.5 + parent: 0 + type: Transform +- uid: 96 + type: CableApcExtension + components: + - pos: -2.5,0.5 + parent: 0 + type: Transform +- uid: 97 + type: CableApcExtension + components: + - pos: -2.5,-0.5 + parent: 0 + type: Transform +- uid: 98 + type: CableApcExtension + components: + - pos: -2.5,-1.5 + parent: 0 + type: Transform +- uid: 99 + type: CableApcExtension + components: + - pos: -2.5,-2.5 + parent: 0 + type: Transform +- uid: 100 + type: CableApcExtension + components: + - pos: -2.5,-3.5 + parent: 0 + type: Transform +- uid: 101 + type: CableApcExtension + components: + - pos: -2.5,-4.5 + parent: 0 + type: Transform +- uid: 102 + type: CableApcExtension + components: + - pos: -2.5,-5.5 + parent: 0 + type: Transform +- uid: 103 + type: CableApcExtension + components: + - pos: -1.5,-5.5 + parent: 0 + type: Transform +- uid: 104 + type: CableApcExtension + components: + - pos: -0.5,-5.5 + parent: 0 + type: Transform +- uid: 105 + type: CableApcExtension + components: + - pos: 0.5,-5.5 + parent: 0 + type: Transform +- uid: 106 + type: CableApcExtension + components: + - pos: 1.5,-5.5 + parent: 0 + type: Transform +- uid: 107 + type: ChairPilotSeat + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 0 + type: Transform +- uid: 108 + type: ChairPilotSeat + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 0 + type: Transform +- uid: 109 + type: ChairPilotSeat + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 0 + type: Transform +- uid: 110 + type: ChairPilotSeat + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 0 + type: Transform +- uid: 111 + type: FirelockGlass + components: + - pos: -1.5,-2.5 + parent: 0 + type: Transform +- uid: 112 + type: FirelockGlass + components: + - pos: -0.5,-2.5 + parent: 0 + type: Transform +- uid: 113 + type: FirelockGlass + components: + - pos: 0.5,-2.5 + parent: 0 + type: Transform +- uid: 114 + type: AirlockGlassShuttle + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 0 + type: Transform + - fixtures: + - density: 100 + shape: !type:PolygonShape + vertices: + - 0.49,-0.49 + - 0.49,0.49 + - -0.49,0.49 + - -0.49,-0.49 + mask: + - Impassable + - MidImpassable + - HighImpassable + - LowImpassable + - InteractImpassable + layer: + - MidImpassable + - HighImpassable + - BulletImpassable + - InteractImpassable + - Opaque + - shape: !type:PhysShapeCircle + position: 0,-0.5 + radius: 0.2 + hard: False + id: docking + type: Fixtures +- uid: 115 + type: AirlockGlassShuttle + components: + - rot: -1.5707963267948966 rad + pos: -4.5,0.5 + parent: 0 + type: Transform + - fixtures: + - density: 100 + shape: !type:PolygonShape + vertices: + - 0.49,-0.49 + - 0.49,0.49 + - -0.49,0.49 + - -0.49,-0.49 + mask: + - Impassable + - MidImpassable + - HighImpassable + - LowImpassable + - InteractImpassable + layer: + - MidImpassable + - HighImpassable + - BulletImpassable + - InteractImpassable + - Opaque + - shape: !type:PhysShapeCircle + position: 0,-0.5 + radius: 0.2 + hard: False + id: docking + type: Fixtures +- uid: 116 + type: AirlockGlassShuttle + components: + - rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 0 + type: Transform + - fixtures: + - density: 100 + shape: !type:PolygonShape + vertices: + - 0.49,-0.49 + - 0.49,0.49 + - -0.49,0.49 + - -0.49,-0.49 + mask: + - Impassable + - MidImpassable + - HighImpassable + - LowImpassable + - InteractImpassable + layer: + - MidImpassable + - HighImpassable + - BulletImpassable + - InteractImpassable + - Opaque + - shape: !type:PhysShapeCircle + position: 0,-0.5 + radius: 0.2 + hard: False + id: docking + type: Fixtures +- uid: 117 + type: AirlockGlassShuttle + components: + - rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 0 + type: Transform + - fixtures: + - density: 100 + shape: !type:PolygonShape + vertices: + - 0.49,-0.49 + - 0.49,0.49 + - -0.49,0.49 + - -0.49,-0.49 + mask: + - Impassable + - MidImpassable + - HighImpassable + - LowImpassable + - InteractImpassable + layer: + - MidImpassable + - HighImpassable + - BulletImpassable + - InteractImpassable + - Opaque + - shape: !type:PhysShapeCircle + position: 0,-0.5 + radius: 0.2 + hard: False + id: docking + type: Fixtures +- uid: 118 + type: AtmosDeviceFanTiny + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 0 + type: Transform +- uid: 119 + type: AtmosDeviceFanTiny + components: + - rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 0 + type: Transform +- uid: 120 + type: AtmosDeviceFanTiny + components: + - rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 0 + type: Transform +- uid: 121 + type: AtmosDeviceFanTiny + components: + - rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 0 + type: Transform +- uid: 122 + type: AirlockExternalGlass + components: + - pos: -2.5,-1.5 + parent: 0 + type: Transform +- uid: 123 + type: AirlockExternalGlass + components: + - pos: -2.5,0.5 + parent: 0 + type: Transform +- uid: 124 + type: AirlockExternalGlass + components: + - pos: 1.5,0.5 + parent: 0 + type: Transform +- uid: 125 + type: AirlockExternalGlass + components: + - pos: 1.5,-1.5 + parent: 0 + type: Transform +- uid: 126 + type: Poweredlight + components: + - rot: 3.141592653589793 rad + pos: -3.5,-1.5 + parent: 0 + type: Transform + - powerLoad: 0 + type: ApcPowerReceiver +- uid: 127 + type: Poweredlight + components: + - rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 0 + type: Transform + - powerLoad: 0 + type: ApcPowerReceiver +- uid: 128 + type: Poweredlight + components: + - rot: -1.5707963267948966 rad + pos: 0.5,2.5 + parent: 0 + type: Transform + - powerLoad: 0 + type: ApcPowerReceiver +- uid: 129 + type: Poweredlight + components: + - rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 0 + type: Transform + - powerLoad: 0 + type: ApcPowerReceiver +- uid: 130 + type: Poweredlight + components: + - rot: 3.141592653589793 rad + pos: 1.5,-4.5 + parent: 0 + type: Transform + - powerLoad: 0 + type: ApcPowerReceiver +- uid: 131 + type: Thruster + components: + - rot: 3.141592653589793 rad + pos: -3.5,-6.5 + parent: 0 + type: Transform +- uid: 132 + type: Thruster + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 0 + type: Transform +- uid: 133 + type: Thruster + components: + - rot: 1.5707963267948966 rad + pos: -3.5,2.5 + parent: 0 + type: Transform +- uid: 134 + type: Thruster + components: + - pos: 2.5,2.5 + parent: 0 + type: Transform +- uid: 135 + type: ChairPilotSeat + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 0 + type: Transform +- uid: 136 + type: ChairPilotSeat + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 0 + type: Transform +- uid: 137 + type: ComputerShuttle + components: + - pos: -0.5,3.5 + parent: 0 + type: Transform +- uid: 138 + type: ComputerStationRecords + components: + - rot: -1.5707963267948966 rad + pos: 0.5,2.5 + parent: 0 + type: Transform +- uid: 139 + type: ComputerFrame + components: + - rot: 1.5707963267948966 rad + pos: -1.5,2.5 + parent: 0 + type: Transform +- uid: 140 + type: TableReinforced + components: + - rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 0 + type: Transform +- uid: 141 + type: TableReinforced + components: + - rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 0 + type: Transform +- uid: 142 + type: PowerCellRecharger + components: + - pos: -1.5,3.5 + parent: 0 + type: Transform +- uid: 143 + type: Intercom + components: + - rot: -1.5707963267948966 rad + pos: 1.5,2.5 + parent: 0 + type: Transform +- uid: 144 + type: AirlockCommand + components: + - pos: -0.5,1.5 + parent: 0 + type: Transform +- uid: 145 + type: ChairPilotSeat + components: + - rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 0 + type: Transform +- uid: 146 + type: ClosetWallEmergencyFilledRandom + components: + - pos: -2.5,-2.5 + parent: 0 + type: Transform +- uid: 147 + type: ClosetWallEmergencyFilledRandom + components: + - pos: 1.5,-2.5 + parent: 0 + type: Transform +... From 4387202f88433d4e164fdc851e4995ca8b8f7e19 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 1 Jan 2023 01:03:19 -0500 Subject: [PATCH 7/9] testing asset made it through oops --- .../Maps/Shuttles/Shipyard/Small/pts.yml | 1369 ----------------- 1 file changed, 1369 deletions(-) delete mode 100644 Resources/Maps/Shuttles/Shipyard/Small/pts.yml diff --git a/Resources/Maps/Shuttles/Shipyard/Small/pts.yml b/Resources/Maps/Shuttles/Shipyard/Small/pts.yml deleted file mode 100644 index 8e082ce22f..0000000000 --- a/Resources/Maps/Shuttles/Shipyard/Small/pts.yml +++ /dev/null @@ -1,1369 +0,0 @@ -meta: - format: 3 - name: DemoStation - author: Space-Wizards - postmapinit: false -tilemap: - 0: Space - 1: FloorArcadeBlue - 2: FloorArcadeBlue2 - 3: FloorArcadeRed - 4: FloorAsteroidCoarseSand0 - 5: FloorAsteroidCoarseSandDug - 6: FloorAsteroidIronsand1 - 7: FloorAsteroidIronsand2 - 8: FloorAsteroidIronsand3 - 9: FloorAsteroidIronsand4 - 10: FloorAsteroidSand - 11: FloorAsteroidTile - 12: FloorBar - 13: FloorBlue - 14: FloorBlueCircuit - 15: FloorBoxing - 16: FloorCarpetClown - 17: FloorCarpetOffice - 18: FloorCave - 19: FloorCaveDrought - 20: FloorClown - 21: FloorDark - 22: FloorDarkDiagonal - 23: FloorDarkDiagonalMini - 24: FloorDarkHerringbone - 25: FloorDarkMini - 26: FloorDarkMono - 27: FloorDarkOffset - 28: FloorDarkPavement - 29: FloorDarkPavementVertical - 30: FloorDarkPlastic - 31: FloorDirt - 32: FloorEighties - 33: FloorElevatorShaft - 34: FloorFreezer - 35: FloorGlass - 36: FloorGold - 37: FloorGrass - 38: FloorGrassDark - 39: FloorGrassJungle - 40: FloorGrassLight - 41: FloorGreenCircuit - 42: FloorGym - 43: FloorHydro - 44: FloorKitchen - 45: FloorLaundry - 46: FloorLino - 47: FloorMetalDiamond - 48: FloorMime - 49: FloorMono - 50: FloorPlastic - 51: FloorRGlass - 52: FloorReinforced - 53: FloorRockVault - 54: FloorShowroom - 55: FloorShuttleBlue - 56: FloorShuttleOrange - 57: FloorShuttlePurple - 58: FloorShuttleRed - 59: FloorShuttleWhite - 60: FloorSilver - 61: FloorSnow - 62: FloorSteel - 63: FloorSteelDiagonal - 64: FloorSteelDiagonalMini - 65: FloorSteelDirty - 66: FloorSteelHerringbone - 67: FloorSteelMini - 68: FloorSteelMono - 69: FloorSteelOffset - 70: FloorSteelPavement - 71: FloorSteelPavementVertical - 72: FloorTechMaint - 73: FloorTechMaint2 - 74: FloorTechMaint3 - 75: FloorWhite - 76: FloorWhiteDiagonal - 77: FloorWhiteDiagonalMini - 78: FloorWhiteHerringbone - 79: FloorWhiteMini - 80: FloorWhiteMono - 81: FloorWhiteOffset - 82: FloorWhitePavement - 83: FloorWhitePavementVertical - 84: FloorWhitePlastic - 85: FloorWood - 86: FloorWoodTile - 87: Lattice - 88: Plating -entities: -- uid: 0 - components: - - type: MetaData - - pos: 0.6064911,0.49290404 - parent: invalid - type: Transform - - chunks: - -1,-1: - ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAFgAAABJAAAASQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAHgAAAx4AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAARAAAAB4AAAJEAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAWAAAAEQAAAMeAAACRAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAHgAAAh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAaAAAAWAAAABoAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAFQAAAlgAAAAeAAABHgAAAw== - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAGgAAAlgAAAAaAAADHgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAFgAAABYAAAAWAAAAB4AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAWAAAABUAAAIVAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAVAAAAFQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - 0,0: - ind: 0,0 - tiles: GgAAAlgAAAAaAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAACWAAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - 0,-1: - ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAAAFgAAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABYAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAABRAAAA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAEQAAAJYAAAAVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABYAAAAWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAACWAAAABoAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAFgAAAAVAAADWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - type: MapGrid - - type: Broadphase - - angularDamping: 0.05 - linearDamping: 0.05 - fixedRotation: False - bodyType: Dynamic - type: Physics - - fixtures: [] - type: Fixtures - - type: OccluderTree - - type: Shuttle - - nextUpdate: 947.0341944 - type: GridPathfinding - - gravityShakeSound: !type:SoundPathSpecifier - path: /Audio/Effects/alert.ogg - type: Gravity - - chunkCollection: - 0,-1: - 1: - angle: 1.5707963267948966 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: 0,-2 - 2: - angle: 1.5707963267948966 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: 2,-2 - 14: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: 0,-2 - 15: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: 2,-2 - 17: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: 1,-4 - 18: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: 1,-5 - 0,0: - 3: - angle: 1.5707963267948966 rad - color: '#FFFFFFFF' - id: Arrows - 4: - angle: 1.5707963267948966 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: 2,0 - 13: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - 16: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: 2,0 - -1,0: - 5: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: -4,0 - 7: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: -2,0 - 11: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -4,0 - 12: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -2,0 - -1,-1: - 6: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: -4,-2 - 8: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Arrows - coordinates: -2,-2 - 9: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -2,-2 - 10: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -4,-2 - 19: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -3,-4 - 20: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -3,-5 - 21: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -1,-4 - 22: - angle: 4.71238898038469 rad - color: '#FFFFFFFF' - id: Bot - coordinates: -1,-5 - type: DecalGrid - - tiles: - -2,-2: 0 - -2,-1: 0 - -1,-2: 0 - -1,-1: 0 - -2,0: 0 - -1,0: 0 - 0,0: 0 - 0,-2: 0 - 0,-1: 0 - uniqueMixes: - - volume: 2500 - temperature: 293.15 - moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - type: GridAtmosphere - - type: GasTileOverlay - - type: RadiationGridResistance - - id: PTS - type: BecomesStation -- uid: 1 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -4.5,-0.5 - parent: 0 - type: Transform -- uid: 2 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 3.5,-0.5 - parent: 0 - type: Transform -- uid: 3 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 1.5,-0.5 - parent: 0 - type: Transform -- uid: 4 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -2.5,-0.5 - parent: 0 - type: Transform -- uid: 5 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -4.5,-0.5 - parent: 0 - type: Transform -- uid: 6 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 3.5,-0.5 - parent: 0 - type: Transform -- uid: 7 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -2.5,-0.5 - parent: 0 - type: Transform -- uid: 8 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 1.5,-0.5 - parent: 0 - type: Transform -- uid: 9 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -4.5,1.5 - parent: 0 - type: Transform -- uid: 10 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -4.5,-2.5 - parent: 0 - type: Transform -- uid: 11 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,1.5 - parent: 0 - type: Transform -- uid: 12 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -3.5,-2.5 - parent: 0 - type: Transform -- uid: 13 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,-2.5 - parent: 0 - type: Transform -- uid: 14 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 3.5,-2.5 - parent: 0 - type: Transform -- uid: 15 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 2.5,-2.5 - parent: 0 - type: Transform -- uid: 16 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,-2.5 - parent: 0 - type: Transform -- uid: 17 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 3.5,1.5 - parent: 0 - type: Transform -- uid: 18 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,1.5 - parent: 0 - type: Transform -- uid: 19 - type: Window - components: - - rot: 3.141592653589793 rad - pos: -1.5,1.5 - parent: 0 - type: Transform -- uid: 20 - type: Window - components: - - rot: 3.141592653589793 rad - pos: 0.5,1.5 - parent: 0 - type: Transform -- uid: 21 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -1.5,1.5 - parent: 0 - type: Transform -- uid: 22 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 0.5,1.5 - parent: 0 - type: Transform -- uid: 23 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,2.5 - parent: 0 - type: Transform -- uid: 24 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,2.5 - parent: 0 - type: Transform -- uid: 25 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,4.5 - parent: 0 - type: Transform -- uid: 26 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,4.5 - parent: 0 - type: Transform -- uid: 27 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -2.5,3.5 - parent: 0 - type: Transform -- uid: 28 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -1.5,4.5 - parent: 0 - type: Transform -- uid: 29 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -0.5,4.5 - parent: 0 - type: Transform -- uid: 30 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 0.5,4.5 - parent: 0 - type: Transform -- uid: 31 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 0 - type: Transform -- uid: 32 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -2.5,3.5 - parent: 0 - type: Transform -- uid: 33 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -1.5,4.5 - parent: 0 - type: Transform -- uid: 34 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -0.5,4.5 - parent: 0 - type: Transform -- uid: 35 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 0.5,4.5 - parent: 0 - type: Transform -- uid: 36 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 0 - type: Transform -- uid: 37 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -3.5,1.5 - parent: 0 - type: Transform -- uid: 38 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 2.5,1.5 - parent: 0 - type: Transform -- uid: 39 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -3.5,1.5 - parent: 0 - type: Transform -- uid: 40 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 2.5,1.5 - parent: 0 - type: Transform -- uid: 41 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 2.5,-5.5 - parent: 0 - type: Transform -- uid: 42 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,-5.5 - parent: 0 - type: Transform -- uid: 43 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -3.5,-5.5 - parent: 0 - type: Transform -- uid: 44 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,-5.5 - parent: 0 - type: Transform -- uid: 45 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: -2.5,-7.5 - parent: 0 - type: Transform -- uid: 46 - type: WallReinforced - components: - - rot: 3.141592653589793 rad - pos: 1.5,-7.5 - parent: 0 - type: Transform -- uid: 47 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -1.5,-7.5 - parent: 0 - type: Transform -- uid: 48 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -0.5,-7.5 - parent: 0 - type: Transform -- uid: 49 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 0.5,-7.5 - parent: 0 - type: Transform -- uid: 50 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -1.5,-7.5 - parent: 0 - type: Transform -- uid: 51 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -0.5,-7.5 - parent: 0 - type: Transform -- uid: 52 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 0.5,-7.5 - parent: 0 - type: Transform -- uid: 53 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -2.5,-6.5 - parent: 0 - type: Transform -- uid: 54 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 1.5,-6.5 - parent: 0 - type: Transform -- uid: 55 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -2.5,-6.5 - parent: 0 - type: Transform -- uid: 56 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 1.5,-6.5 - parent: 0 - type: Transform -- uid: 57 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -3.5,-4.5 - parent: 0 - type: Transform -- uid: 58 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: -3.5,-3.5 - parent: 0 - type: Transform -- uid: 59 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 2.5,-4.5 - parent: 0 - type: Transform -- uid: 60 - type: Grille - components: - - rot: 3.141592653589793 rad - pos: 2.5,-3.5 - parent: 0 - type: Transform -- uid: 61 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -3.5,-3.5 - parent: 0 - type: Transform -- uid: 62 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: -3.5,-4.5 - parent: 0 - type: Transform -- uid: 63 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 2.5,-3.5 - parent: 0 - type: Transform -- uid: 64 - type: ReinforcedWindow - components: - - rot: 3.141592653589793 rad - pos: 2.5,-4.5 - parent: 0 - type: Transform -- uid: 65 - type: GeneratorPlasma - components: - - pos: 0.5,-6.5 - parent: 0 - type: Transform -- uid: 66 - type: GravityGeneratorMini - components: - - pos: -0.5,-6.5 - parent: 0 - type: Transform -- uid: 67 - type: Gyroscope - components: - - pos: -1.5,-6.5 - parent: 0 - type: Transform -- uid: 68 - type: SubstationWallBasic - components: - - rot: 3.141592653589793 rad - pos: -2.5,-5.5 - parent: 0 - type: Transform - - canCollide: False - type: Physics -- uid: 69 - type: APCBasic - components: - - rot: -1.5707963267948966 rad - pos: 1.5,-5.5 - parent: 0 - type: Transform -- uid: 70 - type: CableHV - components: - - pos: 0.5,-6.5 - parent: 0 - type: Transform -- uid: 71 - type: CableHV - components: - - pos: 0.5,-5.5 - parent: 0 - type: Transform -- uid: 72 - type: CableHV - components: - - pos: -0.5,-5.5 - parent: 0 - type: Transform -- uid: 73 - type: CableHV - components: - - pos: -1.5,-5.5 - parent: 0 - type: Transform -- uid: 74 - type: CableHV - components: - - pos: -2.5,-5.5 - parent: 0 - type: Transform -- uid: 75 - type: CableMV - components: - - pos: -2.5,-5.5 - parent: 0 - type: Transform -- uid: 76 - type: CableMV - components: - - pos: -1.5,-5.5 - parent: 0 - type: Transform -- uid: 77 - type: CableMV - components: - - pos: -0.5,-5.5 - parent: 0 - type: Transform -- uid: 78 - type: CableMV - components: - - pos: 0.5,-5.5 - parent: 0 - type: Transform -- uid: 79 - type: CableMV - components: - - pos: 1.5,-5.5 - parent: 0 - type: Transform -- uid: 80 - type: CableApcExtension - components: - - pos: 1.5,-5.5 - parent: 0 - type: Transform -- uid: 81 - type: CableApcExtension - components: - - pos: 1.5,-4.5 - parent: 0 - type: Transform -- uid: 82 - type: CableApcExtension - components: - - pos: 1.5,-3.5 - parent: 0 - type: Transform -- uid: 83 - type: CableApcExtension - components: - - pos: 1.5,-2.5 - parent: 0 - type: Transform -- uid: 84 - type: CableApcExtension - components: - - pos: 1.5,-1.5 - parent: 0 - type: Transform -- uid: 85 - type: CableApcExtension - components: - - pos: 1.5,-0.5 - parent: 0 - type: Transform -- uid: 86 - type: CableApcExtension - components: - - pos: 1.5,0.5 - parent: 0 - type: Transform -- uid: 87 - type: CableApcExtension - components: - - pos: 0.5,0.5 - parent: 0 - type: Transform -- uid: 88 - type: CableApcExtension - components: - - pos: 0.5,1.5 - parent: 0 - type: Transform -- uid: 89 - type: CableApcExtension - components: - - pos: 0.5,2.5 - parent: 0 - type: Transform -- uid: 90 - type: CableApcExtension - components: - - pos: 0.5,3.5 - parent: 0 - type: Transform -- uid: 91 - type: CableApcExtension - components: - - pos: -0.5,3.5 - parent: 0 - type: Transform -- uid: 92 - type: CableApcExtension - components: - - pos: -1.5,3.5 - parent: 0 - type: Transform -- uid: 93 - type: CableApcExtension - components: - - pos: -1.5,2.5 - parent: 0 - type: Transform -- uid: 94 - type: CableApcExtension - components: - - pos: -1.5,1.5 - parent: 0 - type: Transform -- uid: 95 - type: CableApcExtension - components: - - pos: -1.5,0.5 - parent: 0 - type: Transform -- uid: 96 - type: CableApcExtension - components: - - pos: -2.5,0.5 - parent: 0 - type: Transform -- uid: 97 - type: CableApcExtension - components: - - pos: -2.5,-0.5 - parent: 0 - type: Transform -- uid: 98 - type: CableApcExtension - components: - - pos: -2.5,-1.5 - parent: 0 - type: Transform -- uid: 99 - type: CableApcExtension - components: - - pos: -2.5,-2.5 - parent: 0 - type: Transform -- uid: 100 - type: CableApcExtension - components: - - pos: -2.5,-3.5 - parent: 0 - type: Transform -- uid: 101 - type: CableApcExtension - components: - - pos: -2.5,-4.5 - parent: 0 - type: Transform -- uid: 102 - type: CableApcExtension - components: - - pos: -2.5,-5.5 - parent: 0 - type: Transform -- uid: 103 - type: CableApcExtension - components: - - pos: -1.5,-5.5 - parent: 0 - type: Transform -- uid: 104 - type: CableApcExtension - components: - - pos: -0.5,-5.5 - parent: 0 - type: Transform -- uid: 105 - type: CableApcExtension - components: - - pos: 0.5,-5.5 - parent: 0 - type: Transform -- uid: 106 - type: CableApcExtension - components: - - pos: 1.5,-5.5 - parent: 0 - type: Transform -- uid: 107 - type: ChairPilotSeat - components: - - rot: 1.5707963267948966 rad - pos: -2.5,-3.5 - parent: 0 - type: Transform -- uid: 108 - type: ChairPilotSeat - components: - - rot: 1.5707963267948966 rad - pos: -2.5,-4.5 - parent: 0 - type: Transform -- uid: 109 - type: ChairPilotSeat - components: - - rot: -1.5707963267948966 rad - pos: 1.5,-3.5 - parent: 0 - type: Transform -- uid: 110 - type: ChairPilotSeat - components: - - rot: -1.5707963267948966 rad - pos: 1.5,-4.5 - parent: 0 - type: Transform -- uid: 111 - type: FirelockGlass - components: - - pos: -1.5,-2.5 - parent: 0 - type: Transform -- uid: 112 - type: FirelockGlass - components: - - pos: -0.5,-2.5 - parent: 0 - type: Transform -- uid: 113 - type: FirelockGlass - components: - - pos: 0.5,-2.5 - parent: 0 - type: Transform -- uid: 114 - type: AirlockGlassShuttle - components: - - rot: -1.5707963267948966 rad - pos: -4.5,-1.5 - parent: 0 - type: Transform - - fixtures: - - density: 100 - shape: !type:PolygonShape - vertices: - - 0.49,-0.49 - - 0.49,0.49 - - -0.49,0.49 - - -0.49,-0.49 - mask: - - Impassable - - MidImpassable - - HighImpassable - - LowImpassable - - InteractImpassable - layer: - - MidImpassable - - HighImpassable - - BulletImpassable - - InteractImpassable - - Opaque - - shape: !type:PhysShapeCircle - position: 0,-0.5 - radius: 0.2 - hard: False - id: docking - type: Fixtures -- uid: 115 - type: AirlockGlassShuttle - components: - - rot: -1.5707963267948966 rad - pos: -4.5,0.5 - parent: 0 - type: Transform - - fixtures: - - density: 100 - shape: !type:PolygonShape - vertices: - - 0.49,-0.49 - - 0.49,0.49 - - -0.49,0.49 - - -0.49,-0.49 - mask: - - Impassable - - MidImpassable - - HighImpassable - - LowImpassable - - InteractImpassable - layer: - - MidImpassable - - HighImpassable - - BulletImpassable - - InteractImpassable - - Opaque - - shape: !type:PhysShapeCircle - position: 0,-0.5 - radius: 0.2 - hard: False - id: docking - type: Fixtures -- uid: 116 - type: AirlockGlassShuttle - components: - - rot: 1.5707963267948966 rad - pos: 3.5,0.5 - parent: 0 - type: Transform - - fixtures: - - density: 100 - shape: !type:PolygonShape - vertices: - - 0.49,-0.49 - - 0.49,0.49 - - -0.49,0.49 - - -0.49,-0.49 - mask: - - Impassable - - MidImpassable - - HighImpassable - - LowImpassable - - InteractImpassable - layer: - - MidImpassable - - HighImpassable - - BulletImpassable - - InteractImpassable - - Opaque - - shape: !type:PhysShapeCircle - position: 0,-0.5 - radius: 0.2 - hard: False - id: docking - type: Fixtures -- uid: 117 - type: AirlockGlassShuttle - components: - - rot: 1.5707963267948966 rad - pos: 3.5,-1.5 - parent: 0 - type: Transform - - fixtures: - - density: 100 - shape: !type:PolygonShape - vertices: - - 0.49,-0.49 - - 0.49,0.49 - - -0.49,0.49 - - -0.49,-0.49 - mask: - - Impassable - - MidImpassable - - HighImpassable - - LowImpassable - - InteractImpassable - layer: - - MidImpassable - - HighImpassable - - BulletImpassable - - InteractImpassable - - Opaque - - shape: !type:PhysShapeCircle - position: 0,-0.5 - radius: 0.2 - hard: False - id: docking - type: Fixtures -- uid: 118 - type: AtmosDeviceFanTiny - components: - - rot: 1.5707963267948966 rad - pos: -4.5,-1.5 - parent: 0 - type: Transform -- uid: 119 - type: AtmosDeviceFanTiny - components: - - rot: 1.5707963267948966 rad - pos: -4.5,0.5 - parent: 0 - type: Transform -- uid: 120 - type: AtmosDeviceFanTiny - components: - - rot: 1.5707963267948966 rad - pos: 3.5,0.5 - parent: 0 - type: Transform -- uid: 121 - type: AtmosDeviceFanTiny - components: - - rot: 1.5707963267948966 rad - pos: 3.5,-1.5 - parent: 0 - type: Transform -- uid: 122 - type: AirlockExternalGlass - components: - - pos: -2.5,-1.5 - parent: 0 - type: Transform -- uid: 123 - type: AirlockExternalGlass - components: - - pos: -2.5,0.5 - parent: 0 - type: Transform -- uid: 124 - type: AirlockExternalGlass - components: - - pos: 1.5,0.5 - parent: 0 - type: Transform -- uid: 125 - type: AirlockExternalGlass - components: - - pos: 1.5,-1.5 - parent: 0 - type: Transform -- uid: 126 - type: Poweredlight - components: - - rot: 3.141592653589793 rad - pos: -3.5,-1.5 - parent: 0 - type: Transform - - powerLoad: 0 - type: ApcPowerReceiver -- uid: 127 - type: Poweredlight - components: - - rot: 3.141592653589793 rad - pos: 2.5,-1.5 - parent: 0 - type: Transform - - powerLoad: 0 - type: ApcPowerReceiver -- uid: 128 - type: Poweredlight - components: - - rot: -1.5707963267948966 rad - pos: 0.5,2.5 - parent: 0 - type: Transform - - powerLoad: 0 - type: ApcPowerReceiver -- uid: 129 - type: Poweredlight - components: - - rot: 3.141592653589793 rad - pos: -2.5,-4.5 - parent: 0 - type: Transform - - powerLoad: 0 - type: ApcPowerReceiver -- uid: 130 - type: Poweredlight - components: - - rot: 3.141592653589793 rad - pos: 1.5,-4.5 - parent: 0 - type: Transform - - powerLoad: 0 - type: ApcPowerReceiver -- uid: 131 - type: Thruster - components: - - rot: 3.141592653589793 rad - pos: -3.5,-6.5 - parent: 0 - type: Transform -- uid: 132 - type: Thruster - components: - - rot: -1.5707963267948966 rad - pos: 2.5,-6.5 - parent: 0 - type: Transform -- uid: 133 - type: Thruster - components: - - rot: 1.5707963267948966 rad - pos: -3.5,2.5 - parent: 0 - type: Transform -- uid: 134 - type: Thruster - components: - - pos: 2.5,2.5 - parent: 0 - type: Transform -- uid: 135 - type: ChairPilotSeat - components: - - rot: -1.5707963267948966 rad - pos: -0.5,-3.5 - parent: 0 - type: Transform -- uid: 136 - type: ChairPilotSeat - components: - - rot: 1.5707963267948966 rad - pos: -0.5,-4.5 - parent: 0 - type: Transform -- uid: 137 - type: ComputerShuttle - components: - - pos: -0.5,3.5 - parent: 0 - type: Transform -- uid: 138 - type: ComputerStationRecords - components: - - rot: -1.5707963267948966 rad - pos: 0.5,2.5 - parent: 0 - type: Transform -- uid: 139 - type: ComputerFrame - components: - - rot: 1.5707963267948966 rad - pos: -1.5,2.5 - parent: 0 - type: Transform -- uid: 140 - type: TableReinforced - components: - - rot: 1.5707963267948966 rad - pos: -1.5,3.5 - parent: 0 - type: Transform -- uid: 141 - type: TableReinforced - components: - - rot: 1.5707963267948966 rad - pos: 0.5,3.5 - parent: 0 - type: Transform -- uid: 142 - type: PowerCellRecharger - components: - - pos: -1.5,3.5 - parent: 0 - type: Transform -- uid: 143 - type: Intercom - components: - - rot: -1.5707963267948966 rad - pos: 1.5,2.5 - parent: 0 - type: Transform -- uid: 144 - type: AirlockCommand - components: - - pos: -0.5,1.5 - parent: 0 - type: Transform -- uid: 145 - type: ChairPilotSeat - components: - - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 0 - type: Transform -- uid: 146 - type: ClosetWallEmergencyFilledRandom - components: - - pos: -2.5,-2.5 - parent: 0 - type: Transform -- uid: 147 - type: ClosetWallEmergencyFilledRandom - components: - - pos: 1.5,-2.5 - parent: 0 - type: Transform -... From 04098cc6a1c91eccdecb702def4c088dcd645282 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 1 Jan 2023 01:20:19 -0500 Subject: [PATCH 8/9] back in --- Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs | 2 +- .../Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs index 0887fc56c8..0ab1ab07bc 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs @@ -534,7 +534,7 @@ private bool IsBlocked(CargoShuttleComponent component) return FoundOrganics(component.Owner, mobQuery, xformQuery); } - private bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) + public bool FoundOrganics(EntityUid uid, EntityQuery mobQuery, EntityQuery xformQuery) { var xform = xformQuery.GetComponent(uid); var childEnumerator = xform.ChildEnumerator; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs index 68c82b5abc..2cefd19795 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.EmergencyShuttle.cs @@ -378,7 +378,7 @@ public void CallEmergencyShuttle() _commsConsole.UpdateCommsConsoleInterface(); } - private List GetDocks(EntityUid uid) + public List GetDocks(EntityUid uid) { var result = new List(); From e2769c0ad030c0efec748c7ed2620102fc3e09f2 Mon Sep 17 00:00:00 2001 From: Cheackraze <71046427+Cheackraze@users.noreply.github.com> Date: Sun, 1 Jan 2023 20:33:00 -0500 Subject: [PATCH 9/9] try --- .../Shipyard/Systems/ShipyardSystem.cs | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs index 6974dc3bb3..9caca90bc5 100644 --- a/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs +++ b/Content.Server/_Citadel/Shipyard/Systems/ShipyardSystem.cs @@ -9,8 +9,7 @@ using Robust.Server.GameObjects; using Robust.Server.Maps; using Robust.Shared.Map; -using Robust.Shared.GameObjects; -using static Content.Server.Power.Pow3r.PowerState; +using Robust.Shared.Map.Components; namespace Content.Server.Shipyard.Systems { @@ -49,8 +48,8 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev) /// /// Adds a ship to the shipyard, calculates its price, and attempts to ftl-dock it to the given station /// - /// - /// + /// The ID of the station to dock the shuttle to + /// The path to the grid file to load. Must be a grid file! public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) { if (!TryComp(stationUid, out var stationData) || !TryComp(AddShuttle(shuttlePath), out var shuttle)) @@ -66,44 +65,57 @@ public void PurchaseShuttle(EntityUid? stationUid, string shuttlePath) //can do FTLTravel later instead if we want to open that door _shuttle.TryFTLDock(shuttle, targetGrid.Value); - _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price} spacebucks"); + _sawmill.Info($"Shuttle {shuttlePath} was purchased at {targetGrid} for {price}"); } /// /// Loads a paused shuttle into the ShipyardMap from a file path /// - /// - /// + /// The path to the grid file to load. Must be a grid file! + /// Returns the EntityUid of the shuttle private EntityUid? AddShuttle(string shuttlePath) { if (ShipyardMap == null) return null; - //only dealing with a single grid at a time for now - var loadOptions = new MapLoadOptions() { Offset = (500f + _shuttleIndex, 0f) }; - var shuttle = _map.LoadGrid(ShipyardMap.Value, shuttlePath.ToString(), loadOptions); - - if (shuttle == null) + if (!_map.TryLoad(ShipyardMap.Value, shuttlePath.ToString(), out var gridList, loadOptions) || gridList == null) { _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); return null; - } + }; - _shuttleIndex += _mapManager.GetGrid(shuttle.Value).LocalAABB.Width + ShuttleSpawnBuffer; + _shuttleIndex += _mapManager.GetGrid(gridList[0]).LocalAABB.Width + ShuttleSpawnBuffer; + var actualGrids = new List(); + var gridQuery = GetEntityQuery(); - return shuttle.Value; - } + foreach (var ent in gridList) + { + if (!gridQuery.HasComponent(ent)) + continue; + + actualGrids.Add(ent); + }; + + //only dealing with 1 grid at a time for now, until more is known about multi-grid drifting + if (actualGrids.Count != 1) + { + _sawmill.Error($"Unable to spawn shuttle {shuttlePath}"); + return null; + }; + + return actualGrids[0]; + } /// /// Checks a shuttle to make sure that it is docked to the given station, and that there are no lifeforms aboard. Then it appraises the grid, outputs to the server log, and deletes the grid /// - /// - /// + /// The ID of the station that the shuttle is docked to + /// The grid ID of the shuttle to be appraised and sold public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) { if (!TryComp(stationUid, out var stationGrid) || !HasComp(shuttleUid) || !TryComp(shuttleUid, out var xform) || ShipyardMap == null) @@ -141,7 +153,7 @@ public void SellShuttle(EntityUid stationUid, EntityUid shuttleUid) var mobQuery = GetEntityQuery(); var xformQuery = GetEntityQuery(); - if (_cargo.FoundOrganics(shuttleUid, mobQuery, xformQuery) == true) + if (_cargo.FoundOrganics(shuttleUid, mobQuery, xformQuery)) { _sawmill.Warning($"organics on board"); return; @@ -159,7 +171,7 @@ private void CleanupShipyard() { ShipyardMap = null; return; - } + }; _mapManager.DeleteMap(ShipyardMap.Value); }