]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Salvage dungeons (#14520)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Fri, 10 Mar 2023 05:41:22 +0000 (16:41 +1100)
committerGitHub <noreply@github.com>
Fri, 10 Mar 2023 05:41:22 +0000 (16:41 +1100)
145 files changed:
Content.Client/Entry/EntryPoint.cs
Content.Client/IconSmoothing/IconSmoothComponent.cs
Content.Client/IconSmoothing/IconSmoothSystem.cs
Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs
Content.Client/Parallax/ParallaxGenerator.cs
Content.Client/Salvage/SalvageSystem.cs [new file with mode: 0644]
Content.Client/Salvage/UI/SalvageExpeditionConsoleBoundUserInterface.cs [new file with mode: 0644]
Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml [new file with mode: 0644]
Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml.cs [new file with mode: 0644]
Content.IntegrationTests/Tests/Procedural/DungeonTests.cs [new file with mode: 0644]
Content.Server/CPUJob/JobQueues/Queues/JobQueue.cs
Content.Server/Cargo/Systems/CargoSystem.cs
Content.Server/Construction/AnchorableSystem.cs
Content.Server/Decals/DecalSystem.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Common.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Helper.cs [new file with mode: 0644]
Content.Server/Parallax/BiomeSystem.cs
Content.Server/Pinpointer/ServerPinpointerSystem.cs
Content.Server/Procedural/DungeonAtlasTemplateComponent.cs [new file with mode: 0644]
Content.Server/Procedural/DungeonJob.Generator.cs [new file with mode: 0644]
Content.Server/Procedural/DungeonJob.PostGen.cs [new file with mode: 0644]
Content.Server/Procedural/DungeonJob.cs [new file with mode: 0644]
Content.Server/Procedural/DungeonSystem.Commands.cs [new file with mode: 0644]
Content.Server/Procedural/DungeonSystem.cs [new file with mode: 0644]
Content.Server/Salvage/SalvageMapPrototype.cs
Content.Server/Salvage/SalvageSystem.cs
Content.Server/Shuttles/Events/FTLCompletedEvent.cs [moved from Content.Server/Shuttles/Events/HyperspaceJumpCompletedEvent.cs with 74% similarity]
Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs
Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs
Content.Shared/CCVar/CCVars.cs
Content.Shared/Movement/Systems/SharedMoverController.cs
Content.Shared/Parallax/Biomes/BiomeComponent.cs
Content.Shared/Parallax/Biomes/BiomePrototype.cs
Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs
Content.Shared/Procedural/Dungeon.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonConfigPrototype.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonGenerators/IDunGen.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonGenerators/PrefabDunGen.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonPath.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonPresetPrototype.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonRoom.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonRoomPackPrototype.cs [new file with mode: 0644]
Content.Shared/Procedural/DungeonRoomPrototype.cs [new file with mode: 0644]
Content.Shared/Procedural/Loot/ClusterLoot.cs [new file with mode: 0644]
Content.Shared/Procedural/Loot/IDungeonLoot.cs [new file with mode: 0644]
Content.Shared/Procedural/Loot/SalvageLootPrototype.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/EntrancePostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/ExternalWindowPostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/IPostDunGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/InternalWindowPostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/MiddleConnectionPostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/PostGeneration/WallMountPostGen.cs [new file with mode: 0644]
Content.Shared/Procedural/Rewards/BankReward.cs [new file with mode: 0644]
Content.Shared/Procedural/Rewards/ISalvageReward.cs [new file with mode: 0644]
Content.Shared/Procedural/Rewards/SalvageRewardPrototype.cs [new file with mode: 0644]
Content.Shared/Random/Helpers/SharedRandomExtensions.cs
Content.Shared/Salvage/Expeditions/Extraction/SalvageExtraction.cs [new file with mode: 0644]
Content.Shared/Salvage/Expeditions/IFactionExpeditionConfig.cs [new file with mode: 0644]
Content.Shared/Salvage/Expeditions/SalvageFactionPrototype.cs [new file with mode: 0644]
Content.Shared/Salvage/Expeditions/SalvageMobGroup.cs [new file with mode: 0644]
Content.Shared/Salvage/Expeditions/Structure/SalvageStructure.cs [new file with mode: 0644]
Content.Shared/Salvage/Expeditions/Structure/SalvageStructureFaction.cs [new file with mode: 0644]
Content.Shared/Salvage/ISalvageMission.cs [new file with mode: 0644]
Content.Shared/Salvage/SalvageExpeditionPrototype.cs [new file with mode: 0644]
Content.Shared/Salvage/SalvageExpeditions.cs [new file with mode: 0644]
Content.Shared/Salvage/SharedSalvageSystem.cs [new file with mode: 0644]
Content.Shared/Storage/EntitySpawnEntry.cs
Resources/Audio/Effects/Footsteps/attributions.yml [new file with mode: 0644]
Resources/Audio/Effects/Footsteps/water1.ogg [new file with mode: 0644]
Resources/Audio/Effects/Footsteps/water2.ogg [new file with mode: 0644]
Resources/Audio/Effects/Footsteps/water3.ogg [new file with mode: 0644]
Resources/Audio/Effects/Footsteps/water4.ogg [new file with mode: 0644]
Resources/ConfigPresets/Build/development.toml
Resources/Locale/en-US/procedural/command.ftl [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/17x17.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/17x5.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/3x5.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/3x7.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/5x11.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/5x17.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/5x5.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/LargeArea2.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/LargeArea3.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/LargeArea4.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/MediumArea2.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/MediumArea3.yml [new file with mode: 0644]
Resources/Maps/Dungeon/Templates/MediumArea4.yml [new file with mode: 0644]
Resources/Maps/Dungeon/experiment.yml [new file with mode: 0644]
Resources/Maps/Dungeon/template.yml [new file with mode: 0644]
Resources/Prototypes/Catalog/Fills/Paper/salvage_lore.yml
Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml
Resources/Prototypes/Entities/Structures/Specific/xeno.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Tiles/basalt.yml
Resources/Prototypes/Entities/Tiles/water.yml [new file with mode: 0644]
Resources/Prototypes/Parallaxes/planet.yml
Resources/Prototypes/Procedural/Themes/experiment.yml [new file with mode: 0644]
Resources/Prototypes/Procedural/dungeon_configs.yml [new file with mode: 0644]
Resources/Prototypes/Procedural/dungeon_presets.yml [new file with mode: 0644]
Resources/Prototypes/Procedural/dungeon_room_packs.yml [new file with mode: 0644]
Resources/Prototypes/SoundCollections/footsteps.yml
Resources/Prototypes/Tiles/planet.yml
Resources/Prototypes/biomes.yml
Resources/Prototypes/ore.yml
Resources/Prototypes/tags.yml
Resources/Textures/Structures/Specific/xeno_building.rsi/frenzytower.png [new file with mode: 0644]
Resources/Textures/Structures/Specific/xeno_building.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Structures/Specific/xeno_building.rsi/recoverytower.png [new file with mode: 0644]
Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower-unshaded.png [new file with mode: 0644]
Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid0.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid1.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid10.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid11.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid12.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid2.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid3.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid4.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid5.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid6.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid7.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid8.png [new file with mode: 0644]
Resources/Textures/Tiles/Asteroid/asteroid9.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand1.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand10.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand11.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand12.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand13.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand14.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand15.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand2.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand3.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand4.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand5.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand6.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand7.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand8.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand9.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/dirt.rsi/dirt.png [new file with mode: 0644]
Resources/Textures/Tiles/Planet/dirt.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Tiles/Planet/water.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Tiles/Planet/water.rsi/shoreline_water.png [new file with mode: 0644]

index 514cfa20a181aa76a347b14e452069d2743d80eb..5901146f897d2e78e9490ca0d1c7cf528343daa4 100644 (file)
@@ -109,6 +109,7 @@ namespace Content.Client.Entry
             _prototypeManager.RegisterIgnore("metabolizerType");
             _prototypeManager.RegisterIgnore("metabolismGroup");
             _prototypeManager.RegisterIgnore("salvageMap");
+            _prototypeManager.RegisterIgnore("salvageFaction");
             _prototypeManager.RegisterIgnore("gamePreset");
             _prototypeManager.RegisterIgnore("gameRule");
             _prototypeManager.RegisterIgnore("worldSpell");
index 75c3637a3a8ffc87a135475148f19cc44c6c2e1b..f6cd53b9634ed0a4d487cf17e1aaef564c19f456 100644 (file)
@@ -29,6 +29,9 @@ namespace Content.Client.IconSmoothing
         [ViewVariables(VVAccess.ReadWrite), DataField("base")]
         public string StateBase { get; } = string.Empty;
 
+        [DataField("shader", customTypeSerializer:typeof(PrototypeIdSerializer<ShaderPrototype>))]
+        public string? Shader;
+
         /// <summary>
         ///     Mode that controls how the icon should be selected.
         /// </summary>
index af04d6d67dc9d7f716ea46bdff00f5458b43a144..781089e665723a2ab7e4c29c467132acd1069920 100644 (file)
@@ -55,6 +55,14 @@ namespace Content.Client.IconSmoothing
             sprite.LayerSetDirOffset(CornerLayers.NW, DirectionOffset.Flip);
             sprite.LayerMapSet(CornerLayers.SW, sprite.AddLayerState(state0));
             sprite.LayerSetDirOffset(CornerLayers.SW, DirectionOffset.Clockwise);
+
+            if (component.Shader != null)
+            {
+                sprite.LayerSetShader(CornerLayers.SE, component.Shader);
+                sprite.LayerSetShader(CornerLayers.NE, component.Shader);
+                sprite.LayerSetShader(CornerLayers.NW, component.Shader);
+                sprite.LayerSetShader(CornerLayers.SW, component.Shader);
+            }
         }
 
         private void OnShutdown(EntityUid uid, IconSmoothComponent component, ComponentShutdown args)
index 67ee82aefbe4d47b53b818371288937f3a192651..039131e28cb28c80d07ca54b916ac33073016298 100644 (file)
@@ -74,8 +74,6 @@ namespace Content.Client.Lobby.UI
             AddChild(vBox);
 
             UpdateUI();
-
-            _preferencesManager.OnServerDataLoaded += UpdateUI;
         }
 
         public Button CharacterSetupButton { get; }
@@ -128,7 +126,7 @@ namespace Content.Client.Lobby.UI
                     _viewBox.AddChild(viewWest);
                     _viewBox.AddChild(viewEast);
                     _summaryLabel.Text = selectedCharacter.Summary;
-                    EntitySystem.Get<HumanoidAppearanceSystem>().LoadProfile(_previewDummy.Value, selectedCharacter);
+                    _entityManager.System<HumanoidAppearanceSystem>().LoadProfile(_previewDummy.Value, selectedCharacter);
                     GiveDummyJobClothes(_previewDummy.Value, selectedCharacter);
                 }
             }
index 1998ff9f4ed485deb5d587f3f19c5bd0d2a080bb..a2296741fd0ef6c3e1da4ccf2b81d23b2864495a 100644 (file)
@@ -235,7 +235,7 @@ namespace Content.Client.Parallax
                     for (var x = 0; x < bitmap.Width; x++)
                     {
                         // Do noise calculations.
-                        var noiseVal = MathF.Min(1, MathF.Max(0, (noise.GetNoiseTiled(x, y) + 1) / 2));
+                        var noiseVal = MathF.Min(1, MathF.Max(0, (noise.GetNoise(x, y) + 1) / 2));
 
                         // Threshold
                         noiseVal = MathF.Max(0, noiseVal - Threshold);
@@ -462,7 +462,7 @@ namespace Content.Client.Parallax
                     var y = random.Next(0, buffer.Height);
 
                     // Grab noise at this point.
-                    var noiseVal = MathF.Min(1, MathF.Max(0, (noise.GetNoiseTiled(x, y) + 1) / 2));
+                    var noiseVal = MathF.Min(1, MathF.Max(0, (noise.GetNoise(x, y) + 1) / 2));
                     // Threshold
                     noiseVal = MathF.Max(0, noiseVal - MaskThreshold);
                     noiseVal *= threshVal;
diff --git a/Content.Client/Salvage/SalvageSystem.cs b/Content.Client/Salvage/SalvageSystem.cs
new file mode 100644 (file)
index 0000000..97737bc
--- /dev/null
@@ -0,0 +1,8 @@
+using Content.Shared.Salvage;
+
+namespace Content.Client.Salvage;
+
+public sealed class SalvageSystem : SharedSalvageSystem
+{
+
+}
diff --git a/Content.Client/Salvage/UI/SalvageExpeditionConsoleBoundUserInterface.cs b/Content.Client/Salvage/UI/SalvageExpeditionConsoleBoundUserInterface.cs
new file mode 100644 (file)
index 0000000..ccc9fc3
--- /dev/null
@@ -0,0 +1,47 @@
+using Content.Shared.Salvage;
+using JetBrains.Annotations;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Salvage.UI;
+
+[UsedImplicitly]
+public sealed class SalvageExpeditionConsoleBoundUserInterface : BoundUserInterface
+{
+    private SalvageExpeditionWindow? _window;
+
+    public SalvageExpeditionConsoleBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey)
+    {
+    }
+
+    protected override void Open()
+    {
+        base.Open();
+        _window = new SalvageExpeditionWindow();
+        _window.ClaimMission += index =>
+        {
+            SendMessage(new ClaimSalvageMessage()
+            {
+                Index = index,
+            });
+        };
+        _window.OnClose += Close;
+        _window?.OpenCenteredLeft();
+    }
+
+    protected override void Dispose(bool disposing)
+    {
+        base.Dispose(disposing);
+        _window?.Dispose();
+        _window = null;
+    }
+
+    protected override void UpdateState(BoundUserInterfaceState state)
+    {
+        base.UpdateState(state);
+
+        if (state is not SalvageExpeditionConsoleState current)
+            return;
+
+        _window?.UpdateState(current);
+    }
+}
diff --git a/Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml b/Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml
new file mode 100644 (file)
index 0000000..30a747d
--- /dev/null
@@ -0,0 +1,23 @@
+<controls:FancyWindow xmlns="https://spacestation14.io"
+                      xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
+                      Title="{Loc 'Salvage expeditions'}"
+                      MinSize="800 360">
+    <BoxContainer Orientation="Vertical">
+        <BoxContainer Orientation="Horizontal">
+            <Label Name="NextOfferLabel"
+                   Text="Next offer:"
+                   Margin="5"></Label>
+            <ProgressBar Name="NextOfferBar"
+                         HorizontalExpand="True"
+                         MinValue="0"
+                         MaxValue="1"
+                         SetHeight="25"/>
+            <Label Name="NextOfferText" Text="0.00"
+                   Margin="5"/>
+        </BoxContainer>
+        <controls:HLine Color="#404040" Thickness="2" Margin="0 5 0 5"/>
+        <BoxContainer Name="Container"
+                      Orientation="Horizontal"
+                      Margin="5 0 5 0"/>
+    </BoxContainer>
+</controls:FancyWindow>
diff --git a/Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml.cs b/Content.Client/Salvage/UI/SalvageExpeditionWindow.xaml.cs
new file mode 100644 (file)
index 0000000..b312b28
--- /dev/null
@@ -0,0 +1,334 @@
+using Content.Client.Computer;
+using Content.Client.Stylesheets;
+using Content.Client.UserInterface.Controls;
+using Content.Shared.Parallax.Biomes;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.Loot;
+using Content.Shared.Procedural.Rewards;
+using Content.Shared.Random;
+using Content.Shared.Random.Helpers;
+using Content.Shared.Salvage;
+using Content.Shared.Salvage.Expeditions;
+using Content.Shared.Salvage.Expeditions.Structure;
+using Content.Shared.Shuttles.BUIStates;
+using Robust.Client.AutoGenerated;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Timing;
+
+namespace Content.Client.Salvage.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class SalvageExpeditionWindow : FancyWindow,
+    IComputerWindow<EmergencyConsoleBoundUserInterfaceState>
+{
+    private readonly IGameTiming _timing;
+    private readonly IPrototypeManager _prototype;
+    private readonly SharedSalvageSystem _salvage;
+
+    public event Action<ushort>? ClaimMission;
+    private bool _claimed;
+    private TimeSpan _nextOffer;
+
+    public SalvageExpeditionWindow()
+    {
+        RobustXamlLoader.Load(this);
+        _timing = IoCManager.Resolve<IGameTiming>();
+        _prototype = IoCManager.Resolve<IPrototypeManager>();
+        _salvage = IoCManager.Resolve<IEntityManager>().EntitySysManager.GetEntitySystem<SharedSalvageSystem>();
+    }
+
+    public void UpdateState(SalvageExpeditionConsoleState state)
+    {
+        _claimed = state.Claimed;
+        _nextOffer = state.NextOffer;
+        Container.DisposeAllChildren();
+
+        for (var i = 0; i < state.Missions.Count; i++)
+        {
+            // TODO: Make this XAML
+            var mission = state.Missions[i];
+            var config = _prototype.Index<SalvageExpeditionPrototype>(mission.Config);
+            var dungeonConfig = _prototype.Index<DungeonConfigPrototype>(config.DungeonConfigPrototype);
+            var faction = SharedSalvageSystem.GetFaction(config.Factions, mission.Seed);
+            var factionConfig = _prototype.Index<SalvageFactionPrototype>(faction);
+
+            // If we ever need this on server then move it
+            var missionDesc = string.Empty;
+            var missionDetails = string.Empty;
+
+            switch (config.Mission)
+            {
+                case SalvageStructure structure:
+                    var structureConfig = (SalvageStructureFaction) factionConfig.Configs[mission.Config];
+                    missionDesc = "Demolition";
+                    // TODO:
+                    missionDetails = $"Destroy {SharedSalvageSystem.GetStructureCount(structure, mission.Seed)} {_prototype.Index<EntityPrototype>(structureConfig.Spawn).Name} structures.";
+                    break;
+                default:
+                    throw new NotImplementedException();
+            }
+
+            // Mission
+            var missionStripe = new StripeBack()
+            {
+                Margin = new Thickness(0f, -5f, 0f, 0f)
+            };
+
+            missionStripe.AddChild(new Label()
+            {
+                Text = missionDesc,
+                HorizontalAlignment = HAlignment.Center,
+                Margin = new Thickness(0f, 5f, 0f, 5f),
+            });
+
+            var lBox = new BoxContainer()
+            {
+                Orientation = BoxContainer.LayoutOrientation.Vertical
+            };
+
+            // Difficulty
+            // Details
+            lBox.AddChild(new Label()
+            {
+                Text = $"Difficulty:"
+            });
+
+            var difficultyColor = StyleNano.NanoGold;
+
+            switch (config.DifficultyRating)
+            {
+                case DifficultyRating.None:
+                    difficultyColor = StyleNano.ButtonColorDefault;
+                    break;
+                case DifficultyRating.Minor:
+                    difficultyColor = StyleNano.GoodGreenFore;
+                    break;
+                case DifficultyRating.Moderate:
+                    difficultyColor = StyleNano.ConcerningOrangeFore;
+                    break;
+                default:
+                    throw new ArgumentOutOfRangeException();
+            }
+
+            lBox.AddChild(new Label
+            {
+                Text = config.DifficultyRating.ToString(),
+                FontColorOverride = difficultyColor,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Details
+            lBox.AddChild(new Label
+            {
+                Text = $"Details:"
+            });
+
+            lBox.AddChild(new Label
+            {
+                Text = missionDetails,
+                FontColorOverride = StyleNano.NanoGold,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Details
+            lBox.AddChild(new Label
+            {
+                Text = $"Hostiles:"
+            });
+
+            lBox.AddChild(new Label
+            {
+                Text = faction,
+                FontColorOverride = StyleNano.NanoGold,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Duration
+            lBox.AddChild(new Label
+            {
+                Text = $"Duration:"
+            });
+
+            lBox.AddChild(new Label
+            {
+                Text = mission.Duration.ToString(),
+                FontColorOverride = StyleNano.NanoGold,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Biome
+            lBox.AddChild(new Label
+            {
+                Text = "Biome:"
+            });
+
+            lBox.AddChild(new Label
+            {
+                Text = _prototype.Index<BiomePrototype>(config.Biome).Description,
+                FontColorOverride = StyleNano.NanoGold,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Environment
+            lBox.AddChild(new Label
+            {
+                Text = "Environment:"
+            });
+
+            lBox.AddChild(new Label
+            {
+                Text = config.Description,
+                FontColorOverride = StyleNano.NanoGold,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+            // Modifiers
+            // TODO
+
+            // Rewards
+            lBox.AddChild(new Label()
+            {
+                Text = $"Reward:"
+            });
+
+            var salvageReward = SharedSalvageSystem.GetReward(_prototype.Index<WeightedRandomPrototype>(config.Reward), mission.Seed, _prototype);
+            var difficulty = config.DifficultyRating;
+            var rewardDesc = string.Empty;
+
+            switch (salvageReward)
+            {
+                case BankReward bank:
+                    rewardDesc = $"Bank payment of {(int) (bank.Amount * SharedSalvageSystem.GetDifficultyModifier(difficulty))}";
+                    break;
+                default:
+                    throw new ArgumentOutOfRangeException();
+            }
+
+            lBox.AddChild(new Label()
+            {
+                Text = rewardDesc,
+                FontColorOverride = StyleNano.GoodGreenFore,
+                HorizontalAlignment = HAlignment.Left,
+                Margin = new Thickness(0f, 0f, 0f, 5f),
+            });
+
+
+            lBox.AddChild(new Label()
+            {
+                Text = $"Materials:"
+            });
+
+            if (config.Loots.Count == 0)
+            {
+                lBox.AddChild(new Label()
+                {
+                    Text = "N/A",
+                    FontColorOverride = StyleNano.ConcerningOrangeFore,
+                    HorizontalAlignment = HAlignment.Left,
+                    Margin = new Thickness(0f, 0f, 0f, 5f),
+                });
+            }
+            else
+            {
+                foreach (var lootProto in SharedSalvageSystem.GetLoot(config.Loots, mission.Seed, _prototype))
+                {
+                    lBox.AddChild(new Label()
+                    {
+                        Text = lootProto.Description,
+                        FontColorOverride = StyleNano.ConcerningOrangeFore,
+                        HorizontalAlignment = HAlignment.Left,
+                        Margin = new Thickness(0f, 0f, 0f, 5f),
+                    });
+                }
+            }
+
+            // Claim
+            var claimButton = new Button()
+            {
+                HorizontalExpand = true,
+                Pressed = state.ActiveMission == mission.Index,
+                ToggleMode = true,
+                Disabled = state.Claimed,
+            };
+
+            claimButton.Label.Margin = new Thickness(0f, 5f);
+
+            claimButton.OnPressed += args =>
+            {
+                ClaimMission?.Invoke(mission.Index);
+            };
+
+            if (state.ActiveMission == mission.Index)
+            {
+                claimButton.Text = "Claimed";
+                claimButton.AddStyleClass(StyleBase.ButtonCaution);
+            }
+            else
+            {
+                claimButton.Text = "Claim";
+            }
+
+            // TODO: Fix this copypaste bullshit
+
+            var box = new PanelContainer()
+            {
+                PanelOverride = new StyleBoxFlat(new Color(30, 30, 34)),
+                HorizontalExpand = true,
+                Margin = new Thickness(5f, 0f),
+                Children =
+                {
+                    new BoxContainer()
+                    {
+                        Orientation = BoxContainer.LayoutOrientation.Vertical,
+                        Children =
+                        {
+                            missionStripe,
+                            lBox,
+                            claimButton,
+                        },
+                        Margin = new Thickness(5f, 5f)
+                    }
+                }
+            };
+
+            LayoutContainer.SetAnchorPreset(box, LayoutContainer.LayoutPreset.Wide);
+
+            Container.AddChild(box);
+        }
+    }
+
+    protected override void FrameUpdate(FrameEventArgs args)
+    {
+        base.FrameUpdate(args);
+
+        if (_claimed)
+        {
+            NextOfferBar.Value = 0f;
+            NextOfferText.Text = "N/A";
+            return;
+        }
+
+        var remaining = _nextOffer - _timing.CurTime;
+
+        if (remaining < TimeSpan.Zero)
+        {
+            NextOfferBar.Value = 1f;
+            NextOfferText.Text = "00:00";
+        }
+        else
+        {
+            NextOfferBar.Value = 1f - (float) (remaining / SharedSalvageSystem.MissionCooldown);
+            NextOfferText.Text = $"{remaining.Minutes:00}:{remaining.Seconds:00}";
+        }
+    }
+}
diff --git a/Content.IntegrationTests/Tests/Procedural/DungeonTests.cs b/Content.IntegrationTests/Tests/Procedural/DungeonTests.cs
new file mode 100644 (file)
index 0000000..55f9bc5
--- /dev/null
@@ -0,0 +1,96 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Content.Server.Procedural;
+using Content.Shared.Procedural;
+using NUnit.Framework;
+using Robust.Shared.Maths;
+using Robust.Shared.Prototypes;
+
+namespace Content.IntegrationTests.Tests.Procedural;
+
+[TestOf(typeof(DungeonSystem))]
+public sealed class DungeonTests
+{
+    [Test]
+    public async Task TestDungeonRoomPackBounds()
+    {
+        await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true});
+        var protoManager = pairTracker.Pair.Server.ResolveDependency<IPrototypeManager>();
+
+        await pairTracker.Pair.Server.WaitAssertion(() =>
+        {
+            var sizes = new HashSet<Vector2i>();
+
+            foreach (var proto in protoManager.EnumeratePrototypes<DungeonRoomPrototype>())
+            {
+                sizes.Add(proto.Size);
+                sizes.Add(new Vector2i(proto.Size.Y, proto.Size.X));
+            }
+
+            foreach (var pack in protoManager.EnumeratePrototypes<DungeonRoomPackPrototype>())
+            {
+                var rooms = new List<Box2>();
+
+                for (var i = 0; i < pack.Rooms.Count; i++)
+                {
+                    var room = pack.Rooms[i];
+                    var bounds = (Box2) room;
+
+                    for (var j = 0; j < rooms.Count; j++)
+                    {
+                        var existing = rooms[j];
+                        Assert.That(!existing.Intersects(bounds), $"Found overlapping rooms {i} and {j} in DungeonRoomPack {pack.ID}");
+                    }
+
+                    rooms.Add(bounds);
+
+                    // Inclusive of upper bounds as it's the edge
+                    Assert.That(room.Left >= 0 &&
+                                room.Bottom >= 0 &&
+                                room.Right <= pack.Size.X &&
+                                room.Top <= pack.Size.Y, $"Found invalid room {room} on DungeonRoomPack {pack.ID}");
+
+                    // Assert that anything exists at this size
+                    var rotated = new Vector2i(room.Size.Y, room.Size.X);
+
+                    Assert.That(sizes.Contains(room.Size) || sizes.Contains(rotated), $"Didn't find any dungeon room prototypes for {room.Size} on {pack.ID} index {i}");
+                }
+            }
+        });
+
+        await pairTracker.CleanReturnAsync();
+    }
+
+    [Test]
+    public async Task TestDungeonPresets()
+    {
+        await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true});
+        var protoManager = pairTracker.Pair.Server.ResolveDependency<IPrototypeManager>();
+
+        await pairTracker.Pair.Server.WaitAssertion(() =>
+        {
+            var sizes = new HashSet<Vector2i>();
+
+            foreach (var pack in protoManager.EnumeratePrototypes<DungeonRoomPackPrototype>())
+            {
+                sizes.Add(pack.Size);
+                sizes.Add(new Vector2i(pack.Size.Y, pack.Size.X));
+            }
+
+            foreach (var preset in protoManager.EnumeratePrototypes<DungeonPresetPrototype>())
+            {
+                for (var i = 0; i < preset.RoomPacks.Count; i++)
+                {
+                    var pack = preset.RoomPacks[i];
+
+                    // Assert that anything exists at this size
+                    var rotated = new Vector2i(pack.Size.Y, pack.Size.X);
+
+                    Assert.That(sizes.Contains(pack.Size) || sizes.Contains(rotated), $"Didn't find any dungeon room prototypes for {pack.Size} for {preset.ID} index {i}");
+                }
+            }
+        });
+
+        await pairTracker.CleanReturnAsync();
+    }
+}
index 1cccedf0671f1a037280525723e468ebbae73ebb..31e22ec24cfe9ad7fc87115e7575ed99e062216b 100644 (file)
@@ -7,6 +7,11 @@ namespace Content.Server.CPUJob.JobQueues.Queues
     {
         private readonly IStopwatch _stopwatch;
 
+        public JobQueue(double maxTime) : this(new Stopwatch())
+        {
+            MaxTime = maxTime;
+        }
+
         public JobQueue() : this(new Stopwatch()) {}
 
         public JobQueue(IStopwatch stopwatch)
index c7acdabdd6c0c65c0a4d8a904284c981c6e8d53f..8cf85cef47bfd163d0150b9077de7a64533739a7 100644 (file)
@@ -2,6 +2,7 @@ using Content.Server.Cargo.Components;
 using Content.Server.Station.Systems;
 using Content.Shared.Cargo;
 using Content.Shared.Containers.ItemSlots;
+using JetBrains.Annotations;
 using Robust.Shared.Prototypes;
 
 namespace Content.Server.Cargo.Systems;
@@ -44,9 +45,20 @@ public sealed partial class CargoSystem : SharedCargoSystem
         UpdateTelepad(frameTime);
     }
 
-    // please don't delete this thank you
+    [PublicAPI]
     public void UpdateBankAccount(StationBankAccountComponent component, int balanceAdded)
     {
         component.Balance += balanceAdded;
+        // TODO: Code bad
+        foreach (var comp in EntityQuery<CargoOrderConsoleComponent>())
+        {
+            if (!_uiSystem.IsUiOpen(comp.Owner, CargoConsoleUiKey.Orders)) continue;
+
+            var station = _station.GetOwningStation(comp.Owner);
+            if (station != component.Owner)
+                continue;
+
+            UpdateOrderState(comp, station);
+        }
     }
 }
index 571d09e2a39bca5e2ecb224c3796398025e0a16c..3cb09d642f3f01134e41951b83adb82382fb6885 100644 (file)
@@ -10,6 +10,7 @@ using Content.Shared.Pulling.Components;
 using Content.Shared.Tools;
 using Content.Shared.Tools.Components;
 using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
 using Robust.Shared.Physics.Components;
 
 namespace Content.Server.Construction
@@ -99,7 +100,12 @@ namespace Content.Server.Construction
                 return false;
 
             var tileIndices = grid.TileIndicesFor(coordinates);
-            var enumerator = grid.GetAnchoredEntitiesEnumerator(tileIndices);
+            return TileFree(grid, tileIndices, anchorBody.CollisionLayer, anchorBody.CollisionMask);
+        }
+
+        public bool TileFree(MapGridComponent grid, Vector2i gridIndices, int collisionLayer = 0, int collisionMask = 0)
+        {
+            var enumerator = grid.GetAnchoredEntitiesEnumerator(gridIndices);
             var bodyQuery = GetEntityQuery<PhysicsComponent>();
 
             while (enumerator.MoveNext(out var ent))
@@ -111,8 +117,8 @@ namespace Content.Server.Construction
                     continue;
                 }
 
-                if ((body.CollisionMask & anchorBody.CollisionLayer) != 0x0 ||
-                    (body.CollisionLayer & anchorBody.CollisionMask) != 0x0)
+                if ((body.CollisionMask & collisionLayer) != 0x0 ||
+                    (body.CollisionLayer & collisionMask) != 0x0)
                 {
                     return false;
                 }
index 2925f67c2928dd132b4105e6f6b6f04eb8646666..69b73f640e9f090e4fe3ad1bc7fcab1242550ba7 100644 (file)
@@ -319,6 +319,33 @@ namespace Content.Server.Decals
             return decalIds;
         }
 
+        public HashSet<(uint Index, Decal Decal)> GetDecalsIntersecting(EntityUid gridUid, Box2 bounds, DecalGridComponent? component = null)
+        {
+            var decalIds = new HashSet<(uint, Decal)>();
+            var chunkCollection = ChunkCollection(gridUid, component);
+
+            if (chunkCollection == null)
+                return decalIds;
+
+            var chunks = new ChunkIndicesEnumerator(bounds, ChunkSize);
+
+            while (chunks.MoveNext(out var chunkOrigin))
+            {
+                if (!chunkCollection.TryGetValue(chunkOrigin.Value, out var chunk))
+                    continue;
+
+                foreach (var (id, decal) in chunk.Decals)
+                {
+                    if (!bounds.Contains(decal.Coordinates))
+                        continue;
+
+                    decalIds.Add((id, decal));
+                }
+            }
+
+            return decalIds;
+        }
+
         /// <summary>
         ///     Changes a decals position. Note this will actually result in a new decal being created, possibly on a new grid or chunk.
         /// </summary>
index 6c6a2c26f8531b3a3f5d00d432df3919786722df..13523b81ccf94b7dfa11b807a1d6ed59d24e5d69 100644 (file)
@@ -1,3 +1,4 @@
+using Content.Shared.Gravity;
 using Content.Shared.NPC;
 
 namespace Content.Server.NPC.Pathfinding;
@@ -45,7 +46,8 @@ public sealed partial class PathfindingSystem
         var modifier = 1f;
 
         // TODO
-        if ((end.Data.Flags & PathfindingBreadcrumbFlag.Space) != 0x0)
+        if ((end.Data.Flags & PathfindingBreadcrumbFlag.Space) != 0x0 &&
+            (!TryComp<GravityComponent>(end.GraphUid, out var gravity) || !gravity.Enabled))
         {
             return 0f;
         }
index 5d7ac4ad03450de636ec511f25e1b8f9baadd2f0..f80cd61e9d84c2a925708a9a872c4ee7a2fb80eb 100644 (file)
@@ -16,12 +16,25 @@ public sealed partial class PathfindingSystem
         return dx + dy;
     }
 
+    public float ManhattanDistance(Vector2i start, Vector2i end)
+    {
+        var distance = end - start;
+        return Math.Abs(distance.X) + Math.Abs(distance.Y);
+    }
+
     public float OctileDistance(PathPoly start, PathPoly end)
     {
         var (dx, dy) = GetDiff(start, end);
         return dx + dy + (1.41f - 2) * Math.Min(dx, dy);
     }
 
+    public float OctileDistance(Vector2i start, Vector2i end)
+    {
+        var diff = start - end;
+        var ab = Vector2.Abs(diff);
+        return ab.X + ab.Y + (1.41f - 2) * Math.Min(ab.X, ab.Y);
+    }
+
     private Vector2 GetDiff(PathPoly start, PathPoly end)
     {
         var startPos = start.Box.Center;
index 19c23bac8293bf984fb0116b4021a8813e307a58..827d6ba95b97c6b48e358ee2c1176a4f0b3c5568 100644 (file)
@@ -32,7 +32,7 @@ public sealed partial class PathfindingSystem
     ///     If true, UpdateGrid() will not process grids.
     /// </summary>
     /// <remarks>
-    ///     Useful if something like a large explosion is in the process of shredding the grid, as it avoids uneccesary
+    ///     Useful if something like a large explosion is in the process of shredding the grid, as it avoids unneccesary
     ///     updating.
     /// </remarks>
     public bool PauseUpdating = false;
@@ -232,11 +232,6 @@ public sealed partial class PathfindingSystem
 
             comp.DirtyChunks.Clear();
         }
-
-#if DEBUG
-        if (updateCount > 0)
-            _sawmill.Debug($"Updated {updateCount} nav chunks in {_stopwatch.Elapsed.TotalMilliseconds:0.000}ms");
-#endif
     }
 
     private bool IsBodyRelevant(PhysicsComponent body)
diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.Helper.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.Helper.cs
new file mode 100644 (file)
index 0000000..549396e
--- /dev/null
@@ -0,0 +1,74 @@
+namespace Content.Server.NPC.Pathfinding;
+
+public sealed partial class PathfindingSystem
+{
+    /// <summary>
+    /// Finds a generic path from start to end.
+    /// </summary>
+    public List<Vector2i> GetPath(Vector2i start, Vector2i end, bool diagonal = false)
+    {
+        if (start == end)
+        {
+            return new List<Vector2i>();
+        }
+
+        var frontier = new PriorityQueue<Vector2i, float>();
+        frontier.Enqueue(start, 0f);
+        var cameFrom = new Dictionary<Vector2i, Vector2i>();
+        var node = start;
+
+        while (frontier.TryDequeue(out node, out _))
+        {
+            if (node == end)
+            {
+                break;
+            }
+
+            if (diagonal)
+            {
+                for (var i = 0; i < 8; i++)
+                {
+                    var direction = (DirectionFlag) i;
+                    var neighbor = node + direction.AsDir().ToIntVec();
+
+                    if (!cameFrom.TryAdd(neighbor, node))
+                        continue;
+
+                    var gScore = OctileDistance(neighbor, end);
+                    frontier.Enqueue(neighbor, gScore);
+                }
+            }
+            else
+            {
+                for (var i = 0; i < 4; i++)
+                {
+                    var direction = (DirectionFlag) Math.Pow(2, i);
+                    var neighbor = node + direction.AsDir().ToIntVec();
+
+                    if (!cameFrom.TryAdd(neighbor, node))
+                        continue;
+
+                    frontier.Enqueue(neighbor, ManhattanDistance(neighbor, end));
+                }
+            }
+        }
+
+        if (node != end)
+        {
+            return new List<Vector2i>();
+        }
+
+        var path = new List<Vector2i>();
+
+        do
+        {
+            path.Add(node);
+            var before = cameFrom[node];
+            node = before;
+        } while (node != start);
+
+        path.Add(start);
+        path.Reverse();
+        return path;
+    }
+}
index f5538b5455aa909ab3410e71b9c298a406ebb8ed..22048066390bebbd7841daf858e77c539a10f9d2 100644 (file)
@@ -33,6 +33,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
     public override void Initialize()
     {
         base.Initialize();
+        SubscribeLocalEvent<BiomeComponent, ComponentStartup>(OnBiomeStartup);
         SubscribeLocalEvent<BiomeComponent, MapInitEvent>(OnBiomeMapInit);
         _configManager.OnValueChanged(CVars.NetMaxUpdateRange, SetLoadRange, true);
     }
@@ -50,9 +51,15 @@ public sealed class BiomeSystem : SharedBiomeSystem
         _loadArea = new Box2(-_loadRange, -_loadRange, _loadRange, _loadRange);
     }
 
+    private void OnBiomeStartup(EntityUid uid, BiomeComponent component, ComponentStartup args)
+    {
+        component.Noise.SetSeed(component.Seed);
+    }
+
     private void OnBiomeMapInit(EntityUid uid, BiomeComponent component, MapInitEvent args)
     {
         component.Seed = _random.Next();
+        component.Noise.SetSeed(component.Seed);
         Dirty(component);
     }
 
@@ -97,7 +104,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
 
         while (loadBiomes.MoveNext(out var biome, out var grid))
         {
-            var noise = new FastNoise(biome.Seed);
+            var noise = biome.Noise;
             var gridUid = grid.Owner;
 
             // Load new chunks
@@ -124,7 +131,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
         BiomeComponent component,
         EntityUid gridUid,
         MapGridComponent grid,
-        FastNoise noise,
+        FastNoiseLite noise,
         EntityQuery<TransformComponent> xformQuery)
     {
         var active = _activeChunks[component];
@@ -147,7 +154,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
         EntityUid gridUid,
         MapGridComponent grid,
         Vector2i chunk,
-        FastNoise noise,
+        FastNoiseLite noise,
         BiomePrototype prototype,
         List<(Vector2i, Tile)> tiles,
         EntityQuery<TransformComponent> xformQuery)
@@ -252,7 +259,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
         }
     }
 
-    private void UnloadChunks(BiomeComponent component, EntityUid gridUid, MapGridComponent grid, FastNoise noise)
+    private void UnloadChunks(BiomeComponent component, EntityUid gridUid, MapGridComponent grid, FastNoiseLite noise)
     {
         var active = _activeChunks[component];
         List<(Vector2i, Tile)>? tiles = null;
@@ -268,7 +275,7 @@ public sealed class BiomeSystem : SharedBiomeSystem
         }
     }
 
-    private void UnloadChunk(BiomeComponent component, EntityUid gridUid, MapGridComponent grid, Vector2i chunk, FastNoise noise, List<(Vector2i, Tile)> tiles)
+    private void UnloadChunk(BiomeComponent component, EntityUid gridUid, MapGridComponent grid, Vector2i chunk, FastNoiseLite noise, List<(Vector2i, Tile)> tiles)
     {
         // Reverse order to loading
         var prototype = ProtoManager.Index<BiomePrototype>(component.BiomePrototype);
index a1c7b5af74e523965800269515e5f19fa1ba42cf..3ff5425c74c919b7e9b67d77a36484b4851aa025 100644 (file)
@@ -14,7 +14,7 @@ namespace Content.Server.Pinpointer
         {
             base.Initialize();
             SubscribeLocalEvent<PinpointerComponent, ActivateInWorldEvent>(OnActivate);
-            SubscribeLocalEvent<HyperspaceJumpCompletedEvent>(OnLocateTarget);
+            SubscribeLocalEvent<FTLCompletedEvent>(OnLocateTarget);
         }
 
         private void OnActivate(EntityUid uid, PinpointerComponent component, ActivateInWorldEvent args)
@@ -23,7 +23,7 @@ namespace Content.Server.Pinpointer
             LocateTarget(uid, component);
         }
 
-        private void OnLocateTarget(HyperspaceJumpCompletedEvent ev)
+        private void OnLocateTarget(ref FTLCompletedEvent ev)
         {
             // This feels kind of expensive, but it only happens once per hyperspace jump
 
diff --git a/Content.Server/Procedural/DungeonAtlasTemplateComponent.cs b/Content.Server/Procedural/DungeonAtlasTemplateComponent.cs
new file mode 100644 (file)
index 0000000..188cad2
--- /dev/null
@@ -0,0 +1,13 @@
+using Robust.Shared.Utility;
+
+namespace Content.Server.Procedural;
+
+/// <summary>
+/// Added to pre-loaded maps for dungeon templates.
+/// </summary>
+[RegisterComponent]
+public sealed class DungeonAtlasTemplateComponent : Component
+{
+    [DataField("path", required: true)]
+    public ResourcePath? Path;
+}
diff --git a/Content.Server/Procedural/DungeonJob.Generator.cs b/Content.Server/Procedural/DungeonJob.Generator.cs
new file mode 100644 (file)
index 0000000..f9b8f82
--- /dev/null
@@ -0,0 +1,429 @@
+using System.Threading.Tasks;
+using Content.Shared.Decals;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.DungeonGenerators;
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Random;
+using Robust.Shared.Utility;
+
+namespace Content.Server.Procedural;
+
+public sealed partial class DungeonJob
+{
+    private async Task<Dungeon> GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid gridUid, MapGridComponent grid, int seed)
+    {
+        var random = new Random(seed);
+        var preset = prefab.Presets[random.Next(prefab.Presets.Count)];
+        var gen = _prototype.Index<DungeonPresetPrototype>(preset);
+
+        var dungeonRotation = _dungeon.GetDungeonRotation(seed);
+        var dungeonTransform = Matrix3.CreateTransform(_position, dungeonRotation);
+        var roomPackProtos = new Dictionary<Vector2i, List<DungeonRoomPackPrototype>>();
+        var externalNodes = new Dictionary<DungeonRoomPackPrototype, HashSet<Vector2i>>();
+        var fallbackTile = new Tile(_tileDefManager[prefab.Tile].TileId);
+
+        foreach (var pack in _prototype.EnumeratePrototypes<DungeonRoomPackPrototype>())
+        {
+            var size = pack.Size;
+            var sizePacks = roomPackProtos.GetOrNew(size);
+            sizePacks.Add(pack);
+
+            // Determine external connections; these are only valid when adjacent to a room node.
+            // We use this later to determine which room packs connect to each other
+            var nodes = new HashSet<Vector2i>();
+            externalNodes.Add(pack, nodes);
+
+            foreach (var room in pack.Rooms)
+            {
+                var rator = new Box2iEdgeEnumerator(room, false);
+
+                while (rator.MoveNext(out var index))
+                {
+                    nodes.Add(index);
+                }
+            }
+        }
+
+        // Need to sort to make the RNG deterministic (at least without prototype changes).
+        foreach (var roomA in roomPackProtos.Values)
+        {
+            roomA.Sort((x, y) =>
+                string.Compare(x.ID, y.ID, StringComparison.Ordinal));
+        }
+
+        var roomProtos = new Dictionary<Vector2i, List<DungeonRoomPrototype>>();
+
+        foreach (var proto in _prototype.EnumeratePrototypes<DungeonRoomPrototype>())
+        {
+            var whitelisted = false;
+
+            foreach (var tag in prefab.RoomWhitelist)
+            {
+                if (proto.Tags.Contains(tag))
+                {
+                    whitelisted = true;
+                    break;
+                }
+            }
+
+            if (!whitelisted)
+                continue;
+
+            var size = proto.Size;
+            var sizeRooms = roomProtos.GetOrNew(size);
+            sizeRooms.Add(proto);
+        }
+
+        foreach (var roomA in roomProtos.Values)
+        {
+            roomA.Sort((x, y) =>
+                string.Compare(x.ID, y.ID, StringComparison.Ordinal));
+        }
+
+        // First we gather all of the edges for each roompack in the preset
+        // This allows us to determine which ones should connect from being adjacent
+        var edges = new HashSet<Vector2i>[gen.RoomPacks.Count];
+
+        for (var i = 0; i < gen.RoomPacks.Count; i++)
+        {
+            var pack = gen.RoomPacks[i];
+            var nodes = new HashSet<Vector2i>(pack.Width + 2 + pack.Height);
+
+            var rator = new Box2iEdgeEnumerator(pack, false);
+
+            while (rator.MoveNext(out var index))
+            {
+                nodes.Add(index);
+            }
+
+            edges[i] = nodes;
+        }
+
+        // Build up edge groups between each pack.
+        var connections = new Dictionary<int, Dictionary<int, HashSet<Vector2i>>>();
+
+        for (var i = 0; i < edges.Length; i++)
+        {
+            var nodes = edges[i];
+            var nodeConnections = connections.GetOrNew(i);
+
+            for (var j = i + 1; j < edges.Length; j++)
+            {
+                var otherNodes = edges[j];
+                var intersect = new HashSet<Vector2i>(nodes);
+
+                intersect.IntersectWith(otherNodes);
+
+                if (intersect.Count == 0)
+                    continue;
+
+                nodeConnections[j] = intersect;
+                var otherNodeConnections = connections.GetOrNew(j);
+                otherNodeConnections[i] = intersect;
+            }
+        }
+
+        var tiles = new List<(Vector2i, Tile)>();
+        var dungeon = new Dungeon();
+        var availablePacks = new List<DungeonRoomPackPrototype>();
+        var chosenPacks = new DungeonRoomPackPrototype?[gen.RoomPacks.Count];
+        var packTransforms = new Matrix3[gen.RoomPacks.Count];
+        var packRotations = new Angle[gen.RoomPacks.Count];
+        var rotatedPackNodes = new HashSet<Vector2i>[gen.RoomPacks.Count];
+
+        // Actually pick the room packs and rooms
+        for (var i = 0; i < gen.RoomPacks.Count; i++)
+        {
+            var bounds = gen.RoomPacks[i];
+            var dimensions = new Vector2i(bounds.Width, bounds.Height);
+
+            // Try every pack rotation
+            if (roomPackProtos.TryGetValue(dimensions, out var roomPacks))
+            {
+                availablePacks.AddRange(roomPacks);
+            }
+
+            // Try rotated versions if there are any.
+            if (dimensions.X != dimensions.Y)
+            {
+                var rotatedDimensions = new Vector2i(dimensions.Y, dimensions.X);
+
+                if (roomPackProtos.TryGetValue(rotatedDimensions, out roomPacks))
+                {
+                    availablePacks.AddRange(roomPacks);
+                }
+            }
+
+            // Iterate every pack
+            // To be valid it needs its edge nodes to overlap with every edge group
+            var external = connections[i];
+
+            random.Shuffle(availablePacks);
+            Matrix3 packTransform = default!;
+            var found = false;
+            DungeonRoomPackPrototype pack = default!;
+
+            foreach (var aPack in availablePacks)
+            {
+                var aExternal = externalNodes[aPack];
+
+                for (var j = 0; j < 4; j++)
+                {
+                    var dir = (DirectionFlag) Math.Pow(2, j);
+                    Vector2i aPackDimensions;
+
+                    if ((dir & (DirectionFlag.East | DirectionFlag.West)) != 0x0)
+                    {
+                        aPackDimensions = new Vector2i(aPack.Size.Y, aPack.Size.X);
+                    }
+                    else
+                    {
+                        aPackDimensions = aPack.Size;
+                    }
+
+                    // Rotation doesn't match.
+                    if (aPackDimensions != bounds.Size)
+                        continue;
+
+                    found = true;
+                    var rotatedNodes = new HashSet<Vector2i>(aExternal.Count);
+                    var aRotation = dir.AsDir().ToAngle();
+
+                    // Get the external nodes in terms of the dungeon layout
+                    // (i.e. rotated if necessary + translated to the room position)
+                    foreach (var node in aExternal)
+                    {
+                        // Get the node in pack terms (offset from center), then rotate it
+                        // Afterwards we offset it by where the pack is supposed to be in world terms.
+                        var rotated = aRotation.RotateVec((Vector2) node + grid.TileSize / 2f - aPack.Size / 2f);
+                        rotatedNodes.Add((rotated + bounds.Center).Floored());
+                    }
+
+                    foreach (var group in external.Values)
+                    {
+                        if (rotatedNodes.Overlaps(group))
+                            continue;
+
+                        found = false;
+                        break;
+                    }
+
+                    if (!found)
+                    {
+                        continue;
+                    }
+
+                    // Use this pack
+                    packTransform = Matrix3.CreateTransform(bounds.Center, aRotation);
+                    packRotations[i] = aRotation;
+                    rotatedPackNodes[i] = rotatedNodes;
+                    pack = aPack;
+                    break;
+                }
+
+                if (found)
+                    break;
+            }
+
+            availablePacks.Clear();
+
+            // Oop
+            if (!found)
+            {
+                continue;
+            }
+
+            // If we're not the first pack then connect to our edges.
+            chosenPacks[i] = pack;
+            packTransforms[i] = packTransform;
+        }
+
+        // Then for overlaps choose either 1x1 / 3x1
+        // Pick a random tile for it and then expand outwards as relevant (weighted towards middle?)
+
+        for (var i = 0; i < chosenPacks.Length; i++)
+        {
+            var pack = chosenPacks[i]!;
+            var packTransform = packTransforms[i];
+            var packRotation = packRotations[i];
+
+            // Actual spawn cud here.
+            // Pickout the room pack template to get the room dimensions we need.
+            // TODO: Need to be able to load entities on top of other entities but das a lot of effo
+            var packCenter = (Vector2) pack.Size / 2;
+
+            foreach (var roomSize in pack.Rooms)
+            {
+                var roomDimensions = new Vector2i(roomSize.Width, roomSize.Height);
+                Angle roomRotation = Angle.Zero;
+                Matrix3 matty;
+
+                if (!roomProtos.TryGetValue(roomDimensions, out var roomProto))
+                {
+                    roomDimensions = new Vector2i(roomDimensions.Y, roomDimensions.X);
+
+                    if (!roomProtos.TryGetValue(roomDimensions, out roomProto))
+                    {
+                        Matrix3.Multiply(packTransform, dungeonTransform, out matty);
+
+                        for (var x = roomSize.Left; x < roomSize.Right; x++)
+                        {
+                            for (var y = roomSize.Bottom; y < roomSize.Top; y++)
+                            {
+                                var index = matty.Transform(new Vector2(x, y) + grid.TileSize / 2f - packCenter).Floored();
+                                tiles.Add((index, new Tile(_tileDefManager["FloorPlanetGrass"].TileId)));
+                            }
+                        }
+
+                        grid.SetTiles(tiles);
+                        tiles.Clear();
+                        Logger.Error($"Unable to find room variant for {roomDimensions}, leaving empty.");
+                        continue;
+                    }
+
+                    roomRotation = new Angle(Math.PI / 2);
+                    Logger.Debug($"Using rotated variant for room");
+                }
+
+                if (roomDimensions.X == roomDimensions.Y)
+                {
+                    // Give it a random rotation
+                    roomRotation = random.Next(4) * Math.PI / 2;
+                }
+                else if (random.Next(2) == 1)
+                {
+                    roomRotation += Math.PI;
+                }
+
+                var roomTransform = Matrix3.CreateTransform(roomSize.Center - packCenter, roomRotation);
+                var finalRoomRotation = roomRotation + packRotation + dungeonRotation;
+
+                Matrix3.Multiply(roomTransform, packTransform, out matty);
+                Matrix3.Multiply(matty, dungeonTransform, out var dungeonMatty);
+
+                var room = roomProto[random.Next(roomProto.Count)];
+                var roomMap = _dungeon.GetOrCreateTemplate(room);
+                var templateMapUid = _mapManager.GetMapEntityId(roomMap);
+                var templateGrid = _entManager.GetComponent<MapGridComponent>(templateMapUid);
+                var roomCenter = (room.Offset + room.Size / 2f) * grid.TileSize;
+                var roomTiles = new HashSet<Vector2i>(room.Size.X * room.Size.Y);
+
+                // Load tiles
+                for (var x = 0; x < room.Size.X; x++)
+                {
+                    for (var y = 0; y < room.Size.Y; y++)
+                    {
+                        var indices = new Vector2i(x + room.Offset.X, y + room.Offset.Y);
+                        var tileRef = templateGrid.GetTileRef(indices);
+
+                        var tilePos = dungeonMatty.Transform((Vector2) indices + grid.TileSize / 2f - roomCenter);
+                        var rounded = tilePos.Floored();
+                        tiles.Add((rounded, tileRef.Tile));
+                        roomTiles.Add(rounded);
+                    }
+                }
+
+                var center = Vector2.Zero;
+
+                foreach (var tile in roomTiles)
+                {
+                    center += ((Vector2) tile + grid.TileSize / 2f);
+                }
+
+                center /= roomTiles.Count;
+
+                dungeon.Rooms.Add(new DungeonRoom(roomTiles, center));
+                grid.SetTiles(tiles);
+                tiles.Clear();
+                var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
+                var metaQuery = _entManager.GetEntityQuery<MetaDataComponent>();
+
+                // Load entities
+                // TODO: I don't think engine supports full entity copying so we do this piece of shit.
+                var bounds = new Box2(room.Offset, room.Offset + room.Size);
+
+                foreach (var templateEnt in _lookup.GetEntitiesIntersecting(templateMapUid, bounds, LookupFlags.Uncontained))
+                {
+                    var templateXform = xformQuery.GetComponent(templateEnt);
+                    var childPos = dungeonMatty.Transform(templateXform.LocalPosition - roomCenter);
+                    var childRot = templateXform.LocalRotation + finalRoomRotation;
+                    var protoId = metaQuery.GetComponent(templateEnt).EntityPrototype?.ID;
+
+                    // TODO: Copy the templated entity as is with serv
+                    var ent = _entManager.SpawnEntity(protoId,
+                        new EntityCoordinates(gridUid, childPos));
+
+                    var childXform = xformQuery.GetComponent(ent);
+                    var anchored = templateXform.Anchored;
+                    _transform.SetLocalRotation(ent, childRot, childXform);
+
+                    // If the templated entity was anchored then anchor us too.
+                    if (anchored && !childXform.Anchored)
+                        _transform.AnchorEntity(ent, childXform, grid);
+                    else if (!anchored && childXform.Anchored)
+                        _transform.Unanchor(ent, childXform);
+                }
+
+                // Load decals
+                if (_entManager.TryGetComponent<DecalGridComponent>(templateMapUid, out var loadedDecals))
+                {
+                    _entManager.EnsureComponent<DecalGridComponent>(gridUid);
+
+                    foreach (var (_, decal) in _decals.GetDecalsIntersecting(templateMapUid, bounds, loadedDecals))
+                    {
+                        // Offset by 0.5 because decals are offset from bot-left corner
+                        // So we convert it to center of tile then convert it back again after transform.
+                        // Do these shenanigans because 32x32 decals assume as they are centered on bottom-left of tiles.
+                        var position = dungeonMatty.Transform(decal.Coordinates + 0.5f - roomCenter);
+                        position -= 0.5f;
+
+                        // Umm uhh I love decals so uhhhh idk what to do about this
+                        var angle = (decal.Angle + finalRoomRotation).Reduced();
+
+                        // Adjust because 32x32 so we can't rotate cleanly
+                        // Yeah idk about the uhh vectors here but it looked visually okay but they may still be off by 1.
+                        // Also EyeManager.PixelsPerMeter should really be in shared.
+                        if (angle.Equals(Math.PI))
+                        {
+                            position += new Vector2(-1f / 32f, 1f / 32f);
+                        }
+                        else if (angle.Equals(Math.PI * 1.5))
+                        {
+                            position += new Vector2(-1f / 32f, 0f);
+                        }
+                        else if (angle.Equals(Math.PI / 2f))
+                        {
+                            position += new Vector2(0f, 1f / 32f);
+                        }
+
+                        var tilePos = position.Floored();
+
+                        // Fallback because uhhhhhhhh yeah, a corner tile might look valid on the original
+                        // but place 1 nanometre off grid and fail the add.
+                        if (!grid.TryGetTileRef(tilePos, out var tileRef) || tileRef.Tile.IsEmpty)
+                        {
+                            grid.SetTile(tilePos, fallbackTile);
+                        }
+
+                        var result = _decals.TryAddDecal(
+                            decal.Id,
+                            new EntityCoordinates(gridUid, position),
+                            out _,
+                            decal.Color,
+                            angle,
+                            decal.ZIndex,
+                            decal.Cleanable);
+
+                        DebugTools.Assert(result);
+                    }
+                }
+
+                await SuspendIfOutOfTime();
+                ValidateResume();
+            }
+        }
+
+        return dungeon;
+    }
+}
diff --git a/Content.Server/Procedural/DungeonJob.PostGen.cs b/Content.Server/Procedural/DungeonJob.PostGen.cs
new file mode 100644 (file)
index 0000000..bf56873
--- /dev/null
@@ -0,0 +1,554 @@
+using System.Linq;
+using System.Threading.Tasks;
+using Content.Server.Light.Components;
+using Content.Shared.Physics;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.PostGeneration;
+using Content.Shared.Storage;
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Physics.Components;
+using Robust.Shared.Physics.Systems;
+using Robust.Shared.Random;
+using Robust.Shared.Utility;
+
+namespace Content.Server.Procedural;
+
+public sealed partial class DungeonJob
+{
+    /*
+     * Run after the main dungeon generation
+     */
+
+    private const int CollisionMask = (int) CollisionGroup.Impassable;
+    private const int CollisionLayer = (int) CollisionGroup.Impassable;
+
+    private async Task PostGen(BoundaryWallPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, Random random)
+    {
+        var tile = new Tile(_tileDefManager[gen.Tile].TileId);
+        var tiles = new List<(Vector2i Index, Tile Tile)>();
+
+        // Spawn wall outline
+        // - Tiles first
+        foreach (var room in dungeon.Rooms)
+        {
+            foreach (var index in room.Tiles)
+            {
+                for (var x = -1; x <= 1; x++)
+                {
+                    for (var y = -1; y <= 1; y++)
+                    {
+                        var neighbor = new Vector2i(x + index.X, y + index.Y);
+
+                        if (dungeon.RoomTiles.Contains(neighbor))
+                            continue;
+
+                        if (!_anchorable.TileFree(grid, neighbor, CollisionLayer, CollisionMask))
+                            continue;
+
+                        tiles.Add((neighbor, tile));
+                    }
+                }
+            }
+        }
+
+        grid.SetTiles(tiles);
+
+        // Double iteration coz we bulk set tiles for speed.
+        for (var i = 0; i < tiles.Count; i++)
+        {
+            var index = tiles[i];
+            if (!_anchorable.TileFree(grid, index.Index, CollisionLayer, CollisionMask))
+                continue;
+
+            // If no cardinal neighbors in dungeon then we're a corner.
+            var isCorner = false;
+
+            if (gen.CornerWall != null)
+            {
+                isCorner = true;
+
+                for (var x = -1; x <= 1; x++)
+                {
+                    for (var y = -1; y <= 1; y++)
+                    {
+                        if (x != 0 && y != 0)
+                        {
+                            continue;
+                        }
+
+                        var neighbor = new Vector2i(index.Index.X + x, index.Index.Y + y);
+
+                        if (dungeon.RoomTiles.Contains(neighbor))
+                        {
+                            isCorner = false;
+                            break;
+                        }
+                    }
+
+                    if (!isCorner)
+                        break;
+                }
+
+                if (isCorner)
+                    _entManager.SpawnEntity(gen.CornerWall, grid.GridTileToLocal(index.Index));
+            }
+
+            if (!isCorner)
+                _entManager.SpawnEntity(gen.Wall, grid.GridTileToLocal(index.Index));
+
+            if (i % 10 == 0)
+            {
+                await SuspendIfOutOfTime();
+                ValidateResume();
+            }
+        }
+    }
+
+    private async Task PostGen(EntrancePostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, Random random)
+    {
+        var rooms = new List<DungeonRoom>(dungeon.Rooms);
+        var roomTiles = new List<Vector2i>();
+        var tileData = new Tile(_tileDefManager[gen.Tile].TileId);
+        var count = gen.Count;
+
+        while (count > 0 && rooms.Count > 0)
+        {
+            var roomIndex = random.Next(rooms.Count);
+            var room = rooms[roomIndex];
+            rooms.RemoveAt(roomIndex);
+
+            // Move out 3 tiles in a direction away from center of the room
+            // If none of those intersect another tile it's probably external
+            // TODO: Maybe need to take top half of furthest rooms in case there's interior exits?
+            roomTiles.AddRange(room.Tiles);
+            random.Shuffle(roomTiles);
+
+            foreach (var tile in roomTiles)
+            {
+                // Check the interior node is at least accessible?
+                // Can't do anchored because it might be a locker or something.
+                // TODO: Better collision mask check
+                if (_lookup.GetEntitiesIntersecting(gridUid, tile, LookupFlags.Dynamic | LookupFlags.Static).Any())
+                    continue;
+
+                var direction = (tile - room.Center).ToAngle().GetCardinalDir().ToAngle().ToVec();
+                var isValid = true;
+
+                for (var j = 1; j < 4; j++)
+                {
+                    var neighbor = (tile + direction * j).Floored();
+
+                    // If it's an interior tile or blocked.
+                    if (dungeon.RoomTiles.Contains(neighbor) || _lookup.GetEntitiesIntersecting(gridUid, neighbor, LookupFlags.Dynamic | LookupFlags.Static).Any())
+                    {
+                        isValid = false;
+                        break;
+                    }
+                }
+
+                if (!isValid)
+                    continue;
+
+                var entrancePos = (tile + direction).Floored();
+
+                // Entrance wew
+                grid.SetTile(entrancePos, tileData);
+                ClearDoor(dungeon, grid, entrancePos);
+                var gridCoords = grid.GridTileToLocal(entrancePos);
+                // Need to offset the spawn to avoid spawning in the room.
+                _entManager.SpawnEntity(gen.Door, gridCoords);
+                count--;
+
+                // Clear out any biome tiles nearby to avoid blocking it
+                foreach (var nearTile in grid.GetTilesIntersecting(new Circle(gridCoords.Position, 1.5f), false))
+                {
+                    if (dungeon.RoomTiles.Contains(nearTile.GridIndices))
+                        continue;
+
+                    grid.SetTile(nearTile.GridIndices, tileData);
+                }
+
+                break;
+            }
+
+            roomTiles.Clear();
+        }
+    }
+
+    private async Task PostGen(ExternalWindowPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid,
+        Random random)
+    {
+        // Iterate every room with N chance to spawn windows on that wall per cardinal dir.
+        var chance = 0.25;
+        var distance = 10;
+
+        foreach (var room in dungeon.Rooms)
+        {
+            var validTiles = new List<Vector2i>();
+
+            for (var i = 0; i < 4; i++)
+            {
+                var dir = (DirectionFlag) Math.Pow(2, i);
+                var dirVec = dir.AsDir().ToIntVec();
+
+                foreach (var tile in room.Tiles)
+                {
+                    var tileAngle = ((Vector2) tile + grid.TileSize / 2f - room.Center).ToAngle();
+                    var roundedAngle = Math.Round(tileAngle.Theta / (Math.PI / 2)) * (Math.PI / 2);
+
+                    var tileVec = (Vector2i) new Angle(roundedAngle).ToVec().Rounded();
+
+                    if (!tileVec.Equals(dirVec))
+                        continue;
+
+                    var valid = true;
+
+                    for (var j = 1; j < distance; j++)
+                    {
+                        var edgeNeighbor = tile + dirVec * j;
+
+                        if (dungeon.RoomTiles.Contains(edgeNeighbor))
+                        {
+                            valid = false;
+                            break;
+                        }
+                    }
+
+                    if (!valid)
+                        continue;
+
+                    var windowTile = tile + dirVec;
+
+                    if (!_anchorable.TileFree(grid, windowTile, CollisionLayer, CollisionMask))
+                        continue;
+
+                    validTiles.Add(windowTile);
+                }
+
+                if (validTiles.Count == 0 || random.NextDouble() > chance)
+                    continue;
+
+                validTiles.Sort((x, y) => ((Vector2) x + grid.TileSize / 2f - room.Center).LengthSquared.CompareTo(((Vector2) y + grid.TileSize / 2f - room.Center).LengthSquared));
+
+                for (var j = 0; j < Math.Min(validTiles.Count, 3); j++)
+                {
+                    var tile = validTiles[j];
+                    var gridPos = grid.GridTileToLocal(tile);
+                    grid.SetTile(tile, new Tile(_tileDefManager[gen.Tile].TileId));
+
+                    foreach (var ent in gen.Entities)
+                    {
+                        _entManager.SpawnEntity(ent, gridPos);
+                    }
+                }
+
+                if (validTiles.Count > 0)
+                {
+                    await SuspendIfOutOfTime();
+                    ValidateResume();
+                }
+
+                validTiles.Clear();
+            }
+        }
+    }
+
+    /*
+     * You may be wondering why these are different.
+     * It's because for internals we want to force it as it looks nicer and not leave it up to chance.
+     */
+
+    // TODO: Can probably combine these a bit, their differences are in really annoying to pull out spots.
+
+    private async Task PostGen(InternalWindowPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid,
+        Random random)
+    {
+        // Iterate every room and check if there's a gap beyond it that leads to another room within N tiles
+        // If so then consider windows
+        var minDistance = 4;
+        var maxDistance = 6;
+
+        foreach (var room in dungeon.Rooms)
+        {
+            var validTiles = new List<Vector2i>();
+
+            for (var i = 0; i < 4; i++)
+            {
+                var dir = (DirectionFlag) Math.Pow(2, i);
+                var dirVec = dir.AsDir().ToIntVec();
+
+                foreach (var tile in room.Tiles)
+                {
+                    var tileAngle = ((Vector2) tile + grid.TileSize / 2f - room.Center).ToAngle();
+                    var roundedAngle = Math.Round(tileAngle.Theta / (Math.PI / 2)) * (Math.PI / 2);
+
+                    var tileVec = (Vector2i) new Angle(roundedAngle).ToVec().Rounded();
+
+                    if (!tileVec.Equals(dirVec))
+                        continue;
+
+                    var valid = false;
+
+                    for (var j = 1; j < maxDistance; j++)
+                    {
+                        var edgeNeighbor = tile + dirVec * j;
+
+                        if (dungeon.RoomTiles.Contains(edgeNeighbor))
+                        {
+                            if (j < minDistance)
+                            {
+                                valid = false;
+                            }
+                            else
+                            {
+                                valid = true;
+                            }
+
+                            break;
+                        }
+                    }
+
+                    if (!valid)
+                        continue;
+
+                    var windowTile = tile + dirVec;
+
+                    if (!_anchorable.TileFree(grid, windowTile, CollisionLayer, CollisionMask))
+                        continue;
+
+                    validTiles.Add(windowTile);
+                }
+
+                validTiles.Sort((x, y) => ((Vector2) x + grid.TileSize / 2f - room.Center).LengthSquared.CompareTo(((Vector2) y + grid.TileSize / 2f - room.Center).LengthSquared));
+
+                for (var j = 0; j < Math.Min(validTiles.Count, 3); j++)
+                {
+                    var tile = validTiles[j];
+                    var gridPos = grid.GridTileToLocal(tile);
+                    grid.SetTile(tile, new Tile(_tileDefManager[gen.Tile].TileId));
+
+                    foreach (var ent in gen.Entities)
+                    {
+                        _entManager.SpawnEntity(ent, gridPos);
+                    }
+                }
+
+                if (validTiles.Count > 0)
+                {
+                    await SuspendIfOutOfTime();
+                    ValidateResume();
+                }
+
+                validTiles.Clear();
+            }
+        }
+    }
+
+    private async Task PostGen(MiddleConnectionPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, Random random)
+    {
+        // TODO: Need a minimal spanning tree version tbh
+
+        // Grab all of the room bounds
+        // Then, work out connections between them
+        var roomBorders = new Dictionary<DungeonRoom, HashSet<Vector2i>>(dungeon.Rooms.Count);
+
+        foreach (var room in dungeon.Rooms)
+        {
+            var roomEdges = new HashSet<Vector2i>();
+
+            foreach (var index in room.Tiles)
+            {
+                for (var x = -1; x <= 1; x++)
+                {
+                    for (var y = -1; y <= 1; y++)
+                    {
+                        // Cardinals only
+                        if (x != 0 && y != 0 ||
+                            x == 0 && y == 0)
+                        {
+                            continue;
+                        }
+
+                        var neighbor = new Vector2i(index.X + x, index.Y + y);
+
+                        if (dungeon.RoomTiles.Contains(neighbor))
+                            continue;
+
+                        if (!_anchorable.TileFree(grid, neighbor, CollisionLayer, CollisionMask))
+                            continue;
+
+                        roomEdges.Add(neighbor);
+                    }
+                }
+            }
+
+            roomBorders.Add(room, roomEdges);
+        }
+
+        // Do pathfind from first room to work out graph.
+        // TODO: Optional loops
+
+        var roomConnections = new Dictionary<DungeonRoom, List<DungeonRoom>>();
+        var frontier = new Queue<DungeonRoom>();
+        frontier.Enqueue(dungeon.Rooms.First());
+        var tile = new Tile(_tileDefManager[gen.Tile].TileId);
+
+        foreach (var (room, border) in roomBorders)
+        {
+            var conns = roomConnections.GetOrNew(room);
+
+            foreach (var (otherRoom, otherBorders) in roomBorders)
+            {
+                if (room.Equals(otherRoom) ||
+                    conns.Contains(otherRoom))
+                {
+                    continue;
+                }
+
+                var flipp = new HashSet<Vector2i>(border);
+                flipp.IntersectWith(otherBorders);
+
+                if (flipp.Count == 0 ||
+                    gen.OverlapCount != -1 && flipp.Count != gen.OverlapCount)
+                    continue;
+
+                var center = Vector2.Zero;
+
+                foreach (var node in flipp)
+                {
+                    center += (Vector2) node + grid.TileSize / 2f;
+                }
+
+                center /= flipp.Count;
+                // Weight airlocks towards center more.
+                var nodeDistances = new List<(Vector2i Node, float Distance)>(flipp.Count);
+
+                foreach (var node in flipp)
+                {
+                    nodeDistances.Add((node, ((Vector2) node + grid.TileSize / 2f - center).LengthSquared));
+                }
+
+                nodeDistances.Sort((x, y) => x.Distance.CompareTo(y.Distance));
+
+                var width = gen.Count;
+
+                for (var i = 0; i < nodeDistances.Count; i++)
+                {
+                    var node = nodeDistances[i].Node;
+                    var gridPos = grid.GridTileToLocal(node);
+                    if (!_anchorable.TileFree(grid, node, CollisionLayer, CollisionMask))
+                        continue;
+
+                    width--;
+                    grid.SetTile(node, tile);
+
+                    if (gen.EdgeEntities != null && nodeDistances.Count - i <= 2)
+                    {
+                        foreach (var ent in gen.EdgeEntities)
+                        {
+                            _entManager.SpawnEntity(ent, gridPos);
+                        }
+                    }
+                    else
+                    {
+                        // Iterate neighbors and check for blockers, if so bulldoze
+                        ClearDoor(dungeon, grid, node);
+
+                        foreach (var ent in gen.Entities)
+                        {
+                            _entManager.SpawnEntity(ent, gridPos);
+                        }
+                    }
+
+                    if (width == 0)
+                        break;
+                }
+
+                conns.Add(otherRoom);
+                var otherConns = roomConnections.GetOrNew(otherRoom);
+                otherConns.Add(room);
+                await SuspendIfOutOfTime();
+                ValidateResume();
+            }
+        }
+    }
+
+    /// <summary>
+    /// Removes any unwanted obstacles around a door tile.
+    /// </summary>
+    private void ClearDoor(Dungeon dungeon, MapGridComponent grid, Vector2i indices, bool strict = false)
+    {
+        var flags = strict
+            ? LookupFlags.Dynamic | LookupFlags.Static | LookupFlags.StaticSundries
+            : LookupFlags.Dynamic | LookupFlags.Static;
+        var physicsQuery = _entManager.GetEntityQuery<PhysicsComponent>();
+
+        for (var x = -1; x <= 1; x++)
+        {
+            for (var y = -1; y <= 1; y++)
+            {
+                if (x != 0 && y != 0)
+                    continue;
+
+                var neighbor = new Vector2i(indices.X + x, indices.Y + y);
+
+                if (!dungeon.RoomTiles.Contains(neighbor))
+                    continue;
+
+                foreach (var ent in _lookup.GetEntitiesIntersecting(_gridUid, neighbor, flags))
+                {
+                    if (!physicsQuery.TryGetComponent(ent, out var physics) ||
+                        (CollisionMask & physics.CollisionLayer) == 0x0 &&
+                        (CollisionLayer & physics.CollisionMask) == 0x0)
+                    {
+                        continue;
+                    }
+
+                    _entManager.DeleteEntity(ent);
+                }
+            }
+        }
+    }
+
+    private async Task PostGen(WallMountPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid,
+        Random random)
+    {
+        var tileDef = new Tile(_tileDefManager[gen.Tile].TileId);
+        var checkedTiles = new HashSet<Vector2i>();
+
+        foreach (var room in dungeon.Rooms)
+        {
+            foreach (var tile in room.Tiles)
+            {
+                for (var x = -1; x <= 1; x++)
+                {
+                    for (var y = -1; y <= 1; y++)
+                    {
+                        if (x != 0 && y != 0)
+                        {
+                            continue;
+                        }
+
+                        var neighbor = new Vector2i(tile.X + x, tile.Y + y);
+
+                        // Occupado
+                        if (dungeon.RoomTiles.Contains(neighbor) || checkedTiles.Contains(neighbor) || !_anchorable.TileFree(grid, neighbor, CollisionLayer, CollisionMask))
+                            continue;
+
+                        if (!random.Prob(gen.Prob) || !checkedTiles.Add(neighbor))
+                            continue;
+
+                        grid.SetTile(neighbor, tileDef);
+                        var gridPos = grid.GridTileToLocal(neighbor);
+
+                        foreach (var ent in EntitySpawnCollection.GetSpawns(gen.Spawns, random))
+                        {
+                            _entManager.SpawnEntity(ent, gridPos);
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/Content.Server/Procedural/DungeonJob.cs b/Content.Server/Procedural/DungeonJob.cs
new file mode 100644 (file)
index 0000000..001f0ae
--- /dev/null
@@ -0,0 +1,139 @@
+using System.Threading;
+using System.Threading.Tasks;
+using Content.Server.Construction;
+using Content.Server.CPUJob.JobQueues;
+using Content.Server.Decals;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.DungeonGenerators;
+using Content.Shared.Procedural.PostGeneration;
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Procedural;
+
+public sealed partial class DungeonJob : Job<Dungeon>
+{
+    private readonly IEntityManager _entManager;
+    private readonly IMapManager _mapManager;
+    private readonly IPrototypeManager _prototype;
+    private readonly ITileDefinitionManager _tileDefManager;
+
+    private readonly AnchorableSystem _anchorable;
+    private readonly DecalSystem _decals;
+    private readonly DungeonSystem _dungeon;
+    private readonly EntityLookupSystem _lookup;
+    private readonly SharedTransformSystem _transform;
+
+    private readonly DungeonConfigPrototype _gen;
+    private readonly int _seed;
+    private readonly Vector2 _position;
+
+    private readonly MapGridComponent _grid;
+    private readonly EntityUid _gridUid;
+
+    private readonly ISawmill _sawmill;
+
+    public DungeonJob(
+        ISawmill sawmill,
+        double maxTime,
+        IEntityManager entManager,
+        IMapManager mapManager,
+        IPrototypeManager prototype,
+        ITileDefinitionManager tileDefManager,
+        AnchorableSystem anchorable,
+        DecalSystem decals,
+        DungeonSystem dungeon,
+        EntityLookupSystem lookup,
+        SharedTransformSystem transform,
+        DungeonConfigPrototype gen,
+        MapGridComponent grid,
+        EntityUid gridUid,
+        int seed,
+        Vector2 position,
+        CancellationToken cancellation = default) : base(maxTime, cancellation)
+    {
+        _sawmill = sawmill;
+        _entManager = entManager;
+        _mapManager = mapManager;
+        _prototype = prototype;
+        _tileDefManager = tileDefManager;
+
+        _anchorable = anchorable;
+        _decals = decals;
+        _dungeon = dungeon;
+        _lookup = lookup;
+        _transform = transform;
+
+        _gen = gen;
+        _grid = grid;
+        _gridUid = gridUid;
+        _seed = seed;
+        _position = position;
+    }
+
+    protected override async Task<Dungeon?> Process()
+    {
+        Dungeon dungeon;
+        _sawmill.Info($"Generating dungeon {_gen.ID} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}");
+
+        switch (_gen.Generator)
+        {
+            case PrefabDunGen prefab:
+                dungeon = await GeneratePrefabDungeon(prefab, _gridUid, _grid, _seed);
+                break;
+            default:
+                throw new NotImplementedException();
+        }
+
+        foreach (var room in dungeon.Rooms)
+        {
+            dungeon.RoomTiles.UnionWith(room.Tiles);
+        }
+
+        // To make it slightly more deterministic treat this RNG as separate ig.
+        var random = new Random(_seed);
+
+        foreach (var post in _gen.PostGeneration)
+        {
+            _sawmill.Debug($"Doing postgen {post.GetType()} for {_gen.ID} with seed {_seed}");
+
+            switch (post)
+            {
+                case MiddleConnectionPostGen dordor:
+                    await PostGen(dordor, dungeon, _gridUid, _grid, random);
+                    break;
+                case EntrancePostGen entrance:
+                    await PostGen(entrance, dungeon, _gridUid, _grid, random);
+                    break;
+                case ExternalWindowPostGen externalWindow:
+                    await PostGen(externalWindow, dungeon, _gridUid, _grid, random);
+                    break;
+                case InternalWindowPostGen internalWindow:
+                    await PostGen(internalWindow, dungeon, _gridUid, _grid, random);
+                    break;
+                case BoundaryWallPostGen boundary:
+                    await PostGen(boundary, dungeon, _gridUid, _grid, random);
+                    break;
+                case WallMountPostGen wall:
+                    await PostGen(wall, dungeon, _gridUid, _grid, random);
+                    break;
+                default:
+                    throw new NotImplementedException();
+            }
+
+            await SuspendIfOutOfTime();
+            ValidateResume();
+        }
+
+        return dungeon;
+    }
+
+    private bool ValidateResume()
+    {
+        if (_entManager.Deleted(_gridUid))
+            return false;
+
+        return true;
+    }
+}
diff --git a/Content.Server/Procedural/DungeonSystem.Commands.cs b/Content.Server/Procedural/DungeonSystem.Commands.cs
new file mode 100644 (file)
index 0000000..59fc864
--- /dev/null
@@ -0,0 +1,102 @@
+using System.Threading.Tasks;
+using Content.Server.Administration;
+using Content.Shared.Administration;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.DungeonGenerators;
+using Robust.Shared.Console;
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+
+namespace Content.Server.Procedural;
+
+public sealed partial class DungeonSystem
+{
+    /// <summary>
+    /// Generates a dungeon via command.
+    /// </summary>
+    [AdminCommand(AdminFlags.Fun)]
+    private async void GenerateDungeon(IConsoleShell shell, string argstr, string[] args)
+    {
+        if (args.Length < 4)
+        {
+            shell.WriteError("cmd-dungen-arg-count");
+            return;
+        }
+
+        if (!int.TryParse(args[0], out var mapInt))
+        {
+            shell.WriteError("cmd-dungen-map-parse");
+            return;
+        }
+
+        var mapId = new MapId(mapInt);
+        var mapUid = _mapManager.GetMapEntityId(mapId);
+
+        if (!TryComp<MapGridComponent>(mapUid, out var mapGrid))
+        {
+            shell.WriteError(Loc.GetString("cmd-dungen-mapgrid"));
+            return;
+        }
+
+        if (!_prototype.TryIndex<DungeonConfigPrototype>(args[1], out var dungeon))
+        {
+            shell.WriteError(Loc.GetString("cmd-dungen-config"));
+            return;
+        }
+
+        if (!int.TryParse(args[2], out var posX) || !int.TryParse(args[3], out var posY))
+        {
+            shell.WriteError(Loc.GetString("cmd-dungen-pos"));
+            return;
+        }
+
+        var position = new Vector2(posX, posY);
+        int seed;
+
+        if (args.Length >= 5)
+        {
+            if (!int.TryParse(args[4], out seed))
+            {
+                shell.WriteError(Loc.GetString("cmd-dungen-seed"));
+                return;
+            }
+        }
+        else
+        {
+            seed = new Random().Next();
+        }
+
+        shell.WriteLine(Loc.GetString("cmd-dungen-start", ("seed", seed)));
+        GenerateDungeon(dungeon, mapUid, mapGrid, position, seed);
+    }
+
+    private CompletionResult CompletionCallback(IConsoleShell shell, string[] args)
+    {
+        if (args.Length == 1)
+        {
+            return CompletionResult.FromHintOptions(CompletionHelper.MapIds(EntityManager), Loc.GetString("cmd-dungen-hint-map"));
+        }
+
+        if (args.Length == 2)
+        {
+            return CompletionResult.FromHintOptions(CompletionHelper.PrototypeIDs<DungeonConfigPrototype>(proto: _prototype), Loc.GetString("cmd-dungen-hint-config"));
+        }
+
+        if (args.Length == 3)
+        {
+            return CompletionResult.FromHint(Loc.GetString("cmd-dungen-hint-posx"));
+        }
+
+        if (args.Length == 4)
+        {
+            return CompletionResult.FromHint(Loc.GetString("cmd-dungen-hint-posy"));
+        }
+
+        if (args.Length == 5)
+        {
+            return CompletionResult.FromHint(Loc.GetString("cmd-dungen-hint-seed"));
+        }
+
+        return CompletionResult.Empty;
+    }
+}
diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs
new file mode 100644 (file)
index 0000000..7f2a5f3
--- /dev/null
@@ -0,0 +1,236 @@
+using System.Threading;
+using System.Threading.Tasks;
+using Content.Server.Construction;
+using Content.Server.CPUJob.JobQueues.Queues;
+using Content.Server.Decals;
+using Content.Server.GameTicking.Events;
+using Content.Shared.CCVar;
+using Content.Shared.Procedural;
+using Robust.Server.GameObjects;
+using Robust.Shared.Configuration;
+using Robust.Shared.Console;
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Procedural;
+
+public sealed partial class DungeonSystem : EntitySystem
+{
+    [Dependency] private readonly IConfigurationManager _configManager = default!;
+    [Dependency] private readonly IConsoleHost _console = default!;
+    [Dependency] private readonly IMapManager _mapManager = default!;
+    [Dependency] private readonly IPrototypeManager _prototype = default!;
+    [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
+    [Dependency] private readonly AnchorableSystem _anchorable = default!;
+    [Dependency] private readonly DecalSystem _decals = default!;
+    [Dependency] private readonly EntityLookupSystem _lookup = default!;
+    [Dependency] private readonly MapLoaderSystem _loader = default!;
+    [Dependency] private readonly SharedTransformSystem _transform = default!;
+
+    private ISawmill _sawmill = default!;
+
+    private const double DungeonJobTime = 0.005;
+
+    private readonly JobQueue _dungeonJobQueue = new(DungeonJobTime);
+    private readonly Dictionary<DungeonJob, CancellationTokenSource> _dungeonJobs = new();
+
+    public override void Initialize()
+    {
+        base.Initialize();
+        _sawmill = Logger.GetSawmill("dungen");
+        _console.RegisterCommand("dungen", Loc.GetString("cmd-dungen-desc"), Loc.GetString("cmd-dungen-help"), GenerateDungeon, CompletionCallback);
+        _prototype.PrototypesReloaded += PrototypeReload;
+        SubscribeLocalEvent<RoundStartingEvent>(OnRoundStart);
+    }
+
+    public override void Update(float frameTime)
+    {
+        base.Update(frameTime);
+        _dungeonJobQueue.Process();
+    }
+
+    private void OnRoundStart(RoundStartingEvent ev)
+    {
+        foreach (var token in _dungeonJobs.Values)
+        {
+            token.Cancel();
+        }
+
+        _dungeonJobs.Clear();
+        var query = AllEntityQuery<DungeonAtlasTemplateComponent>();
+
+        while (query.MoveNext(out var uid, out _))
+        {
+            QueueDel(uid);
+        }
+
+        if (!_configManager.GetCVar(CCVars.ProcgenPreload))
+            return;
+
+        // Force all templates to be setup.
+        foreach (var room in _prototype.EnumeratePrototypes<DungeonRoomPrototype>())
+        {
+            GetOrCreateTemplate(room);
+        }
+    }
+
+    public override void Shutdown()
+    {
+        base.Shutdown();
+        _prototype.PrototypesReloaded -= PrototypeReload;
+
+        foreach (var token in _dungeonJobs.Values)
+        {
+            token.Cancel();
+        }
+
+        _dungeonJobs.Clear();
+    }
+
+    private void PrototypeReload(PrototypesReloadedEventArgs obj)
+    {
+        if (!obj.ByType.TryGetValue(typeof(DungeonRoomPrototype), out var rooms))
+        {
+            return;
+        }
+
+        foreach (var proto in rooms.Modified.Values)
+        {
+            var roomProto = (DungeonRoomPrototype) proto;
+            var query = AllEntityQuery<DungeonAtlasTemplateComponent>();
+
+            while (query.MoveNext(out var uid, out var comp))
+            {
+                if (!roomProto.AtlasPath.Equals(comp.Path))
+                    continue;
+
+                QueueDel(uid);
+                break;
+            }
+        }
+
+        if (!_configManager.GetCVar(CCVars.ProcgenPreload))
+            return;
+
+        foreach (var proto in rooms.Modified.Values)
+        {
+            var roomProto = (DungeonRoomPrototype) proto;
+            var query = AllEntityQuery<DungeonAtlasTemplateComponent>();
+            var found = false;
+
+            while (query.MoveNext(out var comp))
+            {
+                if (!roomProto.AtlasPath.Equals(comp.Path))
+                    continue;
+
+                found = true;
+                break;
+            }
+
+            if (!found)
+            {
+                GetOrCreateTemplate(roomProto);
+            }
+        }
+    }
+
+    public MapId GetOrCreateTemplate(DungeonRoomPrototype proto)
+    {
+        var query = AllEntityQuery<DungeonAtlasTemplateComponent>();
+        DungeonAtlasTemplateComponent? comp;
+
+        while (query.MoveNext(out var uid, out comp))
+        {
+            // Exists
+            if (comp.Path?.Equals(proto.AtlasPath) == true)
+                return Transform(uid).MapID;
+        }
+
+        var mapId = _mapManager.CreateMap();
+        _loader.Load(mapId, proto.AtlasPath.ToString());
+        var mapUid = _mapManager.GetMapEntityId(mapId);
+        _mapManager.SetMapPaused(mapId, true);
+        comp = AddComp<DungeonAtlasTemplateComponent>(mapUid);
+        comp.Path = proto.AtlasPath;
+        return mapId;
+    }
+
+    public void GenerateDungeon(DungeonConfigPrototype gen,
+        EntityUid gridUid,
+        MapGridComponent grid,
+        Vector2 position,
+        int seed)
+    {
+        var cancelToken = new CancellationTokenSource();
+        var job = new DungeonJob(
+            _sawmill,
+            DungeonJobTime,
+            EntityManager,
+            _mapManager,
+            _prototype,
+            _tileDefManager,
+            _anchorable,
+            _decals,
+            this,
+            _lookup,
+            _transform,
+            gen,
+            grid,
+            gridUid,
+            seed,
+            position,
+            cancelToken.Token);
+
+        _dungeonJobs.Add(job, cancelToken);
+        _dungeonJobQueue.EnqueueJob(job);
+        job.Run();
+    }
+
+    public async Task<Dungeon> GenerateDungeonAsync(
+        DungeonConfigPrototype gen,
+        EntityUid gridUid,
+        MapGridComponent grid,
+        Vector2 position,
+        int seed)
+    {
+        var cancelToken = new CancellationTokenSource();
+        var job = new DungeonJob(
+            _sawmill,
+            DungeonJobTime,
+            EntityManager,
+            _mapManager,
+            _prototype,
+            _tileDefManager,
+            _anchorable,
+            _decals,
+            this,
+            _lookup,
+            _transform,
+            gen,
+            grid,
+            gridUid,
+            seed,
+            position,
+            cancelToken.Token);
+
+        _dungeonJobs.Add(job, cancelToken);
+        _dungeonJobQueue.EnqueueJob(job);
+        job.Run();
+        await job.AsTask;
+
+        if (job.Exception != null)
+        {
+            throw job.Exception;
+        }
+
+        return job.Result!;
+    }
+
+    public Angle GetDungeonRotation(int seed)
+    {
+        // Mask 0 | 1 for rotation seed
+        var dungeonRotationSeed = 3 & seed;
+        return Math.PI / 2 * dungeonRotationSeed;
+    }
+}
index 1f29dd6f0f74aec11165bb961cb4bfc0cfc2b66e..dc6a5e5f4f5e90321b3f660e6a1b2e9fcfd7cc98 100644 (file)
@@ -11,7 +11,7 @@ namespace Content.Server.Salvage
         public string ID { get; } = default!;
 
         /// <summary>
-        /// Relative directory path to the given map, i.e. `Maps/Salvage/test.yml`
+        /// Relative directory path to the given map, i.e. `Maps/Salvage/template.yml`
         /// </summary>
         [DataField("mapPath", required: true)]
         public ResourcePath MapPath { get; } = default!;
index eb91c42fe3b146422527e1d425ce5b4982b92502..b0ce24ddbaef2e8d44102832648a3a35a524719d 100644 (file)
@@ -16,29 +16,45 @@ using Robust.Shared.Prototypes;
 using Robust.Shared.Random;
 using Robust.Shared.Utility;
 using System.Linq;
+using Content.Server.Cargo.Systems;
+using Content.Server.NPC.Pathfinding;
+using Content.Server.Parallax;
+using Content.Server.Procedural;
+using Content.Server.Station.Systems;
+using Robust.Shared.Timing;
 
 namespace Content.Server.Salvage
 {
-    public sealed class SalvageSystem : EntitySystem
+    public sealed partial class SalvageSystem : SharedSalvageSystem
     {
+        [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+        [Dependency] private readonly IGameTiming _timing = default!;
         [Dependency] private readonly IMapManager _mapManager = default!;
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
-        [Dependency] private readonly IConfigurationManager _configurationManager = default!;
         [Dependency] private readonly IRobustRandom _random = default!;
+        [Dependency] private readonly BiomeSystem _biome = default!;
+        [Dependency] private readonly CargoSystem _cargo = default!;
+        [Dependency] private readonly DungeonSystem _dungeon = default!;
         [Dependency] private readonly MapLoaderSystem _map = default!;
+        [Dependency] private readonly PathfindingSystem _pathfinding = default!;
         [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
         [Dependency] private readonly RadioSystem _radioSystem = default!;
         [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
+        [Dependency] private readonly StationSystem _station = default!;
+        [Dependency] private readonly UserInterfaceSystem _ui = default!;
 
         private static readonly int SalvageLocationPlaceAttempts = 16;
 
         // TODO: This is probably not compatible with multi-station
         private readonly Dictionary<EntityUid, SalvageGridState> _salvageGridStates = new();
 
+        private ISawmill _sawmill = default!;
+
         public override void Initialize()
         {
             base.Initialize();
 
+            _sawmill = Logger.GetSawmill("salvage");
             SubscribeLocalEvent<SalvageMagnetComponent, InteractHandEvent>(OnInteractHand);
             SubscribeLocalEvent<SalvageMagnetComponent, ExaminedEvent>(OnExamined);
             SubscribeLocalEvent<SalvageMagnetComponent, ComponentShutdown>(OnMagnetRemoval);
similarity index 74%
rename from Content.Server/Shuttles/Events/HyperspaceJumpCompletedEvent.cs
rename to Content.Server/Shuttles/Events/FTLCompletedEvent.cs
index 4041d3e01c0db7938bdaa071c0f71906820f2341..6eb228fbd88dae71ae1cd918447d54d5b18abde3 100644 (file)
@@ -5,4 +5,5 @@ namespace Content.Server.Shuttles.Events;
 /// <summary>
 /// Raised when <see cref="ShuttleSystem.FasterThanLight"/> has completed FTL Travel.
 /// </summary>
-public sealed class HyperspaceJumpCompletedEvent: EntityEventArgs {}
+[ByRefEvent]
+public readonly record struct FTLCompletedEvent;
index fb4bda76e6cbdb9bf5ba6c5756477708bf50a272..94c65bf212ce193c56850a39768e62c86e875551 100644 (file)
@@ -46,6 +46,19 @@ namespace Content.Server.Shuttles.Systems
 
             SubscribeLocalEvent<PilotComponent, MoveEvent>(HandlePilotMove);
             SubscribeLocalEvent<PilotComponent, ComponentGetState>(OnGetState);
+
+            SubscribeLocalEvent<FTLDestinationComponent, ComponentStartup>(OnFtlDestStartup);
+            SubscribeLocalEvent<FTLDestinationComponent, ComponentShutdown>(OnFtlDestShutdown);
+        }
+
+        private void OnFtlDestStartup(EntityUid uid, FTLDestinationComponent component, ComponentStartup args)
+        {
+            RefreshShuttleConsoles();
+        }
+
+        private void OnFtlDestShutdown(EntityUid uid, FTLDestinationComponent component, ComponentShutdown args)
+        {
+            RefreshShuttleConsoles();
         }
 
         private void OnDestinationMessage(EntityUid uid, ShuttleConsoleComponent component, ShuttleConsoleDestinationMessage args)
@@ -81,7 +94,7 @@ namespace Content.Server.Shuttles.Systems
                 return;
             }
 
-            _shuttle.FTLTravel(shuttle, args.Destination, hyperspaceTime: _shuttle.TransitTime);
+            _shuttle.FTLTravel(shuttle, args.Destination);
         }
 
         private void OnDock(DockEvent ev)
@@ -259,7 +272,6 @@ namespace Content.Server.Shuttles.Systems
 
                     var canTravel = !locked &&
                                     comp.Enabled &&
-                                    !Paused(comp.Owner, meta) &&
                                     (!TryComp<FTLComponent>(comp.Owner, out var ftl) || ftl.State == FTLState.Cooldown);
 
                     // Can't travel to same map.
index 3136c76b9c68262092e46a1d4d97dc34bf377032..78191c64b3f55fe9beb9e10468a89be6888fa707 100644 (file)
@@ -16,6 +16,7 @@ using Content.Server.Shuttles.Events;
 using Content.Shared.Buckle.Components;
 using Content.Shared.Doors.Components;
 using Robust.Shared.Map.Components;
+using Robust.Shared.Physics;
 using Robust.Shared.Physics.Components;
 
 namespace Content.Server.Shuttles.Systems;
@@ -71,12 +72,6 @@ public sealed partial class ShuttleSystem
     private void InitializeFTL()
     {
         SubscribeLocalEvent<StationGridAddedEvent>(OnStationGridAdd);
-        SubscribeLocalEvent<FTLDestinationComponent, EntityPausedEvent>(OnDestinationPause);
-    }
-
-    private void OnDestinationPause(EntityUid uid, FTLDestinationComponent component, ref EntityPausedEvent args)
-    {
-        _console.RefreshShuttleConsoles();
     }
 
     private void OnStationGridAdd(StationGridAddedEvent ev)
@@ -216,7 +211,8 @@ public sealed partial class ShuttleSystem
 
             if (comp.Accumulator > 0f) continue;
 
-            var xform = Transform(comp.Owner);
+            var uid = comp.Owner;
+            var xform = Transform(uid);
             PhysicsComponent? body;
             ShuttleComponent? shuttle;
 
@@ -228,16 +224,17 @@ public sealed partial class ShuttleSystem
 
                     comp.State = FTLState.Travelling;
 
-                    var width = Comp<MapGridComponent>(comp.Owner).LocalAABB.Width;
+                    var width = Comp<MapGridComponent>(uid).LocalAABB.Width;
                     xform.Coordinates = new EntityCoordinates(_mapManager.GetMapEntityId(_hyperSpaceMap!.Value), new Vector2(_index + width / 2f, 0f));
                     xform.LocalRotation = Angle.Zero;
                     _index += width + Buffer;
                     comp.Accumulator += comp.TravelTime - DefaultArrivalTime;
 
-                    if (TryComp(comp.Owner, out body))
+                    if (TryComp(uid, out body))
                     {
-                        _physics.SetLinearVelocity(comp.Owner, new Vector2(0f, 20f), body: body);
-                        _physics.SetAngularVelocity(comp.Owner, 0f, body: body);
+                        Enable(uid, body);
+                        _physics.SetLinearVelocity(uid, new Vector2(0f, 20f), body: body);
+                        _physics.SetAngularVelocity(uid, 0f, body: body);
                         _physics.SetLinearDamping(body, 0f);
                         _physics.SetAngularDamping(body, 0f);
                     }
@@ -245,11 +242,11 @@ public sealed partial class ShuttleSystem
                     if (comp.TravelSound != null)
                     {
                         comp.TravelStream = SoundSystem.Play(comp.TravelSound.GetSound(),
-                            Filter.Pvs(comp.Owner, 4f, entityManager: EntityManager), comp.TravelSound.Params);
+                            Filter.Pvs(uid, 4f, entityManager: EntityManager), comp.TravelSound.Params);
                     }
 
-                    SetDockBolts(comp.Owner, true);
-                    _console.RefreshShuttleConsoles(comp.Owner);
+                    SetDockBolts(uid, true);
+                    _console.RefreshShuttleConsoles(uid);
                     break;
                 // Arriving, play effects
                 case FTLState.Travelling:
@@ -258,29 +255,22 @@ public sealed partial class ShuttleSystem
                     // TODO: Arrival effects
                     // For now we'll just use the ss13 bubbles but we can do fancier.
 
-                    if (TryComp(comp.Owner, out shuttle))
+                    if (TryComp(uid, out shuttle))
                     {
                         _thruster.DisableLinearThrusters(shuttle);
                         _thruster.EnableLinearThrustDirection(shuttle, DirectionFlag.South);
                     }
 
-                    _console.RefreshShuttleConsoles(comp.Owner);
+                    _console.RefreshShuttleConsoles(uid);
                     break;
                 // Arrived
                 case FTLState.Arriving:
                     DoTheDinosaur(xform);
-                    SetDockBolts(comp.Owner, false);
-                    SetDocks(comp.Owner, true);
-
-                    if (TryComp(comp.Owner, out body))
-                    {
-                        _physics.SetLinearVelocity(comp.Owner, Vector2.Zero, body: body);
-                        _physics.SetAngularVelocity(comp.Owner, 0f, body: body);
-                        _physics.SetLinearDamping(body, ShuttleLinearDamping);
-                        _physics.SetAngularDamping(body, ShuttleAngularDamping);
-                    }
+                    SetDockBolts(uid, false);
+                    SetDocks(uid, true);
 
-                    TryComp(comp.Owner, out shuttle);
+                    TryComp(uid, out shuttle);
+                    MapId mapId;
 
                     if (comp.TargetUid != null && shuttle != null)
                     {
@@ -288,10 +278,30 @@ public sealed partial class ShuttleSystem
                             TryFTLDock(shuttle, comp.TargetUid.Value);
                         else
                             TryFTLProximity(shuttle, comp.TargetUid.Value);
+
+                        mapId = Transform(comp.TargetUid.Value).MapID;
                     }
                     else
                     {
                         xform.Coordinates = comp.TargetCoordinates;
+                        mapId = comp.TargetCoordinates.GetMapId(EntityManager);
+                    }
+
+                    if (TryComp(uid, out body))
+                    {
+                        _physics.SetLinearVelocity(uid, Vector2.Zero, body: body);
+                        _physics.SetAngularVelocity(uid, 0f, body: body);
+
+                        // Disable shuttle if it's on a planet; unfortunately can't do this in parent change messages due
+                        // to event ordering and awake body shenanigans (at least for now).
+                        if (HasComp<MapGridComponent>(xform.MapUid))
+                        {
+                            Disable(uid, body);
+                        }
+                        else
+                        {
+                            Enable(uid, body);
+                        }
                     }
 
                     if (shuttle != null)
@@ -305,25 +315,28 @@ public sealed partial class ShuttleSystem
                         comp.TravelStream = null;
                     }
 
-                    SoundSystem.Play(_arrivalSound.GetSound(), Filter.Empty().AddInRange(Transform(comp.Owner).MapPosition, GetSoundRange(comp.Owner)), _arrivalSound.Params);
+                    SoundSystem.Play(_arrivalSound.GetSound(), Filter.Empty().AddInRange(Transform(uid).MapPosition, GetSoundRange(uid)), _arrivalSound.Params);
 
-                    if (TryComp<FTLDestinationComponent>(comp.Owner, out var dest))
+                    if (TryComp<FTLDestinationComponent>(uid, out var dest))
                     {
                         dest.Enabled = true;
                     }
 
                     comp.State = FTLState.Cooldown;
                     comp.Accumulator += FTLCooldown;
-                    _console.RefreshShuttleConsoles(comp.Owner);
-                    RaiseLocalEvent(new HyperspaceJumpCompletedEvent());
+                    _console.RefreshShuttleConsoles(uid);
+                    var mapUid = _mapManager.GetMapEntityId(mapId);
+                    _mapManager.SetMapPaused(mapId, false);
+                    var ftlEvent = new FTLCompletedEvent();
+                    RaiseLocalEvent(mapUid, ref ftlEvent, true);
                     break;
                 case FTLState.Cooldown:
-                    RemComp<FTLComponent>(comp.Owner);
-                    _console.RefreshShuttleConsoles(comp.Owner);
+                    RemComp<FTLComponent>(uid);
+                    _console.RefreshShuttleConsoles(uid);
                     break;
                 default:
-                    _sawmill.Error($"Found invalid FTL state {comp.State} for {comp.Owner}");
-                    RemComp<FTLComponent>(comp.Owner);
+                    _sawmill.Error($"Found invalid FTL state {comp.State} for {uid}");
+                    RemComp<FTLComponent>(uid);
                     break;
             }
         }
@@ -452,6 +465,7 @@ public sealed partial class ShuttleSystem
     public bool TryFTLProximity(ShuttleComponent component, EntityUid targetUid, TransformComponent? xform = null, TransformComponent? targetXform = null)
     {
         if (!Resolve(targetUid, ref targetXform) ||
+            targetXform.GridUid == null ||
             targetXform.MapUid == null ||
             !targetXform.MapUid.Value.IsValid() ||
             !Resolve(component.Owner, ref xform))
@@ -466,7 +480,7 @@ public sealed partial class ShuttleSystem
         // Spawn nearby.
         // We essentially expand the Box2 of the target area until nothing else is added then we know it's valid.
         // Can't just get an AABB of every grid as we may spawn very far away.
-        if (TryComp<MapGridComponent>(targetUid, out var targetGrid))
+        if (TryComp<MapGridComponent>(targetXform.GridUid, out var targetGrid))
         {
             targetLocalAABB = targetGrid.LocalAABB;
         }
@@ -477,7 +491,7 @@ public sealed partial class ShuttleSystem
 
         var targetAABB = _transform.GetWorldMatrix(targetXform, xformQuery)
             .TransformBox(targetLocalAABB).Enlarged(shuttleAABB.Size.Length);
-        var nearbyGrids = new HashSet<EntityUid>(1) { targetUid };
+        var nearbyGrids = new HashSet<EntityUid>(1) { targetXform.GridUid.Value };
         var iteration = 0;
         var lastCount = 1;
         var mapId = targetXform.MapID;
@@ -518,8 +532,7 @@ public sealed partial class ShuttleSystem
             break;
         }
 
-        var minRadius = (MathF.Max(targetAABB.Width, targetAABB.Height) + MathF.Max(shuttleAABB.Width, shuttleAABB.Height)) / 2f;
-        var spawnPos = targetAABB.Center + _random.NextVector2(minRadius, minRadius + 64f);
+        Vector2 spawnPos;
 
         if (TryComp<PhysicsComponent>(component.Owner, out var shuttleBody))
         {
@@ -527,8 +540,34 @@ public sealed partial class ShuttleSystem
             _physics.SetAngularVelocity(component.Owner, 0f, body: shuttleBody);
         }
 
+        // TODO: This is pretty crude for multiple landings.
+        if (nearbyGrids.Count > 1 || !HasComp<MapComponent>(targetXform.GridUid.Value))
+        {
+            var minRadius = (MathF.Max(targetAABB.Width, targetAABB.Height) + MathF.Max(shuttleAABB.Width, shuttleAABB.Height)) / 2f;
+            spawnPos = targetAABB.Center + _random.NextVector2(minRadius, minRadius + 64f);
+        }
+        else if (shuttleBody != null)
+        {
+            var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform, xformQuery);
+            var transform = new Transform(targetPos, targetRot);
+            spawnPos = Robust.Shared.Physics.Transform.Mul(transform, -shuttleBody.LocalCenter);
+        }
+        else
+        {
+            spawnPos = _transform.GetWorldPosition(targetXform, xformQuery);
+        }
+
         xform.Coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos);
-        xform.WorldRotation = _random.NextAngle();
+
+        if (!HasComp<MapComponent>(targetXform.GridUid.Value))
+        {
+            _transform.SetLocalRotation(xform, _random.NextAngle());
+        }
+        else
+        {
+            _transform.SetLocalRotation(xform, Angle.Zero);
+        }
+
         return true;
     }
 }
index 50d223f50ca60a909c6454c7e357ceeef8148628..708796067de04103fafa05dba2fc1b01c455ddb4 100644 (file)
@@ -1031,6 +1031,16 @@ namespace Content.Shared.CCVar
         public static readonly CVarDef<bool> BanHardwareIds =
             CVarDef.Create("ban.hardware_ids", true, CVar.SERVERONLY);
 
+        /*
+         * Procgen
+         */
+
+        /// <summary>
+        /// Should we pre-load all of the procgen atlasses.
+        /// </summary>
+        public static readonly CVarDef<bool> ProcgenPreload =
+            CVarDef.Create("procgen.preload", true, CVar.SERVERONLY);
+
         /*
          * Shuttles
          */
index 55829dd8d4a68e334abd9d7bfa767c4b4330d431..932654aa145d78819a32151e895c628a58bbf12f 100644 (file)
@@ -36,7 +36,6 @@ namespace Content.Shared.Movement.Systems
         [Dependency] protected readonly IGameTiming Timing = default!;
         [Dependency] private readonly IMapManager _mapManager = default!;
         [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
-        [Dependency] private readonly SharedBiomeSystem _biome = default!;
         [Dependency] private readonly InventorySystem _inventory = default!;
         [Dependency] private readonly SharedContainerSystem _container = default!;
         [Dependency] private readonly EntityLookupSystem _lookup = default!;
index eaed8a030d3368041fcb7114aeae3c5e88890fc0..ce9ac6c351b95aeb3e74bc110c6fdb5437f1d8c4 100644 (file)
@@ -1,4 +1,5 @@
 using Robust.Shared.GameStates;
+using Robust.Shared.Noise;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
 
 namespace Content.Shared.Parallax.Biomes;
@@ -6,6 +7,8 @@ namespace Content.Shared.Parallax.Biomes;
 [RegisterComponent, NetworkedComponent]
 public sealed class BiomeComponent : Component
 {
+    public FastNoiseLite Noise = new();
+
     [ViewVariables(VVAccess.ReadWrite), DataField("seed")]
     public int Seed;
 
@@ -36,4 +39,10 @@ public sealed class BiomeComponent : Component
     /// </summary>
     [DataField("loadedChunks")]
     public readonly HashSet<Vector2i> LoadedChunks = new();
+
+    /// <summary>
+    /// Are we currently in the process of generating?
+    /// Used to flag modified tiles without callers having to deal with it.
+    /// </summary>
+    public bool Generating = false;
 }
index 731efbc1f1636be8967be930710ec7be79d68ea1..430c8a1bdab6022e4deef0824b47ca80baf671dd 100644 (file)
@@ -4,7 +4,6 @@ using Robust.Shared.Noise;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
-using Robust.Shared.Utility;
 
 namespace Content.Shared.Parallax.Biomes;
 
@@ -13,6 +12,9 @@ public sealed class BiomePrototype : IPrototype
 {
     [IdDataField] public string ID { get; } = default!;
 
+    [DataField("desc")]
+    public string Description = string.Empty;
+
     [DataField("layers")]
     public List<IBiomeLayer> Layers = new();
 }
@@ -21,36 +23,24 @@ public sealed class BiomePrototype : IPrototype
 public interface IBiomeLayer
 {
     /// <summary>
-    /// Threshold for this layer to be present. If set to 0 forces it for every tile.
-    /// </summary>
-    float Threshold { get; }
-
-    /// <summary>
-    /// Offset the seed by the specified amount for this layer.
-    /// Useful if you have 2 similar layers but don't want them to match exactly.
+    /// Seed is used an offset from the relevant BiomeComponent's seed.
     /// </summary>
-    int SeedOffset { get; }
+    FastNoiseLite Noise { get; }
 
     /// <summary>
-    /// Frequency for noise: lower values create larger blobs.
+    /// Threshold for this layer to be present. If set to 0 forces it for every tile.
     /// </summary>
-    float Frequency { get; }
+    float Threshold { get; }
 }
 
 public sealed class BiomeTileLayer : IBiomeLayer
 {
+    [DataField("noise")] public FastNoiseLite Noise { get; } = new(0);
+
     /// <inheritdoc/>
     [DataField("threshold")]
     public float Threshold { get; } = 0.5f;
 
-    /// <inheritdoc/>
-    [DataField("seedOffset")]
-    public int SeedOffset { get; } = 0;
-
-    /// <inheritdoc/>
-    [DataField("frequency")]
-    public float Frequency { get; } = 0.1f;
-
     /// <summary>
     /// Which tile variants to use for this layer. Uses all of the tile's variants if none specified
     /// </summary>
@@ -84,13 +74,8 @@ public sealed class BiomeDecalLayer : IBiomeWorldLayer
     [DataField("divisions")]
     public float Divisions = 1f;
 
-    /// <inheritdoc/>
-    [DataField("seedOffset")]
-    public int SeedOffset { get; } = 0;
-
-    /// <inheritdoc/>
-    [DataField("frequency")]
-    public float Frequency { get; } = 0.25f;
+    [DataField("noise")]
+    public FastNoiseLite Noise { get; } = new(0);
 
     /// <inheritdoc/>
     [DataField("threshold")]
@@ -106,18 +91,12 @@ public sealed class BiomeEntityLayer : IBiomeWorldLayer
     [DataField("allowedTiles", customTypeSerializer:typeof(PrototypeIdListSerializer<ContentTileDefinition>))]
     public List<string> AllowedTiles { get; } = new();
 
+    [DataField("noise")] public FastNoiseLite Noise { get; } = new(0);
+
     /// <inheritdoc/>
     [DataField("threshold")]
     public float Threshold { get; } = 0.5f;
 
-    /// <inheritdoc/>
-    [DataField("seedOffset")]
-    public int SeedOffset { get; } = 0;
-
-    /// <inheritdoc/>
-    [DataField("frequency")]
-    public float Frequency { get; } = 0.1f;
-
     [DataField("entities", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
     public List<string> Entities = new();
 }
index 5cdba8f5ec8210e2662fcdd0cd340142e3aa8a62..f15286849a210fcd36d8a359ac090799f231e463 100644 (file)
@@ -1,8 +1,5 @@
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using Content.Shared.Decals;
 using Content.Shared.Maps;
-using Robust.Shared.Console;
 using Robust.Shared.GameStates;
 using Robust.Shared.Map;
 using Robust.Shared.Map.Components;
@@ -20,8 +17,6 @@ public abstract class SharedBiomeSystem : EntitySystem
 
     protected const byte ChunkSize = 8;
 
-    // TODO: After I wrote all of this FastNoiseLite got ported so this needs updating for that don't @ me
-
     public override void Initialize()
     {
         base.Initialize();
@@ -35,6 +30,8 @@ public abstract class SharedBiomeSystem : EntitySystem
             return;
 
         component.Seed = state.Seed;
+        component.BiomePrototype = state.Prototype;
+        component.Noise.SetSeed(component.Seed);
     }
 
     private void OnBiomeGetState(EntityUid uid, BiomeComponent component, ref ComponentGetState args)
@@ -86,9 +83,9 @@ public abstract class SharedBiomeSystem : EntitySystem
         throw new ArgumentOutOfRangeException();
     }
 
-    public bool TryGetBiomeTile(EntityUid uid, MapGridComponent grid, Vector2i indices, [NotNullWhen(true)] out Tile? tile)
+    public bool TryGetBiomeTile(EntityUid uid, MapGridComponent grid, FastNoiseLite noise, Vector2i indices, [NotNullWhen(true)] out Tile? tile)
     {
-        if (grid.TryGetTileRef(indices, out var tileRef))
+        if (grid.TryGetTileRef(indices, out var tileRef) && !tileRef.Tile.IsEmpty)
         {
             tile = tileRef.Tile;
             return true;
@@ -101,13 +98,13 @@ public abstract class SharedBiomeSystem : EntitySystem
         }
 
         return TryGetBiomeTile(indices, ProtoManager.Index<BiomePrototype>(biome.BiomePrototype),
-            new FastNoise(biome.Seed), grid, out tile);
+            biome.Noise, grid, out tile);
     }
 
     /// <summary>
     /// Tries to get the tile, real or otherwise, for the specified indices.
     /// </summary>
-    public bool TryGetBiomeTile(Vector2i indices, BiomePrototype prototype, FastNoise seed, MapGridComponent? grid, [NotNullWhen(true)] out Tile? tile)
+    public bool TryGetBiomeTile(Vector2i indices, BiomePrototype prototype, FastNoiseLite noise, MapGridComponent? grid, [NotNullWhen(true)] out Tile? tile)
     {
         if (grid?.TryGetTileRef(indices, out var tileRef) == true && !tileRef.Tile.IsEmpty)
         {
@@ -115,7 +112,7 @@ public abstract class SharedBiomeSystem : EntitySystem
             return true;
         }
 
-        var oldFrequency = seed.GetFrequency();
+        var oldSeed = noise.GetSeed();
 
         for (var i = prototype.Layers.Count - 1; i >= 0; i--)
         {
@@ -124,24 +121,56 @@ public abstract class SharedBiomeSystem : EntitySystem
             if (layer is not BiomeTileLayer tileLayer)
                 continue;
 
-            seed.SetFrequency(tileLayer.Frequency);
+            SetNoise(noise, oldSeed, layer.Noise);
 
-            if (TryGetTile(indices, seed, tileLayer.Threshold, ProtoManager.Index<ContentTileDefinition>(tileLayer.Tile), tileLayer.Variants, out tile))
+            if (TryGetTile(indices, noise, tileLayer.Threshold, ProtoManager.Index<ContentTileDefinition>(tileLayer.Tile), tileLayer.Variants, out tile))
             {
-                seed.SetFrequency(oldFrequency);
+                noise.SetSeed(oldSeed);
                 return true;
             }
         }
 
-        seed.SetFrequency(oldFrequency);
+        noise.SetSeed(oldSeed);
         tile = null;
         return false;
     }
 
+    /// <summary>
+    /// Gets the underlying biome tile, ignoring any existing tile that may be there.
+    /// </summary>
+    private bool TryGetTile(Vector2i indices, FastNoiseLite seed, float threshold, ContentTileDefinition tileDef, List<byte>? variants, [NotNullWhen(true)] out Tile? tile)
+    {
+        var found = seed.GetNoise(indices.X, indices.Y);
+
+        if (found < threshold)
+        {
+            tile = null;
+            return false;
+        }
+
+        byte variant = 0;
+        var variantCount = variants?.Count ?? tileDef.Variants;
+
+        // Pick a variant tile if they're available as well
+        if (variantCount > 1)
+        {
+            var variantValue = (seed.GetNoise(indices.X * 8, indices.Y * 8, variantCount) + 1f) / 2f;
+            variant = (byte) Pick(variantCount, variantValue);
+
+            if (variants != null)
+            {
+                variant = variants[variant];
+            }
+        }
+
+        tile = new Tile(tileDef.TileId, 0, variant);
+        return true;
+    }
+
     /// <summary>
     /// Tries to get the relevant entity for this tile.
     /// </summary>
-    protected bool TryGetEntity(Vector2i indices, BiomePrototype prototype, FastNoise noise, MapGridComponent grid,
+    protected bool TryGetEntity(Vector2i indices, BiomePrototype prototype, FastNoiseLite noise, MapGridComponent grid,
         [NotNullWhen(true)] out string? entity)
     {
         if (!TryGetBiomeTile(indices, prototype, noise, grid, out var tileRef))
@@ -151,13 +180,11 @@ public abstract class SharedBiomeSystem : EntitySystem
         }
 
         var tileId = TileDefManager[tileRef.Value.TypeId].ID;
-        var oldFrequency = noise.GetFrequency();
-        var seed = noise.GetSeed();
+        var oldSeed = noise.GetSeed();
 
         for (var i = prototype.Layers.Count - 1; i >= 0; i--)
         {
             var layer = prototype.Layers[i];
-            var offset = 0;
 
             // Decals might block entity so need to check if there's one in front of us.
             switch (layer)
@@ -166,38 +193,32 @@ public abstract class SharedBiomeSystem : EntitySystem
                     if (!worldLayer.AllowedTiles.Contains(tileId))
                         continue;
 
-                    offset = worldLayer.SeedOffset;
-                    noise.SetSeed(seed + offset);
-                    noise.SetFrequency(worldLayer.Frequency);
                     break;
                 default:
                     continue;
             }
 
-            var value = (noise.GetCellular(indices.X, indices.Y) + 1f) / 2f;
+            SetNoise(noise, oldSeed, layer.Noise);
+            var value = noise.GetNoise(indices.X, indices.Y);
 
             if (value < layer.Threshold)
             {
-                DebugTools.Assert(value is <= 1f and >= 0f);
                 continue;
             }
 
             if (layer is not BiomeEntityLayer biomeLayer)
             {
                 entity = null;
-                noise.SetFrequency(oldFrequency);
-                noise.SetSeed(seed);
+                noise.SetSeed(oldSeed);
                 return false;
             }
 
-            entity = Pick(biomeLayer.Entities, (noise.GetSimplex(indices.X, indices.Y) + 1f) / 2f);
-            noise.SetFrequency(oldFrequency);
-            noise.SetSeed(seed);
+            entity = Pick(biomeLayer.Entities, (noise.GetNoise(indices.X, indices.Y, i) + 1f) / 2f);
+            noise.SetSeed(oldSeed);
             return true;
         }
 
-        noise.SetFrequency(oldFrequency);
-        noise.SetSeed(seed);
+        noise.SetSeed(oldSeed);
         entity = null;
         return false;
     }
@@ -205,7 +226,7 @@ public abstract class SharedBiomeSystem : EntitySystem
     /// <summary>
     /// Tries to get the relevant decals for this tile.
     /// </summary>
-    public bool TryGetDecals(Vector2i indices, BiomePrototype prototype, FastNoise noise, MapGridComponent grid,
+    public bool TryGetDecals(Vector2i indices, BiomePrototype prototype, FastNoiseLite noise, MapGridComponent grid,
         [NotNullWhen(true)] out List<(string ID, Vector2 Position)>? decals)
     {
         if (!TryGetBiomeTile(indices, prototype, noise, grid, out var tileRef))
@@ -215,13 +236,11 @@ public abstract class SharedBiomeSystem : EntitySystem
         }
 
         var tileId = TileDefManager[tileRef.Value.TypeId].ID;
-        var oldFrequency = noise.GetFrequency();
-        var seed = noise.GetSeed();
+        var oldSeed = noise.GetSeed();
 
         for (var i = prototype.Layers.Count - 1; i >= 0; i--)
         {
             var layer = prototype.Layers[i];
-            var offset = 0;
 
             // Entities might block decal so need to check if there's one in front of us.
             switch (layer)
@@ -230,23 +249,21 @@ public abstract class SharedBiomeSystem : EntitySystem
                     if (!worldLayer.AllowedTiles.Contains(tileId))
                         continue;
 
-                    offset = worldLayer.SeedOffset;
-                    noise.SetSeed(seed + offset);
-                    noise.SetFrequency(worldLayer.Frequency);
                     break;
                 default:
                     continue;
             }
 
+            SetNoise(noise, oldSeed, layer.Noise);
+
             // Check if the other layer should even render, if not then keep going.
             if (layer is not BiomeDecalLayer decalLayer)
             {
-                if ((noise.GetCellular(indices.X, indices.Y) + 1f) / 2f < layer.Threshold)
+                if (noise.GetNoise(indices.X, indices.Y) < layer.Threshold)
                     continue;
 
                 decals = null;
-                noise.SetFrequency(oldFrequency);
-                noise.SetSeed(seed);
+                noise.SetSeed(oldSeed);
                 return false;
             }
 
@@ -257,65 +274,48 @@ public abstract class SharedBiomeSystem : EntitySystem
                 for (var y = 0; y < decalLayer.Divisions; y++)
                 {
                     var index = new Vector2(indices.X + x * 1f / decalLayer.Divisions, indices.Y + y * 1f / decalLayer.Divisions);
-                    var decalValue = (noise.GetCellular(index.X, index.Y) + 1f) / 2f;
+                    var decalValue = noise.GetNoise(index.X, index.Y);
 
                     if (decalValue < decalLayer.Threshold)
                         continue;
 
-                    DebugTools.Assert(decalValue is <= 1f and >= 0f);
-                    decals.Add((Pick(decalLayer.Decals, (noise.GetSimplex(index.X, index.Y) + 1f) / 2f), index));
+                    decals.Add((Pick(decalLayer.Decals, (noise.GetNoise(indices.X, indices.Y, x + y * decalLayer.Divisions) + 1f) / 2f), index));
                 }
             }
 
-            noise.SetFrequency(oldFrequency);
-            noise.SetSeed(seed);
-
             // Check other layers
             if (decals.Count == 0)
                 continue;
 
+            noise.SetSeed(oldSeed);
             return true;
         }
 
-        noise.SetFrequency(oldFrequency);
-        noise.SetSeed(seed);
+        noise.SetSeed(oldSeed);
         decals = null;
         return false;
     }
 
-    /// <summary>
-    /// Gets the underlying biome tile, ignoring any existing tile that may be there.
-    /// </summary>
-    public bool TryGetTile(Vector2i indices, FastNoise seed, float threshold, ContentTileDefinition tileDef, List<byte>? variants, [NotNullWhen(true)] out Tile? tile)
+    private void SetNoise(FastNoiseLite noise, int oldSeed, FastNoiseLite data)
     {
-        if (threshold > 0f)
-        {
-            var found = (seed.GetSimplexFractal(indices.X, indices.Y) + 1f) / 2f;
-
-            if (found < threshold)
-            {
-                tile = null;
-                return false;
-            }
-        }
+        // General
+        noise.SetSeed(oldSeed + data.GetSeed());
+        noise.SetFrequency(data.GetFrequency());
+        noise.SetNoiseType(data.GetNoiseType());
 
-        byte variant = 0;
-        var variantCount = variants?.Count ?? tileDef.Variants;
+        noise.GetRotationType3D();
 
-        // Pick a variant tile if they're available as well
-        if (variantCount > 1)
-        {
-            var variantValue = (seed.GetSimplex(indices.X * 2f, indices.Y * 2f) + 1f) / 2f;
-            variant = (byte) Pick(variantCount, variantValue);
+        // Fractal
+        noise.SetFractalType(data.GetFractalType());
+        noise.SetFractalOctaves(data.GetFractalOctaves());
+        noise.SetFractalLacunarity(data.GetFractalLacunarity());
 
-            if (variants != null)
-            {
-                variant = variants[variant];
-            }
-        }
+        // Cellular
+        noise.SetCellularDistanceFunction(data.GetCellularDistanceFunction());
+        noise.SetCellularReturnType(data.GetCellularReturnType());
+        noise.SetCellularJitter(data.GetCellularJitter());
 
-        tile = new Tile(tileDef.TileId, 0, variant);
-        return true;
+        // Domain warps require separate noise
     }
 
     [Serializable, NetSerializable]
diff --git a/Content.Shared/Procedural/Dungeon.cs b/Content.Shared/Procedural/Dungeon.cs
new file mode 100644 (file)
index 0000000..a1c51f6
--- /dev/null
@@ -0,0 +1,11 @@
+namespace Content.Shared.Procedural;
+
+public sealed class Dungeon
+{
+    public List<DungeonRoom> Rooms = new();
+
+    /// <summary>
+    /// Hashset of the tiles across all rooms.
+    /// </summary>
+    public HashSet<Vector2i> RoomTiles = new();
+}
diff --git a/Content.Shared/Procedural/DungeonConfigPrototype.cs b/Content.Shared/Procedural/DungeonConfigPrototype.cs
new file mode 100644 (file)
index 0000000..50de39c
--- /dev/null
@@ -0,0 +1,21 @@
+using Content.Shared.Procedural.DungeonGenerators;
+using Content.Shared.Procedural.PostGeneration;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Procedural;
+
+[Prototype("dungeonConfig")]
+public sealed class DungeonConfigPrototype : IPrototype
+{
+    [IdDataField]
+    public string ID { get; } = default!;
+
+    [DataField("generator", required: true)]
+    public IDunGen Generator = default!;
+
+    /// <summary>
+    /// Ran after the main dungeon is created.
+    /// </summary>
+    [DataField("postGeneration")]
+    public List<IPostDunGen> PostGeneration = new();
+}
diff --git a/Content.Shared/Procedural/DungeonGenerators/IDunGen.cs b/Content.Shared/Procedural/DungeonGenerators/IDunGen.cs
new file mode 100644 (file)
index 0000000..268402f
--- /dev/null
@@ -0,0 +1,7 @@
+namespace Content.Shared.Procedural.DungeonGenerators;
+
+[ImplicitDataDefinitionForInheritors]
+public interface IDunGen
+{
+
+}
diff --git a/Content.Shared/Procedural/DungeonGenerators/PrefabDunGen.cs b/Content.Shared/Procedural/DungeonGenerators/PrefabDunGen.cs
new file mode 100644 (file)
index 0000000..c0355fa
--- /dev/null
@@ -0,0 +1,30 @@
+using Content.Shared.Maps;
+using Content.Shared.Tag;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+
+namespace Content.Shared.Procedural.DungeonGenerators;
+
+/// <summary>
+/// Places rooms in pre-selected pack layouts. Chooses rooms from the specified whitelist.
+/// </summary>
+public sealed class PrefabDunGen : IDunGen
+{
+    /// <summary>
+    /// Rooms need to match any of these tags
+    /// </summary>
+    [DataField("roomWhitelist", customTypeSerializer:typeof(PrototypeIdListSerializer<TagPrototype>))]
+    public List<string> RoomWhitelist = new();
+
+    /// <summary>
+    /// Room pack presets we can use for this prefab.
+    /// </summary>
+    [DataField("presets", required: true, customTypeSerializer:typeof(PrototypeIdListSerializer<DungeonPresetPrototype>))]
+    public List<string> Presets = new();
+
+    /// <summary>
+    /// Fallback tile.
+    /// </summary>
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+}
diff --git a/Content.Shared/Procedural/DungeonPath.cs b/Content.Shared/Procedural/DungeonPath.cs
new file mode 100644 (file)
index 0000000..b5ab4bc
--- /dev/null
@@ -0,0 +1,10 @@
+namespace Content.Shared.Procedural;
+
+/// <summary>
+/// Connects 2 dungeon rooms.
+/// </summary>
+public sealed record DungeonPath(string Tile, string Wall, HashSet<Vector2i> Tiles)
+{
+    public string Tile = Tile;
+    public string Wall = Wall;
+}
diff --git a/Content.Shared/Procedural/DungeonPresetPrototype.cs b/Content.Shared/Procedural/DungeonPresetPrototype.cs
new file mode 100644 (file)
index 0000000..29ae933
--- /dev/null
@@ -0,0 +1,15 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Procedural;
+
+[Prototype("dungeonPreset")]
+public sealed class DungeonPresetPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = default!;
+
+    /// <summary>
+    /// The room pack bounds we need to fill.
+    /// </summary>
+    [DataField("roomPacks", required: true)]
+    public List<Box2i> RoomPacks = new();
+}
diff --git a/Content.Shared/Procedural/DungeonRoom.cs b/Content.Shared/Procedural/DungeonRoom.cs
new file mode 100644 (file)
index 0000000..abd1992
--- /dev/null
@@ -0,0 +1,3 @@
+namespace Content.Shared.Procedural;
+
+public sealed record DungeonRoom(HashSet<Vector2i> Tiles, Vector2 Center);
diff --git a/Content.Shared/Procedural/DungeonRoomPackPrototype.cs b/Content.Shared/Procedural/DungeonRoomPackPrototype.cs
new file mode 100644 (file)
index 0000000..fd2fe3e
--- /dev/null
@@ -0,0 +1,17 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Procedural;
+
+[Prototype("dungeonRoomPack")]
+public sealed class DungeonRoomPackPrototype : IPrototype
+{
+    [IdDataField]
+    public string ID { get; } = string.Empty;
+
+    /// <summary>
+    /// Used to associate the room pack with other room packs with the same dimensions.
+    /// </summary>
+    [DataField("size", required: true)] public Vector2i Size;
+
+    [DataField("rooms", required: true)] public List<Box2i> Rooms = new();
+}
diff --git a/Content.Shared/Procedural/DungeonRoomPrototype.cs b/Content.Shared/Procedural/DungeonRoomPrototype.cs
new file mode 100644 (file)
index 0000000..425194e
--- /dev/null
@@ -0,0 +1,27 @@
+using Content.Shared.Tag;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+using Robust.Shared.Utility;
+
+namespace Content.Shared.Procedural;
+
+[Prototype("dungeonRoom")]
+public sealed class DungeonRoomPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = string.Empty;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("tags", customTypeSerializer:typeof(PrototypeIdListSerializer<TagPrototype>))]
+    public List<string> Tags = new();
+
+    [DataField("size", required: true)] public Vector2i Size;
+
+    /// <summary>
+    /// Path to the file to use for the room.
+    /// </summary>
+    [DataField("atlas", required: true)] public ResourcePath AtlasPath = default!;
+
+    /// <summary>
+    /// Tile offset into the atlas to use for the room.
+    /// </summary>
+    [DataField("offset", required: true)] public Vector2i Offset;
+}
diff --git a/Content.Shared/Procedural/Loot/ClusterLoot.cs b/Content.Shared/Procedural/Loot/ClusterLoot.cs
new file mode 100644 (file)
index 0000000..ab11f33
--- /dev/null
@@ -0,0 +1,35 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Procedural.Loot;
+
+/// <summary>
+/// Spawns loot at points in the specified rooms
+/// </summary>
+public sealed class ClusterLoot : IDungeonLoot
+{
+    /// <summary>
+    /// Minimum spawns in a cluster.
+    /// </summary>
+    [DataField("minCluster")]
+    public int MinClusterAmount;
+
+    /// <summary>
+    /// Maximum spawns in a cluster.
+    /// </summary>
+    [DataField("maxCluster")] public int MaxClusterAmount;
+
+    /// <summary>
+    /// Amount to spawn for the entire loot.
+    /// </summary>
+    [DataField("max")]
+    public int Amount;
+
+    /// <summary>
+    /// Number of points to spawn.
+    /// </summary>
+    [DataField("points")] public int Points;
+
+    [DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
+    public string Prototype { get; } = string.Empty;
+}
diff --git a/Content.Shared/Procedural/Loot/IDungeonLoot.cs b/Content.Shared/Procedural/Loot/IDungeonLoot.cs
new file mode 100644 (file)
index 0000000..933e5e5
--- /dev/null
@@ -0,0 +1,7 @@
+namespace Content.Shared.Procedural.Loot;
+
+[ImplicitDataDefinitionForInheritors]
+public interface IDungeonLoot
+{
+    string Prototype { get; }
+}
diff --git a/Content.Shared/Procedural/Loot/SalvageLootPrototype.cs b/Content.Shared/Procedural/Loot/SalvageLootPrototype.cs
new file mode 100644 (file)
index 0000000..642dd8c
--- /dev/null
@@ -0,0 +1,20 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Procedural.Loot;
+
+/// <summary>
+/// Spawned inside of a salvage mission.
+/// </summary>
+[Prototype("salvageLoot")]
+public sealed class SalvageLootPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = default!;
+
+    [DataField("desc")] public string Description = string.Empty;
+
+    /// <summary>
+    /// All of the loot rules
+    /// </summary>
+    [DataField("loots")]
+    public List<IDungeonLoot> LootRules = new();
+}
diff --git a/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs b/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs
new file mode 100644 (file)
index 0000000..18c9d69
--- /dev/null
@@ -0,0 +1,23 @@
+using Content.Shared.Maps;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// Iterates room edges and places the relevant tiles and walls on any free indices.
+/// </summary>
+public sealed class BoundaryWallPostGen : IPostDunGen
+{
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+
+    [DataField("wall", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
+    public string Wall = "WallSolid";
+
+    /// <summary>
+    /// Walls to use in corners if applicable.
+    /// </summary>
+    [DataField("cornerWall", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
+    public string? CornerWall;
+}
diff --git a/Content.Shared/Procedural/PostGeneration/EntrancePostGen.cs b/Content.Shared/Procedural/PostGeneration/EntrancePostGen.cs
new file mode 100644 (file)
index 0000000..9d3595e
--- /dev/null
@@ -0,0 +1,23 @@
+using Content.Shared.Maps;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// Selects [count] rooms and places external doors to them.
+/// </summary>
+public sealed class EntrancePostGen : IPostDunGen
+{
+    /// <summary>
+    /// How many rooms we place doors on.
+    /// </summary>
+    [DataField("count")]
+    public int Count = 1;
+
+    [DataField("door", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
+    public string Door = "AirlockGlass";
+
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+}
diff --git a/Content.Shared/Procedural/PostGeneration/ExternalWindowPostGen.cs b/Content.Shared/Procedural/PostGeneration/ExternalWindowPostGen.cs
new file mode 100644 (file)
index 0000000..507ef8a
--- /dev/null
@@ -0,0 +1,22 @@
+using Content.Shared.Maps;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// If external areas are found will try to generate windows.
+/// </summary>
+public sealed class ExternalWindowPostGen : IPostDunGen
+{
+    [DataField("entities", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
+    public List<string> Entities = new()
+    {
+        "Grille",
+        "Window",
+    };
+
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+}
diff --git a/Content.Shared/Procedural/PostGeneration/IPostDunGen.cs b/Content.Shared/Procedural/PostGeneration/IPostDunGen.cs
new file mode 100644 (file)
index 0000000..29db37d
--- /dev/null
@@ -0,0 +1,10 @@
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// Ran after generating dungeon rooms. Can be used for additional loot, contents, etc.
+/// </summary>
+[ImplicitDataDefinitionForInheritors]
+public interface IPostDunGen
+{
+
+}
diff --git a/Content.Shared/Procedural/PostGeneration/InternalWindowPostGen.cs b/Content.Shared/Procedural/PostGeneration/InternalWindowPostGen.cs
new file mode 100644 (file)
index 0000000..d1f3818
--- /dev/null
@@ -0,0 +1,22 @@
+using Content.Shared.Maps;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// If internal areas are found will try to generate windows.
+/// </summary>
+public sealed class InternalWindowPostGen : IPostDunGen
+{
+    [DataField("entities", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
+    public List<string> Entities = new()
+    {
+        "Grille",
+        "Window",
+    };
+
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+}
diff --git a/Content.Shared/Procedural/PostGeneration/MiddleConnectionPostGen.cs b/Content.Shared/Procedural/PostGeneration/MiddleConnectionPostGen.cs
new file mode 100644 (file)
index 0000000..8a16bb9
--- /dev/null
@@ -0,0 +1,39 @@
+using Content.Shared.Maps;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// Places the specified entities on the middle connections between rooms
+/// </summary>
+public sealed class MiddleConnectionPostGen : IPostDunGen
+{
+    /// <summary>
+    /// How much overlap there needs to be between 2 rooms exactly.
+    /// </summary>
+    [DataField("overlapCount")]
+    public int OverlapCount = -1;
+
+    /// <summary>
+    /// How many connections to spawn between rooms.
+    /// </summary>
+    [DataField("count")]
+    public int Count = 1;
+
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+
+    [DataField("entities", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
+    public List<string> Entities = new()
+    {
+        "CableApcExtension",
+        "AirlockGlass"
+    };
+
+    /// <summary>
+    /// If overlap > 1 then what should spawn on the edges.
+    /// </summary>
+    [DataField("edgeEntities")] public List<string>? EdgeEntities;
+}
diff --git a/Content.Shared/Procedural/PostGeneration/WallMountPostGen.cs b/Content.Shared/Procedural/PostGeneration/WallMountPostGen.cs
new file mode 100644 (file)
index 0000000..1205cb3
--- /dev/null
@@ -0,0 +1,23 @@
+using Content.Shared.Maps;
+using Content.Shared.Storage;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Procedural.PostGeneration;
+
+/// <summary>
+/// Spawns on the boundary tiles of rooms.
+/// </summary>
+public sealed class WallMountPostGen : IPostDunGen
+{
+    [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer<ContentTileDefinition>))]
+    public string Tile = "FloorSteel";
+
+    [DataField("spawns")]
+    public List<EntitySpawnEntry> Spawns = new();
+
+    /// <summary>
+    /// Chance per free tile to spawn a wallmount.
+    /// </summary>
+    [DataField("prob")]
+    public double Prob = 0.1;
+}
diff --git a/Content.Shared/Procedural/Rewards/BankReward.cs b/Content.Shared/Procedural/Rewards/BankReward.cs
new file mode 100644 (file)
index 0000000..08218ea
--- /dev/null
@@ -0,0 +1,10 @@
+namespace Content.Shared.Procedural.Rewards;
+
+/// <summary>
+/// Payout to the station's bank account.
+/// </summary>
+public sealed class BankReward : ISalvageReward
+{
+    [DataField("amount")]
+    public int Amount = 0;
+}
diff --git a/Content.Shared/Procedural/Rewards/ISalvageReward.cs b/Content.Shared/Procedural/Rewards/ISalvageReward.cs
new file mode 100644 (file)
index 0000000..da18b2f
--- /dev/null
@@ -0,0 +1,7 @@
+namespace Content.Shared.Procedural.Rewards;
+
+[ImplicitDataDefinitionForInheritors]
+public interface ISalvageReward
+{
+
+}
diff --git a/Content.Shared/Procedural/Rewards/SalvageRewardPrototype.cs b/Content.Shared/Procedural/Rewards/SalvageRewardPrototype.cs
new file mode 100644 (file)
index 0000000..c8fd126
--- /dev/null
@@ -0,0 +1,14 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Procedural.Rewards;
+
+/// <summary>
+/// Given after successful completion of a salvage mission.
+/// </summary>
+[Prototype("salvageReward")]
+public sealed class SalvageRewardPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = string.Empty;
+
+    [DataField("reward", required: true)] public ISalvageReward Reward = default!;
+}
index 41b91465e5415b96cce3ed0226875017c1a1b614..4544bf65fa8bbf5353d0342d68653ab719d6b1f8 100644 (file)
@@ -11,6 +11,28 @@ namespace Content.Shared.Random.Helpers
             return random.Pick(prototype.Values);
         }
 
+        public static string Pick(this WeightedRandomPrototype prototype, System.Random random)
+        {
+            var picks = prototype.Weights;
+            var sum = picks.Values.Sum();
+            var accumulated = 0f;
+
+            var rand = random.NextFloat() * sum;
+
+            foreach (var (key, weight) in picks)
+            {
+                accumulated += weight;
+
+                if (accumulated >= rand)
+                {
+                    return key;
+                }
+            }
+
+            // Shouldn't happen
+            throw new InvalidOperationException($"Invalid weighted pick for {prototype.ID}!");
+        }
+
         public static string Pick(this WeightedRandomPrototype prototype, IRobustRandom? random = null)
         {
             IoCManager.Resolve(ref random);
@@ -33,5 +55,25 @@ namespace Content.Shared.Random.Helpers
             // Shouldn't happen
             throw new InvalidOperationException($"Invalid weighted pick for {prototype.ID}!");
         }
+
+        public static string Pick(this IRobustRandom random, Dictionary<string, float> weights)
+        {
+            var sum = weights.Values.Sum();
+            var accumulated = 0f;
+
+            var rand = random.NextFloat() * sum;
+
+            foreach (var (key, weight) in weights)
+            {
+                accumulated += weight;
+
+                if (accumulated >= rand)
+                {
+                    return key;
+                }
+            }
+
+            throw new InvalidOperationException($"Invalid weighted pick");
+        }
     }
 }
diff --git a/Content.Shared/Salvage/Expeditions/Extraction/SalvageExtraction.cs b/Content.Shared/Salvage/Expeditions/Extraction/SalvageExtraction.cs
new file mode 100644 (file)
index 0000000..e637fe1
--- /dev/null
@@ -0,0 +1,21 @@
+namespace Content.Shared.Salvage.Expeditions.Extraction;
+
+public sealed class SalvageExtraction : ISalvageMission
+{
+    /// <summary>
+    /// Minimum weight to be used for a wave.
+    /// </summary>
+    [DataField("minWaveWeight")] public float MinWaveWeight = 5;
+
+    /// <summary>
+    /// Minimum time between 2 waves. Roughly the end of one to the start of another.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField("waveCooldown")]
+    public TimeSpan WaveCooldown = TimeSpan.FromSeconds(60);
+
+    /// <summary>
+    /// How much weight accumulates per second while the expedition is active.
+    /// </summary>
+    [DataField("weightAccumulator")]
+    public float WeightAccumulator = 0.1f;
+}
diff --git a/Content.Shared/Salvage/Expeditions/IFactionExpeditionConfig.cs b/Content.Shared/Salvage/Expeditions/IFactionExpeditionConfig.cs
new file mode 100644 (file)
index 0000000..cd1186c
--- /dev/null
@@ -0,0 +1,7 @@
+namespace Content.Shared.Salvage.Expeditions;
+
+
+public interface IFactionExpeditionConfig
+{
+
+}
diff --git a/Content.Shared/Salvage/Expeditions/SalvageFactionPrototype.cs b/Content.Shared/Salvage/Expeditions/SalvageFactionPrototype.cs
new file mode 100644 (file)
index 0000000..03184ac
--- /dev/null
@@ -0,0 +1,19 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
+
+namespace Content.Shared.Salvage.Expeditions;
+
+[Prototype("salvageFaction")]
+public sealed class SalvageFactionPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = default!;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("groups", required: true)]
+    public List<SalvageMobGroup> MobGroups = default!;
+
+    /// <summary>
+    /// Per expedition type data for this faction.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField("configs", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<IFactionExpeditionConfig, SalvageExpeditionPrototype>))]
+    public Dictionary<string, IFactionExpeditionConfig> Configs = new();
+}
diff --git a/Content.Shared/Salvage/Expeditions/SalvageMobGroup.cs b/Content.Shared/Salvage/Expeditions/SalvageMobGroup.cs
new file mode 100644 (file)
index 0000000..da728e4
--- /dev/null
@@ -0,0 +1,18 @@
+using Content.Shared.Storage;
+
+namespace Content.Shared.Salvage.Expeditions;
+
+[DataDefinition]
+public record struct SalvageMobGroup()
+{
+    // A mob may be cheap but rare or expensive but frequent.
+
+    /// <summary>
+    /// Probability to spawn this group. Summed with everything else for the faction.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField("prob")]
+    public float Prob = 1f;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("entries", required: true)]
+    public List<EntitySpawnEntry> Entries = new();
+}
diff --git a/Content.Shared/Salvage/Expeditions/Structure/SalvageStructure.cs b/Content.Shared/Salvage/Expeditions/Structure/SalvageStructure.cs
new file mode 100644 (file)
index 0000000..052c6f6
--- /dev/null
@@ -0,0 +1,17 @@
+namespace Content.Shared.Salvage.Expeditions.Structure;
+
+/// <summary>
+/// Destroy the specified number of structures to finish the expedition.
+/// </summary>
+[DataDefinition]
+public sealed class SalvageStructure : ISalvageMission
+{
+    [DataField("desc")]
+    public string Description = string.Empty;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("minStructures")]
+    public int MinStructures = 3;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("maxStructures")]
+    public int MaxStructures = 5;
+}
diff --git a/Content.Shared/Salvage/Expeditions/Structure/SalvageStructureFaction.cs b/Content.Shared/Salvage/Expeditions/Structure/SalvageStructureFaction.cs
new file mode 100644 (file)
index 0000000..3193a1d
--- /dev/null
@@ -0,0 +1,23 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Salvage.Expeditions.Structure;
+
+/// <summary>
+/// Per-faction config for Salvage Structure expeditions.
+/// </summary>
+[DataDefinition]
+public sealed class SalvageStructureFaction : IFactionExpeditionConfig
+{
+    /// <summary>
+    /// Entity prototype of the structures to destroy.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField("spawn", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
+    public string Spawn = default!;
+
+    /// <summary>
+    /// How many groups of mobs to spawn.
+    /// </summary>
+    [DataField("groupCount")]
+    public int Groups = 5;
+}
diff --git a/Content.Shared/Salvage/ISalvageMission.cs b/Content.Shared/Salvage/ISalvageMission.cs
new file mode 100644 (file)
index 0000000..b1f08b4
--- /dev/null
@@ -0,0 +1,3 @@
+namespace Content.Shared.Salvage;
+
+public interface ISalvageMission {}
\ No newline at end of file
diff --git a/Content.Shared/Salvage/SalvageExpeditionPrototype.cs b/Content.Shared/Salvage/SalvageExpeditionPrototype.cs
new file mode 100644 (file)
index 0000000..eec3cc8
--- /dev/null
@@ -0,0 +1,89 @@
+using Content.Shared.Dataset;
+using Content.Shared.Parallax.Biomes;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.Loot;
+using Content.Shared.Procedural.Rewards;
+using Content.Shared.Random;
+using Content.Shared.Salvage.Expeditions;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+
+namespace Content.Shared.Salvage;
+
+[Prototype("salvageExpedition")]
+public sealed class SalvageExpeditionPrototype : IPrototype
+{
+    [IdDataField] public string ID { get; } = default!;
+
+    /// <summary>
+    /// Naming scheme for the FTL marker.
+    /// </summary>
+    [DataField("nameProto", customTypeSerializer:typeof(PrototypeIdSerializer<DatasetPrototype>))]
+    public string NameProto = "names_borer";
+
+    /// <summary>
+    /// Biome to generate the dungeon.
+    /// </summary>
+    [DataField("biome", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<BiomePrototype>))]
+    public string Biome = string.Empty;
+
+    /// <summary>
+    /// Player-friendly description for the console.
+    /// </summary>
+    [DataField("desc")]
+    public string Description = string.Empty;
+
+    [DataField("difficultyRating")]
+    public DifficultyRating DifficultyRating = DifficultyRating.Minor;
+
+    // TODO: Make these modifiers but also add difficulty modifiers.
+    [DataField("light")]
+    public Color Light = Color.Black;
+
+    [DataField("temperature")]
+    public float Temperature = 293.15f;
+
+    [DataField("expedition", required: true)]
+    public ISalvageMission Mission = default!;
+
+    [DataField("minDuration")]
+    public TimeSpan MinDuration = TimeSpan.FromSeconds(9 * 60);
+
+    [DataField("maxDuration")]
+    public TimeSpan MaxDuration = TimeSpan.FromSeconds(12 * 60);
+
+    /// <summary>
+    /// Available factions for selection for this mission prototype.
+    /// </summary>
+    [DataField("factions", customTypeSerializer:typeof(PrototypeIdListSerializer<SalvageFactionPrototype>))]
+    public List<string> Factions = new();
+
+    [DataField("dungeonConfig", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<DungeonConfigPrototype>))]
+    public string DungeonConfigPrototype = string.Empty;
+
+    [DataField("reward", customTypeSerializer: typeof(PrototypeIdSerializer<WeightedRandomPrototype>))]
+    public string Reward = string.Empty;
+
+    /// <summary>
+    /// Possible loot prototypes available for this expedition.
+    /// This spawns during the mission and is not tied to completion.
+    /// </summary>
+    [DataField("loot", customTypeSerializer: typeof(PrototypeIdListSerializer<WeightedRandomPrototype>))]
+    public List<string> Loots = new();
+
+    [DataField("dungeonPosition")]
+    public Vector2i DungeonPosition = new(80, -25);
+}
+
+[Serializable, NetSerializable]
+public enum DifficultyRating : byte
+{
+    None,
+    Minor,
+    Moderate,
+    Hazardous,
+    Extreme,
+}
+
diff --git a/Content.Shared/Salvage/SalvageExpeditions.cs b/Content.Shared/Salvage/SalvageExpeditions.cs
new file mode 100644 (file)
index 0000000..680a710
--- /dev/null
@@ -0,0 +1,91 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.Salvage;
+
+[Serializable, NetSerializable]
+public sealed class SalvageExpeditionConsoleState : BoundUserInterfaceState
+{
+    public TimeSpan NextOffer;
+    public bool Claimed;
+    public ushort ActiveMission;
+    public List<SalvageMission> Missions;
+
+    public SalvageExpeditionConsoleState(TimeSpan nextOffer, bool claimed, ushort activeMission, List<SalvageMission> missions)
+    {
+        NextOffer = nextOffer;
+        Claimed = claimed;
+        ActiveMission = activeMission;
+        Missions = missions;
+    }
+}
+
+/// <summary>
+/// Used to interact with salvage expeditions and claim them.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed class SalvageExpeditionConsoleComponent : Component
+{
+
+}
+
+[Serializable, NetSerializable]
+public sealed class ClaimSalvageMessage : BoundUserInterfaceMessage
+{
+    public ushort Index;
+}
+
+/// <summary>
+/// Added per station to store data on their available salvage missions.
+/// </summary>
+[RegisterComponent]
+public sealed class SalvageExpeditionDataComponent : Component
+{
+    /// <summary>
+    /// Is there an active salvage expedition.
+    /// </summary>
+    [ViewVariables]
+    public bool Claimed => ActiveMission != 0;
+
+    /// <summary>
+    /// Nexy time salvage missions are offered.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField("nextOffer", customTypeSerializer:typeof(TimeOffsetSerializer))]
+    public TimeSpan NextOffer;
+
+    [ViewVariables]
+    public readonly Dictionary<ushort, SalvageMission> Missions = new();
+
+    [ViewVariables] public ushort ActiveMission;
+
+    public ushort NextIndex = 1;
+}
+
+[Serializable, NetSerializable]
+public sealed record SalvageMission
+{
+    [ViewVariables]
+    public ushort Index;
+
+    [ViewVariables(VVAccess.ReadWrite), DataField("config", required: true, customTypeSerializer:typeof(SalvageExpeditionPrototype))]
+    public string Config = default!;
+
+    [ViewVariables] public TimeSpan Duration;
+
+    [ViewVariables] public int Seed;
+}
+
+[Serializable, NetSerializable]
+public enum SalvageEnvironment : byte
+{
+    Invalid = 0,
+    Caves,
+}
+
+[Serializable, NetSerializable]
+public enum SalvageConsoleUiKey : byte
+{
+    Expedition,
+}
diff --git a/Content.Shared/Salvage/SharedSalvageSystem.cs b/Content.Shared/Salvage/SharedSalvageSystem.cs
new file mode 100644 (file)
index 0000000..b66dd13
--- /dev/null
@@ -0,0 +1,77 @@
+using Content.Shared.Dataset;
+using Content.Shared.Procedural.Loot;
+using Content.Shared.Procedural.Rewards;
+using Content.Shared.Random;
+using Content.Shared.Random.Helpers;
+using Content.Shared.Salvage.Expeditions.Structure;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Salvage;
+
+public abstract class SharedSalvageSystem : EntitySystem
+{
+    public static readonly TimeSpan MissionCooldown = TimeSpan.FromMinutes(5);
+    public static readonly TimeSpan MissionFailedCooldown = TimeSpan.FromMinutes(10);
+
+    public static float GetDifficultyModifier(DifficultyRating difficulty)
+    {
+        // These should reflect how many salvage staff are expected to be required for the mission.
+        switch (difficulty)
+        {
+            case DifficultyRating.None:
+                return 1f;
+            case DifficultyRating.Minor:
+                return 1.5f;
+            case DifficultyRating.Moderate:
+                return 3f;
+            case DifficultyRating.Hazardous:
+                return 6f;
+            case DifficultyRating.Extreme:
+                return 10f;
+            default:
+                throw new ArgumentOutOfRangeException(nameof(difficulty), difficulty, null);
+        }
+    }
+
+    public static string GetFTLName(DatasetPrototype dataset, int seed)
+    {
+        var random = new System.Random(seed);
+        return $"{dataset.Values[random.Next(dataset.Values.Count)]}-{random.Next(10, 100)}-{(char) (65 + random.Next(26))}";
+    }
+
+    public static string GetFaction(List<string> factions, int seed)
+    {
+        var adjustedSeed = new System.Random(seed + 1);
+        return factions[adjustedSeed.Next(factions.Count)];
+    }
+
+    public static IEnumerable<SalvageLootPrototype> GetLoot(List<string> loots, int seed, IPrototypeManager protoManager)
+    {
+        var adjustedSeed = new System.Random(seed + 2);
+
+        for (var i = 0; i < loots.Count; i++)
+        {
+            var loot = loots[i];
+            var a = protoManager.Index<WeightedRandomPrototype>(loot);
+            var lootConfig = a.Pick(adjustedSeed);
+            yield return protoManager.Index<SalvageLootPrototype>(lootConfig);
+        }
+    }
+
+    public static ISalvageReward GetReward(WeightedRandomPrototype proto, int seed, IPrototypeManager protoManager)
+    {
+        var adjustedSeed = new System.Random(seed + 3);
+        var rewardProto = proto.Pick(adjustedSeed);
+        return protoManager.Index<SalvageRewardPrototype>(rewardProto).Reward;
+    }
+
+    #region Structure
+
+    public static int GetStructureCount(SalvageStructure structure, int seed)
+    {
+        var adjustedSeed = new System.Random(seed + 4);
+        return adjustedSeed.Next(structure.MinStructures, structure.MaxStructures + 1);
+    }
+
+    #endregion
+}
index da57ca850a2c1306e6335ac74597a5bccde0eef4..8b58e9f0f03ab14593b293004ee03cf85d6820be 100644 (file)
@@ -131,6 +131,71 @@ public static class EntitySpawnCollection
         return spawned;
     }
 
+    public static List<string?> GetSpawns(IEnumerable<EntitySpawnEntry> entries,
+        System.Random random)
+    {
+        var spawned = new List<string?>();
+        var ungrouped = CollectOrGroups(entries, out var orGroupedSpawns);
+
+        foreach (var entry in ungrouped)
+        {
+            // Check random spawn
+            // ReSharper disable once CompareOfFloatsByEqualityOperator
+            if (entry.SpawnProbability != 1f && !random.Prob(entry.SpawnProbability))
+                continue;
+
+            var amount = (int) entry.GetAmount(random);
+
+            for (var i = 0; i < amount; i++)
+            {
+                spawned.Add(entry.PrototypeId);
+            }
+        }
+
+        // Handle OrGroup spawns
+        foreach (var spawnValue in orGroupedSpawns)
+        {
+            // For each group use the added cumulative probability to roll a double in that range
+            var diceRoll = random.NextDouble() * spawnValue.CumulativeProbability;
+
+            // Add the entry's spawn probability to this value, if equals or lower, spawn item, otherwise continue to next item.
+            var cumulative = 0.0;
+
+            foreach (var entry in spawnValue.Entries)
+            {
+                cumulative += entry.SpawnProbability;
+                if (diceRoll > cumulative)
+                    continue;
+
+                // Dice roll succeeded, add item and break loop
+                var amount = (int) entry.GetAmount(random);
+
+                for (var i = 0; i < amount; i++)
+                {
+                    spawned.Add(entry.PrototypeId);
+                }
+
+                break;
+            }
+        }
+
+        return spawned;
+    }
+
+    public static double GetAmount(this EntitySpawnEntry entry, System.Random random, bool getAverage = false)
+    {
+        // Max amount is less or equal than amount, so just return the amount
+        if (entry.MaxAmount <= entry.Amount)
+            return entry.Amount;
+
+        // If we want the average, just calculate the expected amount
+        if (getAverage)
+            return (entry.Amount + entry.MaxAmount) / 2.0;
+
+        // Otherwise get a random value in between
+        return random.Next(entry.Amount, entry.MaxAmount);
+    }
+
     /// <summary>
     /// Collects all entries that belong together in an OrGroup, and then returns the leftover ungrouped entries.
     /// </summary>
diff --git a/Resources/Audio/Effects/Footsteps/attributions.yml b/Resources/Audio/Effects/Footsteps/attributions.yml
new file mode 100644 (file)
index 0000000..93d4782
--- /dev/null
@@ -0,0 +1,8 @@
+- files:
+  - water1.ogg
+  - water2.ogg
+  - water3.ogg
+  - water4.ogg
+  license: "CC-BY-SA-3.0"
+  copyright: "Taken from https://github.com/Citadel-Station-13/Citadel-Station-13-RP"
+  source: "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/tree/b7392a25f826d038d35309cf36875f2066c3eb05/sound/effects/footstep"
\ No newline at end of file
diff --git a/Resources/Audio/Effects/Footsteps/water1.ogg b/Resources/Audio/Effects/Footsteps/water1.ogg
new file mode 100644 (file)
index 0000000..f22cbf2
Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/water1.ogg differ
diff --git a/Resources/Audio/Effects/Footsteps/water2.ogg b/Resources/Audio/Effects/Footsteps/water2.ogg
new file mode 100644 (file)
index 0000000..e2a4765
Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/water2.ogg differ
diff --git a/Resources/Audio/Effects/Footsteps/water3.ogg b/Resources/Audio/Effects/Footsteps/water3.ogg
new file mode 100644 (file)
index 0000000..97ce152
Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/water3.ogg differ
diff --git a/Resources/Audio/Effects/Footsteps/water4.ogg b/Resources/Audio/Effects/Footsteps/water4.ogg
new file mode 100644 (file)
index 0000000..5778a52
Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/water4.ogg differ
index 6e1c24c3d7ab9b33270f0662ff8c8c27897e1c81..af662f2e5c404616b76b544c1908e07c09d92935 100644 (file)
@@ -6,8 +6,11 @@ lobbyenabled = false
 # Makes mapping annoying
 grid_splitting = false
 
+[procgen]
+preload = false
+
 [shuttle]
 # Wastes startup time
+auto_call_time = 0
 cargo = false
 emergency_enabled = false
-
diff --git a/Resources/Locale/en-US/procedural/command.ftl b/Resources/Locale/en-US/procedural/command.ftl
new file mode 100644 (file)
index 0000000..27ad1a1
--- /dev/null
@@ -0,0 +1,15 @@
+cmd-dungen-desc = Generates a procedural dungeon with the specified preset, position, and seed.
+cmd-dungen-help = dungen <MapId> <DungeonPreset> <PosX> <PosY> [seed]
+cmd-dungen-arg-count = Require 4 args.
+cmd-dungen-map-parse = Unable to parse MapId.
+cmd-dungen-mapgrid = Unable to find MapGrid.
+cmd-dungen-config = Unable to find dungeon config.
+cmd-dungen-pos = Unable to parse position.
+cmd-dungen-seed = Unable to parse seed.
+cmd-dungen-start = Generating dungeon with seed {$seed}
+
+cmd-dungen-hint-map = Map Id
+cmd-dungen-hint-config = Dungeon config
+cmd-dungen-hint-posx = Position X
+cmd-dungen-hint-posy = Position Y
+cmd-dungen-hint-seed = [Seed]
diff --git a/Resources/Maps/Dungeon/Templates/17x17.yml b/Resources/Maps/Dungeon/Templates/17x17.yml
new file mode 100644 (file)
index 0000000..64ddf22
--- /dev/null
@@ -0,0 +1,448 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      1,0:
+        ind: 1,0
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,1:
+        ind: 1,1
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,1:
+        ind: 0,1
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 56.3512981
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/17x5.yml b/Resources/Maps/Dungeon/Templates/17x5.yml
new file mode 100644 (file)
index 0000000..a6dfe03
--- /dev/null
@@ -0,0 +1,442 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      1,0:
+        ind: 1,0
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 56.3512981
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/3x5.yml b/Resources/Maps/Dungeon/Templates/3x5.yml
new file mode 100644 (file)
index 0000000..9c776d8
--- /dev/null
@@ -0,0 +1,131 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 2.453125,1.890625
+    parent: invalid
+    type: Transform
+  - chunks:
+      -1,-1:
+        ind: -1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 0.45
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+...
diff --git a/Resources/Maps/Dungeon/Templates/3x7.yml b/Resources/Maps/Dungeon/Templates/3x7.yml
new file mode 100644 (file)
index 0000000..9c776d8
--- /dev/null
@@ -0,0 +1,131 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 2.453125,1.890625
+    parent: invalid
+    type: Transform
+  - chunks:
+      -1,-1:
+        ind: -1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 0.45
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+...
diff --git a/Resources/Maps/Dungeon/Templates/5x11.yml b/Resources/Maps/Dungeon/Templates/5x11.yml
new file mode 100644 (file)
index 0000000..9303c13
--- /dev/null
@@ -0,0 +1,168 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.453125,0.890625
+    parent: invalid
+    type: Transform
+  - chunks:
+      -1,-1:
+        ind: -1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,-1:
+        ind: 0,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      -1,0:
+        ind: -1,0
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 27.154826
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      -1,-1: 0
+      5,3: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      7,0: 0
+      6,-1: 0
+      7,-1: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/5x17.yml b/Resources/Maps/Dungeon/Templates/5x17.yml
new file mode 100644 (file)
index 0000000..4e21cb1
--- /dev/null
@@ -0,0 +1,442 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      0,1:
+        ind: 0,1
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 78.7387785
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/5x5.yml b/Resources/Maps/Dungeon/Templates/5x5.yml
new file mode 100644 (file)
index 0000000..bbcd71d
--- /dev/null
@@ -0,0 +1,439 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 207.9113983
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/LargeArea2.yml b/Resources/Maps/Dungeon/Templates/LargeArea2.yml
new file mode 100644 (file)
index 0000000..961e78a
--- /dev/null
@@ -0,0 +1,168 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      1,0:
+        ind: 1,0
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,1:
+        ind: 1,1
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,1:
+        ind: 0,1
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAARAAAAEQAAABEAAAARAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 56.3512981
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/LargeArea3.yml b/Resources/Maps/Dungeon/Templates/LargeArea3.yml
new file mode 100644 (file)
index 0000000..a8b8a41
--- /dev/null
@@ -0,0 +1,168 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      1,0:
+        ind: 1,0
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,1:
+        ind: 1,1
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,1:
+        ind: 0,1
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 56.3512981
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/LargeArea4.yml b/Resources/Maps/Dungeon/Templates/LargeArea4.yml
new file mode 100644 (file)
index 0000000..a5db8c4
--- /dev/null
@@ -0,0 +1,168 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      1,0:
+        ind: 1,0
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,1:
+        ind: 1,1
+        tiles: BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,1:
+        ind: 0,1
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAEQAAABEAAAARAAAAEQAAABEAAAABgAAAAYAAAAGAAAABgAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAABEAAAARAAAAEQAAABEAAAARAAAAAYAAAAGAAAABgAAAAYAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAARAAAAEQAAABEAAAARAAAAEQAAAAGAAAABgAAAAYAAAAGAAAABgAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 56.3512981
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/MediumArea2.yml b/Resources/Maps/Dungeon/Templates/MediumArea2.yml
new file mode 100644 (file)
index 0000000..6755d7f
--- /dev/null
@@ -0,0 +1,442 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      0,1:
+        ind: 0,1
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 78.7387785
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/MediumArea3.yml b/Resources/Maps/Dungeon/Templates/MediumArea3.yml
new file mode 100644 (file)
index 0000000..06c2349
--- /dev/null
@@ -0,0 +1,442 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      0,1:
+        ind: 0,1
+        tiles: BgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABEAAAARAAAAEQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAARAAAAEQAAABEAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 78.7387785
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/Templates/MediumArea4.yml b/Resources/Maps/Dungeon/Templates/MediumArea4.yml
new file mode 100644 (file)
index 0000000..0975288
--- /dev/null
@@ -0,0 +1,442 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - pos: 0.75,1.3125
+    parent: invalid
+    type: Transform
+  - chunks:
+      0,1:
+        ind: 0,1
+        tiles: BgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,0:
+        ind: 0,0
+        tiles: BgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABEAAAARAAAAEQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAARAAAAEQAAABEAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABEAAAARAAAAEQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEQAAABEAAAARAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABEAAAARAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABEAAAARAAAAEQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAARAAAAEQAAABEAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEQAAABEAAAARAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - type: Broadphase
+  - angularDamping: 0.05
+    linearDamping: 0.05
+    fixedRotation: False
+    bodyType: Dynamic
+    type: Physics
+  - fixtures: []
+    type: Fixtures
+  - type: OccluderTree
+  - type: Shuttle
+  - nextUpdate: 78.7387785
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+  - tiles:
+      0,0: 0
+      0,1: 0
+      0,2: 0
+      0,3: 0
+      0,4: 0
+      0,5: 0
+      0,6: 0
+      0,7: 0
+      0,8: 0
+      16,0: 0
+      16,1: 0
+      16,2: 0
+      16,3: 0
+      16,4: 0
+      16,5: 0
+      16,6: 0
+      16,7: 0
+      16,8: 0
+      16,9: 0
+      16,10: 0
+      16,11: 0
+      16,12: 0
+      16,13: 0
+      16,14: 0
+      16,15: 0
+      16,16: 0
+      0,16: 0
+      1,16: 0
+      2,16: 0
+      3,16: 0
+      4,16: 0
+      5,16: 0
+      6,16: 0
+      7,16: 0
+      8,16: 0
+      9,16: 0
+      10,16: 0
+      11,16: 0
+      12,16: 0
+      13,16: 0
+      14,16: 0
+      15,16: 0
+      0,9: 0
+      0,10: 0
+      0,11: 0
+      0,12: 0
+      0,13: 0
+      0,14: 0
+      0,15: 0
+      1,0: 0
+      1,1: 0
+      1,2: 0
+      1,3: 0
+      1,4: 0
+      1,5: 0
+      1,6: 0
+      1,7: 0
+      1,8: 0
+      1,9: 0
+      1,10: 0
+      1,11: 0
+      1,12: 0
+      1,13: 0
+      1,14: 0
+      1,15: 0
+      2,0: 0
+      2,1: 0
+      2,2: 0
+      2,3: 0
+      2,4: 0
+      2,5: 0
+      2,6: 0
+      2,7: 0
+      2,8: 0
+      2,9: 0
+      2,10: 0
+      2,11: 0
+      2,12: 0
+      2,13: 0
+      2,14: 0
+      2,15: 0
+      3,0: 0
+      3,1: 0
+      3,2: 0
+      3,3: 0
+      3,4: 0
+      3,5: 0
+      3,6: 0
+      3,7: 0
+      3,8: 0
+      3,9: 0
+      3,10: 0
+      3,11: 0
+      3,12: 0
+      3,13: 0
+      3,14: 0
+      3,15: 0
+      4,0: 0
+      4,1: 0
+      4,2: 0
+      4,3: 0
+      4,4: 0
+      4,5: 0
+      4,6: 0
+      4,7: 0
+      4,8: 0
+      4,9: 0
+      4,10: 0
+      4,11: 0
+      4,12: 0
+      4,13: 0
+      4,14: 0
+      4,15: 0
+      5,0: 0
+      5,1: 0
+      5,2: 0
+      5,3: 0
+      5,4: 0
+      5,5: 0
+      5,6: 0
+      5,7: 0
+      5,8: 0
+      5,9: 0
+      5,10: 0
+      5,11: 0
+      5,12: 0
+      5,13: 0
+      5,14: 0
+      5,15: 0
+      6,0: 0
+      6,1: 0
+      6,2: 0
+      6,3: 0
+      6,4: 0
+      6,5: 0
+      6,6: 0
+      6,7: 0
+      6,8: 0
+      6,9: 0
+      6,10: 0
+      6,11: 0
+      6,12: 0
+      6,13: 0
+      6,14: 0
+      6,15: 0
+      7,0: 0
+      7,1: 0
+      7,2: 0
+      7,3: 0
+      7,4: 0
+      7,5: 0
+      7,6: 0
+      7,7: 0
+      7,8: 0
+      7,9: 0
+      7,10: 0
+      7,11: 0
+      7,12: 0
+      7,13: 0
+      7,14: 0
+      7,15: 0
+      8,0: 0
+      8,1: 0
+      8,2: 0
+      8,3: 0
+      8,4: 0
+      8,5: 0
+      8,6: 0
+      8,7: 0
+      8,8: 0
+      8,9: 0
+      8,10: 0
+      8,11: 0
+      8,12: 0
+      8,13: 0
+      8,14: 0
+      8,15: 0
+      9,0: 0
+      9,1: 0
+      9,2: 0
+      9,3: 0
+      9,4: 0
+      9,5: 0
+      9,6: 0
+      9,7: 0
+      9,8: 0
+      9,9: 0
+      9,10: 0
+      9,11: 0
+      9,12: 0
+      9,13: 0
+      9,14: 0
+      9,15: 0
+      10,0: 0
+      10,1: 0
+      10,2: 0
+      10,3: 0
+      10,4: 0
+      10,5: 0
+      10,6: 0
+      10,7: 0
+      10,8: 0
+      10,9: 0
+      10,10: 0
+      10,11: 0
+      10,12: 0
+      10,13: 0
+      10,14: 0
+      10,15: 0
+      11,0: 0
+      11,1: 0
+      11,2: 0
+      11,3: 0
+      11,4: 0
+      11,5: 0
+      11,6: 0
+      11,7: 0
+      11,8: 0
+      11,9: 0
+      11,10: 0
+      11,11: 0
+      11,12: 0
+      11,13: 0
+      11,14: 0
+      11,15: 0
+      12,0: 0
+      12,1: 0
+      12,2: 0
+      12,3: 0
+      12,4: 0
+      12,5: 0
+      12,6: 0
+      12,7: 0
+      12,8: 0
+      12,9: 0
+      12,10: 0
+      12,11: 0
+      12,12: 0
+      12,13: 0
+      12,14: 0
+      12,15: 0
+      13,0: 0
+      13,1: 0
+      13,2: 0
+      13,3: 0
+      13,4: 0
+      13,5: 0
+      13,6: 0
+      13,7: 0
+      13,8: 0
+      13,9: 0
+      13,10: 0
+      13,11: 0
+      13,12: 0
+      13,13: 0
+      13,14: 0
+      13,15: 0
+      14,0: 0
+      14,1: 0
+      14,2: 0
+      14,3: 0
+      14,4: 0
+      14,5: 0
+      14,6: 0
+      14,7: 0
+      14,8: 0
+      14,9: 0
+      14,10: 0
+      14,11: 0
+      14,12: 0
+      14,13: 0
+      14,14: 0
+      14,15: 0
+      15,0: 0
+      15,1: 0
+      15,2: 0
+      15,3: 0
+      15,4: 0
+      15,5: 0
+      15,6: 0
+      15,7: 0
+      15,8: 0
+      15,9: 0
+      15,10: 0
+      15,11: 0
+      15,12: 0
+      15,13: 0
+      15,14: 0
+      15,15: 0
+    uniqueMixes:
+    - volume: 2500
+      temperature: 293.15
+      moles:
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+      - 0
+    type: GridAtmosphere
+  - type: GasTileOverlay
+...
diff --git a/Resources/Maps/Dungeon/experiment.yml b/Resources/Maps/Dungeon/experiment.yml
new file mode 100644 (file)
index 0000000..c933ce8
--- /dev/null
@@ -0,0 +1,16191 @@
+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: FloorBasalt
+  14: FloorBlue
+  15: FloorBlueCircuit
+  16: FloorBoxing
+  17: FloorCarpetClown
+  18: FloorCarpetOffice
+  19: FloorCave
+  20: FloorCaveDrought
+  21: FloorClown
+  22: FloorDark
+  23: FloorDarkDiagonal
+  24: FloorDarkDiagonalMini
+  25: FloorDarkHerringbone
+  26: FloorDarkMini
+  27: FloorDarkMono
+  28: FloorDarkOffset
+  29: FloorDarkPavement
+  30: FloorDarkPavementVertical
+  31: FloorDarkPlastic
+  32: FloorDesert
+  33: FloorDirt
+  34: FloorEighties
+  35: FloorElevatorShaft
+  36: FloorFlesh
+  37: FloorFreezer
+  38: FloorGlass
+  39: FloorGold
+  40: FloorGrass
+  41: FloorGrassDark
+  42: FloorGrassJungle
+  43: FloorGrassLight
+  44: FloorGreenCircuit
+  45: FloorGym
+  46: FloorHydro
+  47: FloorKitchen
+  48: FloorLaundry
+  49: FloorLino
+  50: FloorLowDesert
+  51: FloorMetalDiamond
+  52: FloorMime
+  53: FloorMono
+  54: FloorPlanetDirt
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - type: Transform
+  - index: 5
+    type: Map
+  - type: PhysicsMap
+  - type: Broadphase
+  - type: OccluderTree
+  - chunks:
+      -1,-1:
+        ind: -1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      0,0:
+        ind: 0,0
+        tiles: VgAAAEQAAAJEAAAARAAAA0QAAAFEAAAARAAAA0QAAABEAAADRAAAAUQAAANEAAACRAAAAkQAAAFEAAAARAAAA1EAAABEAAAARAAAA0QAAANEAAABRAAAAEQAAANEAAACRAAAAEQAAAFEAAAARAAAAEQAAANEAAACRAAAAEQAAABRAAAARAAAAUQAAANeAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAXgAAAEQAAAFEAAABUQAAAEQAAANEAAABRAAAAEQAAAJEAAACRAAAAkQAAABEAAABRAAAAUQAAABEAAAARAAAAkQAAAJEAAACRAAAAVYAAABEAAAARAAAAkQAAABEAAAARAAAA0QAAABEAAADRAAAAEQAAANEAAABRAAAAUQAAANEAAADRAAAAUQAAAM+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAFoAAAE4AAAAOAAAAVoAAAE4AAAARAAAAEQAAANEAAAARAAAA0QAAAE+AAAAGQAAAB0AAAAdAAAAHQAAADgAAANaAAABOAAAADgAAAJaAAAAOAAAAkQAAANEAAAARAAAAUQAAABEAAADPgAAAB4AAAAuAAAATQAAAC4AAABEAAAAWwAAAVsAAABbAAABWwAAAFsAAANbAAACWwAAAVsAAABbAAABWwAAAz4AAAAeAAAALgAAAE0AAAAuAAAAOAAAAlsAAAFbAAABWwAAAFsAAAJbAAABWwAAAVsAAABbAAACWwAAAFsAAAI+AAAAHgAAAC4AAABNAAAALgAAADgAAAE4AAACOAAAADgAAAI4AAABOAAAATgAAAE4AAAAOAAAAjgAAAE4AAABPgAAABkAAAAdAAAAHQAAAB0AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAXgAAABYAAAFEAAADRAAAAkQAAAMWAAACXgAAAD4AAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAPgAAAF4AAAAWAAACRAAAAUQAAAFEAAABFgAAA14AAAA+AAAAFgAAAF4AAABeAAAATwAAAF4AAABeAAAAFgAAAD4AAABEAAACRAAAAkQAAABeAAAARAAAAkQAAAFEAAAAPgAAABYAAABeAAAAOgAAADoAAAA6AAAAXgAAABYAAAA+AAAARAAAAkQAAANEAAABRAAAAUQAAANEAAACRAAAAz4AAAAWAAAAXgAAAF4AAABeAAAAXgAAAF4AAAAWAAAAPgAAAA==
+      0,1:
+        ind: 0,1
+        tiles: RAAAAEQAAANEAAACRAAAAkQAAAFEAAACRAAAAT4AAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAlAAAAJQAAACUAAAAlAAAAJQAAAD4AAABEAAABUQAAAlEAAAJRAAADRAAAAT4AAAAqAAAAUQAAA1EAAANRAAAAJQAAACUAAAAlAAAAXgAAAF4AAAA+AAAAUQAAAVEAAAMqAAAAUQAAA1EAAAM+AAAAUQAAAlEAAANRAAADUQAAAiUAAAAlAAAAWgAAA1oAAANaAAADPgAAAFEAAAMqAAAAKgAAACoAAABRAAABPgAAAFEAAAFRAAADRAAAAVEAAAMlAAAAXgAAAFoAAANRAAACUQAAAj4AAABRAAABUQAAAioAAABRAAABUQAAAD4AAABRAAACUQAAAFEAAANRAAABJQAAAF4AAABaAAADUQAAAFEAAAM+AAAARAAAAFEAAANRAAAAUQAAAUQAAAE+AAAAUQAAAVEAAANRAAABUQAAAj4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAOgAAADoAAAA+AAAARAAAAEQAAAFEAAADPgAAADwAAAA8AAAAJQAAAD4AAABJAAACSQAAAkoAAAA+AAAAOgAAAA8AAAA6AAAAPgAAAE4AAABEAAAARAAAAz4AAAAlAAAAPAAAACUAAAA+AAAASQAAAkkAAAJKAAACPgAAADoAAAAPAAAAOgAAAD4AAABEAAADRAAAAkQAAAM+AAAAJQAAACUAAAAlAAAAPgAAAEkAAANJAAACSgAAAj4AAAA6AAAADwAAADoAAAA+AAAARAAAA0QAAAFEAAABPgAAACUAAAA8AAAAJQAAAD4AAABJAAACSQAAA0oAAAE+AAAAOgAAADoAAAA6AAAAPgAAAEQAAAFEAAAARAAAAj4AAAAlAAAAJQAAADwAAAA+AAAASQAAA0kAAABKAAABPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAkQAAABEAAADRAAAAVEAAAFEAAACUQAAAFEAAANeAAAAFgAAABYAAAAWAAACPgAAAFEAAABRAAACRAAAABYAAAEWAAABFgAAAEQAAAFEAAAARAAAA0QAAAFEAAADFgAAARYAAAEWAAADRAAAAz4AAABRAAACUQAAAg==
+      0,-1:
+        ind: 0,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+      -1,0:
+        ind: -1,0
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      -1,1:
+        ind: -1,1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      1,-1:
+        ind: 1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+      1,0:
+        ind: 1,0
+        tiles: VgAAAD4AAABEAAAAOgAAADoAAAA6AAAARAAAADoAAAA6AAAAOgAAAEQAAAA6AAAAOgAAADoAAABEAAAAOgAAAFEAAAA+AAAARAAAADoAAAA6AAAAOgAAAEQAAAA6AAAAOgAAADoAAABEAAAAOgAAADoAAAA6AAAARAAAADoAAABRAAAAPgAAAEQAAABEAAAAOgAAAEQAAABEAAAARAAAADoAAABEAAAARAAAAEQAAAA6AAAARAAAAEQAAABEAAAAUQAAAD4AAABEAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFYAAAA+AAAARAAAAF4AAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAGQAAAD4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAEQAAABNAAAARAAAAC4AAABNAAAALgAAAB4AAAA+AAAATgAAAEQAAAAWAAAAFgAAAF4AAABeAAAAXgAAABYAAABEAAAATQAAAEQAAAAuAAAATQAAAC4AAAAeAAAAPgAAAE4AAABEAAAAFgAAABYAAABeAAAAXgAAAF4AAAAWAAAARAAAAE0AAABEAAAALgAAAE0AAAAuAAAAHgAAAD4AAABOAAAARAAAABYAAAAWAAAAXgAAAF4AAABeAAAAFgAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABkAAAA+AAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAUQAAANEAAAARAAAAUQAAAJEAAABRAAAAz4AAAA6AAAAOgAAADoAAABRAAAAFgAAABYAAAAWAAAAPgAAAEQAAAI3AAAANwAAADcAAAA3AAAANwAAAEQAAAE+AAAAOgAAADoAAAA6AAAAUQAAAFEAAABRAAAAFgAAAD4AAABEAAABNwAAADcAAAA3AAAANwAAADcAAABEAAADPgAAAFEAAABRAAAAUQAAAFEAAABRAAAAUQAAAFEAAAA+AAAARAAAATcAAAA3AAAANwAAADcAAAA3AAAARAAAAD4AAAAWAAAAUQAAAFEAAABRAAAAUQAAAFEAAABRAAAAPgAAAA==
+      1,1:
+        ind: 1,1
+        tiles: RAAAAEQAAANEAAADRAAAA0QAAAJEAAADRAAAAj4AAAAWAAAAFgAAABYAAABRAAAAUQAAAFEAAABRAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABRAAADPgAAACoAAABEAAABRAAAAUQAAAEqAAAAPgAAAEQAAABEAAADRAAAA0QAAABEAAADPgAAAFEAAABRAAABUQAAAD4AAABEAAAARAAAAEQAAABEAAADRAAAAz4AAABEAAACXgAAAF4AAABeAAAARAAAAz4AAABRAAABUQAAA1EAAAE+AAAARAAAAUQAAAJEAAABRAAAAkQAAAE+AAAARAAAA14AAABeAAAAXgAAAEQAAAI+AAAARAAAAkQAAABRAAABPgAAAEQAAANEAAABRAAAA0QAAAFEAAADPgAAAEQAAAJeAAAAXgAAAF4AAABEAAACPgAAAEQAAANEAAACUQAAAz4AAAAqAAAARAAAAkQAAABEAAABKgAAAD4AAABEAAABRAAAAUQAAAFEAAADXgAAAD4AAABEAAACRAAAAT4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAWAAADFgAAAhYAAAA+AAAARQAAAEUAAANFAAABPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAFgAAAxYAAAAWAAADPgAAAEUAAABFAAAATwAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAABYAAAEWAAAAFgAAAz4AAABFAAADRQAAAk8AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAWAAAAFgAAABYAAAI+AAAARQAAAEUAAAFPAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAFgAAABYAAAAWAAACPgAAAEUAAABFAAABRQAAAz4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABRAAADXgAAAEQAAAFEAAACRAAAAkQAAAFEAAADRAAAAkQAAABEAAABRAAAAT4AAAAWAAADFgAAABYAAAIWAAABUQAAA04AAABEAAADRAAAAUQAAABEAAACRAAAAEQAAABEAAADRAAAA0QAAAA+AAAAFgAAABYAAAAWAAACFgAAAw==
+      -1,2:
+        ind: -1,2
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      -1,3:
+        ind: -1,3
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,2:
+        ind: 0,2
+        tiles: FgAAAxYAAAIWAAAAXgAAAFEAAABRAAAARAAAAVEAAAFEAAAARAAAAEQAAAJEAAACRAAAAz4AAABRAAADUQAAAj4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAACRAAAAkQAAABEAAADVgAAAFYAAABWAAADRAAAA0QAAAJEAAACRAAAAT4AAABEAAADRAAAAV4AAABeAAAARAAAAkQAAANEAAACRAAAAEoAAANKAAAASgAAAUQAAAJEAAABRAAAAEQAAAE+AAAARAAAAlYAAAFWAAABXgAAAEQAAABEAAAARAAAAkQAAAFWAAABVgAAAFYAAAJEAAABRAAAAEQAAAJEAAABPgAAAEQAAANEAAADRAAAAkQAAAE+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAkQAAAFEAAAARAAAAEQAAABEAAADRAAAAz4AAABEAAACRAAAA0QAAAFEAAADRAAAA0QAAABEAAAAPgAAAEQAAABEAAABRAAAAUQAAANEAAADRAAAAEQAAAE+AAAARAAAA0QAAAEsAAAALAAAACwAAABEAAABRAAAAz4AAABEAAAARAAAAkQAAANEAAABRAAAAUQAAAFEAAAAPgAAAEQAAABEAAABRAAAAEQAAAJEAAAARAAAAkQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAANEAAABRAAAAVEAAAM6AAAAOgAAADoAAAA+AAAAXgAAABYAAAEWAAACFgAAAxYAAAIWAAABFgAAAT4AAABEAAABRAAAAUQAAANRAAAAOgAAADoAAAA6AAAAPgAAAF4AAABeAAAAFgAAARYAAAAWAAACXgAAAF4AAAA+AAAARAAAAUQAAABEAAADUQAAAjoAAAA6AAAAOgAAAD4AAABEAAACTwAAAE8AAABPAAAATwAAAE8AAABEAAAAPgAAAEQAAAJEAAAARAAAA14AAABRAAACUQAAAFEAAAM+AAAARAAAA08AAABeAAAAXgAAAF4AAABPAAAARAAAAT4AAABEAAADRAAAAUQAAANRAAABUQAAA14AAABRAAACPgAAAEQAAAJPAAAAXgAAAF4AAABeAAAATwAAAEQAAAE+AAAAWgAAAFoAAAFaAAAAUQAAAV4AAABRAAABUQAAAz4AAABEAAADUAAAAk8AAABQAAAATwAAAFAAAABEAAABPgAAAA==
+      0,3:
+        ind: 0,3
+        tiles: WgAAAloAAAFaAAABXgAAAF4AAABRAAADXgAAAD4AAABEAAABRAAAAkQAAABEAAABRAAAAEQAAABEAAACPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,2:
+        ind: 1,2
+        tiles: UQAAAV4AAABEAAACRAAAAUQAAAFEAAABRAAAA0QAAAJEAAACRAAAAUQAAAI+AAAAFgAAARYAAAEWAAABFgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABeAAAAXgAAAF4AAABEAAABRAAAA0QAAANEAAACPgAAACgAAABEAAADRAAAAkQAAAFEAAADRAAAAUQAAABEAAABVgAAAV4AAABeAAAAXgAAAFYAAABeAAAARAAAAz4AAABRAAAARAAAA0QAAANEAAACRAAAAUQAAANEAAACRAAAAF4AAABeAAAAXgAAAF4AAABEAAADRAAAAEQAAAI+AAAAKAAAAEQAAAJEAAACRAAAAkQAAANEAAACRAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAUQAAAJEAAADRAAAA0QAAABEAAABRAAAAT4AAABEAAABRAAAA14AAABEAAAAXgAAAEQAAAJEAAADPgAAAEQAAAJEAAAARAAAA0QAAABEAAAARAAAA0QAAAA+AAAARAAAAkQAAABEAAADRAAAAEQAAANEAAACRAAAAz4AAABEAAACRAAAAEQAAAFEAAAARAAAAEQAAAFEAAACPgAAAEQAAAJEAAADXgAAAEQAAANeAAAARAAAAkQAAAI+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAB8AAAMWAAACFgAAAR8AAAMWAAACFgAAAh8AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAABXgAAACwAAABeAAAALAAAAF4AAAAWAAACPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAywAAAAsAAAAXgAAACwAAAAsAAAAFgAAAz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAFeAAAAXgAAAF4AAABeAAAAXgAAAB8AAAI+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAADLAAAACwAAABeAAAALAAAACwAAAAWAAABPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAV4AAAAsAAAAXgAAACwAAABeAAAAFgAAAz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,3:
+        ind: 1,3
+        tiles: HwAAAxYAAAAWAAAAHwAAABYAAAAWAAADHwAAAz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      2,0:
+        ind: 2,0
+        tiles: OgAAADoAAABEAAAAPgAAAEQAAANEAAACRAAAAl4AAAAxAAAAMQAAADEAAABeAAAARAAAAEQAAABEAAAAXgAAADoAAAA6AAAARAAAAD4AAABEAAACRAAAAkQAAAFeAAAAXgAAAE8AAABeAAAAXgAAAEQAAABEAAAARAAAAF4AAAA6AAAARAAAAEQAAAA+AAAARAAAA0QAAANEAAACRAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAUQAAAFEAAABEAAAAPgAAAEQAAABEAAABRAAAAV4AAABeAAAATwAAAF4AAABeAAAAMAAAADAAAAAwAAAAXgAAAFEAAABeAAAARAAAAD4AAABEAAAARAAAAUQAAAJeAAAAWwAAAFsAAABbAAAAXgAAADAAAAAwAAAAMAAAAF4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAATgAAAE4AAABOAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAABYAAABEAAAATgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAWAAAARAAAAE4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAFgAAAEQAAABOAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAE4AAABOAAAATgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAA0QAAAJEAAADUQAAAFEAAABRAAAAUQAAAD4AAAAfAAAAHwAAAB8AAAAfAAAAXgAAAB8AAAAfAAAAPgAAAEQAAAFEAAACRAAAA1EAAABRAAAAUQAAAFEAAAA+AAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAD4AAAAWAAAAFgAAAEQAAAFEAAACRAAAA1EAAABRAAAAPgAAAEQAAABEAAADRAAAAF4AAABEAAAAXgAAAF4AAAA+AAAAXgAAABYAAABEAAACRAAAAkQAAAJRAAAAUQAAAD4AAABEAAAARAAAAF4AAABeAAAAXgAAAF4AAABEAAADPgAAAA==
+      3,0:
+        ind: 3,0
+        tiles: WwAAAFsAAABbAAAAXgAAAEQAAAFEAAACRAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAABPAAAAXgAAAF4AAABEAAABRAAAA0QAAAM+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAARAAAAEQAAABEAAAARAAAAkQAAABEAAADPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAE8AAABeAAAAXgAAAEQAAAJEAAAARAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFsAAABbAAAAWwAAAF4AAABEAAABRAAAA0QAAAM+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      2,-1:
+        ind: 2,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+      3,-1:
+        ind: 3,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      3,1:
+        ind: 3,1
+        tiles: PgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      3,2:
+        ind: 3,2
+        tiles: PgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      2,2:
+        ind: 2,2
+        tiles: FgAAARYAAAMWAAACFgAAARYAAAMWAAABFgAAAxYAAAEWAAABPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAACRAAAAigAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAkQAAANRAAACPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAAKAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAAJEAAAARAAAAl4AAABEAAADXgAAAD4AAABEAAADRAAAAUQAAAFEAAABRAAAAEQAAANEAAACPgAAAEQAAABEAAACRAAAAV4AAABEAAACRAAAAEQAAAI+AAAARAAAA0QAAANEAAABRAAAA0QAAANEAAABRAAAAD4AAABEAAAAXgAAAF4AAABEAAACRAAAAF4AAABeAAAAPgAAAEQAAAJEAAACRAAAAUQAAANEAAACRAAAAUQAAAE+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      2,1:
+        ind: 2,1
+        tiles: FgAAABYAAABeAAAARAAAAUQAAAFRAAAAUQAAAD4AAABEAAADRAAAAl4AAABEAAABXgAAAEQAAAFEAAACPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABRAAACUQAAAFEAAAM+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAUQAAAFEAAAJRAAACPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAFEAAANRAAACUQAAAz4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABRAAACOgAAADoAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAUQAAADoAAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAWAAADFgAAABYAAAAWAAACFgAAABYAAAIWAAADFgAAAxYAAAE+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAFgAAAxYAAAEWAAABFgAAAxYAAAEWAAABFgAAARYAAAAWAAABPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+    type: MapGrid
+  - nextUpdate: 14529.6397815
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection:
+      0,1:
+        0:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 4,42
+        1:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 4,43
+        2:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 4,44
+        3:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 5,44
+        4:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 6,44
+        5:
+          color: '#FFFFFFFF'
+          id: Box
+          coordinates: 5,43
+        6:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 3,47
+        7:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 3,46
+        8:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 3,44
+        9:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 3,43
+        10:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 3,42
+        11:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 3,42
+        12:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 3,43
+        13:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 3,44
+        14:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 4,45
+        15:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 6,45
+        16:
+          color: '#D381C996'
+          id: WarnLineGreyscaleS
+          coordinates: 5,45
+        18:
+          color: '#FFFFFFFF'
+          id: WarnBox
+          coordinates: 4,48
+        19:
+          color: '#FFFFFFFF'
+          id: WarnBox
+          coordinates: 6,48
+        20:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,46
+        21:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,47
+        22:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 3,48
+        23:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 5,48
+        24:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 6,47
+        25:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,48
+        26:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 2,47
+        27:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 3,47
+        28:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 3,46
+        29:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,47
+        30:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 5,48
+        31:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 5,47
+        32:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,45
+        33:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 3,44
+        34:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 6,45
+        35:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 4,47
+        36:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtHeavy
+          coordinates: 4,46
+        37:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtHeavy
+          coordinates: 3,47
+        38:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtHeavy
+          coordinates: 5,48
+        39:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 3,44
+        40:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 5,45
+        41:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,46
+        42:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,45
+        43:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 4,45
+        44:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 3,46
+        45:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 4,46
+        46:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 3,42
+        47:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 1,47
+        48:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 2,48
+        49:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 1,48
+        50:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 0,48
+        51:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 2,48
+        52:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 1,48
+        53:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 0,48
+        54:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 0,42
+        55:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 0,43
+        56:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 0,44
+        63:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 5,40
+        58:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 5,39
+        59:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 4,39
+        60:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 3,39
+        61:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 2,39
+        62:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 1,39
+        64:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 4,40
+        65:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 3,40
+        66:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 2,40
+        67:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 1,40
+        68:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 5,38
+        69:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 4,38
+        70:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 3,38
+        71:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 2,38
+        72:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 1,38
+        73:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 6,40
+        74:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 6,38
+        75:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 0,38
+        76:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 0,40
+        77:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 1,40
+        78:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 2,40
+        79:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 5,40
+        80:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 4,40
+        81:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 3,40
+        82:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 5,38
+        83:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 4,38
+        84:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 3,38
+        85:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 2,38
+        86:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 1,38
+        87:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 6,39
+        88:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 0,39
+        89:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 14,38
+        90:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 14,40
+        91:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 8,40
+        92:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 8,38
+        93:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 9,40
+        94:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 10,40
+        95:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 11,40
+        96:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 12,40
+        97:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 13,40
+        98:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 13,38
+        99:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 12,38
+        100:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 11,38
+        101:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 10,38
+        102:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 9,38
+        103:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 14,39
+        104:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 8,39
+        105:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 2,42
+        106:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 2,43
+        107:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 2,44
+        108:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 2,45
+        109:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 2,46
+        110:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 1,46
+        111:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 0,46
+        112:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 12,38
+        113:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 11,38
+        114:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 10,38
+        115:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 12,40
+        116:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 11,40
+        117:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 10,40
+        118:
+          color: '#D381C996'
+          id: BrickTileWhiteEndW
+          coordinates: 13,39
+        119:
+          color: '#D381C996'
+          id: BrickTileWhiteEndE
+          coordinates: 9,39
+        120:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 13,40
+        121:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 9,40
+        122:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 13,38
+        123:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 9,38
+        124:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 22,38
+        125:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 16,40
+        126:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 22,40
+        127:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 16,38
+        128:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 21,38
+        129:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 20,38
+        130:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 19,38
+        131:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 18,38
+        132:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 17,38
+        133:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 22,39
+        134:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 16,39
+        135:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 17,40
+        136:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 19,40
+        137:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 18,40
+        138:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 20,40
+        139:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 21,40
+        140:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 17,39
+        141:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 18,39
+        142:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 19,39
+        143:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 20,39
+        144:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 21,39
+        145:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 17,40
+        146:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 18,40
+        147:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 19,40
+        148:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 20,40
+        149:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 21,40
+        150:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 21,38
+        151:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 20,38
+        152:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 19,38
+        153:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,38
+        154:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 17,38
+        155:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 17,38
+        156:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 17,39
+        157:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 18,39
+        158:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 21,38
+        159:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 17,39
+        160:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 16,40
+        161:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 20,39
+        162:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,38
+        163:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,40
+        164:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,39
+        165:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 5,39
+        166:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 1,39
+        167:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 22,40
+        168:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 30,38
+        175:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 30,40
+        174:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 24,40
+        180:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 24,38
+        223:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 25,39
+        222:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 29,39
+        231:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 27,39
+        217:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 25,40
+        185:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 29,40
+        206:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 29,38
+        218:
+          color: '#D381C996'
+          id: BrickTileWhiteEndW
+          coordinates: 28,39
+        230:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 27,38
+        219:
+          color: '#D381C996'
+          id: BrickTileWhiteEndE
+          coordinates: 26,39
+        210:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 25,38
+        211:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 30,39
+        216:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 24,39
+        224:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 25,39
+        225:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 29,39
+        226:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 29,40
+        227:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 25,40
+        228:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 29,38
+        229:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 25,38
+        232:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 27,40
+        243:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 29,39
+        244:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 29,40
+        245:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 27,39
+        246:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 26,39
+        247:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 27,40
+        248:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 27,38
+        249:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 24,39
+        250:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 30,38
+        279:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 8,44
+        280:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 8,45
+        281:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 8,46
+        282:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 8,47
+        283:
+          color: '#EFB34196'
+          id: CheckerNESW
+          coordinates: 8,48
+        284:
+          color: '#EFB34196'
+          id: CheckerNWSE
+          coordinates: 14,48
+        285:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 14,44
+        286:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 14,45
+        287:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 14,46
+        288:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 14,47
+        289:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 9,48
+        290:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 10,48
+        291:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 13,48
+        292:
+          color: '#EFB34196'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 12,48
+        293:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,44
+        294:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,45
+        295:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,46
+        296:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,47
+        297:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,48
+        298:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 9,48
+        299:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 10,48
+        300:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 14,44
+        301:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 14,45
+        302:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 14,46
+        303:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 14,47
+        304:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 14,48
+        305:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 13,48
+        306:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 12,48
+        307:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 12,44
+        308:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 11,44
+        309:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 10,44
+        310:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 12,47
+        311:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 10,47
+        312:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 13,47
+        313:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 11,47
+        314:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 9,47
+        315:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 12,43
+        316:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 11,43
+        317:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 10,43
+        318:
+          color: '#FFFFFFFF'
+          id: StandClear
+          coordinates: 11,44
+        319:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 10,44
+        320:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 9,45
+        321:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,46
+        322:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,47
+        323:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,48
+        324:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 14,44
+        325:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,42
+        326:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 11,42
+        327:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 10,42
+        328:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 8,45
+        329:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,44
+        330:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,45
+        331:
+          color: '#FFFFFFFF'
+          id: chevron
+          coordinates: 11,48
+        332:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineN
+          coordinates: 21,42
+        333:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineN
+          coordinates: 20,42
+        334:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineN
+          coordinates: 18,42
+        335:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineN
+          coordinates: 17,42
+        336:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineE
+          coordinates: 16,43
+        337:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineE
+          coordinates: 16,44
+        338:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineE
+          coordinates: 16,46
+        339:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineE
+          coordinates: 16,47
+        340:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineS
+          coordinates: 17,48
+        341:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineS
+          coordinates: 18,48
+        342:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineS
+          coordinates: 20,48
+        343:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineS
+          coordinates: 21,48
+        344:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineW
+          coordinates: 22,43
+        345:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineW
+          coordinates: 22,44
+        346:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineW
+          coordinates: 22,46
+        347:
+          color: '#334E6DC8'
+          id: BrickTileWhiteLineW
+          coordinates: 22,47
+        348:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 19,48
+        349:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 22,45
+        350:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 19,42
+        351:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 16,45
+        352:
+          color: '#334E6DC8'
+          id: BrickTileWhiteInnerSw
+          coordinates: 22,48
+        353:
+          color: '#334E6DC8'
+          id: BrickTileWhiteInnerSe
+          coordinates: 16,48
+        354:
+          color: '#334E6DC8'
+          id: BrickTileWhiteInnerNe
+          coordinates: 16,42
+        355:
+          color: '#334E6DC8'
+          id: BrickTileWhiteInnerNw
+          coordinates: 22,42
+        356:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 9,36
+        357:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 8,36
+        358:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 7,36
+        423:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 4,36
+        400:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 1,36
+        399:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 2,36
+        362:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 3,36
+        363:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 1,36
+        364:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 2,36
+        365:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 9,34
+        366:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 7,34
+        367:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 8,34
+        425:
+          angle: -1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 10,35
+        434:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 14,36
+        430:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 6,34
+        371:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 3,34
+        372:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 2,34
+        373:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 1,34
+        374:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 10,34
+        375:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 10,36
+        376:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 0,34
+        377:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 0,36
+        378:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 10,35
+        379:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 0,35
+        380:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 1,35
+        381:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 2,35
+        382:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 3,35
+        428:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 4,36
+        435:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 13,36
+        420:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 4,34
+        386:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 7,35
+        387:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 8,35
+        388:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 9,35
+        389:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 9,36
+        390:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 8,36
+        391:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 7,36
+        424:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 6,36
+        398:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 3,36
+        432:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 6,36
+        427:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 4,34
+        401:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 9,34
+        402:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 8,34
+        403:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 7,34
+        421:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 6,34
+        433:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 15,36
+        429:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 4,35
+        407:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 3,34
+        408:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 2,34
+        409:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 1,34
+        431:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 6,35
+        426:
+          angle: 1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 0,35
+        436:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 20,36
+        437:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 21,36
+        438:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 12,36
+        439:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 22,36
+        440:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 21,34
+        441:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 20,34
+        442:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 19,34
+        443:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 13,34
+        444:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 22,34
+        445:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 12,34
+        446:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 12,35
+        447:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 22,35
+        448:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 21,34
+        449:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 20,34
+        450:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 19,34
+        451:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 13,34
+        452:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 21,36
+        453:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 20,36
+        454:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 15,36
+        455:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 14,36
+        456:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 13,36
+        458:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 22,35
+        459:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 22,34
+        460:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 21,34
+        461:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 12,36
+        462:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,36
+        463:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 12,35
+        464:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,34
+        465:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 12,35
+        466:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 12,34
+        467:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 19,34
+        468:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 15,34
+        469:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 19,35
+        470:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 15,34
+        471:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 19,35
+        472:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 17,35
+        473:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 16,34
+        474:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 18,36
+        477:
+          color: '#FFFFFFFF'
+          id: Grasse1
+          coordinates: 24,36
+        478:
+          color: '#FFFFFFFF'
+          id: Grassd3
+          coordinates: 24,34
+        480:
+          color: '#FFFFFFFF'
+          id: BushCTwo
+          coordinates: 24,36
+        482:
+          color: '#FFFFFFFF'
+          id: Bushc3
+          coordinates: 24,34
+        484:
+          color: '#FFFFFFFF'
+          id: Flowersy2
+          coordinates: 24,36
+        486:
+          color: '#FFFFFFFF'
+          id: FlowersBROne
+          coordinates: 24,34
+        488:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 25,36
+        490:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 25,34
+        492:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 25,35
+        493:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 26,34
+        494:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 27,34
+        495:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 28,34
+        496:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 29,34
+        497:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 30,34
+        498:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 31,34
+        500:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 26,36
+        501:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 27,36
+        502:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 28,36
+        503:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 29,36
+        504:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 30,36
+        505:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 31,36
+        507:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 31,35
+        508:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 30,35
+        509:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 29,35
+        510:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 28,35
+        511:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 27,35
+        513:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 26,35
+        514:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 31,34
+        515:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 30,34
+        516:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 29,34
+        517:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 28,34
+        518:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 27,34
+        519:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 27,36
+        520:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 28,36
+        521:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 29,36
+        522:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 30,36
+        523:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 31,36
+        525:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 26,36
+        551:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerSw
+          coordinates: 1,32
+        606:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 24,32
+        537:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 4,32
+        539:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 5,32
+        540:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSe
+          coordinates: 7,32
+        554:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 0,32
+        555:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 4,32
+        556:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 5,32
+        605:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 25,32
+        558:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSe
+          coordinates: 7,32
+        570:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 0,32
+        571:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 1,32
+        607:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 23,32
+        608:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 22,32
+        609:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 21,32
+        610:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 20,32
+        611:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 19,32
+        612:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 18,32
+        613:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 26,32
+        625:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 25,32
+        626:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 24,32
+        627:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 23,32
+        628:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,32
+        629:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 21,32
+        630:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 20,32
+        631:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 19,32
+        632:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 18,32
+        643:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 10,32
+        644:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 11,32
+        655:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 5,32
+        657:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 4,32
+        660:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 16,32
+        661:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 15,32
+        666:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 14,32
+        670:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 15,32
+        684:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Caution
+          coordinates: 11,42
+        685:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 14,42
+        787:
+          color: '#D381C996'
+          id: DeliveryGreyscale
+          coordinates: 24,35
+        813:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 31,32
+        814:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 30,32
+        815:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 29,32
+        829:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 28,32
+        849:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 31,32
+        850:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 30,32
+        855:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 29,32
+      1,1:
+        236:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 37,39
+        170:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 46,38
+        171:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 40,40
+        172:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 32,40
+        238:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 35,40
+        177:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 46,40
+        178:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 40,38
+        179:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 32,38
+        233:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 36,39
+        234:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 34,39
+        188:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 35,40
+        189:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 36,40
+        237:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 36,40
+        191:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 41,40
+        192:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 42,40
+        193:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 43,40
+        194:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 44,40
+        195:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 45,40
+        196:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 45,38
+        197:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 44,38
+        198:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 43,38
+        199:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 42,38
+        200:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 41,38
+        201:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 37,38
+        235:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 33,39
+        203:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 34,38
+        204:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 35,38
+        205:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 33,38
+        212:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 38,39
+        213:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 46,39
+        214:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 40,39
+        215:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 32,39
+        239:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 37,38
+        240:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 35,38
+        241:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 34,38
+        242:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 33,38
+        251:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 34,39
+        252:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 33,39
+        253:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 37,39
+        254:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 37,38
+        255:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 38,39
+        256:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 38,38
+        257:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 38,40
+        258:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 37,40
+        259:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 34,40
+        260:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 36,38
+        261:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 45,39
+        262:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 44,39
+        263:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 43,39
+        264:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 42,39
+        265:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 41,39
+        266:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 45,38
+        267:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 44,38
+        268:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 43,38
+        269:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 42,38
+        270:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 41,38
+        271:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 41,40
+        272:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 42,40
+        273:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 43,40
+        274:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 44,40
+        275:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 45,40
+        276:
+          angle: -1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 40,39
+        277:
+          angle: 1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 46,39
+        475:
+          color: '#FFFFFFFF'
+          id: Grasse2
+          coordinates: 34,34
+        476:
+          color: '#FFFFFFFF'
+          id: Grasse3
+          coordinates: 34,36
+        479:
+          color: '#FFFFFFFF'
+          id: Grassa4
+          coordinates: 34,34
+        481:
+          color: '#FFFFFFFF'
+          id: BushCThree
+          coordinates: 34,36
+        483:
+          color: '#FFFFFFFF'
+          id: Flowersy4
+          coordinates: 34,34
+        485:
+          color: '#FFFFFFFF'
+          id: Flowerspv1
+          coordinates: 34,36
+        487:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 33,34
+        489:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 33,36
+        491:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 33,35
+        499:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 32,34
+        506:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 32,36
+        512:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 32,35
+        524:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 32,34
+        786:
+          color: '#D381C996'
+          id: DeliveryGreyscale
+          coordinates: 34,35
+        805:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 39,32
+        806:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 38,32
+        807:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 36,32
+        808:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 37,32
+        809:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 35,32
+        810:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 34,32
+        811:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 32,32
+        812:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 33,32
+        828:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 40,32
+        842:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 38,32
+        843:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 37,32
+        844:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 36,32
+        845:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 35,32
+        846:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 34,32
+        847:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 33,32
+        848:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 32,32
+        853:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 39,32
+      0,0:
+        548:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 12,30
+        550:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSw
+          coordinates: 1,31
+        552:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 3,31
+        549:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNe
+          coordinates: 11,30
+        545:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 9,31
+        547:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNe
+          coordinates: 11,31
+        546:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 10,31
+        541:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNw
+          coordinates: 5,30
+        615:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 18,30
+        543:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 7,30
+        544:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 8,30
+        553:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 2,31
+        559:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 8,30
+        560:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 7,30
+        614:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 26,30
+        562:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNw
+          coordinates: 5,30
+        563:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 9,31
+        564:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 10,31
+        565:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNe
+          coordinates: 11,31
+        566:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 12,30
+        567:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 11,30
+        568:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 3,31
+        569:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 2,31
+        572:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSw
+          coordinates: 1,31
+        573:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 1,24
+        574:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 0,25
+        575:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 0,26
+        576:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 0,27
+        577:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 2,25
+        578:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 2,26
+        579:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 2,27
+        580:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 1,28
+        581:
+          color: '#FFFFFFFF'
+          id: WarnCornerSE
+          coordinates: 2,24
+        582:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 0,28
+        583:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 2,28
+        584:
+          color: '#FFFFFFFF'
+          id: WarnCornerSW
+          coordinates: 0,24
+        585:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineE
+          coordinates: 6,25
+        586:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineE
+          coordinates: 6,26
+        587:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineE
+          coordinates: 6,27
+        588:
+          color: '#9FED5896'
+          id: BrickTileWhiteCornerNe
+          coordinates: 6,28
+        589:
+          color: '#9FED5896'
+          id: BrickTileWhiteCornerNw
+          coordinates: 4,28
+        590:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineW
+          coordinates: 4,27
+        591:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineW
+          coordinates: 4,26
+        600:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 5,25
+        593:
+          color: '#9FED5896'
+          id: BrickTileWhiteCornerSw
+          coordinates: 4,24
+        594:
+          color: '#9FED5896'
+          id: BrickTileWhiteCornerSe
+          coordinates: 6,24
+        595:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineS
+          coordinates: 5,24
+        596:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineN
+          coordinates: 5,28
+        597:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 6,27
+        598:
+          color: '#FFFFFFFF'
+          id: BotLeft
+          coordinates: 6,28
+        599:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 4,27
+        601:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 5,26
+        602:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 5,27
+        603:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 5,28
+        604:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 5,24
+        616:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 19,30
+        617:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 20,30
+        618:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 21,30
+        619:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 22,30
+        620:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 23,30
+        621:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 24,30
+        622:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 25,30
+        623:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 26,31
+        624:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 18,31
+        633:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,30
+        634:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 19,30
+        635:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 20,30
+        636:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 21,30
+        637:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 22,30
+        638:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 23,30
+        639:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 24,30
+        640:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 25,30
+        641:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,30
+        642:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,31
+        645:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 1,30
+        646:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 1,31
+        647:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 0,31
+        648:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 0,30
+        649:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 12,31
+        650:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 4,31
+        651:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 4,30
+        652:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 0,30
+        653:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,31
+        654:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 5,31
+        656:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 8,30
+        658:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 16,30
+        659:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 16,31
+        662:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 15,31
+        663:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 15,30
+        664:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 14,30
+        665:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 14,31
+        667:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 15,31
+        668:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 16,30
+        669:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 14,31
+        671:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 19,31
+        672:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 20,30
+        673:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 21,30
+        674:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 24,30
+        675:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 26,31
+        676:
+          cleanable: True
+          color: '#EFD841FF'
+          id: splatter
+          coordinates: 8.178589,27.034609
+        677:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtHeavy
+          coordinates: 9,25
+        678:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 9,24
+        679:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,24
+        680:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 9,26
+        681:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 10,26
+        682:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,28
+        777:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 16,27
+        771:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 14,25
+        752:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 14,28
+        788:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 22,24
+        765:
+          color: '#D381C996'
+          id: MiniTileWhiteCornerNw
+          coordinates: 12,28
+        804:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 22,28
+        750:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 14,24
+        785:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,24
+        774:
+          color: '#FFFFFFFF'
+          id: BotRight
+          coordinates: 14,27
+        780:
+          angle: -1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 17,27
+        764:
+          color: '#D381C996'
+          id: MiniTileWhiteCornerNe
+          coordinates: 13,28
+        768:
+          color: '#D381C996'
+          id: MiniTileWhiteLineW
+          coordinates: 12,25
+        773:
+          color: '#FFFFFFFF'
+          id: BotRight
+          coordinates: 14,25
+        824:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 31,30
+        783:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,26
+        792:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 21,25
+        784:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,25
+        754:
+          color: '#FFFFFFFF'
+          id: BotRight
+          coordinates: 14,26
+        762:
+          color: '#D381C996'
+          id: MiniTileWhiteLineE
+          coordinates: 13,27
+        779:
+          angle: -1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 17,26
+        769:
+          color: '#D381C996'
+          id: MiniTileWhiteCornerSw
+          coordinates: 12,24
+        770:
+          color: '#D381C996'
+          id: MiniTileWhiteCornerSe
+          coordinates: 13,24
+        791:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 20,25
+        790:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 20,24
+        782:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,27
+        751:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 14,26
+        767:
+          color: '#D381C996'
+          id: MiniTileWhiteLineW
+          coordinates: 12,26
+        766:
+          color: '#D381C996'
+          id: MiniTileWhiteLineW
+          coordinates: 12,27
+        776:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 16,26
+        761:
+          color: '#D381C996'
+          id: MiniTileWhiteLineE
+          coordinates: 13,26
+        789:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 21,24
+        781:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 18,28
+        778:
+          angle: -1.5707963267948966 rad
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 17,25
+        775:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 16,25
+        760:
+          color: '#D381C996'
+          id: MiniTileWhiteLineE
+          coordinates: 13,25
+        772:
+          color: '#D381C996'
+          id: MonoOverlay
+          coordinates: 14,27
+        795:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 21,26
+        796:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 20,26
+        797:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 20,27
+        798:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 21,27
+        803:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 22,24
+        800:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 22,28
+        801:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 21,28
+        802:
+          color: '#D381C996'
+          id: DiagonalCheckerBOverlay
+          coordinates: 20,28
+        825:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 30,30
+        826:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 29,30
+        830:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 28,30
+        832:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 28,31
+        840:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 31,30
+        841:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 30,30
+        852:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 29,31
+        856:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 29,30
+        857:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 4,22
+        858:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 3,22
+        859:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 4,20
+        860:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 3,20
+        861:
+          color: '#FFFFFFFF'
+          id: WarnCornerSW
+          coordinates: 2,20
+        862:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 2,21
+        863:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 2,22
+        864:
+          color: '#9FED5812'
+          id: MonoOverlay
+          coordinates: 8,19
+        865:
+          color: '#9FED5812'
+          id: MonoOverlay
+          coordinates: 8,20
+        866:
+          color: '#9FED5812'
+          id: MonoOverlay
+          coordinates: 8,21
+        867:
+          color: '#9FED5812'
+          id: MonoOverlay
+          coordinates: 7,20
+        868:
+          color: '#9FED5812'
+          id: MonoOverlay
+          coordinates: 9,20
+        869:
+          color: '#FFFFFFFF'
+          id: Grasse3
+          coordinates: 8,19
+        870:
+          color: '#FFFFFFFF'
+          id: Grasse2
+          coordinates: 8.059679,20.049887
+        871:
+          color: '#FFFFFFFF'
+          id: Grasse1
+          coordinates: 8.981554,20.003012
+        872:
+          color: '#FFFFFFFF'
+          id: Grassd1
+          coordinates: 7.044054,20.018637
+        873:
+          color: '#FFFFFFFF'
+          id: Grassd3
+          coordinates: 8.012804,20.987387
+        874:
+          color: '#FFFFFFFF'
+          id: Flowersy3
+          coordinates: 7.934679,18.971762
+        875:
+          color: '#FFFFFFFF'
+          id: Grassa5
+          coordinates: 8.997179,19.971762
+        876:
+          color: '#FFFFFFFF'
+          id: Grassb5
+          coordinates: 7.044054,20.034262
+        877:
+          color: '#FFFFFFFF'
+          id: Grassb3
+          coordinates: 7.997179,21.034262
+        878:
+          color: '#FFFFFFFF'
+          id: Bushb3
+          coordinates: 7.997179,19.971762
+        879:
+          color: '#FFFFFFFF'
+          id: FlowersBRTwo
+          coordinates: 8,21
+        880:
+          color: '#FFFFFFFF'
+          id: Flowerspv1
+          coordinates: 9,20
+        881:
+          color: '#FFFFFFFF'
+          id: Flowerspv3
+          coordinates: 7,20
+        882:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 8,18
+        883:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 8,22
+        884:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 6,20
+        885:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 10,20
+        886:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNw
+          coordinates: 9,19
+        887:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSe
+          coordinates: 7,21
+        888:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNe
+          coordinates: 7,19
+        889:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSw
+          coordinates: 9,21
+        890:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 10,21
+        891:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 9,22
+        892:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 6,19
+        893:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 7,18
+        900:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNw
+          coordinates: 6,21
+        895:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 10,19
+        896:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 6,21
+        897:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 7,22
+        899:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 9,18
+        901:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNw
+          coordinates: 7,22
+        902:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNe
+          coordinates: 10,21
+        903:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNe
+          coordinates: 9,22
+        904:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSe
+          coordinates: 10,19
+        905:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSe
+          coordinates: 9,18
+        906:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSw
+          coordinates: 7,18
+        907:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSw
+          coordinates: 6,19
+        908:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 8,18
+        909:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 6,20
+        910:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 8,22
+        911:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 10,20
+        912:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerSe
+          coordinates: 9,19
+        913:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerSw
+          coordinates: 7,19
+        914:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNe
+          coordinates: 9,21
+        915:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNw
+          coordinates: 7,21
+        916:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 13,20
+        917:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 15,20
+        918:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 14,21
+        919:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 14,19
+        920:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerSw
+          coordinates: 15,21
+        921:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerSe
+          coordinates: 13,21
+        922:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNw
+          coordinates: 15,19
+        923:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNe
+          coordinates: 13,19
+        924:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 14,19
+        925:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 15,20
+        926:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNw
+          coordinates: 13,21
+        927:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerNe
+          coordinates: 15,21
+        928:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSe
+          coordinates: 15,19
+        929:
+          color: '#D381C996'
+          id: BrickTileWhiteCornerSw
+          coordinates: 13,19
+        930:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 13,20
+        931:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 14,21
+        932:
+          color: '#FFFFFFFF'
+          id: BushCTwo
+          coordinates: 12,18
+        933:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 13,18
+        934:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 14,18
+        935:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 15,18
+        936:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 13,22
+        937:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 14,22
+        938:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 15,22
+        939:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 16,19
+        940:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 16,20
+        941:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 16,21
+        942:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale270
+          coordinates: 12,19
+        943:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale270
+          coordinates: 12,20
+        944:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale270
+          coordinates: 12,21
+        945:
+          color: '#D381C996'
+          id: ThreeQuarterTileOverlayGreyscale180
+          coordinates: 16,18
+        946:
+          color: '#D381C996'
+          id: ThreeQuarterTileOverlayGreyscale90
+          coordinates: 16,22
+        947:
+          color: '#D381C996'
+          id: ThreeQuarterTileOverlayGreyscale
+          coordinates: 12,22
+        948:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 5,6
+        949:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 5,7
+        950:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 0,6
+        951:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 0,7
+        952:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 7,10
+        953:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 8,10
+        954:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 9,10
+        955:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinCornerSe
+          coordinates: 10,8
+        956:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinCornerSw
+          coordinates: 1,8
+        957:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinCornerNw
+          coordinates: 1,9
+        958:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinCornerNe
+          coordinates: 10,9
+        959:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 9,9
+        960:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 8,9
+        961:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 7,9
+        962:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 6,9
+        963:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 5,9
+        964:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 4,9
+        965:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 3,9
+        966:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineN
+          coordinates: 2,9
+        967:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 10,8
+        968:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 9,8
+        969:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 8,8
+        970:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 7,8
+        971:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 6,8
+        972:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 5,8
+        973:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 4,8
+        974:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 3,8
+        975:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 2,8
+        976:
+          color: '#FFFFFFFF'
+          id: WoodTrimThinLineS
+          coordinates: 1,8
+        982:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelEndN
+          coordinates: 4,7
+        981:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelEndN
+          coordinates: 1,7
+        984:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 1,6
+        983:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 4,6
+        985:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 4,6
+        986:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 1,6
+        987:
+          color: '#FFFFFFFF'
+          id: Rock01
+          coordinates: 22,18
+        988:
+          color: '#FFFFFFFF'
+          id: Rock03
+          coordinates: 18,18
+        989:
+          color: '#FFFFFFFF'
+          id: Rock05
+          coordinates: 22,22
+        990:
+          color: '#FFFFFFFF'
+          id: Rock04
+          coordinates: 18,22
+        991:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 19,20
+        992:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 20,21
+        993:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 20,20
+        994:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 21,20
+        995:
+          color: '#D381C996'
+          id: CheckerNESW
+          coordinates: 20,19
+        996:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 21,21
+        997:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 19,19
+        998:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 18,21
+        999:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 22,21
+        1000:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 21,22
+        1001:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 21,18
+        1002:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 22,19
+        1003:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 18,19
+        1004:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 19,18
+        1005:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 19,22
+        1006:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 19,21
+        1007:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNe
+          coordinates: 21,21
+        1008:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSe
+          coordinates: 21,19
+        1009:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerSw
+          coordinates: 19,19
+        1010:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineE
+          coordinates: 28,19
+        1011:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineE
+          coordinates: 28,20
+        1012:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineE
+          coordinates: 28,21
+        1013:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 27,22
+        1014:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 26,22
+        1015:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 25,22
+        1016:
+          color: '#EFB34196'
+          id: BrickTileWhiteCornerNw
+          coordinates: 24,22
+        1017:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineW
+          coordinates: 24,21
+        1018:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineW
+          coordinates: 24,20
+        1019:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineW
+          coordinates: 24,19
+        1020:
+          color: '#EFB34196'
+          id: BrickTileWhiteCornerSw
+          coordinates: 24,18
+        1021:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 25,18
+        1022:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 26,18
+        1023:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 27,18
+        1024:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 27,18
+        1025:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 26,18
+        1026:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 25,18
+        1027:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 27,22
+        1028:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 26,22
+        1029:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 25,22
+        1030:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 30,18
+        1031:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 30,19
+        1032:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 31,19
+        1033:
+          color: '#D381C996'
+          id: FullTileOverlayGreyscale
+          coordinates: 31,18
+        1041:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 30,18
+        1042:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 30,19
+        1043:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 21,18
+        1044:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 22,19
+        1045:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 21,19
+        1046:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 19,18
+        1047:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 18,21
+        1048:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 25,18
+        1049:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 24,19
+        1050:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 28,20
+        1051:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 26,22
+        1052:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 31,19
+        1053:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 30,20
+        1057:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 14,22
+        1058:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,21
+        1059:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 13,19
+        1060:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 15,18
+        1061:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 16,20
+        1062:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 9,18
+        1063:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 10,19
+        1064:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 6,19
+        1065:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 8,22
+        1066:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 4,20
+        1067:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 2,22
+        1068:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 2,18
+        1069:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 0,21
+        1070:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 0,19
+        1071:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 1,12
+        1072:
+          color: '#FFFFFFFF'
+          id: Bot
+          coordinates: 1,13
+        1073:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 5,13
+        1074:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 11,13
+        1079:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 11,12
+        1081:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 13,12
+        1080:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 12,12
+        1082:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 10,12
+        1083:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 9,12
+        1084:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 14,13
+        1085:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 14,14
+        1086:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 14,15
+        1087:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 13,16
+        1088:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 11,16
+        1089:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 12,16
+        1090:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 10,16
+        1091:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 9,16
+        1092:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 8,13
+        1093:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 8,14
+        1094:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 8,15
+        1125:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallNW
+          coordinates: 14,12
+        1122:
+          color: '#D381C996'
+          id: BrickTileSteelCornerSw
+          coordinates: 8,12
+        1117:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 12,12
+        1119:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 10,12
+        1116:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 13,12
+        1100:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 14,13
+        1101:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 14,14
+        1102:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 14,15
+        1124:
+          color: '#D381C996'
+          id: BrickTileSteelCornerNw
+          coordinates: 8,16
+        1118:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 11,12
+        1105:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 8,13
+        1106:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 8,14
+        1107:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 8,15
+        1121:
+          color: '#D381C996'
+          id: BrickTileSteelCornerSe
+          coordinates: 14,12
+        1109:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 11,16
+        1110:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 10,16
+        1111:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 9,16
+        1120:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 9,12
+        1113:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 12,16
+        1114:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 13,16
+        1123:
+          color: '#D381C996'
+          id: BrickTileSteelCornerNe
+          coordinates: 14,16
+        1126:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallNE
+          coordinates: 8,12
+        1127:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallSW
+          coordinates: 14,16
+        1128:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallSE
+          coordinates: 8,16
+        1129:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,12
+        1130:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,13
+        1131:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,14
+        1132:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,15
+        1133:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 22,16
+        1134:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 22,16
+        1135:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 21,16
+        1136:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 20,16
+        1137:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 19,16
+        1138:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 18,16
+        1139:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 17,16
+        1140:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 16,16
+        1141:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 16,15
+        1142:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 16,14
+        1143:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 16,13
+        1144:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 16,12
+        1145:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 16,12
+        1146:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 17,12
+        1147:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 18,12
+        1148:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 19,12
+        1149:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 20,12
+        1150:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 21,12
+        1246:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 1,0
+        1214:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 13,4
+        1215:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 14,4
+        1294:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 12,4
+        1217:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 11,4
+        1218:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 10,4
+        1219:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 9,4
+        1220:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 7,4
+        1221:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 8,4
+        1222:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 6,4
+        1223:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 5,4
+        1304:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 5,3
+        1225:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 3,4
+        1244:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 15,4
+        1243:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 1,4
+        1245:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 15,0
+        1229:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 2,0
+        1230:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 3,0
+        1231:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 4,0
+        1232:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 5,0
+        1233:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 6,0
+        1234:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 7,0
+        1235:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 8,0
+        1236:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 9,0
+        1237:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 10,0
+        1238:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 11,0
+        1239:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 12,0
+        1240:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 13,0
+        1241:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 14,0
+        1247:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 15,1
+        1248:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 15,2
+        1249:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 15,3
+        1250:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 2,4
+        1251:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 1,1
+        1252:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 1,2
+        1253:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 1,3
+        1254:
+          color: '#FFFFFFFF'
+          id: BushCTwo
+          coordinates: 8,2
+        1255:
+          color: '#FFFFFFFF'
+          id: Bushb2
+          coordinates: 10,2
+        1256:
+          color: '#FFFFFFFF'
+          id: Busha2
+          coordinates: 6,2
+        1257:
+          color: '#FFFFFFFF'
+          id: BushAOne
+          coordinates: 12,2
+        1258:
+          color: '#FFFFFFFF'
+          id: Bushc1
+          coordinates: 11,2
+        1259:
+          color: '#FFFFFFFF'
+          id: BushCThree
+          coordinates: 4,2
+        1260:
+          color: '#FFFFFFFF'
+          id: Grassb4
+          coordinates: 5,2
+        1261:
+          color: '#FFFFFFFF'
+          id: Grassa2
+          coordinates: 7,2
+        1262:
+          color: '#FFFFFFFF'
+          id: Grassa4
+          coordinates: 9,2
+        1263:
+          color: '#FFFFFFFF'
+          id: Flowerspv1
+          coordinates: 5,2
+        1264:
+          color: '#FFFFFFFF'
+          id: Flowerspv3
+          coordinates: 7,2
+        1265:
+          color: '#FFFFFFFF'
+          id: Flowerspv2
+          coordinates: 9,2
+        1266:
+          color: '#FFFFFFFF'
+          id: Flowerspv1
+          coordinates: 12,2
+        1267:
+          color: '#FFFFFFFF'
+          id: Bushh3
+          coordinates: 9,2
+        1268:
+          color: '#FFFFFFFF'
+          id: Bushh3
+          coordinates: 4,2
+        1269:
+          color: '#FFFFFFFF'
+          id: Bushe4
+          coordinates: 4,2
+        1317:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 5,1
+        1314:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 8,1
+        1316:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 6,1
+        1315:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 7,1
+        1318:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 4,1
+        1319:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 3,1
+        1313:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 9,1
+        1312:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 10,1
+        1310:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 12,1
+        1311:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 11,1
+        1309:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 13,1
+        1308:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 14,2
+        1307:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 14,3
+        1306:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 3,3
+        1305:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 4,3
+        1296:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 13,3
+        1295:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 4,4
+        1297:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 12,3
+        1298:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 11,3
+        1300:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 9,3
+        1299:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 10,3
+        1301:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 7,3
+        1302:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 8,3
+        1303:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale270
+          coordinates: 6,3
+        1320:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 2,1
+        1321:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 2,2
+        1322:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 21,6
+        1323:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 20,6
+        1324:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 18,6
+        1325:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 19,6
+        1326:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 17,6
+        1327:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 16,6
+        1328:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 15,6
+        1329:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 14,6
+        1330:
+          color: '#D381C996'
+          id: BrickTileSteelLineS
+          coordinates: 13,6
+        1331:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 21,10
+        1332:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 20,10
+        1333:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 18,10
+        1334:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 19,10
+        1335:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 17,10
+        1336:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 16,10
+        1337:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 15,10
+        1338:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 13,10
+        1339:
+          color: '#D381C996'
+          id: BrickTileSteelLineN
+          coordinates: 14,10
+        1340:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 22,7
+        1341:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 22,8
+        1342:
+          color: '#D381C996'
+          id: BrickTileSteelLineE
+          coordinates: 22,9
+        1343:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 12,7
+        1344:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 12,8
+        1345:
+          color: '#D381C996'
+          id: BrickTileSteelLineW
+          coordinates: 12,9
+        1346:
+          color: '#D381C996'
+          id: BrickTileSteelCornerSw
+          coordinates: 12,6
+        1347:
+          color: '#D381C996'
+          id: BrickTileSteelCornerSe
+          coordinates: 22,6
+        1348:
+          color: '#D381C996'
+          id: BrickTileSteelCornerNe
+          coordinates: 22,10
+        1349:
+          color: '#D381C996'
+          id: BrickTileSteelCornerNw
+          coordinates: 12,10
+        1350:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 21,6
+        1351:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 20,6
+        1352:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 19,6
+        1353:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 17,6
+        1354:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 18,6
+        1355:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 16,6
+        1356:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 15,6
+        1357:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 14,6
+        1358:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 13,6
+        1359:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 21,10
+        1360:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 20,10
+        1361:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 19,10
+        1362:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 18,10
+        1363:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 17,10
+        1364:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 16,10
+        1365:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 15,10
+        1366:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 14,10
+        1367:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 13,10
+        1368:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 21,7
+        1369:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 21,8
+        1370:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 21,9
+        1371:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 19,7
+        1372:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 19,8
+        1373:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 19,9
+        1374:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 15,7
+        1375:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 15,8
+        1376:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 15,9
+        1377:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 13,7
+        1378:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 13,8
+        1379:
+          color: '#9FED5896'
+          id: FullTileOverlayGreyscale
+          coordinates: 13,9
+        1380:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineS
+          coordinates: 21,10
+        1381:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineS
+          coordinates: 19,10
+        1382:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineS
+          coordinates: 15,10
+        1383:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineS
+          coordinates: 13,10
+        1384:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineN
+          coordinates: 21,6
+        1385:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineN
+          coordinates: 19,6
+        1386:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineN
+          coordinates: 13,6
+        1387:
+          color: '#9FED5896'
+          id: BrickTileWhiteLineN
+          coordinates: 15,6
+        1388:
+          color: '#FFFFFFFF'
+          id: HalfTileOverlayGreyscale
+          coordinates: 26,2
+        1389:
+          color: '#FFFFFFFF'
+          id: HalfTileOverlayGreyscale
+          coordinates: 30,2
+        1390:
+          color: '#FFFFFFFF'
+          id: HalfTileOverlayGreyscale
+          coordinates: 22,2
+        1429:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 18,2
+        1394:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 30,2
+        1395:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 26,2
+        1396:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 22,2
+        1428:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 18,1
+        1427:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 18,0
+        1399:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 19,3
+        1400:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 20,3
+        1401:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 21,3
+        1402:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 22,3
+        1403:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 23,3
+        1404:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 24,3
+        1405:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 26,3
+        1406:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 25,3
+        1407:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 27,3
+        1408:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 28,3
+        1409:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 29,3
+        1410:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 30,3
+        1411:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 31,3
+        1416:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 28,2
+        1417:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 24,2
+        1418:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 20,2
+        1419:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 21,2
+        1420:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 25,2
+        1421:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 29,2
+        1423:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 31,2
+        1424:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 27,2
+        1425:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 23,2
+        1426:
+          color: '#FFFFFFFF'
+          id: WarnCornerNW
+          coordinates: 19,2
+        1430:
+          color: '#D381C996'
+          id: BrickTileWhiteLineE
+          coordinates: 18,4
+        1436:
+          color: '#D381C996'
+          id: WarnLineGreyscaleE
+          coordinates: 18,3
+        1437:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 27,4
+        1438:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 28,4
+        1439:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 25,4
+        1440:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 24,4
+        1441:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 29,4
+        1442:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 30,4
+        1443:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 31,4
+        1445:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 23,4
+        1446:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 22,4
+        1447:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 21,4
+        1448:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 20,4
+        1449:
+          color: '#D381C996'
+          id: WarnLineGreyscaleN
+          coordinates: 26,4
+        1452:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 25,7
+        1453:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 25,9
+        1454:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 31,9
+        1457:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 31,7
+        1458:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 27,7
+        1459:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 26,7
+        1460:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 27,9
+        1461:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 26,9
+        1501:
+          color: '#52B4E996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 27,15
+        1502:
+          color: '#52B4E996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 26,15
+        1504:
+          color: '#52B4E996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 29,16
+        1503:
+          color: '#52B4E996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 28,16
+        1505:
+          color: '#52B4E996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 30,15
+        1521:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 24,14
+        1506:
+          color: '#52B4E996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 28,13
+        1520:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 30,15
+        1519:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 30,14
+        1491:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale
+          coordinates: 25,15
+        1492:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale
+          coordinates: 24,14
+        1493:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale
+          coordinates: 27,16
+        1495:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale180
+          coordinates: 27,12
+        1494:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale90
+          coordinates: 30,16
+        1496:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale180
+          coordinates: 29,13
+        1497:
+          color: '#52B4E996'
+          id: ThreeQuarterTileOverlayGreyscale180
+          coordinates: 30,14
+        1498:
+          color: '#52B4E996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 27,13
+        1499:
+          color: '#52B4E996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 29,14
+        1500:
+          color: '#52B4E996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 25,14
+        1518:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 27,12
+        1510:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 25,15
+        1511:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 26,15
+        1512:
+          color: '#FFFFFFFF'
+          id: WarnLineS
+          coordinates: 27,16
+        1513:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallNW
+          coordinates: 27,15
+        1514:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 29,13
+        1515:
+          color: '#FFFFFFFF'
+          id: WarnLineN
+          coordinates: 28,13
+        1516:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 27,12
+        1517:
+          color: '#FFFFFFFF'
+          id: WarnCornerSmallSE
+          coordinates: 27,13
+        1522:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 27,16
+        1523:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 27,15
+        1524:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 28,15
+        1525:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 27,14
+        1526:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 25,15
+        1530:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 26,13
+        1528:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 25,13
+        1529:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 24,13
+        1531:
+          color: '#FFFFFFFF'
+          id: WarnLineE
+          coordinates: 26,12
+      1,0:
+        816:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 39,30
+        817:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 38,30
+        818:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 37,30
+        819:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 36,30
+        820:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 35,30
+        821:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 34,30
+        822:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 33,30
+        823:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 32,30
+        827:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 40,30
+        831:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 40,31
+        833:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 38,30
+        834:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 37,30
+        835:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 36,30
+        836:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 35,30
+        837:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 34,30
+        838:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 33,30
+        839:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 32,30
+        851:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 39,31
+        854:
+          color: '#D381C996'
+          id: BrickTileWhiteInnerNw
+          coordinates: 39,30
+        1034:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 34,20
+        1035:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 33,20
+        1036:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 32,21
+        1037:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale90
+          coordinates: 32,22
+        1038:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale90
+          coordinates: 32,20
+        1039:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 34,18
+        1040:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 33,18
+        1054:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 34,19
+        1055:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 32,18
+        1056:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 32,22
+        1151:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 38,0
+        1152:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 54,0
+        1155:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 36,4
+        1154:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNw
+          coordinates: 52,4
+        1156:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 38,4
+        1157:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 36,0
+        1158:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 52,0
+        1159:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerNe
+          coordinates: 54,4
+        1160:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 53,4
+        1161:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 37,4
+        1162:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 37,0
+        1163:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 38,1
+        1195:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 52,2
+        1165:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 38,3
+        1166:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 54,1
+        1167:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 54,2
+        1168:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 54,3
+        1169:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 53,0
+        1170:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 52,1
+        1197:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 50,2
+        1172:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 52,3
+        1173:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 36,1
+        1174:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 36,2
+        1175:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 36,3
+        1176:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 37,1
+        1177:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 37,2
+        1178:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 37,3
+        1179:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 53,1
+        1180:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 53,2
+        1181:
+          color: '#D381C996'
+          id: CheckerNWSE
+          coordinates: 53,3
+        1182:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 38,1
+        1194:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 38,2
+        1184:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 38,3
+        1185:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 36,1
+        1186:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 36,2
+        1187:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 36,3
+        1188:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 52,1
+        1196:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 51,2
+        1190:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale180
+          coordinates: 52,3
+        1191:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 54,1
+        1192:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 54,2
+        1193:
+          color: '#D381C996'
+          id: QuarterTileOverlayGreyscale
+          coordinates: 54,3
+        1198:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 48,2
+        1199:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 47,2
+        1200:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 46,2
+        1201:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 44,2
+        1202:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 42,2
+        1203:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 43,2
+        1204:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 40,2
+        1205:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineN
+          coordinates: 39,2
+        1206:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteInnerNw
+          coordinates: 52,2
+        1207:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteInnerNe
+          coordinates: 38,2
+        1208:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSe
+          coordinates: 46,0
+        1209:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteCornerSw
+          coordinates: 44,0
+        1210:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineS
+          coordinates: 45,0
+        1211:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineE
+          coordinates: 46,1
+        1212:
+          color: '#FFFFFFFF'
+          id: BrickTileWhiteLineW
+          coordinates: 44,1
+        1433:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 34,2
+        1432:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 34,1
+        1412:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 32,3
+        1413:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale180
+          coordinates: 33,3
+        1431:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 34,0
+        1415:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 32,2
+        1422:
+          color: '#FFFFFFFF'
+          id: WarnCornerNE
+          coordinates: 33,2
+        1434:
+          color: '#D381C996'
+          id: BrickTileWhiteLineW
+          coordinates: 34,4
+        1435:
+          color: '#D381C996'
+          id: WarnLineGreyscaleW
+          coordinates: 34,3
+        1444:
+          color: '#D381C996'
+          id: HalfTileOverlayGreyscale
+          coordinates: 32,4
+        1450:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 33,7
+        1451:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 33,9
+        1455:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineN
+          coordinates: 32,9
+        1456:
+          color: '#EFB34196'
+          id: BrickTileWhiteLineS
+          coordinates: 32,7
+        1540:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 37,15
+        1538:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineN
+          coordinates: 36,13
+        1539:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineW
+          coordinates: 37,14
+        1533:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNw
+          coordinates: 37,16
+        1532:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNw
+          coordinates: 35,13
+        1534:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerNe
+          coordinates: 38,16
+        1535:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSe
+          coordinates: 38,12
+        1536:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelCornerSw
+          coordinates: 35,12
+        1537:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelInnerNw
+          coordinates: 37,13
+        1541:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 38,13
+        1542:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 38,14
+        1543:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineE
+          coordinates: 38,15
+        1544:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 37,12
+        1545:
+          color: '#FFFFFFFF'
+          id: BrickTileSteelLineS
+          coordinates: 36,12
+        1546:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 33,16
+        1547:
+          color: '#D381C996'
+          id: BrickTileWhiteLineN
+          coordinates: 32,16
+        1548:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 32,14
+        1549:
+          color: '#D381C996'
+          id: BrickTileWhiteLineS
+          coordinates: 33,14
+        1550:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 34,13
+        1551:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 33,15
+        1552:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtMedium
+          coordinates: 34,12
+        1553:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 33,12
+        1554:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 34,14
+        1555:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 35,12
+        1556:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 33,15
+        1557:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 34,15
+        1558:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: DirtLight
+          coordinates: 38,12
+        1559:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 44,12
+        1560:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 44,15
+        1561:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 42,16
+        1562:
+          cleanable: True
+          color: '#FFFFFFFF'
+          id: Dirt
+          coordinates: 46,14
+        1563:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 40,16
+        1564:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 41,15
+        1565:
+          color: '#FFFFFFFF'
+          id: Delivery
+          coordinates: 43,16
+        1566:
+          color: '#FFFFFFFF'
+          id: Arrows
+          coordinates: 41,14
+        1567:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 45,13
+        1568:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 46,13
+        1569:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 44,13
+        1570:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 43,13
+        1571:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 42,13
+        1572:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 41,13
+        1573:
+          color: '#FFFFFFFF'
+          id: WarnLineW
+          coordinates: 40,13
+    type: DecalGrid
+  - type: RadiationGridResistance
+- uid: 1
+  type: CableApcExtension
+  components:
+  - pos: 0.5,39.5
+    parent: 0
+    type: Transform
+- uid: 2
+  type: CableApcExtension
+  components:
+  - pos: 1.5,39.5
+    parent: 0
+    type: Transform
+- uid: 3
+  type: CableApcExtension
+  components:
+  - pos: 2.5,39.5
+    parent: 0
+    type: Transform
+- uid: 4
+  type: CableApcExtension
+  components:
+  - pos: 3.5,39.5
+    parent: 0
+    type: Transform
+- uid: 5
+  type: CableApcExtension
+  components:
+  - pos: 4.5,39.5
+    parent: 0
+    type: Transform
+- uid: 6
+  type: CableApcExtension
+  components:
+  - pos: 5.5,39.5
+    parent: 0
+    type: Transform
+- uid: 7
+  type: CableApcExtension
+  components:
+  - pos: 6.5,39.5
+    parent: 0
+    type: Transform
+- uid: 8
+  type: CableApcExtension
+  components:
+  - pos: 8.5,39.5
+    parent: 0
+    type: Transform
+- uid: 9
+  type: CableApcExtension
+  components:
+  - pos: 9.5,39.5
+    parent: 0
+    type: Transform
+- uid: 10
+  type: CableApcExtension
+  components:
+  - pos: 10.5,39.5
+    parent: 0
+    type: Transform
+- uid: 11
+  type: CableApcExtension
+  components:
+  - pos: 11.5,39.5
+    parent: 0
+    type: Transform
+- uid: 12
+  type: CableApcExtension
+  components:
+  - pos: 12.5,39.5
+    parent: 0
+    type: Transform
+- uid: 13
+  type: CableApcExtension
+  components:
+  - pos: 13.5,39.5
+    parent: 0
+    type: Transform
+- uid: 14
+  type: CableApcExtension
+  components:
+  - pos: 14.5,39.5
+    parent: 0
+    type: Transform
+- uid: 15
+  type: CableApcExtension
+  components:
+  - pos: 16.5,39.5
+    parent: 0
+    type: Transform
+- uid: 16
+  type: CableApcExtension
+  components:
+  - pos: 17.5,39.5
+    parent: 0
+    type: Transform
+- uid: 17
+  type: CableApcExtension
+  components:
+  - pos: 18.5,39.5
+    parent: 0
+    type: Transform
+- uid: 18
+  type: CableApcExtension
+  components:
+  - pos: 19.5,39.5
+    parent: 0
+    type: Transform
+- uid: 19
+  type: CableApcExtension
+  components:
+  - pos: 20.5,39.5
+    parent: 0
+    type: Transform
+- uid: 20
+  type: CableApcExtension
+  components:
+  - pos: 21.5,39.5
+    parent: 0
+    type: Transform
+- uid: 21
+  type: CableApcExtension
+  components:
+  - pos: 22.5,39.5
+    parent: 0
+    type: Transform
+- uid: 22
+  type: CableApcExtension
+  components:
+  - pos: 24.5,39.5
+    parent: 0
+    type: Transform
+- uid: 23
+  type: CableApcExtension
+  components:
+  - pos: 25.5,39.5
+    parent: 0
+    type: Transform
+- uid: 24
+  type: CableApcExtension
+  components:
+  - pos: 26.5,39.5
+    parent: 0
+    type: Transform
+- uid: 25
+  type: CableApcExtension
+  components:
+  - pos: 27.5,39.5
+    parent: 0
+    type: Transform
+- uid: 26
+  type: CableApcExtension
+  components:
+  - pos: 28.5,39.5
+    parent: 0
+    type: Transform
+- uid: 27
+  type: CableApcExtension
+  components:
+  - pos: 29.5,39.5
+    parent: 0
+    type: Transform
+- uid: 28
+  type: CableApcExtension
+  components:
+  - pos: 30.5,39.5
+    parent: 0
+    type: Transform
+- uid: 29
+  type: CableApcExtension
+  components:
+  - pos: 32.5,39.5
+    parent: 0
+    type: Transform
+- uid: 30
+  type: CableApcExtension
+  components:
+  - pos: 33.5,39.5
+    parent: 0
+    type: Transform
+- uid: 31
+  type: CableApcExtension
+  components:
+  - pos: 34.5,39.5
+    parent: 0
+    type: Transform
+- uid: 32
+  type: CableApcExtension
+  components:
+  - pos: 35.5,39.5
+    parent: 0
+    type: Transform
+- uid: 33
+  type: CableApcExtension
+  components:
+  - pos: 36.5,39.5
+    parent: 0
+    type: Transform
+- uid: 34
+  type: CableApcExtension
+  components:
+  - pos: 37.5,39.5
+    parent: 0
+    type: Transform
+- uid: 35
+  type: CableApcExtension
+  components:
+  - pos: 38.5,39.5
+    parent: 0
+    type: Transform
+- uid: 36
+  type: CableApcExtension
+  components:
+  - pos: 40.5,39.5
+    parent: 0
+    type: Transform
+- uid: 37
+  type: CableApcExtension
+  components:
+  - pos: 41.5,39.5
+    parent: 0
+    type: Transform
+- uid: 38
+  type: CableApcExtension
+  components:
+  - pos: 42.5,39.5
+    parent: 0
+    type: Transform
+- uid: 39
+  type: CableApcExtension
+  components:
+  - pos: 43.5,39.5
+    parent: 0
+    type: Transform
+- uid: 40
+  type: CableApcExtension
+  components:
+  - pos: 44.5,39.5
+    parent: 0
+    type: Transform
+- uid: 41
+  type: CableApcExtension
+  components:
+  - pos: 45.5,39.5
+    parent: 0
+    type: Transform
+- uid: 42
+  type: CableApcExtension
+  components:
+  - pos: 46.5,39.5
+    parent: 0
+    type: Transform
+- uid: 43
+  type: CableApcExtension
+  components:
+  - pos: 34.5,35.5
+    parent: 0
+    type: Transform
+- uid: 44
+  type: CableApcExtension
+  components:
+  - pos: 33.5,35.5
+    parent: 0
+    type: Transform
+- uid: 45
+  type: CableApcExtension
+  components:
+  - pos: 32.5,35.5
+    parent: 0
+    type: Transform
+- uid: 46
+  type: CableApcExtension
+  components:
+  - pos: 31.5,35.5
+    parent: 0
+    type: Transform
+- uid: 47
+  type: CableApcExtension
+  components:
+  - pos: 30.5,35.5
+    parent: 0
+    type: Transform
+- uid: 48
+  type: CableApcExtension
+  components:
+  - pos: 29.5,35.5
+    parent: 0
+    type: Transform
+- uid: 49
+  type: CableApcExtension
+  components:
+  - pos: 28.5,35.5
+    parent: 0
+    type: Transform
+- uid: 50
+  type: CableApcExtension
+  components:
+  - pos: 27.5,35.5
+    parent: 0
+    type: Transform
+- uid: 51
+  type: CableApcExtension
+  components:
+  - pos: 26.5,35.5
+    parent: 0
+    type: Transform
+- uid: 52
+  type: CableApcExtension
+  components:
+  - pos: 25.5,35.5
+    parent: 0
+    type: Transform
+- uid: 53
+  type: CableApcExtension
+  components:
+  - pos: 24.5,35.5
+    parent: 0
+    type: Transform
+- uid: 54
+  type: CableApcExtension
+  components:
+  - pos: 22.5,35.5
+    parent: 0
+    type: Transform
+- uid: 55
+  type: CableApcExtension
+  components:
+  - pos: 21.5,35.5
+    parent: 0
+    type: Transform
+- uid: 56
+  type: CableApcExtension
+  components:
+  - pos: 20.5,35.5
+    parent: 0
+    type: Transform
+- uid: 57
+  type: CableApcExtension
+  components:
+  - pos: 19.5,35.5
+    parent: 0
+    type: Transform
+- uid: 58
+  type: CableApcExtension
+  components:
+  - pos: 18.5,35.5
+    parent: 0
+    type: Transform
+- uid: 59
+  type: CableApcExtension
+  components:
+  - pos: 17.5,35.5
+    parent: 0
+    type: Transform
+- uid: 60
+  type: CableApcExtension
+  components:
+  - pos: 16.5,35.5
+    parent: 0
+    type: Transform
+- uid: 61
+  type: CableApcExtension
+  components:
+  - pos: 15.5,35.5
+    parent: 0
+    type: Transform
+- uid: 62
+  type: CableApcExtension
+  components:
+  - pos: 14.5,35.5
+    parent: 0
+    type: Transform
+- uid: 63
+  type: CableApcExtension
+  components:
+  - pos: 13.5,35.5
+    parent: 0
+    type: Transform
+- uid: 64
+  type: CableApcExtension
+  components:
+  - pos: 12.5,35.5
+    parent: 0
+    type: Transform
+- uid: 65
+  type: CableApcExtension
+  components:
+  - pos: 10.5,35.5
+    parent: 0
+    type: Transform
+- uid: 66
+  type: CableApcExtension
+  components:
+  - pos: 9.5,35.5
+    parent: 0
+    type: Transform
+- uid: 67
+  type: CableApcExtension
+  components:
+  - pos: 8.5,35.5
+    parent: 0
+    type: Transform
+- uid: 68
+  type: CableApcExtension
+  components:
+  - pos: 7.5,35.5
+    parent: 0
+    type: Transform
+- uid: 69
+  type: CableApcExtension
+  components:
+  - pos: 6.5,35.5
+    parent: 0
+    type: Transform
+- uid: 70
+  type: CableApcExtension
+  components:
+  - pos: 5.5,35.5
+    parent: 0
+    type: Transform
+- uid: 71
+  type: CableApcExtension
+  components:
+  - pos: 4.5,35.5
+    parent: 0
+    type: Transform
+- uid: 72
+  type: CableApcExtension
+  components:
+  - pos: 3.5,35.5
+    parent: 0
+    type: Transform
+- uid: 73
+  type: CableApcExtension
+  components:
+  - pos: 2.5,35.5
+    parent: 0
+    type: Transform
+- uid: 74
+  type: CableApcExtension
+  components:
+  - pos: 1.5,35.5
+    parent: 0
+    type: Transform
+- uid: 75
+  type: CableApcExtension
+  components:
+  - pos: 0.5,35.5
+    parent: 0
+    type: Transform
+- uid: 76
+  type: CableApcExtension
+  components:
+  - pos: 3.5,42.5
+    parent: 0
+    type: Transform
+- uid: 77
+  type: CableApcExtension
+  components:
+  - pos: 3.5,43.5
+    parent: 0
+    type: Transform
+- uid: 78
+  type: CableApcExtension
+  components:
+  - pos: 3.5,44.5
+    parent: 0
+    type: Transform
+- uid: 79
+  type: CableApcExtension
+  components:
+  - pos: 3.5,45.5
+    parent: 0
+    type: Transform
+- uid: 80
+  type: CableApcExtension
+  components:
+  - pos: 3.5,46.5
+    parent: 0
+    type: Transform
+- uid: 81
+  type: CableApcExtension
+  components:
+  - pos: 3.5,47.5
+    parent: 0
+    type: Transform
+- uid: 82
+  type: CableApcExtension
+  components:
+  - pos: 3.5,48.5
+    parent: 0
+    type: Transform
+- uid: 83
+  type: CableApcExtension
+  components:
+  - pos: 0.5,45.5
+    parent: 0
+    type: Transform
+- uid: 84
+  type: CableApcExtension
+  components:
+  - pos: 1.5,45.5
+    parent: 0
+    type: Transform
+- uid: 85
+  type: CableApcExtension
+  components:
+  - pos: 2.5,45.5
+    parent: 0
+    type: Transform
+- uid: 86
+  type: CableApcExtension
+  components:
+  - pos: 4.5,45.5
+    parent: 0
+    type: Transform
+- uid: 87
+  type: CableApcExtension
+  components:
+  - pos: 5.5,45.5
+    parent: 0
+    type: Transform
+- uid: 88
+  type: CableApcExtension
+  components:
+  - pos: 6.5,45.5
+    parent: 0
+    type: Transform
+- uid: 89
+  type: CableApcExtension
+  components:
+  - pos: 8.5,45.5
+    parent: 0
+    type: Transform
+- uid: 90
+  type: CableApcExtension
+  components:
+  - pos: 9.5,45.5
+    parent: 0
+    type: Transform
+- uid: 91
+  type: CableApcExtension
+  components:
+  - pos: 10.5,45.5
+    parent: 0
+    type: Transform
+- uid: 92
+  type: CableApcExtension
+  components:
+  - pos: 11.5,45.5
+    parent: 0
+    type: Transform
+- uid: 93
+  type: CableApcExtension
+  components:
+  - pos: 12.5,45.5
+    parent: 0
+    type: Transform
+- uid: 94
+  type: CableApcExtension
+  components:
+  - pos: 13.5,45.5
+    parent: 0
+    type: Transform
+- uid: 95
+  type: CableApcExtension
+  components:
+  - pos: 14.5,45.5
+    parent: 0
+    type: Transform
+- uid: 96
+  type: CableApcExtension
+  components:
+  - pos: 11.5,42.5
+    parent: 0
+    type: Transform
+- uid: 97
+  type: CableApcExtension
+  components:
+  - pos: 11.5,43.5
+    parent: 0
+    type: Transform
+- uid: 98
+  type: CableApcExtension
+  components:
+  - pos: 11.5,44.5
+    parent: 0
+    type: Transform
+- uid: 99
+  type: CableApcExtension
+  components:
+  - pos: 11.5,46.5
+    parent: 0
+    type: Transform
+- uid: 100
+  type: CableApcExtension
+  components:
+  - pos: 11.5,47.5
+    parent: 0
+    type: Transform
+- uid: 101
+  type: CableApcExtension
+  components:
+  - pos: 11.5,48.5
+    parent: 0
+    type: Transform
+- uid: 102
+  type: CableApcExtension
+  components:
+  - pos: 16.5,45.5
+    parent: 0
+    type: Transform
+- uid: 103
+  type: CableApcExtension
+  components:
+  - pos: 17.5,45.5
+    parent: 0
+    type: Transform
+- uid: 104
+  type: CableApcExtension
+  components:
+  - pos: 18.5,45.5
+    parent: 0
+    type: Transform
+- uid: 105
+  type: CableApcExtension
+  components:
+  - pos: 19.5,45.5
+    parent: 0
+    type: Transform
+- uid: 106
+  type: CableApcExtension
+  components:
+  - pos: 20.5,45.5
+    parent: 0
+    type: Transform
+- uid: 107
+  type: CableApcExtension
+  components:
+  - pos: 21.5,45.5
+    parent: 0
+    type: Transform
+- uid: 108
+  type: CableApcExtension
+  components:
+  - pos: 22.5,45.5
+    parent: 0
+    type: Transform
+- uid: 109
+  type: CableApcExtension
+  components:
+  - pos: 19.5,42.5
+    parent: 0
+    type: Transform
+- uid: 110
+  type: CableApcExtension
+  components:
+  - pos: 19.5,43.5
+    parent: 0
+    type: Transform
+- uid: 111
+  type: CableApcExtension
+  components:
+  - pos: 19.5,44.5
+    parent: 0
+    type: Transform
+- uid: 112
+  type: CableApcExtension
+  components:
+  - pos: 19.5,46.5
+    parent: 0
+    type: Transform
+- uid: 113
+  type: CableApcExtension
+  components:
+  - pos: 19.5,47.5
+    parent: 0
+    type: Transform
+- uid: 114
+  type: CableApcExtension
+  components:
+  - pos: 19.5,48.5
+    parent: 0
+    type: Transform
+- uid: 115
+  type: CableApcExtension
+  components:
+  - pos: 40.5,31.5
+    parent: 0
+    type: Transform
+- uid: 116
+  type: CableApcExtension
+  components:
+  - pos: 39.5,31.5
+    parent: 0
+    type: Transform
+- uid: 117
+  type: CableApcExtension
+  components:
+  - pos: 38.5,31.5
+    parent: 0
+    type: Transform
+- uid: 118
+  type: CableApcExtension
+  components:
+  - pos: 37.5,31.5
+    parent: 0
+    type: Transform
+- uid: 119
+  type: CableApcExtension
+  components:
+  - pos: 36.5,31.5
+    parent: 0
+    type: Transform
+- uid: 120
+  type: CableApcExtension
+  components:
+  - pos: 35.5,31.5
+    parent: 0
+    type: Transform
+- uid: 121
+  type: CableApcExtension
+  components:
+  - pos: 34.5,31.5
+    parent: 0
+    type: Transform
+- uid: 122
+  type: CableApcExtension
+  components:
+  - pos: 33.5,31.5
+    parent: 0
+    type: Transform
+- uid: 123
+  type: CableApcExtension
+  components:
+  - pos: 32.5,31.5
+    parent: 0
+    type: Transform
+- uid: 124
+  type: CableApcExtension
+  components:
+  - pos: 31.5,31.5
+    parent: 0
+    type: Transform
+- uid: 125
+  type: CableApcExtension
+  components:
+  - pos: 30.5,31.5
+    parent: 0
+    type: Transform
+- uid: 126
+  type: CableApcExtension
+  components:
+  - pos: 29.5,31.5
+    parent: 0
+    type: Transform
+- uid: 127
+  type: CableApcExtension
+  components:
+  - pos: 28.5,31.5
+    parent: 0
+    type: Transform
+- uid: 128
+  type: CableApcExtension
+  components:
+  - pos: 26.5,31.5
+    parent: 0
+    type: Transform
+- uid: 129
+  type: CableApcExtension
+  components:
+  - pos: 25.5,31.5
+    parent: 0
+    type: Transform
+- uid: 130
+  type: CableApcExtension
+  components:
+  - pos: 24.5,31.5
+    parent: 0
+    type: Transform
+- uid: 131
+  type: CableApcExtension
+  components:
+  - pos: 23.5,31.5
+    parent: 0
+    type: Transform
+- uid: 132
+  type: CableApcExtension
+  components:
+  - pos: 22.5,31.5
+    parent: 0
+    type: Transform
+- uid: 133
+  type: CableApcExtension
+  components:
+  - pos: 21.5,31.5
+    parent: 0
+    type: Transform
+- uid: 134
+  type: CableApcExtension
+  components:
+  - pos: 20.5,31.5
+    parent: 0
+    type: Transform
+- uid: 135
+  type: CableApcExtension
+  components:
+  - pos: 19.5,31.5
+    parent: 0
+    type: Transform
+- uid: 136
+  type: CableApcExtension
+  components:
+  - pos: 18.5,31.5
+    parent: 0
+    type: Transform
+- uid: 137
+  type: CableApcExtension
+  components:
+  - pos: 17.5,31.5
+    parent: 0
+    type: Transform
+- uid: 138
+  type: CableApcExtension
+  components:
+  - pos: 16.5,31.5
+    parent: 0
+    type: Transform
+- uid: 139
+  type: CableApcExtension
+  components:
+  - pos: 15.5,31.5
+    parent: 0
+    type: Transform
+- uid: 140
+  type: CableApcExtension
+  components:
+  - pos: 14.5,31.5
+    parent: 0
+    type: Transform
+- uid: 141
+  type: CableApcExtension
+  components:
+  - pos: 11.5,31.5
+    parent: 0
+    type: Transform
+- uid: 142
+  type: CableApcExtension
+  components:
+  - pos: 10.5,31.5
+    parent: 0
+    type: Transform
+- uid: 143
+  type: CableApcExtension
+  components:
+  - pos: 9.5,31.5
+    parent: 0
+    type: Transform
+- uid: 144
+  type: CableApcExtension
+  components:
+  - pos: 8.5,31.5
+    parent: 0
+    type: Transform
+- uid: 145
+  type: CableApcExtension
+  components:
+  - pos: 7.5,31.5
+    parent: 0
+    type: Transform
+- uid: 146
+  type: CableApcExtension
+  components:
+  - pos: 6.5,31.5
+    parent: 0
+    type: Transform
+- uid: 147
+  type: CableApcExtension
+  components:
+  - pos: 5.5,31.5
+    parent: 0
+    type: Transform
+- uid: 148
+  type: CableApcExtension
+  components:
+  - pos: 4.5,31.5
+    parent: 0
+    type: Transform
+- uid: 149
+  type: CableApcExtension
+  components:
+  - pos: 3.5,31.5
+    parent: 0
+    type: Transform
+- uid: 150
+  type: CableApcExtension
+  components:
+  - pos: 2.5,31.5
+    parent: 0
+    type: Transform
+- uid: 151
+  type: CableApcExtension
+  components:
+  - pos: 1.5,31.5
+    parent: 0
+    type: Transform
+- uid: 152
+  type: CableApcExtension
+  components:
+  - pos: 0.5,31.5
+    parent: 0
+    type: Transform
+- uid: 153
+  type: CableApcExtension
+  components:
+  - pos: 12.5,31.5
+    parent: 0
+    type: Transform
+- uid: 154
+  type: CableApcExtension
+  components:
+  - pos: 1.5,24.5
+    parent: 0
+    type: Transform
+- uid: 155
+  type: CableApcExtension
+  components:
+  - pos: 1.5,25.5
+    parent: 0
+    type: Transform
+- uid: 156
+  type: CableApcExtension
+  components:
+  - pos: 1.5,26.5
+    parent: 0
+    type: Transform
+- uid: 157
+  type: CableApcExtension
+  components:
+  - pos: 1.5,27.5
+    parent: 0
+    type: Transform
+- uid: 158
+  type: CableApcExtension
+  components:
+  - pos: 1.5,28.5
+    parent: 0
+    type: Transform
+- uid: 159
+  type: CableApcExtension
+  components:
+  - pos: 5.5,28.5
+    parent: 0
+    type: Transform
+- uid: 160
+  type: CableApcExtension
+  components:
+  - pos: 5.5,27.5
+    parent: 0
+    type: Transform
+- uid: 161
+  type: CableApcExtension
+  components:
+  - pos: 5.5,26.5
+    parent: 0
+    type: Transform
+- uid: 162
+  type: CableApcExtension
+  components:
+  - pos: 5.5,25.5
+    parent: 0
+    type: Transform
+- uid: 163
+  type: CableApcExtension
+  components:
+  - pos: 5.5,24.5
+    parent: 0
+    type: Transform
+- uid: 164
+  type: CableApcExtension
+  components:
+  - pos: 4.5,26.5
+    parent: 0
+    type: Transform
+- uid: 165
+  type: CableApcExtension
+  components:
+  - pos: 6.5,26.5
+    parent: 0
+    type: Transform
+- uid: 166
+  type: CableApcExtension
+  components:
+  - pos: 2.5,26.5
+    parent: 0
+    type: Transform
+- uid: 167
+  type: CableApcExtension
+  components:
+  - pos: 0.5,26.5
+    parent: 0
+    type: Transform
+- uid: 168
+  type: CableApcExtension
+  components:
+  - pos: 9.5,24.5
+    parent: 0
+    type: Transform
+- uid: 169
+  type: CableApcExtension
+  components:
+  - pos: 9.5,25.5
+    parent: 0
+    type: Transform
+- uid: 170
+  type: CableApcExtension
+  components:
+  - pos: 9.5,26.5
+    parent: 0
+    type: Transform
+- uid: 171
+  type: CableApcExtension
+  components:
+  - pos: 9.5,27.5
+    parent: 0
+    type: Transform
+- uid: 172
+  type: CableApcExtension
+  components:
+  - pos: 9.5,28.5
+    parent: 0
+    type: Transform
+- uid: 173
+  type: CableApcExtension
+  components:
+  - pos: 10.5,26.5
+    parent: 0
+    type: Transform
+- uid: 174
+  type: CableApcExtension
+  components:
+  - pos: 8.5,26.5
+    parent: 0
+    type: Transform
+- uid: 175
+  type: CableApcExtension
+  components:
+  - pos: 3.5,38.5
+    parent: 0
+    type: Transform
+- uid: 176
+  type: CableApcExtension
+  components:
+  - pos: 3.5,40.5
+    parent: 0
+    type: Transform
+- uid: 177
+  type: CableApcExtension
+  components:
+  - pos: 11.5,38.5
+    parent: 0
+    type: Transform
+- uid: 178
+  type: CableApcExtension
+  components:
+  - pos: 11.5,40.5
+    parent: 0
+    type: Transform
+- uid: 179
+  type: CableApcExtension
+  components:
+  - pos: 19.5,38.5
+    parent: 0
+    type: Transform
+- uid: 180
+  type: CableApcExtension
+  components:
+  - pos: 19.5,40.5
+    parent: 0
+    type: Transform
+- uid: 181
+  type: CableApcExtension
+  components:
+  - pos: 27.5,38.5
+    parent: 0
+    type: Transform
+- uid: 182
+  type: CableApcExtension
+  components:
+  - pos: 27.5,40.5
+    parent: 0
+    type: Transform
+- uid: 183
+  type: CableApcExtension
+  components:
+  - pos: 35.5,38.5
+    parent: 0
+    type: Transform
+- uid: 184
+  type: CableApcExtension
+  components:
+  - pos: 35.5,40.5
+    parent: 0
+    type: Transform
+- uid: 185
+  type: CableApcExtension
+  components:
+  - pos: 43.5,38.5
+    parent: 0
+    type: Transform
+- uid: 186
+  type: CableApcExtension
+  components:
+  - pos: 43.5,40.5
+    parent: 0
+    type: Transform
+- uid: 187
+  type: CableApcExtension
+  components:
+  - pos: 29.5,36.5
+    parent: 0
+    type: Transform
+- uid: 188
+  type: CableApcExtension
+  components:
+  - pos: 29.5,34.5
+    parent: 0
+    type: Transform
+- uid: 189
+  type: CableApcExtension
+  components:
+  - pos: 17.5,34.5
+    parent: 0
+    type: Transform
+- uid: 190
+  type: CableApcExtension
+  components:
+  - pos: 17.5,36.5
+    parent: 0
+    type: Transform
+- uid: 191
+  type: CableApcExtension
+  components:
+  - pos: 5.5,34.5
+    parent: 0
+    type: Transform
+- uid: 192
+  type: CableApcExtension
+  components:
+  - pos: 5.5,36.5
+    parent: 0
+    type: Transform
+- uid: 193
+  type: CableApcExtension
+  components:
+  - pos: 6.5,32.5
+    parent: 0
+    type: Transform
+- uid: 194
+  type: CableApcExtension
+  components:
+  - pos: 6.5,30.5
+    parent: 0
+    type: Transform
+- uid: 195
+  type: CableApcExtension
+  components:
+  - pos: 20.5,32.5
+    parent: 0
+    type: Transform
+- uid: 196
+  type: CableApcExtension
+  components:
+  - pos: 20.5,30.5
+    parent: 0
+    type: Transform
+- uid: 197
+  type: CableApcExtension
+  components:
+  - pos: 34.5,32.5
+    parent: 0
+    type: Transform
+- uid: 198
+  type: CableApcExtension
+  components:
+  - pos: 34.5,30.5
+    parent: 0
+    type: Transform
+- uid: 199
+  type: CableApcExtension
+  components:
+  - pos: 13.5,24.5
+    parent: 0
+    type: Transform
+- uid: 200
+  type: CableApcExtension
+  components:
+  - pos: 13.5,25.5
+    parent: 0
+    type: Transform
+- uid: 201
+  type: CableApcExtension
+  components:
+  - pos: 13.5,26.5
+    parent: 0
+    type: Transform
+- uid: 202
+  type: CableApcExtension
+  components:
+  - pos: 13.5,27.5
+    parent: 0
+    type: Transform
+- uid: 203
+  type: CableApcExtension
+  components:
+  - pos: 13.5,28.5
+    parent: 0
+    type: Transform
+- uid: 204
+  type: CableApcExtension
+  components:
+  - pos: 12.5,26.5
+    parent: 0
+    type: Transform
+- uid: 205
+  type: CableApcExtension
+  components:
+  - pos: 14.5,26.5
+    parent: 0
+    type: Transform
+- uid: 206
+  type: CableApcExtension
+  components:
+  - pos: 17.5,24.5
+    parent: 0
+    type: Transform
+- uid: 207
+  type: CableApcExtension
+  components:
+  - pos: 17.5,25.5
+    parent: 0
+    type: Transform
+- uid: 208
+  type: CableApcExtension
+  components:
+  - pos: 17.5,26.5
+    parent: 0
+    type: Transform
+- uid: 209
+  type: CableApcExtension
+  components:
+  - pos: 17.5,27.5
+    parent: 0
+    type: Transform
+- uid: 210
+  type: CableApcExtension
+  components:
+  - pos: 17.5,28.5
+    parent: 0
+    type: Transform
+- uid: 211
+  type: CableApcExtension
+  components:
+  - pos: 16.5,26.5
+    parent: 0
+    type: Transform
+- uid: 212
+  type: CableApcExtension
+  components:
+  - pos: 18.5,26.5
+    parent: 0
+    type: Transform
+- uid: 213
+  type: CableApcExtension
+  components:
+  - pos: 21.5,24.5
+    parent: 0
+    type: Transform
+- uid: 214
+  type: CableApcExtension
+  components:
+  - pos: 21.5,25.5
+    parent: 0
+    type: Transform
+- uid: 215
+  type: CableApcExtension
+  components:
+  - pos: 21.5,26.5
+    parent: 0
+    type: Transform
+- uid: 216
+  type: CableApcExtension
+  components:
+  - pos: 21.5,27.5
+    parent: 0
+    type: Transform
+- uid: 217
+  type: CableApcExtension
+  components:
+  - pos: 21.5,28.5
+    parent: 0
+    type: Transform
+- uid: 218
+  type: CableApcExtension
+  components:
+  - pos: 20.5,26.5
+    parent: 0
+    type: Transform
+- uid: 219
+  type: CableApcExtension
+  components:
+  - pos: 22.5,26.5
+    parent: 0
+    type: Transform
+- uid: 220
+  type: CableApcExtension
+  components:
+  - pos: 2.5,18.5
+    parent: 0
+    type: Transform
+- uid: 221
+  type: CableApcExtension
+  components:
+  - pos: 2.5,19.5
+    parent: 0
+    type: Transform
+- uid: 222
+  type: CableApcExtension
+  components:
+  - pos: 2.5,20.5
+    parent: 0
+    type: Transform
+- uid: 223
+  type: CableApcExtension
+  components:
+  - pos: 2.5,21.5
+    parent: 0
+    type: Transform
+- uid: 224
+  type: CableApcExtension
+  components:
+  - pos: 2.5,22.5
+    parent: 0
+    type: Transform
+- uid: 225
+  type: CableApcExtension
+  components:
+  - pos: 3.5,20.5
+    parent: 0
+    type: Transform
+- uid: 226
+  type: CableApcExtension
+  components:
+  - pos: 4.5,20.5
+    parent: 0
+    type: Transform
+- uid: 227
+  type: CableApcExtension
+  components:
+  - pos: 1.5,20.5
+    parent: 0
+    type: Transform
+- uid: 228
+  type: CableApcExtension
+  components:
+  - pos: 0.5,20.5
+    parent: 0
+    type: Transform
+- uid: 229
+  type: CableApcExtension
+  components:
+  - pos: 8.5,18.5
+    parent: 0
+    type: Transform
+- uid: 230
+  type: CableApcExtension
+  components:
+  - pos: 7.5,19.5
+    parent: 0
+    type: Transform
+- uid: 231
+  type: CableApcExtension
+  components:
+  - pos: 7.5,21.5
+    parent: 0
+    type: Transform
+- uid: 232
+  type: CableApcExtension
+  components:
+  - pos: 7.5,18.5
+    parent: 0
+    type: Transform
+- uid: 233
+  type: CableApcExtension
+  components:
+  - pos: 8.5,22.5
+    parent: 0
+    type: Transform
+- uid: 234
+  type: CableApcExtension
+  components:
+  - pos: 6.5,19.5
+    parent: 0
+    type: Transform
+- uid: 235
+  type: CableApcExtension
+  components:
+  - pos: 6.5,20.5
+    parent: 0
+    type: Transform
+- uid: 236
+  type: CableApcExtension
+  components:
+  - pos: 6.5,21.5
+    parent: 0
+    type: Transform
+- uid: 237
+  type: CableApcExtension
+  components:
+  - pos: 10.5,20.5
+    parent: 0
+    type: Transform
+- uid: 238
+  type: CableApcExtension
+  components:
+  - pos: 14.5,18.5
+    parent: 0
+    type: Transform
+- uid: 239
+  type: CableApcExtension
+  components:
+  - pos: 14.5,19.5
+    parent: 0
+    type: Transform
+- uid: 240
+  type: CableApcExtension
+  components:
+  - pos: 14.5,20.5
+    parent: 0
+    type: Transform
+- uid: 241
+  type: CableApcExtension
+  components:
+  - pos: 14.5,21.5
+    parent: 0
+    type: Transform
+- uid: 242
+  type: CableApcExtension
+  components:
+  - pos: 14.5,22.5
+    parent: 0
+    type: Transform
+- uid: 243
+  type: CableApcExtension
+  components:
+  - pos: 13.5,20.5
+    parent: 0
+    type: Transform
+- uid: 244
+  type: CableApcExtension
+  components:
+  - pos: 12.5,20.5
+    parent: 0
+    type: Transform
+- uid: 245
+  type: CableApcExtension
+  components:
+  - pos: 15.5,20.5
+    parent: 0
+    type: Transform
+- uid: 246
+  type: CableApcExtension
+  components:
+  - pos: 16.5,20.5
+    parent: 0
+    type: Transform
+- uid: 247
+  type: CableApcExtension
+  components:
+  - pos: 20.5,18.5
+    parent: 0
+    type: Transform
+- uid: 248
+  type: CableApcExtension
+  components:
+  - pos: 20.5,19.5
+    parent: 0
+    type: Transform
+- uid: 249
+  type: CableApcExtension
+  components:
+  - pos: 20.5,20.5
+    parent: 0
+    type: Transform
+- uid: 250
+  type: CableApcExtension
+  components:
+  - pos: 20.5,21.5
+    parent: 0
+    type: Transform
+- uid: 251
+  type: CableApcExtension
+  components:
+  - pos: 20.5,22.5
+    parent: 0
+    type: Transform
+- uid: 252
+  type: CableApcExtension
+  components:
+  - pos: 19.5,20.5
+    parent: 0
+    type: Transform
+- uid: 253
+  type: CableApcExtension
+  components:
+  - pos: 18.5,20.5
+    parent: 0
+    type: Transform
+- uid: 254
+  type: CableApcExtension
+  components:
+  - pos: 21.5,20.5
+    parent: 0
+    type: Transform
+- uid: 255
+  type: CableApcExtension
+  components:
+  - pos: 22.5,20.5
+    parent: 0
+    type: Transform
+- uid: 256
+  type: CableApcExtension
+  components:
+  - pos: 26.5,18.5
+    parent: 0
+    type: Transform
+- uid: 257
+  type: CableApcExtension
+  components:
+  - pos: 26.5,19.5
+    parent: 0
+    type: Transform
+- uid: 258
+  type: CableApcExtension
+  components:
+  - pos: 26.5,20.5
+    parent: 0
+    type: Transform
+- uid: 259
+  type: CableApcExtension
+  components:
+  - pos: 26.5,21.5
+    parent: 0
+    type: Transform
+- uid: 260
+  type: CableApcExtension
+  components:
+  - pos: 26.5,22.5
+    parent: 0
+    type: Transform
+- uid: 261
+  type: GeneratorRTG
+  components:
+  - pos: 25.5,19.5
+    parent: 0
+    type: Transform
+- uid: 262
+  type: SMESBasic
+  components:
+  - pos: 26.5,20.5
+    parent: 0
+    type: Transform
+- uid: 263
+  type: CableApcExtension
+  components:
+  - pos: 27.5,20.5
+    parent: 0
+    type: Transform
+- uid: 264
+  type: CableApcExtension
+  components:
+  - pos: 28.5,20.5
+    parent: 0
+    type: Transform
+- uid: 265
+  type: CableApcExtension
+  components:
+  - pos: 32.5,18.5
+    parent: 0
+    type: Transform
+- uid: 266
+  type: CableApcExtension
+  components:
+  - pos: 32.5,19.5
+    parent: 0
+    type: Transform
+- uid: 267
+  type: CableApcExtension
+  components:
+  - pos: 32.5,20.5
+    parent: 0
+    type: Transform
+- uid: 268
+  type: CableApcExtension
+  components:
+  - pos: 32.5,21.5
+    parent: 0
+    type: Transform
+- uid: 269
+  type: CableApcExtension
+  components:
+  - pos: 32.5,22.5
+    parent: 0
+    type: Transform
+- uid: 270
+  type: CableApcExtension
+  components:
+  - pos: 31.5,20.5
+    parent: 0
+    type: Transform
+- uid: 271
+  type: CableApcExtension
+  components:
+  - pos: 30.5,20.5
+    parent: 0
+    type: Transform
+- uid: 272
+  type: CableApcExtension
+  components:
+  - pos: 33.5,20.5
+    parent: 0
+    type: Transform
+- uid: 273
+  type: CableApcExtension
+  components:
+  - pos: 34.5,20.5
+    parent: 0
+    type: Transform
+- uid: 274
+  type: CableApcExtension
+  components:
+  - pos: 19.5,12.5
+    parent: 0
+    type: Transform
+- uid: 275
+  type: CableApcExtension
+  components:
+  - pos: 16.5,12.5
+    parent: 0
+    type: Transform
+- uid: 276
+  type: CableApcExtension
+  components:
+  - pos: 16.5,15.5
+    parent: 0
+    type: Transform
+- uid: 277
+  type: CableApcExtension
+  components:
+  - pos: 17.5,12.5
+    parent: 0
+    type: Transform
+- uid: 278
+  type: CableApcExtension
+  components:
+  - pos: 19.5,16.5
+    parent: 0
+    type: Transform
+- uid: 279
+  type: CableApcExtension
+  components:
+  - pos: 16.5,16.5
+    parent: 0
+    type: Transform
+- uid: 280
+  type: CableApcExtension
+  components:
+  - pos: 17.5,16.5
+    parent: 0
+    type: Transform
+- uid: 281
+  type: CableApcExtension
+  components:
+  - pos: 16.5,14.5
+    parent: 0
+    type: Transform
+- uid: 282
+  type: CableApcExtension
+  components:
+  - pos: 16.5,13.5
+    parent: 0
+    type: Transform
+- uid: 283
+  type: CableApcExtension
+  components:
+  - pos: 18.5,12.5
+    parent: 0
+    type: Transform
+- uid: 284
+  type: CableApcExtension
+  components:
+  - pos: 22.5,14.5
+    parent: 0
+    type: Transform
+- uid: 285
+  type: CableApcExtension
+  components:
+  - pos: 0.5,14.5
+    parent: 0
+    type: Transform
+- uid: 286
+  type: CableApcExtension
+  components:
+  - pos: 1.5,14.5
+    parent: 0
+    type: Transform
+- uid: 287
+  type: CableApcExtension
+  components:
+  - pos: 2.5,14.5
+    parent: 0
+    type: Transform
+- uid: 288
+  type: CableApcExtension
+  components:
+  - pos: 2.5,15.5
+    parent: 0
+    type: Transform
+- uid: 289
+  type: CableApcExtension
+  components:
+  - pos: 4.5,14.5
+    parent: 0
+    type: Transform
+- uid: 290
+  type: CableApcExtension
+  components:
+  - pos: 5.5,14.5
+    parent: 0
+    type: Transform
+- uid: 291
+  type: CableApcExtension
+  components:
+  - pos: 6.5,14.5
+    parent: 0
+    type: Transform
+- uid: 292
+  type: CableApcExtension
+  components:
+  - pos: 8.5,14.5
+    parent: 0
+    type: Transform
+- uid: 293
+  type: CableApcExtension
+  components:
+  - pos: 3.5,13.5
+    parent: 0
+    type: Transform
+- uid: 294
+  type: CableApcExtension
+  components:
+  - pos: 3.5,12.5
+    parent: 0
+    type: Transform
+- uid: 295
+  type: CableApcExtension
+  components:
+  - pos: 3.5,15.5
+    parent: 0
+    type: Transform
+- uid: 296
+  type: CableApcExtension
+  components:
+  - pos: 3.5,16.5
+    parent: 0
+    type: Transform
+- uid: 297
+  type: CableApcExtension
+  components:
+  - pos: 10.5,12.5
+    parent: 0
+    type: Transform
+- uid: 298
+  type: CableApcExtension
+  components:
+  - pos: 10.5,14.5
+    parent: 0
+    type: Transform
+- uid: 299
+  type: CableApcExtension
+  components:
+  - pos: 11.5,14.5
+    parent: 0
+    type: Transform
+- uid: 300
+  type: CableApcExtension
+  components:
+  - pos: 12.5,14.5
+    parent: 0
+    type: Transform
+- uid: 301
+  type: WallPlastitanium
+  components:
+  - pos: 9.5,14.5
+    parent: 0
+    type: Transform
+- uid: 302
+  type: CableApcExtension
+  components:
+  - pos: 14.5,14.5
+    parent: 0
+    type: Transform
+- uid: 303
+  type: WallPlastitanium
+  components:
+  - pos: 11.5,15.5
+    parent: 0
+    type: Transform
+- uid: 304
+  type: CableApcExtension
+  components:
+  - pos: 11.5,16.5
+    parent: 0
+    type: Transform
+- uid: 305
+  type: CableApcExtension
+  components:
+  - pos: 11.5,13.5
+    parent: 0
+    type: Transform
+- uid: 306
+  type: CableApcExtension
+  components:
+  - pos: 11.5,12.5
+    parent: 0
+    type: Transform
+- uid: 307
+  type: CableApcExtension
+  components:
+  - pos: 24.5,14.5
+    parent: 0
+    type: Transform
+- uid: 308
+  type: CableApcExtension
+  components:
+  - pos: 25.5,14.5
+    parent: 0
+    type: Transform
+- uid: 309
+  type: CableApcExtension
+  components:
+  - pos: 26.5,14.5
+    parent: 0
+    type: Transform
+- uid: 310
+  type: CableApcExtension
+  components:
+  - pos: 27.5,14.5
+    parent: 0
+    type: Transform
+- uid: 311
+  type: CableApcExtension
+  components:
+  - pos: 28.5,14.5
+    parent: 0
+    type: Transform
+- uid: 312
+  type: CableApcExtension
+  components:
+  - pos: 29.5,14.5
+    parent: 0
+    type: Transform
+- uid: 313
+  type: CableApcExtension
+  components:
+  - pos: 30.5,14.5
+    parent: 0
+    type: Transform
+- uid: 314
+  type: CableApcExtension
+  components:
+  - pos: 27.5,13.5
+    parent: 0
+    type: Transform
+- uid: 315
+  type: CableApcExtension
+  components:
+  - pos: 27.5,12.5
+    parent: 0
+    type: Transform
+- uid: 316
+  type: CableApcExtension
+  components:
+  - pos: 27.5,15.5
+    parent: 0
+    type: Transform
+- uid: 317
+  type: CableApcExtension
+  components:
+  - pos: 27.5,16.5
+    parent: 0
+    type: Transform
+- uid: 318
+  type: CableApcExtension
+  components:
+  - pos: 32.5,14.5
+    parent: 0
+    type: Transform
+- uid: 319
+  type: CableApcExtension
+  components:
+  - pos: 33.5,14.5
+    parent: 0
+    type: Transform
+- uid: 320
+  type: CableApcExtension
+  components:
+  - pos: 34.5,14.5
+    parent: 0
+    type: Transform
+- uid: 321
+  type: CableApcExtension
+  components:
+  - pos: 35.5,14.5
+    parent: 0
+    type: Transform
+- uid: 322
+  type: CableApcExtension
+  components:
+  - pos: 36.5,14.5
+    parent: 0
+    type: Transform
+- uid: 323
+  type: CableApcExtension
+  components:
+  - pos: 37.5,14.5
+    parent: 0
+    type: Transform
+- uid: 324
+  type: CableApcExtension
+  components:
+  - pos: 38.5,14.5
+    parent: 0
+    type: Transform
+- uid: 325
+  type: CableApcExtension
+  components:
+  - pos: 35.5,13.5
+    parent: 0
+    type: Transform
+- uid: 326
+  type: CableApcExtension
+  components:
+  - pos: 35.5,12.5
+    parent: 0
+    type: Transform
+- uid: 327
+  type: CableApcExtension
+  components:
+  - pos: 35.5,15.5
+    parent: 0
+    type: Transform
+- uid: 328
+  type: CableApcExtension
+  components:
+  - pos: 35.5,16.5
+    parent: 0
+    type: Transform
+- uid: 329
+  type: CableApcExtension
+  components:
+  - pos: 40.5,14.5
+    parent: 0
+    type: Transform
+- uid: 330
+  type: CableApcExtension
+  components:
+  - pos: 41.5,14.5
+    parent: 0
+    type: Transform
+- uid: 331
+  type: CableApcExtension
+  components:
+  - pos: 42.5,14.5
+    parent: 0
+    type: Transform
+- uid: 332
+  type: CableApcExtension
+  components:
+  - pos: 43.5,14.5
+    parent: 0
+    type: Transform
+- uid: 333
+  type: CableApcExtension
+  components:
+  - pos: 44.5,14.5
+    parent: 0
+    type: Transform
+- uid: 334
+  type: CableApcExtension
+  components:
+  - pos: 45.5,14.5
+    parent: 0
+    type: Transform
+- uid: 335
+  type: CableApcExtension
+  components:
+  - pos: 46.5,14.5
+    parent: 0
+    type: Transform
+- uid: 336
+  type: CableApcExtension
+  components:
+  - pos: 43.5,13.5
+    parent: 0
+    type: Transform
+- uid: 337
+  type: CableApcExtension
+  components:
+  - pos: 43.5,12.5
+    parent: 0
+    type: Transform
+- uid: 338
+  type: CableApcExtension
+  components:
+  - pos: 43.5,15.5
+    parent: 0
+    type: Transform
+- uid: 339
+  type: CableApcExtension
+  components:
+  - pos: 43.5,16.5
+    parent: 0
+    type: Transform
+- uid: 340
+  type: CableApcExtension
+  components:
+  - pos: 34.5,8.5
+    parent: 0
+    type: Transform
+- uid: 341
+  type: CableApcExtension
+  components:
+  - pos: 33.5,8.5
+    parent: 0
+    type: Transform
+- uid: 342
+  type: CableApcExtension
+  components:
+  - pos: 32.5,8.5
+    parent: 0
+    type: Transform
+- uid: 343
+  type: CableApcExtension
+  components:
+  - pos: 31.5,8.5
+    parent: 0
+    type: Transform
+- uid: 344
+  type: CableApcExtension
+  components:
+  - pos: 30.5,8.5
+    parent: 0
+    type: Transform
+- uid: 345
+  type: CableApcExtension
+  components:
+  - pos: 29.5,8.5
+    parent: 0
+    type: Transform
+- uid: 346
+  type: CableApcExtension
+  components:
+  - pos: 28.5,8.5
+    parent: 0
+    type: Transform
+- uid: 347
+  type: CableApcExtension
+  components:
+  - pos: 27.5,8.5
+    parent: 0
+    type: Transform
+- uid: 348
+  type: CableApcExtension
+  components:
+  - pos: 26.5,8.5
+    parent: 0
+    type: Transform
+- uid: 349
+  type: CableApcExtension
+  components:
+  - pos: 25.5,8.5
+    parent: 0
+    type: Transform
+- uid: 350
+  type: CableApcExtension
+  components:
+  - pos: 24.5,8.5
+    parent: 0
+    type: Transform
+- uid: 351
+  type: CableApcExtension
+  components:
+  - pos: 29.5,9.5
+    parent: 0
+    type: Transform
+- uid: 352
+  type: CableApcExtension
+  components:
+  - pos: 29.5,10.5
+    parent: 0
+    type: Transform
+- uid: 353
+  type: APCBasic
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 30.5,9.5
+    parent: 0
+    type: Transform
+- uid: 354
+  type: SubstationWallBasic
+  components:
+  - pos: 29.5,9.5
+    parent: 0
+    type: Transform
+- uid: 355
+  type: CableApcExtension
+  components:
+  - pos: 22.5,8.5
+    parent: 0
+    type: Transform
+- uid: 356
+  type: CableApcExtension
+  components:
+  - pos: 21.5,8.5
+    parent: 0
+    type: Transform
+- uid: 357
+  type: CableApcExtension
+  components:
+  - pos: 20.5,8.5
+    parent: 0
+    type: Transform
+- uid: 358
+  type: CableApcExtension
+  components:
+  - pos: 19.5,8.5
+    parent: 0
+    type: Transform
+- uid: 359
+  type: CableApcExtension
+  components:
+  - pos: 18.5,8.5
+    parent: 0
+    type: Transform
+- uid: 360
+  type: CableApcExtension
+  components:
+  - pos: 17.5,8.5
+    parent: 0
+    type: Transform
+- uid: 361
+  type: CableApcExtension
+  components:
+  - pos: 16.5,8.5
+    parent: 0
+    type: Transform
+- uid: 362
+  type: CableApcExtension
+  components:
+  - pos: 15.5,8.5
+    parent: 0
+    type: Transform
+- uid: 363
+  type: CableApcExtension
+  components:
+  - pos: 14.5,8.5
+    parent: 0
+    type: Transform
+- uid: 364
+  type: CableApcExtension
+  components:
+  - pos: 13.5,8.5
+    parent: 0
+    type: Transform
+- uid: 365
+  type: CableApcExtension
+  components:
+  - pos: 12.5,8.5
+    parent: 0
+    type: Transform
+- uid: 366
+  type: CableApcExtension
+  components:
+  - pos: 17.5,9.5
+    parent: 0
+    type: Transform
+- uid: 367
+  type: CableApcExtension
+  components:
+  - pos: 17.5,10.5
+    parent: 0
+    type: Transform
+- uid: 368
+  type: CableApcExtension
+  components:
+  - pos: 17.5,7.5
+    parent: 0
+    type: Transform
+- uid: 369
+  type: CableApcExtension
+  components:
+  - pos: 17.5,6.5
+    parent: 0
+    type: Transform
+- uid: 370
+  type: CableApcExtension
+  components:
+  - pos: 10.5,8.5
+    parent: 0
+    type: Transform
+- uid: 371
+  type: CableApcExtension
+  components:
+  - pos: 9.5,8.5
+    parent: 0
+    type: Transform
+- uid: 372
+  type: CableApcExtension
+  components:
+  - pos: 8.5,8.5
+    parent: 0
+    type: Transform
+- uid: 373
+  type: CableApcExtension
+  components:
+  - pos: 7.5,8.5
+    parent: 0
+    type: Transform
+- uid: 374
+  type: CableApcExtension
+  components:
+  - pos: 6.5,8.5
+    parent: 0
+    type: Transform
+- uid: 375
+  type: CableApcExtension
+  components:
+  - pos: 5.5,8.5
+    parent: 0
+    type: Transform
+- uid: 376
+  type: CableApcExtension
+  components:
+  - pos: 4.5,8.5
+    parent: 0
+    type: Transform
+- uid: 377
+  type: CableApcExtension
+  components:
+  - pos: 3.5,8.5
+    parent: 0
+    type: Transform
+- uid: 378
+  type: CableApcExtension
+  components:
+  - pos: 2.5,8.5
+    parent: 0
+    type: Transform
+- uid: 379
+  type: CableApcExtension
+  components:
+  - pos: 1.5,8.5
+    parent: 0
+    type: Transform
+- uid: 380
+  type: CableApcExtension
+  components:
+  - pos: 0.5,8.5
+    parent: 0
+    type: Transform
+- uid: 381
+  type: CableApcExtension
+  components:
+  - pos: 5.5,9.5
+    parent: 0
+    type: Transform
+- uid: 382
+  type: CableApcExtension
+  components:
+  - pos: 5.5,10.5
+    parent: 0
+    type: Transform
+- uid: 383
+  type: CableApcExtension
+  components:
+  - pos: 5.5,7.5
+    parent: 0
+    type: Transform
+- uid: 384
+  type: CableApcExtension
+  components:
+  - pos: 5.5,6.5
+    parent: 0
+    type: Transform
+- uid: 385
+  type: CableApcExtension
+  components:
+  - pos: 0.5,2.5
+    parent: 0
+    type: Transform
+- uid: 386
+  type: CableApcExtension
+  components:
+  - pos: 1.5,2.5
+    parent: 0
+    type: Transform
+- uid: 387
+  type: CableApcExtension
+  components:
+  - pos: 2.5,2.5
+    parent: 0
+    type: Transform
+- uid: 388
+  type: CableApcExtension
+  components:
+  - pos: 2.5,3.5
+    parent: 0
+    type: Transform
+- uid: 389
+  type: CableApcExtension
+  components:
+  - pos: 4.5,0.5
+    parent: 0
+    type: Transform
+- uid: 390
+  type: CableApcExtension
+  components:
+  - pos: 3.5,0.5
+    parent: 0
+    type: Transform
+- uid: 391
+  type: CableApcExtension
+  components:
+  - pos: 3.5,1.5
+    parent: 0
+    type: Transform
+- uid: 392
+  type: CableApcExtension
+  components:
+  - pos: 3.5,3.5
+    parent: 0
+    type: Transform
+- uid: 393
+  type: CableApcExtension
+  components:
+  - pos: 3.5,4.5
+    parent: 0
+    type: Transform
+- uid: 394
+  type: CableApcExtension
+  components:
+  - pos: 4.5,4.5
+    parent: 0
+    type: Transform
+- uid: 395
+  type: CableApcExtension
+  components:
+  - pos: 5.5,4.5
+    parent: 0
+    type: Transform
+- uid: 396
+  type: CableApcExtension
+  components:
+  - pos: 6.5,4.5
+    parent: 0
+    type: Transform
+- uid: 397
+  type: CableApcExtension
+  components:
+  - pos: 7.5,4.5
+    parent: 0
+    type: Transform
+- uid: 398
+  type: CableApcExtension
+  components:
+  - pos: 7.5,0.5
+    parent: 0
+    type: Transform
+- uid: 399
+  type: CableApcExtension
+  components:
+  - pos: 14.5,2.5
+    parent: 0
+    type: Transform
+- uid: 400
+  type: CableApcExtension
+  components:
+  - pos: 15.5,2.5
+    parent: 0
+    type: Transform
+- uid: 401
+  type: CableApcExtension
+  components:
+  - pos: 16.5,2.5
+    parent: 0
+    type: Transform
+- uid: 402
+  type: CableApcExtension
+  components:
+  - pos: 6.5,0.5
+    parent: 0
+    type: Transform
+- uid: 403
+  type: CableApcExtension
+  components:
+  - pos: 8.5,4.5
+    parent: 0
+    type: Transform
+- uid: 404
+  type: CableApcExtension
+  components:
+  - pos: 5.5,0.5
+    parent: 0
+    type: Transform
+- uid: 405
+  type: CableApcExtension
+  components:
+  - pos: 8.5,0.5
+    parent: 0
+    type: Transform
+- uid: 406
+  type: CableApcExtension
+  components:
+  - pos: 18.5,2.5
+    parent: 0
+    type: Transform
+- uid: 407
+  type: CableApcExtension
+  components:
+  - pos: 19.5,2.5
+    parent: 0
+    type: Transform
+- uid: 408
+  type: CableApcExtension
+  components:
+  - pos: 20.5,2.5
+    parent: 0
+    type: Transform
+- uid: 409
+  type: CableApcExtension
+  components:
+  - pos: 21.5,2.5
+    parent: 0
+    type: Transform
+- uid: 410
+  type: CableApcExtension
+  components:
+  - pos: 22.5,2.5
+    parent: 0
+    type: Transform
+- uid: 411
+  type: CableApcExtension
+  components:
+  - pos: 23.5,2.5
+    parent: 0
+    type: Transform
+- uid: 412
+  type: CableApcExtension
+  components:
+  - pos: 24.5,2.5
+    parent: 0
+    type: Transform
+- uid: 413
+  type: CableApcExtension
+  components:
+  - pos: 25.5,2.5
+    parent: 0
+    type: Transform
+- uid: 414
+  type: CableApcExtension
+  components:
+  - pos: 26.5,2.5
+    parent: 0
+    type: Transform
+- uid: 415
+  type: CableApcExtension
+  components:
+  - pos: 27.5,2.5
+    parent: 0
+    type: Transform
+- uid: 416
+  type: CableApcExtension
+  components:
+  - pos: 28.5,2.5
+    parent: 0
+    type: Transform
+- uid: 417
+  type: CableApcExtension
+  components:
+  - pos: 29.5,2.5
+    parent: 0
+    type: Transform
+- uid: 418
+  type: CableApcExtension
+  components:
+  - pos: 30.5,2.5
+    parent: 0
+    type: Transform
+- uid: 419
+  type: CableApcExtension
+  components:
+  - pos: 31.5,2.5
+    parent: 0
+    type: Transform
+- uid: 420
+  type: CableApcExtension
+  components:
+  - pos: 32.5,2.5
+    parent: 0
+    type: Transform
+- uid: 421
+  type: CableApcExtension
+  components:
+  - pos: 33.5,2.5
+    parent: 0
+    type: Transform
+- uid: 422
+  type: CableApcExtension
+  components:
+  - pos: 34.5,2.5
+    parent: 0
+    type: Transform
+- uid: 423
+  type: CableApcExtension
+  components:
+  - pos: 36.5,2.5
+    parent: 0
+    type: Transform
+- uid: 424
+  type: CableApcExtension
+  components:
+  - pos: 26.5,3.5
+    parent: 0
+    type: Transform
+- uid: 425
+  type: CableApcExtension
+  components:
+  - pos: 26.5,4.5
+    parent: 0
+    type: Transform
+- uid: 426
+  type: CableApcExtension
+  components:
+  - pos: 26.5,1.5
+    parent: 0
+    type: Transform
+- uid: 427
+  type: CableApcExtension
+  components:
+  - pos: 26.5,0.5
+    parent: 0
+    type: Transform
+- uid: 428
+  type: CableApcExtension
+  components:
+  - pos: 37.5,2.5
+    parent: 0
+    type: Transform
+- uid: 429
+  type: CableApcExtension
+  components:
+  - pos: 38.5,2.5
+    parent: 0
+    type: Transform
+- uid: 430
+  type: CableApcExtension
+  components:
+  - pos: 39.5,2.5
+    parent: 0
+    type: Transform
+- uid: 431
+  type: CableApcExtension
+  components:
+  - pos: 40.5,2.5
+    parent: 0
+    type: Transform
+- uid: 432
+  type: CableApcExtension
+  components:
+  - pos: 41.5,2.5
+    parent: 0
+    type: Transform
+- uid: 433
+  type: CableApcExtension
+  components:
+  - pos: 42.5,2.5
+    parent: 0
+    type: Transform
+- uid: 434
+  type: CableApcExtension
+  components:
+  - pos: 43.5,2.5
+    parent: 0
+    type: Transform
+- uid: 435
+  type: CableApcExtension
+  components:
+  - pos: 44.5,2.5
+    parent: 0
+    type: Transform
+- uid: 436
+  type: CableApcExtension
+  components:
+  - pos: 45.5,2.5
+    parent: 0
+    type: Transform
+- uid: 437
+  type: CableApcExtension
+  components:
+  - pos: 46.5,2.5
+    parent: 0
+    type: Transform
+- uid: 438
+  type: CableApcExtension
+  components:
+  - pos: 47.5,2.5
+    parent: 0
+    type: Transform
+- uid: 439
+  type: CableApcExtension
+  components:
+  - pos: 48.5,2.5
+    parent: 0
+    type: Transform
+- uid: 440
+  type: CableApcExtension
+  components:
+  - pos: 49.5,2.5
+    parent: 0
+    type: Transform
+- uid: 441
+  type: CableApcExtension
+  components:
+  - pos: 50.5,2.5
+    parent: 0
+    type: Transform
+- uid: 442
+  type: CableApcExtension
+  components:
+  - pos: 51.5,2.5
+    parent: 0
+    type: Transform
+- uid: 443
+  type: CableApcExtension
+  components:
+  - pos: 52.5,2.5
+    parent: 0
+    type: Transform
+- uid: 444
+  type: CableApcExtension
+  components:
+  - pos: 53.5,2.5
+    parent: 0
+    type: Transform
+- uid: 445
+  type: CableApcExtension
+  components:
+  - pos: 54.5,2.5
+    parent: 0
+    type: Transform
+- uid: 446
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,42.5
+    parent: 0
+    type: Transform
+- uid: 447
+  type: CableApcExtension
+  components:
+  - pos: 45.5,3.5
+    parent: 0
+    type: Transform
+- uid: 448
+  type: CableApcExtension
+  components:
+  - pos: 45.5,4.5
+    parent: 0
+    type: Transform
+- uid: 449
+  type: CableApcExtension
+  components:
+  - pos: 45.5,0.5
+    parent: 0
+    type: Transform
+- uid: 450
+  type: CableApcExtension
+  components:
+  - pos: 45.5,1.5
+    parent: 0
+    type: Transform
+- uid: 451
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,43.5
+    parent: 0
+    type: Transform
+- uid: 452
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,44.5
+    parent: 0
+    type: Transform
+- uid: 453
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,44.5
+    parent: 0
+    type: Transform
+- uid: 454
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,44.5
+    parent: 0
+    type: Transform
+- uid: 455
+  type: RandomArtifactSpawner
+  components:
+  - pos: 5.5,43.5
+    parent: 0
+    type: Transform
+- uid: 456
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 2.5,42.5
+    parent: 0
+    type: Transform
+- uid: 457
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 2.5,43.5
+    parent: 0
+    type: Transform
+- uid: 458
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 2.5,44.5
+    parent: 0
+    type: Transform
+- uid: 459
+  type: ComputerBroken
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,42.5
+    parent: 0
+    type: Transform
+- uid: 460
+  type: BaseComputer
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,44.5
+    parent: 0
+    type: Transform
+- uid: 461
+  type: ComputerAnalysisConsole
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,43.5
+    parent: 0
+    type: Transform
+- uid: 462
+  type: ChairOfficeLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 1.5,43.5
+    parent: 0
+    type: Transform
+- uid: 463
+  type: ChairOfficeLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 1.5,44.5
+    parent: 0
+    type: Transform
+- uid: 464
+  type: filingCabinetDrawerRandom
+  components:
+  - pos: 0.5,42.5
+    parent: 0
+    type: Transform
+- uid: 465
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 1.5,42.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 466
+  type: PoweredSmallLight
+  components:
+  - pos: 5.5,48.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 467
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 5.5,44.5
+    parent: 0
+    type: Transform
+- uid: 468
+  type: ClosetFireFilled
+  components:
+  - pos: 0.5,48.5
+    parent: 0
+    type: Transform
+- uid: 469
+  type: ClosetL3ScienceFilled
+  components:
+  - pos: 1.5,48.5
+    parent: 0
+    type: Transform
+- uid: 470
+  type: ClosetEmergencyFilledRandom
+  components:
+  - pos: 2.5,48.5
+    parent: 0
+    type: Transform
+- uid: 471
+  type: SinkWide
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 0.5,47.5
+    parent: 0
+    type: Transform
+- uid: 472
+  type: FloorDrain
+  components:
+  - pos: 0.5,47.5
+    parent: 0
+    type: Transform
+  - fixtures: []
+    type: Fixtures
+- uid: 473
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 2.5,48.5
+    parent: 0
+    type: Transform
+- uid: 474
+  type: ShardGlass
+  components:
+  - pos: 2.445806,46.508026
+    parent: 0
+    type: Transform
+- uid: 475
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 1.5,46.5
+    parent: 0
+    type: Transform
+- uid: 476
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 0.5,46.5
+    parent: 0
+    type: Transform
+- uid: 477
+  type: Table
+  components:
+  - pos: 0.5,46.5
+    parent: 0
+    type: Transform
+- uid: 478
+  type: Table
+  components:
+  - pos: 1.5,46.5
+    parent: 0
+    type: Transform
+- uid: 479
+  type: Table
+  components:
+  - pos: 2.5,46.5
+    parent: 0
+    type: Transform
+- uid: 480
+  type: GasPassiveVent
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,44.5
+    parent: 0
+    type: Transform
+- uid: 481
+  type: GasPassiveVent
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,44.5
+    parent: 0
+    type: Transform
+- uid: 482
+  type: GasPipeStraight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,45.5
+    parent: 0
+    type: Transform
+- uid: 483
+  type: GasPipeStraight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,45.5
+    parent: 0
+    type: Transform
+- uid: 484
+  type: GasPipeStraight
+  components:
+  - pos: 6.5,46.5
+    parent: 0
+    type: Transform
+- uid: 485
+  type: GasPressurePump
+  components:
+  - pos: 4.5,47.5
+    parent: 0
+    type: Transform
+- uid: 486
+  type: GasPort
+  components:
+  - pos: 4.5,48.5
+    parent: 0
+    type: Transform
+- uid: 487
+  type: GasPort
+  components:
+  - pos: 6.5,48.5
+    parent: 0
+    type: Transform
+- uid: 488
+  type: GasPipeTJunction
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 4.5,46.5
+    parent: 0
+    type: Transform
+- uid: 489
+  type: GasPressurePump
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,47.5
+    parent: 0
+    type: Transform
+- uid: 490
+  type: GasPipeBend
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 5.5,46.5
+    parent: 0
+    type: Transform
+- uid: 491
+  type: GasThermoMachineHeater
+  components:
+  - pos: 5.5,47.5
+    parent: 0
+    type: Transform
+- uid: 492
+  type: GasCanisterBrokenBase
+  components:
+  - pos: 4.5,48.5
+    parent: 0
+    type: Transform
+- uid: 493
+  type: SalvageCanisterSpawner
+  components:
+  - pos: 6.5,48.5
+    parent: 0
+    type: Transform
+- uid: 494
+  type: Multitool
+  components:
+  - pos: 0.51333475,46.52365
+    parent: 0
+    type: Transform
+- uid: 495
+  type: CrateScience
+  components:
+  - pos: 0.5,44.5
+    parent: 0
+    type: Transform
+- uid: 496
+  type: Chair
+  components:
+  - pos: 2.5,40.5
+    parent: 0
+    type: Transform
+- uid: 497
+  type: Chair
+  components:
+  - pos: 4.5,40.5
+    parent: 0
+    type: Transform
+- uid: 498
+  type: PottedPlantRandom
+  components:
+  - pos: 3.5,40.5
+    parent: 0
+    type: Transform
+- uid: 499
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 18.5,38.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 500
+  type: WindowTintedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,39.5
+    parent: 0
+    type: Transform
+- uid: 501
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 12.5,39.5
+    parent: 0
+    type: Transform
+- uid: 502
+  type: Chair
+  components:
+  - pos: 17.5,40.5
+    parent: 0
+    type: Transform
+- uid: 503
+  type: PottedPlant19
+  components:
+  - pos: 11.477652,39.22891
+    parent: 0
+    type: Transform
+- uid: 504
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 9.5,39.5
+    parent: 0
+    type: Transform
+- uid: 505
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 13.5,39.5
+    parent: 0
+    type: Transform
+- uid: 506
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,38.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 507
+  type: Table
+  components:
+  - pos: 20.5,40.5
+    parent: 0
+    type: Transform
+- uid: 508
+  type: DrinkWaterCup
+  components:
+  - pos: 20.373915,40.64657
+    parent: 0
+    type: Transform
+- uid: 509
+  type: DrinkWaterCup
+  components:
+  - pos: 20.54579,40.724693
+    parent: 0
+    type: Transform
+- uid: 510
+  type: DrinkWaterCup
+  components:
+  - pos: 20.592665,40.537193
+    parent: 0
+    type: Transform
+- uid: 511
+  type: Chair
+  components:
+  - pos: 18.5,40.5
+    parent: 0
+    type: Transform
+- uid: 512
+  type: WaterCooler
+  components:
+  - pos: 21.5,40.5
+    parent: 0
+    type: Transform
+- uid: 513
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 2.5,38.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 514
+  type: WallSolid
+  components:
+  - pos: 26.5,38.5
+    parent: 0
+    type: Transform
+- uid: 515
+  type: WallSolid
+  components:
+  - pos: 26.5,40.5
+    parent: 0
+    type: Transform
+- uid: 516
+  type: WallSolid
+  components:
+  - pos: 28.5,40.5
+    parent: 0
+    type: Transform
+- uid: 517
+  type: WallSolid
+  components:
+  - pos: 28.5,38.5
+    parent: 0
+    type: Transform
+- uid: 518
+  type: Chair
+  components:
+  - pos: 25.5,40.5
+    parent: 0
+    type: Transform
+- uid: 519
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 30.5,38.5
+    parent: 0
+    type: Transform
+- uid: 520
+  type: PoweredlightEmpty
+  components:
+  - pos: 28.5,39.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 521
+  type: PottedPlantRandom
+  components:
+  - pos: 24.5,40.5
+    parent: 0
+    type: Transform
+- uid: 522
+  type: VendingMachineCoffee
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 29.5,38.5
+    parent: 0
+    type: Transform
+- uid: 523
+  type: FloodlightBroken
+  components:
+  - pos: 36.481613,40.499622
+    parent: 0
+    type: Transform
+- uid: 524
+  type: Table
+  components:
+  - pos: 37.5,39.5
+    parent: 0
+    type: Transform
+- uid: 525
+  type: Table
+  components:
+  - pos: 37.5,40.5
+    parent: 0
+    type: Transform
+- uid: 526
+  type: Table
+  components:
+  - pos: 35.5,38.5
+    parent: 0
+    type: Transform
+- uid: 527
+  type: Railing
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 34.5,38.5
+    parent: 0
+    type: Transform
+- uid: 528
+  type: RailingCornerSmall
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 34.5,39.5
+    parent: 0
+    type: Transform
+- uid: 529
+  type: RailingCornerSmall
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 35.5,39.5
+    parent: 0
+    type: Transform
+- uid: 530
+  type: RailingCornerSmall
+  components:
+  - pos: 35.5,38.5
+    parent: 0
+    type: Transform
+- uid: 531
+  type: PartRodMetal1
+  components:
+  - pos: 33.42354,40.437122
+    parent: 0
+    type: Transform
+- uid: 532
+  type: FoamedIronMetal
+  components:
+  - pos: 36.5,39.5
+    parent: 0
+    type: Transform
+- uid: 533
+  type: FoamedIronMetal
+  components:
+  - pos: 35.5,40.5
+    parent: 0
+    type: Transform
+- uid: 534
+  type: FoamedIronMetal
+  components:
+  - pos: 36.5,38.5
+    parent: 0
+    type: Transform
+- uid: 535
+  type: ShardGlass
+  components:
+  - pos: 37.501663,39.608997
+    parent: 0
+    type: Transform
+- uid: 536
+  type: SheetSteel1
+  components:
+  - pos: 32.52815,38.437122
+    parent: 0
+    type: Transform
+- uid: 537
+  type: Poweredlight
+  components:
+  - pos: 42.5,40.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 538
+  type: Chair
+  components:
+  - pos: 44.5,40.5
+    parent: 0
+    type: Transform
+- uid: 539
+  type: SMESBasic
+  components:
+  - pos: 11.5,45.5
+    parent: 0
+    type: Transform
+- uid: 540
+  type: GeneratorRTG
+  components:
+  - pos: 9.5,47.5
+    parent: 0
+    type: Transform
+- uid: 541
+  type: GeneratorRTG
+  components:
+  - pos: 13.5,47.5
+    parent: 0
+    type: Transform
+- uid: 542
+  type: GeneratorRTG
+  components:
+  - pos: 11.5,47.5
+    parent: 0
+    type: Transform
+- uid: 543
+  type: CableTerminal
+  components:
+  - pos: 11.5,46.5
+    parent: 0
+    type: Transform
+- uid: 544
+  type: CableHV
+  components:
+  - pos: 11.5,46.5
+    parent: 0
+    type: Transform
+- uid: 545
+  type: CableHV
+  components:
+  - pos: 10.5,46.5
+    parent: 0
+    type: Transform
+- uid: 546
+  type: CableHV
+  components:
+  - pos: 9.5,46.5
+    parent: 0
+    type: Transform
+- uid: 547
+  type: CableHV
+  components:
+  - pos: 12.5,46.5
+    parent: 0
+    type: Transform
+- uid: 548
+  type: CableHV
+  components:
+  - pos: 13.5,46.5
+    parent: 0
+    type: Transform
+- uid: 549
+  type: CableHV
+  components:
+  - pos: 13.5,47.5
+    parent: 0
+    type: Transform
+- uid: 550
+  type: CableHV
+  components:
+  - pos: 11.5,47.5
+    parent: 0
+    type: Transform
+- uid: 551
+  type: CableHV
+  components:
+  - pos: 9.5,47.5
+    parent: 0
+    type: Transform
+- uid: 552
+  type: CableHV
+  components:
+  - pos: 11.5,45.5
+    parent: 0
+    type: Transform
+- uid: 553
+  type: CableHV
+  components:
+  - pos: 11.5,44.5
+    parent: 0
+    type: Transform
+- uid: 554
+  type: CableHV
+  components:
+  - pos: 11.5,43.5
+    parent: 0
+    type: Transform
+- uid: 555
+  type: CableHV
+  components:
+  - pos: 11.5,42.5
+    parent: 0
+    type: Transform
+- uid: 556
+  type: CableHV
+  components:
+  - pos: 10.5,42.5
+    parent: 0
+    type: Transform
+- uid: 557
+  type: CableHV
+  components:
+  - pos: 9.5,42.5
+    parent: 0
+    type: Transform
+- uid: 558
+  type: CableHV
+  components:
+  - pos: 8.5,42.5
+    parent: 0
+    type: Transform
+- uid: 559
+  type: SubstationBasic
+  components:
+  - pos: 8.5,42.5
+    parent: 0
+    type: Transform
+- uid: 560
+  type: Catwalk
+  components:
+  - pos: 10.5,45.5
+    parent: 0
+    type: Transform
+- uid: 561
+  type: Catwalk
+  components:
+  - pos: 10.5,46.5
+    parent: 0
+    type: Transform
+- uid: 562
+  type: Catwalk
+  components:
+  - pos: 11.5,46.5
+    parent: 0
+    type: Transform
+- uid: 563
+  type: Catwalk
+  components:
+  - pos: 12.5,46.5
+    parent: 0
+    type: Transform
+- uid: 564
+  type: Catwalk
+  components:
+  - pos: 12.5,45.5
+    parent: 0
+    type: Transform
+- uid: 565
+  type: Catwalk
+  components:
+  - pos: 11.5,45.5
+    parent: 0
+    type: Transform
+- uid: 566
+  type: WallSolid
+  components:
+  - pos: 8.5,43.5
+    parent: 0
+    type: Transform
+- uid: 567
+  type: WallSolid
+  components:
+  - pos: 9.5,43.5
+    parent: 0
+    type: Transform
+- uid: 568
+  type: CableApcExtension
+  components:
+  - pos: 12.5,43.5
+    parent: 0
+    type: Transform
+- uid: 569
+  type: APCBasic
+  components:
+  - pos: 13.5,43.5
+    parent: 0
+    type: Transform
+- uid: 570
+  type: WallSolid
+  components:
+  - pos: 13.5,43.5
+    parent: 0
+    type: Transform
+- uid: 571
+  type: WallSolid
+  components:
+  - pos: 14.5,43.5
+    parent: 0
+    type: Transform
+- uid: 572
+  type: CableApcExtension
+  components:
+  - pos: 13.5,43.5
+    parent: 0
+    type: Transform
+- uid: 573
+  type: CableMV
+  components:
+  - pos: 8.5,42.5
+    parent: 0
+    type: Transform
+- uid: 574
+  type: CableMV
+  components:
+  - pos: 9.5,42.5
+    parent: 0
+    type: Transform
+- uid: 575
+  type: CableMV
+  components:
+  - pos: 10.5,42.5
+    parent: 0
+    type: Transform
+- uid: 576
+  type: CableMV
+  components:
+  - pos: 11.5,42.5
+    parent: 0
+    type: Transform
+- uid: 577
+  type: CableMV
+  components:
+  - pos: 12.5,42.5
+    parent: 0
+    type: Transform
+- uid: 578
+  type: CableMV
+  components:
+  - pos: 13.5,42.5
+    parent: 0
+    type: Transform
+- uid: 579
+  type: CableMV
+  components:
+  - pos: 13.5,43.5
+    parent: 0
+    type: Transform
+- uid: 580
+  type: ShuttersWindow
+  components:
+  - pos: 10.5,43.5
+    parent: 0
+    type: Transform
+  - inputs:
+      Open: []
+      Close: []
+      Toggle:
+      - port: Pressed
+        uid: 583
+    type: SignalReceiver
+- uid: 581
+  type: ShuttersWindow
+  components:
+  - pos: 11.5,43.5
+    parent: 0
+    type: Transform
+  - inputs:
+      Open: []
+      Close: []
+      Toggle:
+      - port: Pressed
+        uid: 583
+    type: SignalReceiver
+- uid: 582
+  type: ShuttersWindow
+  components:
+  - pos: 12.5,43.5
+    parent: 0
+    type: Transform
+  - inputs:
+      Open: []
+      Close: []
+      Toggle:
+      - port: Pressed
+        uid: 583
+    type: SignalReceiver
+- uid: 583
+  type: SignalButton
+  components:
+  - pos: 9.5,43.5
+    parent: 0
+    type: Transform
+  - outputs:
+      Pressed:
+      - port: Toggle
+        uid: 580
+      - port: Toggle
+        uid: 581
+      - port: Toggle
+        uid: 582
+    type: SignalTransmitter
+- uid: 584
+  type: ClosetToolFilled
+  components:
+  - pos: 14.5,42.5
+    parent: 0
+    type: Transform
+- uid: 585
+  type: SignElectricalMed
+  components:
+  - pos: 8.5,43.5
+    parent: 0
+    type: Transform
+- uid: 586
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 9.5,42.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 587
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 14.5,44.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 588
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 8.5,44.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 589
+  type: Table
+  components:
+  - pos: 10.5,45.5
+    parent: 0
+    type: Transform
+- uid: 590
+  type: Table
+  components:
+  - pos: 12.5,45.5
+    parent: 0
+    type: Transform
+- uid: 591
+  type: ClothingEyesGlassesMeson
+  components:
+  - pos: 10.480986,45.607067
+    parent: 0
+    type: Transform
+- uid: 592
+  type: WallSolid
+  components:
+  - pos: 17.5,43.5
+    parent: 0
+    type: Transform
+- uid: 593
+  type: WallSolid
+  components:
+  - pos: 17.5,47.5
+    parent: 0
+    type: Transform
+- uid: 594
+  type: WallSolid
+  components:
+  - pos: 21.5,47.5
+    parent: 0
+    type: Transform
+- uid: 595
+  type: WallSolid
+  components:
+  - pos: 21.5,43.5
+    parent: 0
+    type: Transform
+- uid: 596
+  type: WindowTintedDirectional
+  components:
+  - pos: 18.5,43.5
+    parent: 0
+    type: Transform
+- uid: 597
+  type: WindowTintedDirectional
+  components:
+  - pos: 20.5,43.5
+    parent: 0
+    type: Transform
+- uid: 598
+  type: WindowTintedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 17.5,44.5
+    parent: 0
+    type: Transform
+- uid: 599
+  type: WindowTintedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 17.5,46.5
+    parent: 0
+    type: Transform
+- uid: 600
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 18.5,47.5
+    parent: 0
+    type: Transform
+- uid: 601
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,47.5
+    parent: 0
+    type: Transform
+- uid: 602
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,46.5
+    parent: 0
+    type: Transform
+- uid: 603
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,44.5
+    parent: 0
+    type: Transform
+- uid: 604
+  type: WindowTintedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 17.5,45.5
+    parent: 0
+    type: Transform
+- uid: 605
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 19.5,47.5
+    parent: 0
+    type: Transform
+- uid: 606
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,45.5
+    parent: 0
+    type: Transform
+- uid: 607
+  type: WindowTintedDirectional
+  components:
+  - pos: 19.5,43.5
+    parent: 0
+    type: Transform
+- uid: 608
+  type: Catwalk
+  components:
+  - pos: 17.5,45.5
+    parent: 0
+    type: Transform
+- uid: 609
+  type: Catwalk
+  components:
+  - pos: 18.5,45.5
+    parent: 0
+    type: Transform
+- uid: 610
+  type: Catwalk
+  components:
+  - pos: 19.5,45.5
+    parent: 0
+    type: Transform
+- uid: 611
+  type: Catwalk
+  components:
+  - pos: 20.5,45.5
+    parent: 0
+    type: Transform
+- uid: 612
+  type: Catwalk
+  components:
+  - pos: 21.5,45.5
+    parent: 0
+    type: Transform
+- uid: 613
+  type: Catwalk
+  components:
+  - pos: 19.5,44.5
+    parent: 0
+    type: Transform
+- uid: 614
+  type: Catwalk
+  components:
+  - pos: 19.5,43.5
+    parent: 0
+    type: Transform
+- uid: 615
+  type: Catwalk
+  components:
+  - pos: 19.5,46.5
+    parent: 0
+    type: Transform
+- uid: 616
+  type: Catwalk
+  components:
+  - pos: 19.5,47.5
+    parent: 0
+    type: Transform
+- uid: 617
+  type: MachineFrame
+  components:
+  - pos: 18.5,46.5
+    parent: 0
+    type: Transform
+- uid: 618
+  type: Protolathe
+  components:
+  - pos: 20.5,46.5
+    parent: 0
+    type: Transform
+- uid: 619
+  type: UnfinishedMachineFrame
+  components:
+  - pos: 20.5,44.5
+    parent: 0
+    type: Transform
+- uid: 620
+  type: TableReinforcedGlass
+  components:
+  - pos: 18.5,44.5
+    parent: 0
+    type: Transform
+- uid: 621
+  type: ResearchDisk10000
+  components:
+  - pos: 18.512283,44.508656
+    parent: 0
+    type: Transform
+- uid: 622
+  type: PoweredlightExterior
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,43.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 623
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 17.5,48.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 624
+  type: PoweredSmallLight
+  components:
+  - pos: 21.5,42.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 625
+  type: SignShock
+  components:
+  - pos: 17.5,43.5
+    parent: 0
+    type: Transform
+- uid: 626
+  type: SignElectricalMed
+  components:
+  - pos: 21.5,47.5
+    parent: 0
+    type: Transform
+- uid: 627
+  type: TableGlass
+  components:
+  - pos: 4.5,35.5
+    parent: 0
+    type: Transform
+- uid: 628
+  type: TableGlass
+  components:
+  - pos: 5.5,35.5
+    parent: 0
+    type: Transform
+- uid: 629
+  type: TableGlass
+  components:
+  - pos: 6.5,35.5
+    parent: 0
+    type: Transform
+- uid: 630
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 3.5,35.5
+    parent: 0
+    type: Transform
+- uid: 631
+  type: Table
+  components:
+  - pos: 8.5,35.5
+    parent: 0
+    type: Transform
+- uid: 632
+  type: WindowDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,35.5
+    parent: 0
+    type: Transform
+- uid: 633
+  type: WindowDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,35.5
+    parent: 0
+    type: Transform
+- uid: 634
+  type: Poweredlight
+  components:
+  - pos: 2.5,36.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 635
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 8.5,34.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 636
+  type: Windoor
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,34.5
+    parent: 0
+    type: Transform
+- uid: 637
+  type: Windoor
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,36.5
+    parent: 0
+    type: Transform
+- uid: 638
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 1.5,35.5
+    parent: 0
+    type: Transform
+- uid: 639
+  type: Windoor
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,34.5
+    parent: 0
+    type: Transform
+- uid: 640
+  type: Windoor
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,36.5
+    parent: 0
+    type: Transform
+- uid: 641
+  type: PottedPlantRandomPlastic
+  components:
+  - pos: 2.5,35.5
+    parent: 0
+    type: Transform
+- uid: 642
+  type: VendingMachineCoffee
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 7.5,35.5
+    parent: 0
+    type: Transform
+- uid: 643
+  type: WelderMini
+  components:
+  - pos: 8.596551,35.528828
+    parent: 0
+    type: Transform
+- uid: 644
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 9.5,35.5
+    parent: 0
+    type: Transform
+- uid: 645
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 24.5,34.5
+    parent: 0
+    type: Transform
+- uid: 646
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 19.5,36.5
+    parent: 0
+    type: Transform
+- uid: 647
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 16.5,34.5
+    parent: 0
+    type: Transform
+- uid: 648
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 17.5,34.5
+    parent: 0
+    type: Transform
+- uid: 649
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 18.5,34.5
+    parent: 0
+    type: Transform
+- uid: 650
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 16.5,35.5
+    parent: 0
+    type: Transform
+- uid: 651
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 17.5,35.5
+    parent: 0
+    type: Transform
+- uid: 652
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 18.5,35.5
+    parent: 0
+    type: Transform
+- uid: 653
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 17.5,36.5
+    parent: 0
+    type: Transform
+- uid: 654
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 18.5,36.5
+    parent: 0
+    type: Transform
+- uid: 655
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 15.5,35.5
+    parent: 0
+    type: Transform
+- uid: 656
+  type: FoamedAluminiumMetal
+  components:
+  - pos: 16.5,36.5
+    parent: 0
+    type: Transform
+- uid: 657
+  type: Poweredlight
+  components:
+  - pos: 14.5,36.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 658
+  type: SheetPlasteel
+  components:
+  - pos: 15.499195,34.56076
+    parent: 0
+    type: Transform
+- uid: 659
+  type: Rack
+  components:
+  - pos: 20.5,36.5
+    parent: 0
+    type: Transform
+- uid: 660
+  type: Rack
+  components:
+  - pos: 21.5,36.5
+    parent: 0
+    type: Transform
+- uid: 661
+  type: ClothingHeadHatWeldingMaskFlame
+  components:
+  - pos: 21.418028,36.658634
+    parent: 0
+    type: Transform
+- uid: 662
+  type: ClothingHeadHatWeldingMaskFlameBlue
+  components:
+  - pos: 21.605528,36.471134
+    parent: 0
+    type: Transform
+- uid: 663
+  type: Welder
+  components:
+  - pos: 20.605528,36.564884
+    parent: 0
+    type: Transform
+- uid: 664
+  type: Floodlight
+  components:
+  - pos: 19.496153,34.502384
+    parent: 0
+    type: Transform
+- uid: 665
+  type: Barricade
+  components:
+  - pos: 22.5,36.5
+    parent: 0
+    type: Transform
+- uid: 666
+  type: TableWood
+  components:
+  - pos: 20.5,34.5
+    parent: 0
+    type: Transform
+- uid: 667
+  type: TableWood
+  components:
+  - pos: 21.5,34.5
+    parent: 0
+    type: Transform
+- uid: 668
+  type: PottedPlantRandomPlastic
+  components:
+  - pos: 12.5,36.5
+    parent: 0
+    type: Transform
+- uid: 669
+  type: MaterialWoodPlank
+  components:
+  - pos: 20.62062,34.599228
+    parent: 0
+    type: Transform
+- uid: 670
+  type: SheetSteel
+  components:
+  - pos: 21.511246,34.536728
+    parent: 0
+    type: Transform
+- uid: 671
+  type: Girder
+  components:
+  - pos: 14.5,34.5
+    parent: 0
+    type: Transform
+- uid: 672
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 24.5,34.5
+    parent: 0
+    type: Transform
+- uid: 673
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - pos: 24.5,36.5
+    parent: 0
+    type: Transform
+- uid: 674
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 24.5,36.5
+    parent: 0
+    type: Transform
+- uid: 675
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 34.5,36.5
+    parent: 0
+    type: Transform
+- uid: 676
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 31.5,34.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 677
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 34.5,34.5
+    parent: 0
+    type: Transform
+- uid: 678
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 34.5,34.5
+    parent: 0
+    type: Transform
+- uid: 679
+  type: PlasmaReinforcedWindowDirectional
+  components:
+  - pos: 34.5,36.5
+    parent: 0
+    type: Transform
+- uid: 680
+  type: Poweredlight
+  components:
+  - pos: 27.5,36.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 681
+  type: Table
+  components:
+  - pos: 33.5,36.5
+    parent: 0
+    type: Transform
+- uid: 682
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 26.5,34.5
+    parent: 0
+    type: Transform
+- uid: 683
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 25.5,34.5
+    parent: 0
+    type: Transform
+- uid: 684
+  type: Chair
+  components:
+  - pos: 32.5,36.5
+    parent: 0
+    type: Transform
+- uid: 685
+  type: WallSolid
+  components:
+  - pos: 3.5,32.5
+    parent: 0
+    type: Transform
+- uid: 686
+  type: ClothingOuterCoatLab
+  components:
+  - pos: 33.54252,36.551563
+    parent: 0
+    type: Transform
+- uid: 687
+  type: WallSolid
+  components:
+  - pos: 9.5,30.5
+    parent: 0
+    type: Transform
+- uid: 688
+  type: WindowTintedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 3.5,31.5
+    parent: 0
+    type: Transform
+- uid: 689
+  type: WindowTintedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 9.5,31.5
+    parent: 0
+    type: Transform
+- uid: 690
+  type: Windoor
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 9.5,32.5
+    parent: 0
+    type: Transform
+- uid: 691
+  type: Windoor
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 3.5,30.5
+    parent: 0
+    type: Transform
+- uid: 692
+  type: Table
+  components:
+  - pos: 3.5,31.5
+    parent: 0
+    type: Transform
+- uid: 693
+  type: Table
+  components:
+  - pos: 2.5,31.5
+    parent: 0
+    type: Transform
+- uid: 694
+  type: Table
+  components:
+  - pos: 1.5,31.5
+    parent: 0
+    type: Transform
+- uid: 695
+  type: Table
+  components:
+  - pos: 1.5,32.5
+    parent: 0
+    type: Transform
+- uid: 696
+  type: Chair
+  components:
+  - pos: 0.5,32.5
+    parent: 0
+    type: Transform
+- uid: 697
+  type: ChairOfficeDark
+  components:
+  - pos: 2.5,32.5
+    parent: 0
+    type: Transform
+- uid: 698
+  type: SignSecureMed
+  components:
+  - pos: 3.5,32.5
+    parent: 0
+    type: Transform
+- uid: 699
+  type: LockerScienceFilled
+  components:
+  - pos: 4.5,32.5
+    parent: 0
+    type: Transform
+- uid: 700
+  type: LockerScienceFilled
+  components:
+  - pos: 8.5,30.5
+    parent: 0
+    type: Transform
+- uid: 701
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 5.5,32.5
+    parent: 0
+    type: Transform
+- uid: 702
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 7.5,30.5
+    parent: 0
+    type: Transform
+- uid: 703
+  type: PoweredlightEmpty
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 1.5,30.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 704
+  type: Poweredlight
+  components:
+  - pos: 11.5,32.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 705
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 12.5,30.5
+    parent: 0
+    type: Transform
+- uid: 706
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 10.5,30.5
+    parent: 0
+    type: Transform
+- uid: 707
+  type: TableGlass
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 11.5,30.5
+    parent: 0
+    type: Transform
+- uid: 708
+  type: RandomFoodSingle
+  components:
+  - pos: 11.5,30.5
+    parent: 0
+    type: Transform
+- uid: 709
+  type: TableReinforced
+  components:
+  - pos: 1.5,25.5
+    parent: 0
+    type: Transform
+- uid: 710
+  type: TableReinforced
+  components:
+  - pos: 1.5,26.5
+    parent: 0
+    type: Transform
+- uid: 711
+  type: TableReinforced
+  components:
+  - pos: 1.5,27.5
+    parent: 0
+    type: Transform
+- uid: 712
+  type: IngotGold
+  components:
+  - pos: 1.5054436,26.820345
+    parent: 0
+    type: Transform
+- uid: 713
+  type: ToolboxGoldFilled
+  components:
+  - pos: 1.492549,27.312542
+    parent: 0
+    type: Transform
+- uid: 714
+  type: PoweredSmallLight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,25.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 715
+  type: MopBucket
+  components:
+  - pos: 4.4881024,27.562542
+    parent: 0
+    type: Transform
+- uid: 716
+  type: MopItem
+  components:
+  - pos: 4.4881024,27.500042
+    parent: 0
+    type: Transform
+- uid: 717
+  type: SinkWide
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 4.5,25.5
+    parent: 0
+    type: Transform
+- uid: 718
+  type: FloorDrain
+  components:
+  - pos: 4.5,25.5
+    parent: 0
+    type: Transform
+  - fixtures: []
+    type: Fixtures
+- uid: 719
+  type: Rack
+  components:
+  - pos: 4.5,24.5
+    parent: 0
+    type: Transform
+- uid: 720
+  type: SprayBottleSpaceCleaner
+  components:
+  - pos: 4.3731804,24.592852
+    parent: 0
+    type: Transform
+- uid: 721
+  type: RandomSpawner
+  components:
+  - pos: 9.5,34.5
+    parent: 0
+    type: Transform
+- uid: 722
+  type: RandomSpawner
+  components:
+  - pos: 5.5,38.5
+    parent: 0
+    type: Transform
+- uid: 723
+  type: RandomSpawner
+  components:
+  - pos: 29.5,40.5
+    parent: 0
+    type: Transform
+- uid: 724
+  type: RandomSpawner
+  components:
+  - pos: 18.5,38.5
+    parent: 0
+    type: Transform
+- uid: 725
+  type: RandomSpawner
+  components:
+  - pos: 37.5,38.5
+    parent: 0
+    type: Transform
+- uid: 726
+  type: RandomSpawner
+  components:
+  - pos: 41.5,40.5
+    parent: 0
+    type: Transform
+- uid: 727
+  type: ClosetJanitorFilled
+  components:
+  - pos: 6.5,27.5
+    parent: 0
+    type: Transform
+- uid: 728
+  type: CrateServiceJanitorialSupplies
+  components:
+  - pos: 6.5,28.5
+    parent: 0
+    type: Transform
+- uid: 729
+  type: VehicleJanicartDestroyed
+  components:
+  - pos: 6.5,25.5
+    parent: 0
+    type: Transform
+- uid: 730
+  type: ClothingUniformJumpskirtJanimaid
+  components:
+  - pos: 4.5678988,24.535187
+    parent: 0
+    type: Transform
+- uid: 731
+  type: ClosetL3JanitorFilled
+  components:
+  - pos: 4.5,28.5
+    parent: 0
+    type: Transform
+- uid: 732
+  type: FoodTinBeans
+  components:
+  - pos: 1.4379241,25.941437
+    parent: 0
+    type: Transform
+- uid: 733
+  type: FoodTinBeans
+  components:
+  - pos: 1.5941741,25.738312
+    parent: 0
+    type: Transform
+- uid: 734
+  type: PottedPlantRandomPlastic
+  components:
+  - pos: 9.5,31.5
+    parent: 0
+    type: Transform
+- uid: 735
+  type: PottedPlantRandomPlastic
+  components:
+  - pos: 5.5,30.5
+    parent: 0
+    type: Transform
+- uid: 736
+  type: PottedPlantRandomPlastic
+  components:
+  - pos: 7.5,32.5
+    parent: 0
+    type: Transform
+- uid: 737
+  type: PoweredSmallLightEmpty
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 6.5,25.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 738
+  type: PoweredlightEmpty
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 14.5,34.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 739
+  type: ReinforcedWindow
+  components:
+  - pos: 17.5,30.5
+    parent: 0
+    type: Transform
+- uid: 740
+  type: ReinforcedWindow
+  components:
+  - pos: 17.5,32.5
+    parent: 0
+    type: Transform
+- uid: 741
+  type: AirlockScienceGlassLocked
+  components:
+  - pos: 17.5,31.5
+    parent: 0
+    type: Transform
+- uid: 742
+  type: Grille
+  components:
+  - pos: 17.5,30.5
+    parent: 0
+    type: Transform
+- uid: 743
+  type: Grille
+  components:
+  - pos: 17.5,32.5
+    parent: 0
+    type: Transform
+- uid: 744
+  type: ClosetEmergencyFilledRandom
+  components:
+  - pos: 16.5,32.5
+    parent: 0
+    type: Transform
+- uid: 745
+  type: ClosetMaintenanceFilledRandom
+  components:
+  - pos: 14.5,32.5
+    parent: 0
+    type: Transform
+- uid: 746
+  type: ClosetRadiationSuitFilled
+  components:
+  - pos: 43.5,40.5
+    parent: 0
+    type: Transform
+- uid: 747
+  type: ClosetFireFilled
+  components:
+  - pos: 1.5,40.5
+    parent: 0
+    type: Transform
+- uid: 748
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 18.5,43.5
+    parent: 0
+    type: Transform
+- uid: 749
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 18.5,44.5
+    parent: 0
+    type: Transform
+- uid: 750
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 18.5,45.5
+    parent: 0
+    type: Transform
+- uid: 751
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 18.5,46.5
+    parent: 0
+    type: Transform
+- uid: 752
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 18.5,47.5
+    parent: 0
+    type: Transform
+- uid: 753
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 19.5,43.5
+    parent: 0
+    type: Transform
+- uid: 754
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 19.5,44.5
+    parent: 0
+    type: Transform
+- uid: 755
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 19.5,45.5
+    parent: 0
+    type: Transform
+- uid: 756
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 19.5,46.5
+    parent: 0
+    type: Transform
+- uid: 757
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 19.5,47.5
+    parent: 0
+    type: Transform
+- uid: 758
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 20.5,43.5
+    parent: 0
+    type: Transform
+- uid: 759
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 20.5,44.5
+    parent: 0
+    type: Transform
+- uid: 760
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 20.5,45.5
+    parent: 0
+    type: Transform
+- uid: 761
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 20.5,46.5
+    parent: 0
+    type: Transform
+- uid: 762
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 20.5,47.5
+    parent: 0
+    type: Transform
+- uid: 763
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 21.5,44.5
+    parent: 0
+    type: Transform
+- uid: 764
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 21.5,45.5
+    parent: 0
+    type: Transform
+- uid: 765
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 21.5,46.5
+    parent: 0
+    type: Transform
+- uid: 766
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 17.5,44.5
+    parent: 0
+    type: Transform
+- uid: 767
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 17.5,45.5
+    parent: 0
+    type: Transform
+- uid: 768
+  type: AtmosFixFreezerMarker
+  components:
+  - pos: 17.5,46.5
+    parent: 0
+    type: Transform
+- uid: 769
+  type: Lamp
+  components:
+  - pos: 1.4880867,32.68946
+    parent: 0
+    type: Transform
+- uid: 770
+  type: Poweredlight
+  components:
+  - pos: 15.5,32.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 771
+  type: Poweredlight
+  components:
+  - pos: 24.5,32.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 772
+  type: TableWood
+  components:
+  - pos: 24.5,32.5
+    parent: 0
+    type: Transform
+- uid: 773
+  type: TableWood
+  components:
+  - pos: 24.5,31.5
+    parent: 0
+    type: Transform
+- uid: 774
+  type: ComfyChair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 25.5,31.5
+    parent: 0
+    type: Transform
+- uid: 775
+  type: LampGold
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 24.5,32.5
+    parent: 0
+    type: Transform
+- uid: 776
+  type: BoxFolderBlue
+  components:
+  - pos: 22.48359,30.550323
+    parent: 0
+    type: Transform
+- uid: 777
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 22.5,32.5
+    parent: 0
+    type: Transform
+- uid: 778
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 22.5,30.5
+    parent: 0
+    type: Transform
+- uid: 779
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,32.5
+    parent: 0
+    type: Transform
+- uid: 780
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,30.5
+    parent: 0
+    type: Transform
+- uid: 781
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 19.5,32.5
+    parent: 0
+    type: Transform
+- uid: 782
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 19.5,30.5
+    parent: 0
+    type: Transform
+- uid: 783
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,32.5
+    parent: 0
+    type: Transform
+- uid: 784
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,30.5
+    parent: 0
+    type: Transform
+- uid: 785
+  type: PaperBin5
+  components:
+  - pos: 24.5,31.5
+    parent: 0
+    type: Transform
+- uid: 786
+  type: CyberPen
+  components:
+  - pos: 19.52091,32.612823
+    parent: 0
+    type: Transform
+- uid: 787
+  type: Stool
+  components:
+  - pos: 15.5,32.5
+    parent: 0
+    type: Transform
+- uid: 788
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 16.5,30.5
+    parent: 0
+    type: Transform
+- uid: 789
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 15.5,30.5
+    parent: 0
+    type: Transform
+- uid: 790
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 14.5,30.5
+    parent: 0
+    type: Transform
+- uid: 791
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,25.5
+    parent: 0
+    type: Transform
+- uid: 792
+  type: WindowTintedDirectional
+  components:
+  - pos: 10.5,28.5
+    parent: 0
+    type: Transform
+- uid: 793
+  type: WindowTintedDirectional
+  components:
+  - pos: 10.5,27.5
+    parent: 0
+    type: Transform
+- uid: 794
+  type: WindowTintedDirectional
+  components:
+  - pos: 8.5,28.5
+    parent: 0
+    type: Transform
+- uid: 795
+  type: WindowTintedDirectional
+  components:
+  - pos: 8.5,27.5
+    parent: 0
+    type: Transform
+- uid: 796
+  type: FloorDrain
+  components:
+  - pos: 8.5,24.5
+    parent: 0
+    type: Transform
+  - fixtures: []
+    type: Fixtures
+- uid: 797
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 8.5,25.5
+    parent: 0
+    type: Transform
+- uid: 798
+  type: WindowTintedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,24.5
+    parent: 0
+    type: Transform
+- uid: 799
+  type: ToiletEmpty
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,25.5
+    parent: 0
+    type: Transform
+- uid: 800
+  type: RandomSoap
+  components:
+  - pos: 8.5,24.5
+    parent: 0
+    type: Transform
+- uid: 801
+  type: ToiletEmpty
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 8.5,27.5
+    parent: 0
+    type: Transform
+- uid: 802
+  type: ToiletEmpty
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,27.5
+    parent: 0
+    type: Transform
+- uid: 803
+  type: SinkWide
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,24.5
+    parent: 0
+    type: Transform
+- uid: 804
+  type: SinkWide
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,28.5
+    parent: 0
+    type: Transform
+- uid: 805
+  type: SinkWide
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 8.5,28.5
+    parent: 0
+    type: Transform
+- uid: 806
+  type: HospitalCurtainsOpen
+  components:
+  - pos: 8.5,24.5
+    parent: 0
+    type: Transform
+- uid: 807
+  type: PowerCellRecharger
+  components:
+  - pos: 3.5,31.5
+    parent: 0
+    type: Transform
+- uid: 808
+  type: PowerCellRecharger
+  components:
+  - pos: 12.5,45.5
+    parent: 0
+    type: Transform
+- uid: 809
+  type: WindoorSecure
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 9.5,42.5
+    parent: 0
+    type: Transform
+- uid: 810
+  type: LockerScienceFilled
+  components:
+  - pos: 14.5,25.5
+    parent: 0
+    type: Transform
+- uid: 811
+  type: LockerScienceFilled
+  components:
+  - pos: 14.5,26.5
+    parent: 0
+    type: Transform
+- uid: 812
+  type: LockerScienceFilled
+  components:
+  - pos: 14.5,27.5
+    parent: 0
+    type: Transform
+- uid: 813
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 13.5,25.5
+    parent: 0
+    type: Transform
+- uid: 814
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 13.5,26.5
+    parent: 0
+    type: Transform
+- uid: 815
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 13.5,27.5
+    parent: 0
+    type: Transform
+- uid: 816
+  type: Table
+  components:
+  - pos: 14.5,24.5
+    parent: 0
+    type: Transform
+- uid: 817
+  type: Table
+  components:
+  - pos: 14.5,28.5
+    parent: 0
+    type: Transform
+- uid: 818
+  type: FlashlightLantern
+  components:
+  - pos: 14.29982,28.712414
+    parent: 0
+    type: Transform
+- uid: 819
+  type: FlashlightLantern
+  components:
+  - pos: 14.51857,28.524914
+    parent: 0
+    type: Transform
+- uid: 820
+  type: SheetPGlass
+  components:
+  - pos: 14.534195,24.571789
+    parent: 0
+    type: Transform
+- uid: 821
+  type: MaterialDiamond
+  components:
+  - pos: 1.5085931,27.696789
+    parent: 0
+    type: Transform
+- uid: 822
+  type: SilverOre
+  components:
+  - pos: 1.5210686,26.30472
+    parent: 0
+    type: Transform
+- uid: 823
+  type: UraniumOre
+  components:
+  - pos: 10.548276,25.257845
+    parent: 0
+    type: Transform
+- uid: 824
+  type: CableApcStack
+  components:
+  - pos: 6.439933,35.56771
+    parent: 0
+    type: Transform
+- uid: 825
+  type: CableMVStack
+  components:
+  - pos: 12.486409,39.468937
+    parent: 0
+    type: Transform
+- uid: 826
+  type: Rack
+  components:
+  - pos: 12.5,28.5
+    parent: 0
+    type: Transform
+- uid: 827
+  type: ClothingOuterCoatJensen
+  components:
+  - pos: 12.472879,28.68102
+    parent: 0
+    type: Transform
+- uid: 828
+  type: ClothingOuterCoatLab
+  components:
+  - pos: 12.613504,28.540396
+    parent: 0
+    type: Transform
+- uid: 829
+  type: RockGuitarInstrument
+  components:
+  - pos: 10.533063,27.58727
+    parent: 0
+    type: Transform
+- uid: 830
+  type: PoweredSmallLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 12.5,25.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 831
+  type: RandomSpawner
+  components:
+  - pos: 6.5,45.5
+    parent: 0
+    type: Transform
+- uid: 832
+  type: Recycler
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,24.5
+    parent: 0
+    type: Transform
+- uid: 833
+  type: PlasmaCanister
+  components:
+  - pos: 16.5,27.5
+    parent: 0
+    type: Transform
+- uid: 834
+  type: NitrousOxideCanister
+  components:
+  - pos: 16.5,26.5
+    parent: 0
+    type: Transform
+- uid: 835
+  type: SalvageCanisterSpawner
+  components:
+  - pos: 16.5,25.5
+    parent: 0
+    type: Transform
+- uid: 836
+  type: PortableScrubber
+  components:
+  - pos: 16.5,28.5
+    parent: 0
+    type: Transform
+- uid: 837
+  type: Rack
+  components:
+  - pos: 16.5,24.5
+    parent: 0
+    type: Transform
+- uid: 838
+  type: MachineAPE
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 22.5,25.5
+    parent: 0
+    type: Transform
+- uid: 839
+  type: MachineAPE
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 22.5,26.5
+    parent: 0
+    type: Transform
+- uid: 840
+  type: MachineAPE
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 22.5,27.5
+    parent: 0
+    type: Transform
+- uid: 841
+  type: SheetRPGlass
+  components:
+  - pos: 16.508902,24.578423
+    parent: 0
+    type: Transform
+- uid: 842
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 22.5,28.5
+    parent: 0
+    type: Transform
+- uid: 843
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 22.5,24.5
+    parent: 0
+    type: Transform
+- uid: 844
+  type: SpawnVehicleATV
+  components:
+  - pos: 20.5,25.5
+    parent: 0
+    type: Transform
+- uid: 845
+  type: Rack
+  components:
+  - pos: 20.5,24.5
+    parent: 0
+    type: Transform
+- uid: 846
+  type: VehicleKeyATV
+  components:
+  - pos: 20.483374,24.635374
+    parent: 0
+    type: Transform
+- uid: 847
+  type: ClosetBombFilled
+  components:
+  - pos: 20.5,28.5
+    parent: 0
+    type: Transform
+- uid: 848
+  type: PoweredSmallLightEmpty
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 18.5,26.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 849
+  type: PoweredSmallLightEmpty
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 20.5,26.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 850
+  type: CarpetPurple
+  components:
+  - pos: 30.5,31.5
+    parent: 0
+    type: Transform
+- uid: 851
+  type: CarpetPurple
+  components:
+  - pos: 31.5,31.5
+    parent: 0
+    type: Transform
+- uid: 852
+  type: CarpetPurple
+  components:
+  - pos: 32.5,31.5
+    parent: 0
+    type: Transform
+- uid: 853
+  type: CarpetPurple
+  components:
+  - pos: 33.5,31.5
+    parent: 0
+    type: Transform
+- uid: 854
+  type: CarpetPurple
+  components:
+  - pos: 34.5,31.5
+    parent: 0
+    type: Transform
+- uid: 855
+  type: CarpetPurple
+  components:
+  - pos: 35.5,31.5
+    parent: 0
+    type: Transform
+- uid: 856
+  type: CarpetPurple
+  components:
+  - pos: 36.5,31.5
+    parent: 0
+    type: Transform
+- uid: 857
+  type: CarpetPurple
+  components:
+  - pos: 37.5,31.5
+    parent: 0
+    type: Transform
+- uid: 858
+  type: CarpetPurple
+  components:
+  - pos: 38.5,31.5
+    parent: 0
+    type: Transform
+- uid: 859
+  type: TableCarpet
+  components:
+  - pos: 29.5,32.5
+    parent: 0
+    type: Transform
+- uid: 860
+  type: TableCarpet
+  components:
+  - pos: 31.5,32.5
+    parent: 0
+    type: Transform
+- uid: 861
+  type: TableCarpet
+  components:
+  - pos: 39.5,32.5
+    parent: 0
+    type: Transform
+- uid: 862
+  type: TableCarpet
+  components:
+  - pos: 37.5,32.5
+    parent: 0
+    type: Transform
+- uid: 863
+  type: TableCarpet
+  components:
+  - pos: 33.5,30.5
+    parent: 0
+    type: Transform
+- uid: 864
+  type: TableCarpet
+  components:
+  - pos: 35.5,30.5
+    parent: 0
+    type: Transform
+- uid: 865
+  type: DrinkGoldenCup
+  components:
+  - pos: 31.489838,32.583374
+    parent: 0
+    type: Transform
+- uid: 866
+  type: DrinkCognacBottleFull
+  components:
+  - pos: 37.505463,32.677124
+    parent: 0
+    type: Transform
+- uid: 867
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 39.5,32.5
+    parent: 0
+    type: Transform
+- uid: 868
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 29.5,32.5
+    parent: 0
+    type: Transform
+- uid: 869
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 33.5,30.5
+    parent: 0
+    type: Transform
+- uid: 870
+  type: Poweredlight
+  components:
+  - pos: 30.5,32.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 871
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 35.5,30.5
+    parent: 0
+    type: Transform
+- uid: 872
+  type: Poweredlight
+  components:
+  - pos: 38.5,32.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 873
+  type: CrateFilledSpawner
+  components:
+  - pos: 18.5,24.5
+    parent: 0
+    type: Transform
+- uid: 874
+  type: CrateFilledSpawner
+  components:
+  - pos: 22.5,34.5
+    parent: 0
+    type: Transform
+- uid: 875
+  type: ToyRubberDuck
+  components:
+  - pos: 8.491199,25.423159
+    parent: 0
+    type: Transform
+- uid: 876
+  type: Stool
+  components:
+  - pos: 8.5,25.5
+    parent: 0
+    type: Transform
+- uid: 877
+  type: Windoor
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 9.5,25.5
+    parent: 0
+    type: Transform
+- uid: 878
+  type: Windoor
+  components:
+  - pos: 9.5,27.5
+    parent: 0
+    type: Transform
+- uid: 879
+  type: MaterialCloth
+  components:
+  - pos: 8.569059,28.508856
+    parent: 0
+    type: Transform
+- uid: 880
+  type: MaterialDurathread
+  components:
+  - pos: 1.4759097,31.629063
+    parent: 0
+    type: Transform
+- uid: 881
+  type: WeldingFuelTankFull
+  components:
+  - pos: 14.5,44.5
+    parent: 0
+    type: Transform
+- uid: 882
+  type: Rack
+  components:
+  - pos: 22.5,28.5
+    parent: 0
+    type: Transform
+- uid: 883
+  type: AnomalyVesselCircuitboard
+  components:
+  - pos: 22.494812,28.596468
+    parent: 0
+    type: Transform
+- uid: 884
+  type: WallSolid
+  components:
+  - pos: 1.5,21.5
+    parent: 0
+    type: Transform
+- uid: 885
+  type: WallSolid
+  components:
+  - pos: 1.5,22.5
+    parent: 0
+    type: Transform
+- uid: 886
+  type: WallSolid
+  components:
+  - pos: 3.5,19.5
+    parent: 0
+    type: Transform
+- uid: 887
+  type: WallSolid
+  components:
+  - pos: 4.5,19.5
+    parent: 0
+    type: Transform
+- uid: 888
+  type: AirlockFreezer
+  components:
+  - pos: 3.5,18.5
+    parent: 0
+    type: Transform
+- uid: 889
+  type: ToiletEmpty
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 4.5,18.5
+    parent: 0
+    type: Transform
+- uid: 890
+  type: SinkWide
+  components:
+  - pos: 1.5,20.5
+    parent: 0
+    type: Transform
+- uid: 891
+  type: SinkWide
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,19.5
+    parent: 0
+    type: Transform
+- uid: 892
+  type: Mirror
+  components:
+  - pos: 1.5,21.5
+    parent: 0
+    type: Transform
+- uid: 893
+  type: Mirror
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 3.5,19.5
+    parent: 0
+    type: Transform
+- uid: 894
+  type: Rack
+  components:
+  - pos: 0.5,18.5
+    parent: 0
+    type: Transform
+- uid: 895
+  type: ToyRubberDuck
+  components:
+  - pos: 0.5,18.5
+    parent: 0
+    type: Transform
+- uid: 896
+  type: FloorDrain
+  components:
+  - pos: 0.5,22.5
+    parent: 0
+    type: Transform
+  - fixtures: []
+    type: Fixtures
+- uid: 897
+  type: HospitalCurtainsOpen
+  components:
+  - pos: 0.5,22.5
+    parent: 0
+    type: Transform
+- uid: 898
+  type: RandomSoap
+  components:
+  - pos: 0.5,22.5
+    parent: 0
+    type: Transform
+- uid: 899
+  type: ClosetEmergencyFilledRandom
+  components:
+  - pos: 4.5,22.5
+    parent: 0
+    type: Transform
+- uid: 900
+  type: ClosetFireFilled
+  components:
+  - pos: 3.5,22.5
+    parent: 0
+    type: Transform
+- uid: 901
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,21.5
+    parent: 0
+    type: Transform
+- uid: 902
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 3.5,21.5
+    parent: 0
+    type: Transform
+- uid: 903
+  type: PoweredSmallLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 0.5,19.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 904
+  type: PoweredSmallLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 2.5,22.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 905
+  type: CannabisSeeds
+  components:
+  - pos: 4.5,18.5
+    parent: 0
+    type: Transform
+- uid: 906
+  type: CableApcExtension
+  components:
+  - pos: 9.5,18.5
+    parent: 0
+    type: Transform
+- uid: 907
+  type: CableApcExtension
+  components:
+  - pos: 10.5,21.5
+    parent: 0
+    type: Transform
+- uid: 908
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 7.5,20.5
+    parent: 0
+    type: Transform
+- uid: 909
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 8.5,19.5
+    parent: 0
+    type: Transform
+- uid: 910
+  type: CableApcExtension
+  components:
+  - pos: 9.5,22.5
+    parent: 0
+    type: Transform
+- uid: 911
+  type: CableApcExtension
+  components:
+  - pos: 7.5,22.5
+    parent: 0
+    type: Transform
+- uid: 912
+  type: CableApcExtension
+  components:
+  - pos: 9.5,19.5
+    parent: 0
+    type: Transform
+- uid: 913
+  type: CableApcExtension
+  components:
+  - pos: 10.5,19.5
+    parent: 0
+    type: Transform
+- uid: 914
+  type: CableApcExtension
+  components:
+  - pos: 9.5,21.5
+    parent: 0
+    type: Transform
+- uid: 915
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 8.5,21.5
+    parent: 0
+    type: Transform
+- uid: 916
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 9.5,20.5
+    parent: 0
+    type: Transform
+- uid: 917
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 9.5,20.5
+    parent: 0
+    type: Transform
+- uid: 918
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 7.5,20.5
+    parent: 0
+    type: Transform
+- uid: 919
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 8.5,19.5
+    parent: 0
+    type: Transform
+- uid: 920
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 8.5,19.5
+    parent: 0
+    type: Transform
+- uid: 921
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 8.5,21.5
+    parent: 0
+    type: Transform
+- uid: 922
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 7.5,20.5
+    parent: 0
+    type: Transform
+- uid: 923
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 9.5,20.5
+    parent: 0
+    type: Transform
+- uid: 924
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 8.5,21.5
+    parent: 0
+    type: Transform
+- uid: 925
+  type: TableGlass
+  components:
+  - pos: 6.5,22.5
+    parent: 0
+    type: Transform
+- uid: 926
+  type: PlushieSharkGrey
+  components:
+  - pos: 6.4745436,18.474607
+    parent: 0
+    type: Transform
+- uid: 927
+  type: PottedPlant10
+  components:
+  - pos: 10.505794,22.255857
+    parent: 0
+    type: Transform
+- uid: 928
+  type: VendingMachineCigs
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 10.5,18.5
+    parent: 0
+    type: Transform
+- uid: 929
+  type: ChairFolding
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 7.5,22.5
+    parent: 0
+    type: Transform
+- uid: 930
+  type: Rack
+  components:
+  - pos: 6.5,18.5
+    parent: 0
+    type: Transform
+- uid: 931
+  type: ChairFolding
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,21.5
+    parent: 0
+    type: Transform
+- uid: 932
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 10.5,19.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 933
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,21.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 934
+  type: RandomVending
+  components:
+  - pos: 16.5,22.5
+    parent: 0
+    type: Transform
+- uid: 935
+  type: ComfyChair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 15.5,18.5
+    parent: 0
+    type: Transform
+- uid: 936
+  type: Railing
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 13.5,18.5
+    parent: 0
+    type: Transform
+- uid: 937
+  type: ComfyChair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 12.5,21.5
+    parent: 0
+    type: Transform
+- uid: 938
+  type: ComfyChair
+  components:
+  - pos: 13.5,22.5
+    parent: 0
+    type: Transform
+- uid: 939
+  type: ComfyChair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,19.5
+    parent: 0
+    type: Transform
+- uid: 940
+  type: Railing
+  components:
+  - pos: 12.5,19.5
+    parent: 0
+    type: Transform
+- uid: 941
+  type: TableGlass
+  components:
+  - pos: 12.5,22.5
+    parent: 0
+    type: Transform
+- uid: 942
+  type: TableGlass
+  components:
+  - pos: 16.5,18.5
+    parent: 0
+    type: Transform
+- uid: 943
+  type: RailingCornerSmall
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 13.5,19.5
+    parent: 0
+    type: Transform
+- uid: 944
+  type: Poweredlight
+  components:
+  - pos: 15.5,22.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 945
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 13.5,18.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 946
+  type: WindowFrostedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 6.5,7.5
+    parent: 0
+    type: Transform
+- uid: 947
+  type: WindowFrostedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 6.5,6.5
+    parent: 0
+    type: Transform
+- uid: 948
+  type: ClosetMaintenanceFilledRandom
+  components:
+  - pos: 5.5,7.5
+    parent: 0
+    type: Transform
+- uid: 949
+  type: PoweredSmallLight
+  components:
+  - pos: 6.5,10.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 950
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,7.5
+    parent: 0
+    type: Transform
+- uid: 951
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,6.5
+    parent: 0
+    type: Transform
+- uid: 952
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 3.5,6.5
+    parent: 0
+    type: Transform
+- uid: 953
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 3.5,7.5
+    parent: 0
+    type: Transform
+- uid: 954
+  type: ClosetMaintenanceFilledRandom
+  components:
+  - pos: 0.5,7.5
+    parent: 0
+    type: Transform
+- uid: 955
+  type: ClosetMaintenanceFilledRandom
+  components:
+  - pos: 0.5,6.5
+    parent: 0
+    type: Transform
+- uid: 956
+  type: Table
+  components:
+  - pos: 0.5,9.5
+    parent: 0
+    type: Transform
+- uid: 957
+  type: Table
+  components:
+  - pos: 0.5,10.5
+    parent: 0
+    type: Transform
+- uid: 958
+  type: Table
+  components:
+  - pos: 1.5,10.5
+    parent: 0
+    type: Transform
+- uid: 959
+  type: Table
+  components:
+  - pos: 2.5,10.5
+    parent: 0
+    type: Transform
+- uid: 960
+  type: SinkWide
+  components:
+  - pos: 3.5,10.5
+    parent: 0
+    type: Transform
+- uid: 961
+  type: KitchenMicrowave
+  components:
+  - pos: 0.5,10.5
+    parent: 0
+    type: Transform
+- uid: 962
+  type: DonkpocketBoxSpawner
+  components:
+  - pos: 0.5,9.5
+    parent: 0
+    type: Transform
+- uid: 963
+  type: DrinkMug
+  components:
+  - pos: 1.4545751,10.669063
+    parent: 0
+    type: Transform
+- uid: 964
+  type: DrinkMugMetal
+  components:
+  - pos: 1.6889501,10.590938
+    parent: 0
+    type: Transform
+- uid: 965
+  type: DrinkMugDog
+  components:
+  - pos: 1.4858251,10.465938
+    parent: 0
+    type: Transform
+- uid: 966
+  type: DrinkMugMoebius
+  components:
+  - pos: 2.173325,10.684688
+    parent: 0
+    type: Transform
+- uid: 967
+  type: WaterCooler
+  components:
+  - pos: 7.5,10.5
+    parent: 0
+    type: Transform
+- uid: 968
+  type: VendingMachineCoffee
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 8.5,10.5
+    parent: 0
+    type: Transform
+- uid: 969
+  type: VendingMachineSciDrobe
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 9.5,10.5
+    parent: 0
+    type: Transform
+- uid: 970
+  type: WindowTintedDirectional
+  components:
+  - pos: 5.5,8.5
+    parent: 0
+    type: Transform
+- uid: 971
+  type: WindowTintedDirectional
+  components:
+  - pos: 0.5,8.5
+    parent: 0
+    type: Transform
+- uid: 972
+  type: WindowTintedDirectional
+  components:
+  - pos: 3.5,8.5
+    parent: 0
+    type: Transform
+- uid: 973
+  type: WindowTintedDirectional
+  components:
+  - pos: 2.5,8.5
+    parent: 0
+    type: Transform
+- uid: 974
+  type: CarpetPurple
+  components:
+  - pos: 6.5,6.5
+    parent: 0
+    type: Transform
+- uid: 975
+  type: CarpetPurple
+  components:
+  - pos: 6.5,7.5
+    parent: 0
+    type: Transform
+- uid: 976
+  type: CarpetPurple
+  components:
+  - pos: 7.5,6.5
+    parent: 0
+    type: Transform
+- uid: 977
+  type: CarpetPurple
+  components:
+  - pos: 7.5,7.5
+    parent: 0
+    type: Transform
+- uid: 978
+  type: CarpetPurple
+  components:
+  - pos: 8.5,6.5
+    parent: 0
+    type: Transform
+- uid: 979
+  type: CarpetPurple
+  components:
+  - pos: 8.5,7.5
+    parent: 0
+    type: Transform
+- uid: 980
+  type: CarpetPurple
+  components:
+  - pos: 9.5,6.5
+    parent: 0
+    type: Transform
+- uid: 981
+  type: CarpetPurple
+  components:
+  - pos: 9.5,7.5
+    parent: 0
+    type: Transform
+- uid: 982
+  type: CarpetPurple
+  components:
+  - pos: 10.5,6.5
+    parent: 0
+    type: Transform
+- uid: 983
+  type: CarpetPurple
+  components:
+  - pos: 10.5,7.5
+    parent: 0
+    type: Transform
+- uid: 984
+  type: TableWood
+  components:
+  - pos: 7.5,6.5
+    parent: 0
+    type: Transform
+- uid: 985
+  type: TableWood
+  components:
+  - pos: 10.5,7.5
+    parent: 0
+    type: Transform
+- uid: 986
+  type: ComfyChair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,6.5
+    parent: 0
+    type: Transform
+- uid: 987
+  type: ComfyChair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 9.5,7.5
+    parent: 0
+    type: Transform
+- uid: 988
+  type: ComfyChair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 8.5,6.5
+    parent: 0
+    type: Transform
+- uid: 989
+  type: ComfyChair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 6.5,6.5
+    parent: 0
+    type: Transform
+- uid: 990
+  type: PottedPlant19
+  components:
+  - pos: 4.4883204,10.239479
+    parent: 0
+    type: Transform
+- uid: 991
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 1.5,6.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 992
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 9.5,6.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 993
+  type: RandomFoodMeal
+  components:
+  - pos: 12.5,22.5
+    parent: 0
+    type: Transform
+- uid: 994
+  type: RandomSnacks
+  components:
+  - pos: 16.5,18.5
+    parent: 0
+    type: Transform
+- uid: 995
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 18.5,18.5
+    parent: 0
+    type: Transform
+- uid: 996
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,18.5
+    parent: 0
+    type: Transform
+- uid: 997
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,18.5
+    parent: 0
+    type: Transform
+- uid: 998
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 22.5,18.5
+    parent: 0
+    type: Transform
+- uid: 999
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1000
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 22.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1001
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1002
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 18.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1003
+  type: BoxFolderWhite
+  components:
+  - pos: 21.488142,22.553272
+    parent: 0
+    type: Transform
+- uid: 1004
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1005
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1006
+  type: ComputerCrewMonitoring
+  components:
+  - pos: 19.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1007
+  type: Table
+  components:
+  - pos: 21.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1008
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1009
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1010
+  type: SubstationBasic
+  components:
+  - pos: 28.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1011
+  type: Poweredlight
+  components:
+  - pos: 18.5,22.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1012
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 22.5,18.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1013
+  type: GeneratorRTG
+  components:
+  - pos: 25.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1014
+  type: CableHV
+  components:
+  - pos: 25.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1015
+  type: CableHV
+  components:
+  - pos: 25.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1016
+  type: CableHV
+  components:
+  - pos: 25.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1017
+  type: CableHV
+  components:
+  - pos: 26.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1018
+  type: CableHV
+  components:
+  - pos: 27.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1019
+  type: CableHV
+  components:
+  - pos: 28.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1020
+  type: CableHV
+  components:
+  - pos: 28.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1021
+  type: CableHV
+  components:
+  - pos: 28.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1022
+  type: WallSolid
+  components:
+  - pos: 28.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1023
+  type: APCBasic
+  components:
+  - pos: 28.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1024
+  type: CableMV
+  components:
+  - pos: 28.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1025
+  type: CableMV
+  components:
+  - pos: 28.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1026
+  type: CableMV
+  components:
+  - pos: 28.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1027
+  type: CableMV
+  components:
+  - pos: 28.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1028
+  type: CableMV
+  components:
+  - pos: 28.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1029
+  type: CableApcExtension
+  components:
+  - pos: 28.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1030
+  type: CableApcExtension
+  components:
+  - pos: 28.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1031
+  type: CableApcExtension
+  components:
+  - pos: 25.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1032
+  type: CableApcExtension
+  components:
+  - pos: 24.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1033
+  type: CableApcExtension
+  components:
+  - pos: 25.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1034
+  type: CableApcExtension
+  components:
+  - pos: 24.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1035
+  type: CableApcExtension
+  components:
+  - pos: 24.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1036
+  type: CableApcExtension
+  components:
+  - pos: 24.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1037
+  type: CableApcExtension
+  components:
+  - pos: 24.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1038
+  type: CableTerminal
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 25.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1039
+  type: Catwalk
+  components:
+  - pos: 25.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1040
+  type: Catwalk
+  components:
+  - pos: 26.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1041
+  type: Catwalk
+  components:
+  - pos: 27.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1042
+  type: Catwalk
+  components:
+  - pos: 27.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1043
+  type: Catwalk
+  components:
+  - pos: 27.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1044
+  type: Catwalk
+  components:
+  - pos: 26.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1045
+  type: Catwalk
+  components:
+  - pos: 25.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1046
+  type: Catwalk
+  components:
+  - pos: 25.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1047
+  type: Rack
+  components:
+  - pos: 28.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1048
+  type: Rack
+  components:
+  - pos: 27.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1049
+  type: Multitool
+  components:
+  - pos: 27.480967,22.500828
+    parent: 0
+    type: Transform
+- uid: 1050
+  type: PowerDrill
+  components:
+  - pos: 28.512217,21.547703
+    parent: 0
+    type: Transform
+- uid: 1051
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 31.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1052
+  type: Poweredlight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 25.5,18.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1053
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 31.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1054
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 33.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1055
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 33.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1056
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 33.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1057
+  type: ShardGlassReinforced
+  components:
+  - pos: 34.381138,20.460537
+    parent: 0
+    type: Transform
+- uid: 1058
+  type: MachineTraversalDistorter
+  components:
+  - pos: 34.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1059
+  type: RandomArtifactSpawner
+  components:
+  - pos: 34.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1060
+  type: ComputerResearchAndDevelopment
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1061
+  type: ComputerBroken
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1062
+  type: ChairOfficeLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 30.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1063
+  type: ChairOfficeLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 30.5,22.5
+    parent: 0
+    type: Transform
+- uid: 1064
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1065
+  type: Stool
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1066
+  type: LockerScienceFilled
+  components:
+  - pos: 30.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1067
+  type: Rack
+  components:
+  - pos: 30.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1068
+  type: GasPassiveVent
+  components:
+  - pos: 33.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1069
+  type: GasPassiveVent
+  components:
+  - pos: 34.5,21.5
+    parent: 0
+    type: Transform
+- uid: 1070
+  type: GasPipeStraight
+  components:
+  - pos: 33.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1071
+  type: GasPipeStraight
+  components:
+  - pos: 34.5,20.5
+    parent: 0
+    type: Transform
+- uid: 1072
+  type: GasPressurePump
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 33.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1073
+  type: GasPressurePump
+  components:
+  - pos: 34.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1074
+  type: GasPort
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 33.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1075
+  type: GasPort
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 34.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1076
+  type: GasCanisterBrokenBase
+  components:
+  - pos: 34.5,18.5
+    parent: 0
+    type: Transform
+- uid: 1077
+  type: ClothingBeltUtility
+  components:
+  - pos: 30.536415,19.542816
+    parent: 0
+    type: Transform
+- uid: 1078
+  type: CableApcExtension
+  components:
+  - pos: 4.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1079
+  type: CableApcExtension
+  components:
+  - pos: 4.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1080
+  type: CableApcExtension
+  components:
+  - pos: 2.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1081
+  type: WallSolid
+  components:
+  - pos: 3.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1082
+  type: WallSolid
+  components:
+  - pos: 0.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1083
+  type: WallSolid
+  components:
+  - pos: 0.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1084
+  type: WallSolid
+  components:
+  - pos: 6.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1085
+  type: WallSolid
+  components:
+  - pos: 6.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1086
+  type: SalvageCanisterSpawner
+  components:
+  - pos: 1.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1087
+  type: MachineFrame
+  components:
+  - pos: 2.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1088
+  type: Table
+  components:
+  - pos: 1.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1089
+  type: Table
+  components:
+  - pos: 0.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1090
+  type: Table
+  components:
+  - pos: 0.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1091
+  type: Table
+  components:
+  - pos: 4.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1092
+  type: Table
+  components:
+  - pos: 5.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1093
+  type: Table
+  components:
+  - pos: 6.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1094
+  type: Table
+  components:
+  - pos: 6.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1095
+  type: Table
+  components:
+  - pos: 4.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1096
+  type: ExplosivesSignMed
+  components:
+  - pos: 6.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1097
+  type: Table
+  components:
+  - pos: 2.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1098
+  type: SalvageCanisterSpawner
+  components:
+  - pos: 1.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1099
+  type: ComputerResearchAndDevelopment
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 5.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1100
+  type: PottedPlant19
+  components:
+  - pos: 5.5066643,12.233577
+    parent: 0
+    type: Transform
+- uid: 1101
+  type: TimerTrigger
+  components:
+  - pos: 5.6041045,16.67286
+    parent: 0
+    type: Transform
+- uid: 1102
+  type: TimerTrigger
+  components:
+  - pos: 5.7759795,16.51661
+    parent: 0
+    type: Transform
+- uid: 1103
+  type: VoiceTrigger
+  components:
+  - pos: 6.4634795,16.756445
+    parent: 0
+    type: Transform
+- uid: 1104
+  type: ExplosivePayload
+  components:
+  - pos: 6.4166045,15.92832
+    parent: 0
+    type: Transform
+- uid: 1105
+  type: FlashPayload
+  components:
+  - pos: 6.6041045,15.74082
+    parent: 0
+    type: Transform
+- uid: 1106
+  type: ChemicalPayload
+  components:
+  - pos: 6.4166045,15.55332
+    parent: 0
+    type: Transform
+- uid: 1107
+  type: PowerCellRecharger
+  components:
+  - pos: 4.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1108
+  type: ToolboxMechanicalFilled
+  components:
+  - pos: 4.523156,12.6515875
+    parent: 0
+    type: Transform
+  - nextAttack: 10488.7397437
+    type: MeleeWeapon
+- uid: 1109
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,14.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1110
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 4.5,14.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1111
+  type: Screwdriver
+  components:
+  - pos: 2.6822295,12.620289
+    parent: 0
+    type: Transform
+- uid: 1112
+  type: SheetGlass
+  components:
+  - pos: 0.5572295,16.464039
+    parent: 0
+    type: Transform
+- uid: 1113
+  type: SheetSteel
+  components:
+  - pos: 0.5103545,15.635914
+    parent: 0
+    type: Transform
+- uid: 1114
+  type: SheetPlastic
+  components:
+  - pos: 0.5416045,16.026539
+    parent: 0
+    type: Transform
+- uid: 1115
+  type: Crowbar
+  components:
+  - pos: 2.5208104,12.456571
+    parent: 0
+    type: Transform
+  - nextAttack: 10380.4568435
+    type: MeleeWeapon
+- uid: 1116
+  type: ChemDispenserMachineCircuitboard
+  components:
+  - pos: 1.4478545,16.542164
+    parent: 0
+    type: Transform
+- uid: 1117
+  type: CableApcStack
+  components:
+  - pos: 4.6041045,16.682789
+    parent: 0
+    type: Transform
+- uid: 1118
+  type: WallmountTelescreen
+  components:
+  - pos: 3.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1119
+  type: ModularGrenade
+  components:
+  - pos: 5.1978545,16.604664
+    parent: 0
+    type: Transform
+- uid: 1120
+  type: ModularGrenade
+  components:
+  - pos: 5.3228545,16.510914
+    parent: 0
+    type: Transform
+- uid: 1121
+  type: LandMineModular
+  components:
+  - pos: 6.462872,16.34209
+    parent: 0
+    type: Transform
+- uid: 1122
+  type: LandMineModular
+  components:
+  - pos: 6.619122,16.201466
+    parent: 0
+    type: Transform
+- uid: 1123
+  type: PosterLegitScience
+  components:
+  - pos: 0.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1124
+  type: WallPlastitanium
+  components:
+  - pos: 12.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1125
+  type: WallPlastitanium
+  components:
+  - pos: 13.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1126
+  type: CableApcExtension
+  components:
+  - pos: 8.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1127
+  type: WallPlastitanium
+  components:
+  - pos: 13.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1128
+  type: WallPlastitanium
+  components:
+  - pos: 12.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1129
+  type: WallPlastitanium
+  components:
+  - pos: 10.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1130
+  type: CableApcExtension
+  components:
+  - pos: 9.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1131
+  type: WallPlastitanium
+  components:
+  - pos: 9.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1132
+  type: WallPlastitanium
+  components:
+  - pos: 13.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1133
+  type: WallPlastitanium
+  components:
+  - pos: 9.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1134
+  type: WallPlastitanium
+  components:
+  - pos: 10.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1135
+  type: CableApcExtension
+  components:
+  - pos: 8.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1136
+  type: CableApcExtension
+  components:
+  - pos: 8.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1137
+  type: CableApcExtension
+  components:
+  - pos: 8.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1138
+  type: CableApcExtension
+  components:
+  - pos: 9.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1139
+  type: CableApcExtension
+  components:
+  - pos: 10.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1140
+  type: CableApcExtension
+  components:
+  - pos: 12.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1141
+  type: CableApcExtension
+  components:
+  - pos: 13.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1142
+  type: CableApcExtension
+  components:
+  - pos: 14.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1143
+  type: CableApcExtension
+  components:
+  - pos: 14.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1144
+  type: CableApcExtension
+  components:
+  - pos: 14.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1145
+  type: CableApcExtension
+  components:
+  - pos: 14.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1146
+  type: CableApcExtension
+  components:
+  - pos: 13.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1147
+  type: CableApcExtension
+  components:
+  - pos: 12.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1148
+  type: Rack
+  components:
+  - pos: 12.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1149
+  type: Rack
+  components:
+  - pos: 10.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1150
+  type: WeaponLaserGun
+  components:
+  - pos: 12.468685,14.590134
+    parent: 0
+    type: Transform
+- uid: 1151
+  type: WeaponLaserGun
+  components:
+  - pos: 12.593685,14.371384
+    parent: 0
+    type: Transform
+- uid: 1152
+  type: WeaponXrayCannon
+  components:
+  - pos: 10.48431,14.543259
+    parent: 0
+    type: Transform
+- uid: 1153
+  type: HighSecCaptainLocked
+  components:
+  - pos: 11.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1154
+  type: SignSecureMed
+  components:
+  - pos: 10.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1155
+  type: SignShock
+  components:
+  - pos: 12.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1156
+  type: PoweredSmallLight
+  components:
+  - pos: 11.5,14.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1157
+  type: PoweredSmallLight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 8.5,14.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1158
+  type: PoweredSmallLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 14.5,14.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1159
+  type: CableApcExtension
+  components:
+  - pos: 18.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1160
+  type: CableApcExtension
+  components:
+  - pos: 20.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1161
+  type: CableApcExtension
+  components:
+  - pos: 21.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1162
+  type: CableApcExtension
+  components:
+  - pos: 22.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1163
+  type: CableApcExtension
+  components:
+  - pos: 22.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1164
+  type: CableApcExtension
+  components:
+  - pos: 22.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1165
+  type: CableApcExtension
+  components:
+  - pos: 22.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1166
+  type: CableApcExtension
+  components:
+  - pos: 21.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1167
+  type: CableApcExtension
+  components:
+  - pos: 20.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1168
+  type: MonkeyCubeBox
+  components:
+  - pos: 17.514208,15.501376
+    parent: 0
+    type: Transform
+- uid: 1169
+  type: SprayBottleWater
+  components:
+  - pos: 17.482958,14.735751
+    parent: 0
+    type: Transform
+- uid: 1170
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1171
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1172
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 22.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1173
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 21.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1174
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1175
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 19.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1176
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 18.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1177
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 17.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1178
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 16.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1179
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 16.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1180
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 16.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1181
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 17.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1182
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 18.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1183
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 19.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1184
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 20.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1185
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 21.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1186
+  type: TableWood
+  components:
+  - pos: 17.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1187
+  type: TableWood
+  components:
+  - pos: 17.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1188
+  type: TableWood
+  components:
+  - pos: 21.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1189
+  type: FoodBanana
+  components:
+  - pos: 21.363342,15.717637
+    parent: 0
+    type: Transform
+- uid: 1190
+  type: FoodBanana
+  components:
+  - pos: 21.488342,15.623887
+    parent: 0
+    type: Transform
+- uid: 1191
+  type: FoodBanana
+  components:
+  - pos: 21.644592,15.498887
+    parent: 0
+    type: Transform
+- uid: 1192
+  type: TrashBananaPeel
+  components:
+  - pos: 19.519592,13.327012
+    parent: 0
+    type: Transform
+- uid: 1193
+  type: LandMineExplosive
+  components:
+  - pos: 19.503967,13.342637
+    parent: 0
+    type: Transform
+- uid: 1194
+  type: ClothingOuterSuitMonkey
+  components:
+  - pos: 21.483316,14.329501
+    parent: 0
+    type: Transform
+- uid: 1195
+  type: ClothingHeadHatAnimalMonkey
+  components:
+  - pos: 17.452066,13.392001
+    parent: 0
+    type: Transform
+- uid: 1196
+  type: FoodSoupMonkey
+  components:
+  - pos: 19.514566,14.517001
+    parent: 0
+    type: Transform
+- uid: 1197
+  type: WallSolid
+  components:
+  - pos: 40.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1198
+  type: WallSolid
+  components:
+  - pos: 39.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1199
+  type: WallSolid
+  components:
+  - pos: 39.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1200
+  type: WallSolid
+  components:
+  - pos: 42.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1201
+  type: WallSolid
+  components:
+  - pos: 43.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1202
+  type: WallSolid
+  components:
+  - pos: 43.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1203
+  type: WallSolid
+  components:
+  - pos: 39.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1204
+  type: WallSolid
+  components:
+  - pos: 39.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1205
+  type: WallSolid
+  components:
+  - pos: 40.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1206
+  type: WallSolid
+  components:
+  - pos: 42.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1207
+  type: WallSolid
+  components:
+  - pos: 43.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1208
+  type: WallSolid
+  components:
+  - pos: 43.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1209
+  type: WallSolid
+  components:
+  - pos: 47.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1210
+  type: WallSolid
+  components:
+  - pos: 47.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1211
+  type: WallSolid
+  components:
+  - pos: 48.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1212
+  type: WallSolid
+  components:
+  - pos: 50.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1213
+  type: WallSolid
+  components:
+  - pos: 51.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1214
+  type: WallSolid
+  components:
+  - pos: 51.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1215
+  type: WallSolid
+  components:
+  - pos: 50.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1216
+  type: WallSolid
+  components:
+  - pos: 51.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1217
+  type: WallSolid
+  components:
+  - pos: 51.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1218
+  type: WallSolid
+  components:
+  - pos: 48.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1219
+  type: WallSolid
+  components:
+  - pos: 47.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1220
+  type: WallSolid
+  components:
+  - pos: 47.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1221
+  type: Airlock
+  components:
+  - pos: 41.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1222
+  type: Airlock
+  components:
+  - pos: 41.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1223
+  type: Airlock
+  components:
+  - pos: 49.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1224
+  type: Airlock
+  components:
+  - pos: 49.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1225
+  type: CableApcExtension
+  components:
+  - pos: 41.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1226
+  type: CableApcExtension
+  components:
+  - pos: 41.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1227
+  type: CableApcExtension
+  components:
+  - pos: 41.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1228
+  type: CableApcExtension
+  components:
+  - pos: 41.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1229
+  type: CableApcExtension
+  components:
+  - pos: 49.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1230
+  type: CableApcExtension
+  components:
+  - pos: 49.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1231
+  type: CableApcExtension
+  components:
+  - pos: 49.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1232
+  type: CableApcExtension
+  components:
+  - pos: 49.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1233
+  type: Bed
+  components:
+  - pos: 42.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1234
+  type: Bed
+  components:
+  - pos: 42.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1235
+  type: Bed
+  components:
+  - pos: 50.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1236
+  type: Bed
+  components:
+  - pos: 50.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1237
+  type: BedsheetSpawner
+  components:
+  - pos: 42.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1238
+  type: BedsheetSpawner
+  components:
+  - pos: 50.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1239
+  type: BedsheetSpawner
+  components:
+  - pos: 50.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1240
+  type: BedsheetSpawner
+  components:
+  - pos: 42.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1241
+  type: Bookshelf
+  components:
+  - pos: 40.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1242
+  type: TableWood
+  components:
+  - pos: 40.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1243
+  type: TableCarpet
+  components:
+  - pos: 48.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1244
+  type: CarpetGreen
+  components:
+  - pos: 49.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1245
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 48.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1246
+  type: ToySpawner
+  components:
+  - pos: 40.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1247
+  type: ComfyChair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 48.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1248
+  type: RandomInstruments
+  components:
+  - pos: 48.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1249
+  type: SignRedOne
+  components:
+  - pos: 40.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1250
+  type: SignRedTwo
+  components:
+  - pos: 40.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1251
+  type: SignRedThree
+  components:
+  - pos: 48.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1252
+  type: SignRedFour
+  components:
+  - pos: 48.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1253
+  type: WindowDirectional
+  components:
+  - pos: 46.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1254
+  type: WindowDirectional
+  components:
+  - pos: 44.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1255
+  type: VendingMachineClothing
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 46.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1256
+  type: Rack
+  components:
+  - pos: 46.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1257
+  type: WardrobeMixedFilled
+  components:
+  - pos: 44.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1258
+  type: PoweredSmallLight
+  components:
+  - pos: 41.5,4.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1259
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 41.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1260
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 49.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1261
+  type: PoweredSmallLight
+  components:
+  - pos: 49.5,4.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1262
+  type: Table
+  components:
+  - pos: 37.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1263
+  type: Table
+  components:
+  - pos: 53.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1264
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 38.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1265
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 36.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1266
+  type: Chair
+  components:
+  - pos: 37.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1267
+  type: Chair
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 52.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1268
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 54.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1269
+  type: Stool
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 44.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1270
+  type: TableWood
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 45.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1271
+  type: ChairWood
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 46.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1272
+  type: ChairWood
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 44.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1273
+  type: ChessBoard
+  components:
+  - pos: 45.521095,1.5328176
+    parent: 0
+    type: Transform
+- uid: 1274
+  type: RandomPosterContraband
+  components:
+  - pos: 43.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1275
+  type: RandomPosterContraband
+  components:
+  - pos: 47.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1276
+  type: RandomPosterContraband
+  components:
+  - pos: 39.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1277
+  type: VendingMachineCola
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 38.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1278
+  type: VendingMachineCigs
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 37.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1279
+  type: filingCabinetDrawerRandom
+  components:
+  - pos: 36.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1280
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 36.5,3.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1281
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 54.5,1.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1282
+  type: Poweredlight
+  components:
+  - pos: 43.5,2.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1283
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 46.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1284
+  type: ClosetMaintenanceFilledRandom
+  components:
+  - pos: 52.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1285
+  type: ClosetL3ScienceFilled
+  components:
+  - pos: 53.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1286
+  type: ClosetL3ScienceFilled
+  components:
+  - pos: 54.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1287
+  type: ExtinguisherCabinetFilled
+  components:
+  - pos: 51.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1288
+  type: ExtinguisherCabinetFilled
+  components:
+  - pos: 39.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1289
+  type: CableApcExtension
+  components:
+  - pos: 9.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1290
+  type: CableApcExtension
+  components:
+  - pos: 10.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1291
+  type: CableApcExtension
+  components:
+  - pos: 11.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1292
+  type: CableApcExtension
+  components:
+  - pos: 12.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1293
+  type: CableApcExtension
+  components:
+  - pos: 13.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1294
+  type: CableApcExtension
+  components:
+  - pos: 14.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1295
+  type: CableApcExtension
+  components:
+  - pos: 14.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1296
+  type: CableApcExtension
+  components:
+  - pos: 2.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1297
+  type: CableApcExtension
+  components:
+  - pos: 13.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1298
+  type: CableApcExtension
+  components:
+  - pos: 13.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1299
+  type: CableApcExtension
+  components:
+  - pos: 12.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1300
+  type: CableApcExtension
+  components:
+  - pos: 11.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1301
+  type: CableApcExtension
+  components:
+  - pos: 10.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1302
+  type: CableApcExtension
+  components:
+  - pos: 9.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1303
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 4.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1304
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 5.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1305
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 6.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1306
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 7.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1307
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 8.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1308
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 9.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1309
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 10.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1310
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 11.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1311
+  type: WindowReinforcedDirectional
+  components:
+  - pos: 12.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1312
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 12.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1313
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 11.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1314
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1315
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 9.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1316
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 8.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1317
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 7.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1318
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1319
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 5.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1320
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1321
+  type: CableApcExtension
+  components:
+  - pos: 13.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1322
+  type: WallSolid
+  components:
+  - pos: 3.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1323
+  type: WallSolid
+  components:
+  - pos: 13.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1324
+  type: Chair
+  components:
+  - pos: 4.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1325
+  type: Chair
+  components:
+  - pos: 5.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1326
+  type: Chair
+  components:
+  - pos: 6.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1327
+  type: Chair
+  components:
+  - pos: 12.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1328
+  type: Chair
+  components:
+  - pos: 11.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1329
+  type: Chair
+  components:
+  - pos: 10.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1330
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 12.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1331
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 11.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1332
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 10.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1333
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 6.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1334
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 5.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1335
+  type: Chair
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 4.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1336
+  type: TableGlass
+  components:
+  - pos: 8.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1337
+  type: TableGlass
+  components:
+  - pos: 8.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1338
+  type: filingCabinetTallRandom
+  components:
+  - pos: 7.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1339
+  type: filingCabinetDrawerRandom
+  components:
+  - pos: 9.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1340
+  type: CryostasisBeaker
+  components:
+  - pos: 8.491919,3.5715053
+    parent: 0
+    type: Transform
+- uid: 1341
+  type: UnfinishedMachineFrame
+  components:
+  - pos: 9.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1342
+  type: PoweredlightExterior
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 12.5,2.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1343
+  type: PoweredlightExterior
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 4.5,2.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1344
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 2.5,2.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1345
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 14.5,2.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1346
+  type: WaterCooler
+  components:
+  - pos: 0.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1347
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1348
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1349
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1350
+  type: Table
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 0.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1351
+  type: DrinkWaterCup
+  components:
+  - pos: 0.40165997,3.6027553
+    parent: 0
+    type: Transform
+- uid: 1352
+  type: DrinkWaterCup
+  components:
+  - pos: 0.62040997,3.4777553
+    parent: 0
+    type: Transform
+- uid: 1353
+  type: WaterTankHighCapacity
+  components:
+  - pos: 7.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1354
+  type: hydroponicsTray
+  components:
+  - pos: 13.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1355
+  type: hydroponicsTray
+  components:
+  - pos: 13.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1356
+  type: hydroponicsTray
+  components:
+  - pos: 13.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1357
+  type: hydroponicsTray
+  components:
+  - pos: 15.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1358
+  type: hydroponicsTray
+  components:
+  - pos: 15.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1359
+  type: hydroponicsTray
+  components:
+  - pos: 15.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1360
+  type: hydroponicsTray
+  components:
+  - pos: 19.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1361
+  type: hydroponicsTray
+  components:
+  - pos: 19.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1362
+  type: hydroponicsTray
+  components:
+  - pos: 19.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1363
+  type: hydroponicsTray
+  components:
+  - pos: 21.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1364
+  type: hydroponicsTray
+  components:
+  - pos: 21.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1365
+  type: hydroponicsTray
+  components:
+  - pos: 21.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1366
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1367
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1368
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 16.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1369
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1370
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1371
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 18.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1372
+  type: WaterTankFull
+  components:
+  - pos: 18.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1373
+  type: SeedExtractor
+  components:
+  - pos: 18.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1374
+  type: TableGlass
+  components:
+  - pos: 18.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1375
+  type: TableGlass
+  components:
+  - pos: 16.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1376
+  type: TableGlass
+  components:
+  - pos: 16.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1377
+  type: TableGlass
+  components:
+  - pos: 16.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1378
+  type: HydroponicsToolMiniHoe
+  components:
+  - pos: 18.469873,9.442207
+    parent: 0
+    type: Transform
+- uid: 1379
+  type: AloeSeeds
+  components:
+  - pos: 16.516748,9.567207
+    parent: 0
+    type: Transform
+- uid: 1380
+  type: AmbrosiaVulgarisSeeds
+  components:
+  - pos: 16.688623,9.410957
+    parent: 0
+    type: Transform
+- uid: 1381
+  type: CabbageSeeds
+  components:
+  - pos: 16.501123,8.739082
+    parent: 0
+    type: Transform
+- uid: 1382
+  type: CarrotSeeds
+  components:
+  - pos: 16.641748,8.598457
+    parent: 0
+    type: Transform
+- uid: 1383
+  type: EggySeeds
+  components:
+  - pos: 16.422998,7.8484573
+    parent: 0
+    type: Transform
+- uid: 1384
+  type: EggplantSeeds
+  components:
+  - pos: 16.626123,7.6609573
+    parent: 0
+    type: Transform
+- uid: 1385
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 15.5,8.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1386
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 19.5,8.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1387
+  type: WeldingFuelTankFull
+  components:
+  - pos: 26.5,19.5
+    parent: 0
+    type: Transform
+- uid: 1388
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1389
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1390
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 25.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1391
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 25.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1392
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 29.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1393
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 29.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1394
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 33.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1395
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 33.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1396
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1397
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 31.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1398
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 27.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1399
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 27.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1400
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 23.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1401
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 23.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1402
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 19.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1403
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 19.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1404
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 19.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1405
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 21.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1406
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 23.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1407
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 25.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1408
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 27.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1409
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 29.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1410
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 31.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1411
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 33.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1412
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 31.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1413
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 33.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1414
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 29.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1415
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 25.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1416
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 21.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1417
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 23.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1418
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 19.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1419
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 27.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1420
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1421
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1422
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 24.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1423
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 24.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1424
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 28.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1425
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 28.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1426
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 32.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1427
+  type: WindoorSecure
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 32.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1428
+  type: Table
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 19.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1429
+  type: Table
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 23.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1430
+  type: Table
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 27.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1431
+  type: Table
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 31.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1432
+  type: DisposalUnit
+  components:
+  - pos: 21.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1433
+  type: DisposalUnit
+  components:
+  - pos: 25.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1434
+  type: DisposalUnit
+  components:
+  - pos: 29.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1435
+  type: DisposalUnit
+  components:
+  - pos: 33.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1436
+  type: DisposalTrunk
+  components:
+  - pos: 21.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1437
+  type: DisposalTrunk
+  components:
+  - pos: 25.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1438
+  type: DisposalTrunk
+  components:
+  - pos: 29.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1439
+  type: DisposalTrunk
+  components:
+  - pos: 33.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1440
+  type: DisposalTrunk
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 33.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1441
+  type: DisposalTrunk
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 29.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1442
+  type: DisposalTrunk
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 25.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1443
+  type: DisposalTrunk
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 21.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1444
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1445
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 24.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1446
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 28.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1447
+  type: PoweredSmallLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 32.5,0.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1448
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 20.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1449
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 21.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1450
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 22.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1451
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 32.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1452
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 31.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1453
+  type: TableGlass
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 30.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1454
+  type: chem_master
+  components:
+  - pos: 29.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1455
+  type: ChairOfficeLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 31.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1456
+  type: PlushieSlime
+  components:
+  - pos: 28.542555,0.5099404
+    parent: 0
+    type: Transform
+- uid: 1457
+  type: ClothingHeadHatAnimalHeadslime
+  components:
+  - pos: 20.504282,0.6661904
+    parent: 0
+    type: Transform
+- uid: 1458
+  type: VendingMachineSmartFridge
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 23.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1459
+  type: WallSolid
+  components:
+  - pos: 19.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1460
+  type: WallSolid
+  components:
+  - pos: 33.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1461
+  type: SignXenolab
+  components:
+  - pos: 19.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1462
+  type: SignXenolab
+  components:
+  - pos: 33.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1463
+  type: WindowReinforcedDirectional
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 19.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1464
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 33.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1465
+  type: WindoorSecure
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 19.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1466
+  type: WindoorSecure
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 33.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1467
+  type: ChairOfficeLight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 21.5,3.5
+    parent: 0
+    type: Transform
+- uid: 1468
+  type: LargeBeaker
+  components:
+  - pos: 21.7339,4.82244
+    parent: 0
+    type: Transform
+- uid: 1469
+  type: LargeBeaker
+  components:
+  - pos: 21.9839,4.619315
+    parent: 0
+    type: Transform
+- uid: 1470
+  type: Beaker
+  components:
+  - pos: 21.687025,4.54119
+    parent: 0
+    type: Transform
+- uid: 1471
+  type: Dropper
+  components:
+  - pos: 22.57765,4.50994
+    parent: 0
+    type: Transform
+- uid: 1472
+  type: SheetPlasma
+  components:
+  - pos: 32.4712,4.556815
+    parent: 0
+    type: Transform
+- uid: 1473
+  type: PlasmaTankFilled
+  components:
+  - pos: 30.568752,4.54119
+    parent: 0
+    type: Transform
+- uid: 1474
+  type: SheetRPGlass
+  components:
+  - pos: 20.5658,4.54119
+    parent: 0
+    type: Transform
+- uid: 1475
+  type: WaterTankFull
+  components:
+  - pos: 24.5,4.5
+    parent: 0
+    type: Transform
+- uid: 1476
+  type: BluespaceBeaker
+  components:
+  - pos: 21.201073,4.650565
+    parent: 0
+    type: Transform
+- uid: 1477
+  type: TableGlass
+  components:
+  - pos: 22.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1478
+  type: TableGlass
+  components:
+  - pos: 30.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1479
+  type: ChairOfficeLight
+  components:
+  - pos: 22.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1480
+  type: ChairOfficeLight
+  components:
+  - pos: 30.5,1.5
+    parent: 0
+    type: Transform
+- uid: 1481
+  type: filingCabinetDrawerRandom
+  components:
+  - pos: 18.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1482
+  type: filingCabinetRandom
+  components:
+  - pos: 34.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1483
+  type: MaintenanceFluffSpawner
+  components:
+  - pos: 30.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1484
+  type: BoxBeaker
+  components:
+  - pos: 22.482006,0.7443154
+    parent: 0
+    type: Transform
+- uid: 1485
+  type: SMESBasic
+  components:
+  - pos: 28.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1486
+  type: SMESBasic
+  components:
+  - pos: 29.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1487
+  type: SMESBasic
+  components:
+  - pos: 30.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1488
+  type: CableHV
+  components:
+  - pos: 28.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1489
+  type: CableHV
+  components:
+  - pos: 29.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1490
+  type: CableHV
+  components:
+  - pos: 30.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1491
+  type: CableHV
+  components:
+  - pos: 28.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1492
+  type: CableHV
+  components:
+  - pos: 29.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1493
+  type: CableHV
+  components:
+  - pos: 30.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1494
+  type: CableHV
+  components:
+  - pos: 27.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1495
+  type: CableHV
+  components:
+  - pos: 26.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1496
+  type: CableHV
+  components:
+  - pos: 31.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1497
+  type: CableHV
+  components:
+  - pos: 32.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1498
+  type: CableHV
+  components:
+  - pos: 33.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1499
+  type: CableHV
+  components:
+  - pos: 33.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1500
+  type: CableHV
+  components:
+  - pos: 33.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1501
+  type: WallSolid
+  components:
+  - pos: 28.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1502
+  type: CableHV
+  components:
+  - pos: 29.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1503
+  type: CableHV
+  components:
+  - pos: 25.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1504
+  type: CableHV
+  components:
+  - pos: 25.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1505
+  type: CableHV
+  components:
+  - pos: 25.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1506
+  type: WallSolid
+  components:
+  - pos: 29.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1507
+  type: WallSolid
+  components:
+  - pos: 30.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1508
+  type: CableMV
+  components:
+  - pos: 29.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1509
+  type: CableMV
+  components:
+  - pos: 30.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1510
+  type: CableApcExtension
+  components:
+  - pos: 30.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1511
+  type: CableApcExtension
+  components:
+  - pos: 31.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1512
+  type: CableApcExtension
+  components:
+  - pos: 31.5,6.5
+    parent: 0
+    type: Transform
+- uid: 1513
+  type: CableApcExtension
+  components:
+  - pos: 30.5,6.5
+    parent: 0
+    type: Transform
+- uid: 1514
+  type: CableApcExtension
+  components:
+  - pos: 29.5,6.5
+    parent: 0
+    type: Transform
+- uid: 1515
+  type: CableApcExtension
+  components:
+  - pos: 28.5,6.5
+    parent: 0
+    type: Transform
+- uid: 1516
+  type: CableApcExtension
+  components:
+  - pos: 27.5,6.5
+    parent: 0
+    type: Transform
+- uid: 1517
+  type: CableApcExtension
+  components:
+  - pos: 27.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1518
+  type: CableTerminal
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 28.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1519
+  type: CableTerminal
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 29.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1520
+  type: CableTerminal
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 30.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1521
+  type: Catwalk
+  components:
+  - pos: 28.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1522
+  type: Catwalk
+  components:
+  - pos: 29.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1523
+  type: Catwalk
+  components:
+  - pos: 30.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1524
+  type: GeneratorRTG
+  components:
+  - pos: 25.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1525
+  type: GeneratorRTG
+  components:
+  - pos: 25.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1526
+  type: GeneratorRTG
+  components:
+  - pos: 33.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1527
+  type: GeneratorRTG
+  components:
+  - pos: 33.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1528
+  type: GeneratorPlasma
+  components:
+  - pos: 25.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1529
+  type: GeneratorPlasma
+  components:
+  - pos: 33.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1530
+  type: TableReinforced
+  components:
+  - pos: 27.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1531
+  type: LockerWeldingSuppliesFilled
+  components:
+  - pos: 31.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1532
+  type: TableReinforced
+  components:
+  - pos: 31.5,8.5
+    parent: 0
+    type: Transform
+- uid: 1533
+  type: LockerElectricalSuppliesFilled
+  components:
+  - pos: 27.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1534
+  type: MaterialBiomass
+  components:
+  - pos: 24.534355,0.41658816
+    parent: 0
+    type: Transform
+- uid: 1535
+  type: SheetGlass
+  components:
+  - pos: 27.48748,8.492639
+    parent: 0
+    type: Transform
+- uid: 1536
+  type: SheetPlasteel
+  components:
+  - pos: 31.534355,8.523889
+    parent: 0
+    type: Transform
+- uid: 1537
+  type: SheetPlastic
+  components:
+  - pos: 7.5163627,6.5836935
+    parent: 0
+    type: Transform
+- uid: 1538
+  type: SheetRGlass
+  components:
+  - pos: 6.5744953,22.554136
+    parent: 0
+    type: Transform
+- uid: 1539
+  type: SheetSteel
+  components:
+  - pos: 4.6210227,35.514687
+    parent: 0
+    type: Transform
+- uid: 1540
+  type: SignElectricalMed
+  components:
+  - pos: 28.5,9.5
+    parent: 0
+    type: Transform
+- uid: 1541
+  type: CableApcStack
+  components:
+  - pos: 27.694578,8.767019
+    parent: 0
+    type: Transform
+- uid: 1542
+  type: CableMVStack
+  components:
+  - pos: 27.819578,8.595144
+    parent: 0
+    type: Transform
+- uid: 1543
+  type: CableHVStack
+  components:
+  - pos: 27.850828,8.329519
+    parent: 0
+    type: Transform
+- uid: 1544
+  type: WeldingFuelTankFull
+  components:
+  - pos: 31.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1545
+  type: WeldingFuelTankFull
+  components:
+  - pos: 27.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1546
+  type: computerBodyScanner
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 28.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1547
+  type: computerBodyScanner
+  components:
+  - pos: 26.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1548
+  type: MedicalScanner
+  components:
+  - pos: 25.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1549
+  type: MedicalScanner
+  components:
+  - pos: 29.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1550
+  type: Table
+  components:
+  - pos: 24.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1551
+  type: Table
+  components:
+  - pos: 24.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1552
+  type: Table
+  components:
+  - pos: 30.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1553
+  type: Table
+  components:
+  - pos: 30.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1554
+  type: VendingMachineGeneDrobe
+  components:
+  - flags: SessionSpecific
+    type: MetaData
+  - pos: 29.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1555
+  type: TableGlass
+  components:
+  - pos: 28.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1556
+  type: ClosetRadiationSuitFilled
+  components:
+  - pos: 30.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1557
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 24.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1558
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 26.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1559
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 26.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1560
+  type: WindowReinforcedDirectional
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 26.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1561
+  type: ShardGlassReinforced
+  components:
+  - pos: 25.506968,14.578961
+    parent: 0
+    type: Transform
+- uid: 1562
+  type: MonkeyCubeBox
+  components:
+  - pos: 24.538218,15.750836
+    parent: 0
+    type: Transform
+- uid: 1563
+  type: MonkeyCube
+  components:
+  - pos: 26.366343,13.313336
+    parent: 0
+    type: Transform
+- uid: 1564
+  type: MonkeyCube
+  components:
+  - pos: 25.631968,12.750836
+    parent: 0
+    type: Transform
+- uid: 1565
+  type: FireExtinguisher
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 26.272593,12.469586
+    parent: 0
+    type: Transform
+- uid: 1566
+  type: ClothingHeadsetMedicalScience
+  components:
+  - pos: 30.475718,12.610211
+    parent: 0
+    type: Transform
+- uid: 1567
+  type: PaperBin5
+  components:
+  - pos: 30.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1568
+  type: BoxFolderWhite
+  components:
+  - pos: 24.522593,16.500835
+    parent: 0
+    type: Transform
+- uid: 1569
+  type: PowerCellRecharger
+  components:
+  - pos: 28.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1570
+  type: Stool
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 26.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1571
+  type: Stool
+  components:
+  - pos: 28.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1572
+  type: MaterialBiomass
+  components:
+  - pos: 24.569468,13.125836
+    parent: 0
+    type: Transform
+- uid: 1573
+  type: SprayBottleWater
+  components:
+  - pos: 30.7552,12.830012
+    parent: 0
+    type: Transform
+- uid: 1574
+  type: PillCanister
+  components:
+  - pos: 24.34895,16.173763
+    parent: 0
+    type: Transform
+- uid: 1575
+  type: WallSolid
+  components:
+  - pos: 34.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1576
+  type: filingCabinetDrawerRandom
+  components:
+  - pos: 35.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1577
+  type: Table
+  components:
+  - pos: 36.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1578
+  type: Table
+  components:
+  - pos: 36.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1579
+  type: Table
+  components:
+  - pos: 36.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1580
+  type: Table
+  components:
+  - pos: 35.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1581
+  type: Table
+  components:
+  - pos: 32.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1582
+  type: Table
+  components:
+  - pos: 33.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1583
+  type: ChairOfficeLight
+  components:
+  - pos: 35.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1584
+  type: ChairOfficeDark
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 33.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1585
+  type: filingCabinetRandom
+  components:
+  - pos: 32.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1586
+  type: ToolboxMechanicalFilled
+  components:
+  - pos: 36.51179,16.622833
+    parent: 0
+    type: Transform
+- uid: 1587
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 37.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1588
+  type: Chair
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 37.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1589
+  type: BaseComputer
+  components:
+  - pos: 37.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1590
+  type: Poweredlight
+  components:
+  - pos: 27.5,4.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1591
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 30.5,15.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1592
+  type: Poweredlight
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 24.5,13.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1593
+  type: Poweredlight
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 34.5,19.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1594
+  type: PoweredSmallLightEmpty
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 34.5,12.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1595
+  type: PoweredSmallLight
+  components:
+  - pos: 38.5,16.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+- uid: 1596
+  type: SignScience
+  components:
+  - pos: 34.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1597
+  type: SignalTrigger
+  components:
+  - pos: 32.571358,13.5151415
+    parent: 0
+    type: Transform
+- uid: 1598
+  type: PowerCellRecharger
+  components:
+  - pos: 36.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1599
+  type: PowerCellHyperPrinted
+  components:
+  - pos: 33.368233,13.5307665
+    parent: 0
+    type: Transform
+- uid: 1600
+  type: CircuitImprinter
+  components:
+  - pos: 32.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1601
+  type: Autolathe
+  components:
+  - pos: 33.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1602
+  type: UnfinishedMachineFrame
+  components:
+  - pos: 33.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1603
+  type: MachineFrame
+  components:
+  - pos: 32.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1604
+  type: Beaker
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 35.286808,13.7495165
+    parent: 0
+    type: Transform
+- uid: 1605
+  type: EmergencyLight
+  components:
+  - pos: 29.5,8.5
+    parent: 0
+    type: Transform
+  - type: ActiveEmergencyLight
+- uid: 1606
+  type: EmergencyLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 11.5,16.5
+    parent: 0
+    type: Transform
+  - type: ActiveEmergencyLight
+- uid: 1607
+  type: EmergencyLight
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 13.5,44.5
+    parent: 0
+    type: Transform
+  - type: ActiveEmergencyLight
+- uid: 1608
+  type: Bookshelf
+  components:
+  - pos: 30.5,32.5
+    parent: 0
+    type: Transform
+- uid: 1609
+  type: Bookshelf
+  components:
+  - pos: 38.5,32.5
+    parent: 0
+    type: Transform
+- uid: 1610
+  type: Bookshelf
+  components:
+  - pos: 36.5,30.5
+    parent: 0
+    type: Transform
+- uid: 1611
+  type: Bookshelf
+  components:
+  - pos: 32.5,30.5
+    parent: 0
+    type: Transform
+- uid: 1612
+  type: GasFilter
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 42.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1613
+  type: GasMixer
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 41.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1614
+  type: GasPort
+  components:
+  - rot: -1.5707963267948966 rad
+    pos: 43.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1615
+  type: GasPort
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 42.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1616
+  type: GasPort
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 41.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1617
+  type: GasPort
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 40.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1618
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 40.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1619
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 40.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1620
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 42.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1621
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 41.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1622
+  type: Table
+  components:
+  - rot: 1.5707963267948966 rad
+    pos: 42.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1623
+  type: ChairOfficeLight
+  components:
+  - pos: 41.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1624
+  type: ResearchDisk5000
+  components:
+  - pos: 36.524506,15.557037
+    parent: 0
+    type: Transform
+- uid: 1625
+  type: ResearchDisk
+  components:
+  - pos: 8.434439,1.4775863
+    parent: 0
+    type: Transform
+- uid: 1626
+  type: ResearchDisk
+  components:
+  - pos: 32.469986,0.49321127
+    parent: 0
+    type: Transform
+- uid: 1627
+  type: ResearchDisk
+  components:
+  - pos: 24.461615,16.586529
+    parent: 0
+    type: Transform
+- uid: 1628
+  type: RemoteSignaller
+  components:
+  - pos: 42.357162,12.70194
+    parent: 0
+    type: Transform
+- uid: 1629
+  type: RemoteSignaller
+  components:
+  - pos: 42.482162,12.85819
+    parent: 0
+    type: Transform
+- uid: 1630
+  type: RemoteSignaller
+  components:
+  - pos: 42.607162,12.70194
+    parent: 0
+    type: Transform
+- uid: 1631
+  type: TimerTrigger
+  components:
+  - pos: 40.404037,12.592565
+    parent: 0
+    type: Transform
+- uid: 1632
+  type: TimerTrigger
+  components:
+  - pos: 40.575912,12.73319
+    parent: 0
+    type: Transform
+- uid: 1633
+  type: TimerTrigger
+  components:
+  - pos: 40.654037,12.48319
+    parent: 0
+    type: Transform
+- uid: 1634
+  type: ModularGrenade
+  components:
+  - pos: 40.388412,13.373815
+    parent: 0
+    type: Transform
+- uid: 1635
+  type: ModularGrenade
+  components:
+  - pos: 40.482162,13.57694
+    parent: 0
+    type: Transform
+- uid: 1636
+  type: ModularGrenade
+  components:
+  - pos: 40.607162,13.405065
+    parent: 0
+    type: Transform
+- uid: 1637
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 41.5,12.5
+    parent: 0
+    type: Transform
+- uid: 1638
+  type: SalvagePartsT3Spawner
+  components:
+  - pos: 42.5,13.5
+    parent: 0
+    type: Transform
+- uid: 1639
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 35.5,14.5
+    parent: 0
+    type: Transform
+- uid: 1640
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 10.5,7.5
+    parent: 0
+    type: Transform
+- uid: 1641
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 23.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1642
+  type: SalvagePartsT3Spawner
+  components:
+  - pos: 31.5,2.5
+    parent: 0
+    type: Transform
+- uid: 1643
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 37.5,0.5
+    parent: 0
+    type: Transform
+- uid: 1644
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 2.5,31.5
+    parent: 0
+    type: Transform
+- uid: 1645
+  type: SalvagePartsT2Spawner
+  components:
+  - pos: 1.5,46.5
+    parent: 0
+    type: Transform
+- uid: 1646
+  type: RPED
+  components:
+  - pos: 32.49994,15.5244
+    parent: 0
+    type: Transform
+- uid: 1647
+  type: StorageCanister
+  components:
+  - pos: 40.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1648
+  type: GasCanisterBrokenBase
+  components:
+  - pos: 43.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1649
+  type: GasRecycler
+  components:
+  - pos: 46.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1650
+  type: GasThermoMachineFreezer
+  components:
+  - pos: 45.5,16.5
+    parent: 0
+    type: Transform
+- uid: 1651
+  type: GasPort
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 45.5,15.5
+    parent: 0
+    type: Transform
+- uid: 1652
+  type: PoweredSmallLightEmpty
+  components:
+  - rot: 3.141592653589793 rad
+    pos: 45.5,12.5
+    parent: 0
+    type: Transform
+  - powerLoad: 0
+    type: ApcPowerReceiver
+...
diff --git a/Resources/Maps/Dungeon/template.yml b/Resources/Maps/Dungeon/template.yml
new file mode 100644 (file)
index 0000000..e672b31
--- /dev/null
@@ -0,0 +1,166 @@
+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: FloorBasalt
+  14: FloorBasaslt
+  15: FloorBlue
+  16: FloorBlueCircuit
+  17: FloorBoxing
+  18: FloorCarpetClown
+  19: FloorCarpetOffice
+  20: FloorCave
+  21: FloorCaveDrought
+  22: FloorClown
+  23: FloorDark
+  24: FloorDarkDiagonal
+  25: FloorDarkDiagonalMini
+  26: FloorDarkHerringbone
+  27: FloorDarkMini
+  28: FloorDarkMono
+  29: FloorDarkOffset
+  30: FloorDarkPavement
+  31: FloorDarkPavementVertical
+  32: FloorDarkPlastic
+  33: FloorDesert
+  34: FloorDirt
+  35: FloorEighties
+  36: FloorElevatorShaft
+  37: FloorFlesh
+  38: FloorFreezer
+  39: FloorGlass
+  40: FloorGold
+  41: FloorGrass
+  42: FloorGrassDark
+  43: FloorGrassJungle
+  44: FloorGrassLight
+  45: FloorGreenCircuit
+  46: FloorGym
+  47: FloorHydro
+  48: FloorKitchen
+  49: FloorLaundry
+  50: FloorLino
+  51: FloorLowDesert
+  52: FloorMetalDiamond
+  53: FloorMime
+  54: FloorMono
+  55: FloorPlanetGrass
+  56: FloorPlastic
+  57: FloorRGlass
+  58: FloorReinforced
+  59: FloorRockVault
+  60: FloorShowroom
+  61: FloorShuttleBlue
+  62: FloorShuttleOrange
+  63: FloorShuttlePurple
+  64: FloorShuttleRed
+  65: FloorShuttleWhite
+  66: FloorSilver
+  67: FloorSnow
+  68: FloorSteel
+  69: FloorSteelDiagonal
+  70: FloorSteelDiagonalMini
+  71: FloorSteelDirty
+  72: FloorSteelHerringbone
+  73: FloorSteelMini
+  74: FloorSteelMono
+  75: FloorSteelOffset
+  76: FloorSteelPavement
+  77: FloorSteelPavementVertical
+  78: FloorTechMaint
+  79: FloorTechMaint2
+  80: FloorTechMaint3
+  81: FloorWhite
+  82: FloorWhiteDiagonal
+  83: FloorWhiteDiagonalMini
+  84: FloorWhiteHerringbone
+  85: FloorWhiteMini
+  86: FloorWhiteMono
+  87: FloorWhiteOffset
+  88: FloorWhitePavement
+  89: FloorWhitePavementVertical
+  90: FloorWhitePlastic
+  91: FloorWood
+  92: FloorWoodTile
+  93: Lattice
+  94: Plating
+entities:
+- uid: 0
+  components:
+  - type: MetaData
+  - type: Transform
+  - index: 2
+    type: Map
+  - type: PhysicsMap
+  - type: Broadphase
+  - type: OccluderTree
+  - chunks:
+      -1,-1:
+        ind: -1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      0,0:
+        ind: 0,0
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+      0,1:
+        ind: 0,1
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAA==
+      0,-1:
+        ind: 0,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAA==
+      -1,0:
+        ind: -1,0
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      -1,1:
+        ind: -1,1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAA==
+      1,-1:
+        ind: 1,-1
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,0:
+        ind: 1,0
+        tiles: RAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,1:
+        ind: 1,1
+        tiles: PgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      -1,2:
+        ind: -1,2
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      -1,3:
+        ind: -1,3
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,2:
+        ind: 0,2
+        tiles: RAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      0,3:
+        ind: 0,3
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,2:
+        ind: 1,2
+        tiles: PgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+      1,3:
+        ind: 1,3
+        tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+    type: MapGrid
+  - nextUpdate: 171.4322096
+    type: GridPathfinding
+  - gravityShakeSound: !type:SoundPathSpecifier
+      path: /Audio/Effects/alert.ogg
+    type: Gravity
+  - chunkCollection: {}
+    type: DecalGrid
+...
index 6d2733a88f4d7ed2e1c3f8981a75f4096e11acf3..b7eb05b72d7eb3df7d74801b263d1241208eb2d5 100644 (file)
@@ -12,7 +12,6 @@
       I rigged the area where our stuff's at to be a toasty thousand K.
       You know how to drain it when we need it out.
        - J.
-
 # ---- GAMING ----
 
 - type: entity
@@ -46,7 +45,6 @@
       Leaving this so you know what's up.
       Sorry.
        - Alexander
-
 - type: entity
   id: PaperWrittenSalvageLoreGaming2
   noSpawn: true # keep this from spamming spawn sheet
       Int: 528,491
       Wis: 1
       Cha: 1
-
       Where's the age?
       Why are those ability scores so ridiculous?
       What even are you trying to do here, Leah? - Your Friendly DM
-
 - type: entity
   id: PaperWrittenSalvageLoreGaming3
   noSpawn: true # keep this from spamming spawn sheet
@@ -83,7 +79,6 @@
       Session 3: On their way to underground lair.
       Session 4: Just ran into the Architect Of Flies.
       Oh dear goodness they just started randomly killing everybody
-
 - type: entity
   id: PaperWrittenSalvageLoreGaming4
   noSpawn: true # keep this from spamming spawn sheet
@@ -97,6 +92,4 @@
       It's amazing.
       But not in a good way.
       Cheers, - Arielle
-
-# ----
-
+# ----
\ No newline at end of file
index 31fade648f849171cc411481fa628e5eb77f580c..c4638f9ad016d2302333eb1c6859a2429922b49a 100644 (file)
@@ -60,7 +60,7 @@
   - type: MobThresholds
     thresholds:
       0: Alive
-      200: Dead
+      50: Dead
   - type: Stamina
     excess: 200
   - type: Bloodstream
@@ -81,7 +81,7 @@
     animation: WeaponArcBite
     damage:
       groups:
-        Brute: 12
+        Brute: 6
   - type: Appearance
   - type: DamageStateVisuals
     rotate: true
   - type: MobThresholds
     thresholds:
       0: Alive
-      300: Dead
+      75: Dead
   - type: Stamina
     excess: 300
   - type: SlowOnDamage
   - type: MobThresholds
     thresholds:
       0: Alive
-      200: Dead
+      150: Dead
+  - type: MeleeWeapon
+    damage:
+      groups:
+        Brute: 5
   - type: Stamina
     excess: 200
   - type: MovementSpeedModifier
     baseWalkSpeed : 3.0
     baseSprintSpeed : 5.5
-  - type: SlowOnDamage
-    speedModifierThresholds:
-      150: 0.7
   - type: Fixtures
     fixtures:
     - shape:
   - type: MobThresholds
     thresholds:
       0: Alive
-      1500: Dead
+      300: Dead
   - type: Stamina
     excess: 1500
   - type: MovementSpeedModifier
     hidden: true
     damage:
      groups:
-       Brute: 40
+       Brute: 20
   - type: SlowOnDamage
     speedModifierThresholds:
       1000: 0.7
   - type: MobThresholds
     thresholds:
       0: Alive
-      550: Dead
+      200: Dead
   - type: Stamina
     excess: 550
   - type: MovementSpeedModifier
     hidden: true
     damage:
      groups:
-       Brute: 20
+       Brute: 10
   - type: SlowOnDamage
     speedModifierThresholds:
       450: 0.7
   - type: MobThresholds
     thresholds:
       0: Alive
-      250: Dead
+      50: Dead
   - type: Stamina
     excess: 250
   - type: MovementSpeedModifier
     hidden: true
     damage:
      groups:
-       Brute: 8
-  - type: SlowOnDamage
-    speedModifierThresholds:
-      200: 0.7
+       Brute: 3
   - type: Fixtures
     fixtures:
     - shape:
         !type:PhysShapeCircle
-        radius: 0.45
+        radius: 0.35
       density: 235
       mask:
       - MobMask
   - type: MobThresholds
     thresholds:
       0: Alive
-      300: Dead
+      75: Dead
   - type: Stamina
     excess: 300
   - type: SlowOnDamage
diff --git a/Resources/Prototypes/Entities/Structures/Specific/xeno.yml b/Resources/Prototypes/Entities/Structures/Specific/xeno.yml
new file mode 100644 (file)
index 0000000..a1c5e64
--- /dev/null
@@ -0,0 +1,49 @@
+- type: entity
+  id: XenoWardingTower
+  name: Xeno warding tower
+  description: a
+  placement:
+    mode: SnapgridCenter
+    snap:
+      - Wall
+  components:
+    - type: RangedDamageSound
+      soundGroups:
+        Brute:
+          collection:
+            MeatBulletImpact
+      soundTypes:
+        Heat:
+          collection:
+            MeatLaserImpact
+    - type: InteractionOutline
+    - type: Sprite
+      netsync: false
+      sprite: Structures/Specific/xeno_building.rsi
+      layers:
+        - state: wardingtower
+        - state: wardingtower-unshaded
+          shader: unshaded
+    - type: Damageable
+      damageContainer: Inorganic
+      damageModifierSet: Metallic
+    - type: Physics
+      bodyType: Static
+    - type: Fixtures
+      fixtures:
+        - shape:
+            !type:PhysShapeAabb
+            bounds: "-0.5,-0.5,0.5,0.5"
+          mask:
+            - FullTileMask
+          layer:
+            - WallLayer
+          density: 1000
+    - type: Destructible
+      thresholds:
+        - trigger:
+            !type:DamageTrigger
+            damage: 50
+          behaviors:
+            - !type:DoActsBehavior
+              acts: [ "Destruction" ]
index 064bbb45ad56fb27a18f217563376ef876d5544e..fff88e3b9c916ec06bc2abe1ac3f34e1eb9d7a39 100644 (file)
@@ -11,6 +11,7 @@
         - state: basalt1
           shader: unshaded
       drawdepth: LowFloors
+    - type: SyncSprite
     - type: RequiresTile
     - type: Transform
       anchored: true
diff --git a/Resources/Prototypes/Entities/Tiles/water.yml b/Resources/Prototypes/Entities/Tiles/water.yml
new file mode 100644 (file)
index 0000000..2aa5399
--- /dev/null
@@ -0,0 +1,39 @@
+- type: entity
+  id: FloorWaterEntity
+  name: water
+  placement:
+    mode: SnapgridCenter
+    snap:
+    - Wall
+  components:
+  - type: StepTrigger
+    requiredTriggeredSpeed: 0
+    intersectRatio: 0.1
+  - type: Transform
+    anchored: true
+  - type: SyncSprite
+  - type: Sprite
+    sprite: Tiles/Planet/water.rsi
+    netsync: false
+    drawdepth: BelowFloor
+    layers:
+      - state: shoreline_water
+  - type: SlowContacts
+    walkSpeedModifier: 0.5
+    sprintSpeedModifier: 0.5
+  - type: Physics
+    bodyType: Static
+  - type: Fixtures
+    fixtures:
+    - shape:
+        !type:PhysShapeAabb
+        bounds: "-0.5,-0.5,0.5,0.5"
+      layer:
+        - SlipLayer
+      mask:
+        - ItemMask
+      density: 1000
+      hard: false
+  - type: FootstepModifier
+    footstepSoundCollection:
+      collection: FootstepWater
index 3371dfd746b4da5e6c9e788ef9631819201bed8d..20adc9957c8be20e4bd31f39cbfdc062f83a6b9b 100644 (file)
@@ -14,7 +14,7 @@
       scrolling: "0.1, -0.05"
 
 - type: parallax
-  id: Grass
+  id: Dirt
   layers:
     - texture:
         !type:ImageParallaxTextureSource
       scale: "1, 1"
       shader: ""
 
+- type: parallax
+  id: Grass
+  layers:
+    - texture:
+        !type:ImageParallaxTextureSource
+        path: /Textures/Tiles/Planet/Grass/grass.png
+      slowness: 0
+      scale: "1, 1"
+      shader: ""
+
 - type: parallax
   id: Snow
   layers:
diff --git a/Resources/Prototypes/Procedural/Themes/experiment.yml b/Resources/Prototypes/Procedural/Themes/experiment.yml
new file mode 100644 (file)
index 0000000..2027e3e
--- /dev/null
@@ -0,0 +1,324 @@
+# Rooms
+# Large
+# - 17x5
+- type: dungeonRoom
+  id: Science17x5a
+  size: 17,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,0
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science17x5b
+  size: 17,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 18,0
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science17x5c
+  size: 17,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 36,0
+  tags:
+    - SalvageExperiment
+
+# - 7x7
+- type: dungeonRoom
+  id: Science7x7a
+  size: 7,7
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,42
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x7b
+  size: 7,7
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 8,42
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x7c
+  size: 7,7
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 16,42
+  tags:
+    - SalvageExperiment
+
+# Medium
+# - 11x5
+- type: dungeonRoom
+  id: Science11x5a
+  size: 11,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,6
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science11x5b
+  size: 11,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 12,6
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science11x5c
+  size: 11,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 24,6
+  tags:
+    - SalvageExperiment
+
+# - 7x5
+- type: dungeonRoom
+  id: Science7x5a
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,12
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x5b
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 8,12
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x5c
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 16,12
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x5d
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 24,12
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x5e
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 32,12
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x5f
+  size: 7,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 40,12
+  tags:
+    - SalvageExperiment
+
+# - 13x3
+- type: dungeonRoom
+  id: Science13x3a
+  size: 13,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,30
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science13x3b
+  size: 13,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 14,30
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science13x3c
+  size: 13,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 28,30
+  tags:
+    - SalvageExperiment
+
+# - 11x3
+- type: dungeonRoom
+  id: Science11x3a
+  size: 11,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,34
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science11x3b
+  size: 11,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 12,34
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science11x3c
+  size: 11,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 24,34
+  tags:
+    - SalvageExperiment
+
+# - 7x3
+- type: dungeonRoom
+  id: Science7x3a
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,38
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x3b
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 8,38
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x3c
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 16,38
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x3d
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 24,38
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x3e
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 32,38
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science7x3f
+  size: 7,3
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 40,38
+  tags:
+    - SalvageExperiment
+
+# Small
+# - 5x5
+- type: dungeonRoom
+  id: Science5x5a
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,18
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science5x5b
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 6,18
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science5x5c
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 12,18
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science5x5d
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 18,18
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science5x5e
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 24,18
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science5x5f
+  size: 5,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 30,18
+  tags:
+    - SalvageExperiment
+
+# - 3x5
+- type: dungeonRoom
+  id: Science3x5a
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 0,24
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science3x5b
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 4,24
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science3x5c
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 8,24
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science3x5d
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 12,24
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science3x5e
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 16,24
+  tags:
+    - SalvageExperiment
+
+- type: dungeonRoom
+  id: Science3x5f
+  size: 3,5
+  atlas: /Maps/Dungeon/experiment.yml
+  offset: 20,24
+  tags:
+    - SalvageExperiment
diff --git a/Resources/Prototypes/Procedural/dungeon_configs.yml b/Resources/Prototypes/Procedural/dungeon_configs.yml
new file mode 100644 (file)
index 0000000..61c9a04
--- /dev/null
@@ -0,0 +1,58 @@
+- type: dungeonConfig
+  id: Experiment
+  generator: !type:PrefabDunGen
+    roomWhitelist:
+      - SalvageExperiment
+    presets:
+      - Cross
+  postGeneration:
+    - !type:MiddleConnectionPostGen
+      overlapCount: 3
+      count: 3
+      entities:
+        - CableApcExtension
+        - AirlockGlass
+      edgeEntities:
+        - Grille
+        - Window
+
+    - !type:MiddleConnectionPostGen
+      count: 1
+      entities:
+        - CableApcExtension
+        - AirlockGlass
+
+    - !type:EntrancePostGen
+      count: 2
+      entities:
+        - AirlockGlass
+
+    - !type:InternalWindowPostGen
+      entities:
+        - Grille
+        - Window
+
+    - !type:ExternalWindowPostGen
+      entities:
+        - Grille
+        - Window
+
+    - !type:WallMountPostGen
+      spawns:
+        # Posters
+        - id: RandomPosterLegit
+          orGroup: content
+        - id: ExtinguisherCabinetFilled
+          prob: 0.2
+          orGroup: content
+        - id: RandomPainting
+          prob: 0.05
+          orGroup: content
+        - id: Intercom
+          prob: 0.1
+          orGroup: content
+
+    - !type:BoundaryWallPostGen
+      tile: FloorSteel
+      wall: WallSolid
+      cornerWall: WallReinforced
diff --git a/Resources/Prototypes/Procedural/dungeon_presets.yml b/Resources/Prototypes/Procedural/dungeon_presets.yml
new file mode 100644 (file)
index 0000000..4fbe4af
--- /dev/null
@@ -0,0 +1,12 @@
+# Dungeon presets
+- type: dungeonPreset
+  id: Cross
+  roomPacks:
+    - -8,0,9,5
+    - -2,6,3,11
+    # Offset to the first one
+    - -8,12,9,17
+    - -2,18,3,35
+    - -2,36,3,53
+    - -20,18,-3,35
+    - 4,18,21,35
diff --git a/Resources/Prototypes/Procedural/dungeon_room_packs.yml b/Resources/Prototypes/Procedural/dungeon_room_packs.yml
new file mode 100644 (file)
index 0000000..3f04cc2
--- /dev/null
@@ -0,0 +1,88 @@
+# Hook
+- type: dungeonRoomPack
+  id: LargeArea2
+  size: 17,17
+  rooms:
+    - 7,0,10,11
+    - 6,12,11,17
+    - 12,13,17,16
+
+# Wide corridor vertically up the middle and small corridors on left
+- type: dungeonRoomPack
+  id: LargeArea3
+  size: 17,17
+  rooms:
+    - 6,0,11,11
+    - 6,12,11,17
+    - 0,13,5,16
+    - 1,5,4,12
+    - 0,1,5,4
+
+# Long horizontal corridor with rooms above
+#- type: dungeonRoomPack
+#  id: LargeArea4
+#  size: 17,17
+#  rooms:
+#    - 0,7,17,10
+#    - 0,11,5,16
+#    - 6,11,11,16
+
+# Corridor from botleft to topright with 2 rooms in top left
+- type: dungeonRoomPack
+  id: LargeArea5
+  size: 17,17
+  rooms:
+    # Corridor (with fat bot-left)
+    - 0,1,11,4
+    - 12,0,17,5
+    - 13,6,16,17
+    # Rooms (5x7)
+    - 7,9,12,16
+    - 1,5,6,12
+
+# Medium
+# Whole area room
+#- type: dungeonRoomPack
+#  id: MediumArea1
+#  size: 5,17
+#  rooms:
+#    - 0,6,15,9
+#    - 11,12,16,17
+#    - 11,0,16,5
+#  roomConnections:
+#    - 13,5
+#    - 13,9
+
+# Three 5x5 rooms
+- type: dungeonRoomPack
+  id: MediumArea2
+  size: 5,17
+  rooms:
+    - 0,0,5,5
+    - 0,6,5,11
+    - 0,12,5,17
+
+# Two 5x5 and 3x5
+- type: dungeonRoomPack
+  id: MediumArea3
+  size: 5,17
+  rooms:
+    - 0,0,5,5
+    - 0,6,5,11
+    - 1,12,4,17
+
+# 3x5 -> 5x5 -> 3x5
+- type: dungeonRoomPack
+  id: MediumArea4
+  size: 5,17
+  rooms:
+    - 1,0,4,5
+    - 0,6,5,11
+    - 1,12,4,17
+
+# Small
+- type: dungeonRoomPack
+  id: SmallArea1
+  size: 5,5
+  rooms:
+    - 0,0,5,5
index 8c441603000687a83d5dff421dc8fddc9015226a..368a8b7faa4f4f585ea2d14838bf548d6721f3fa 100644 (file)
   - /Audio/Effects/Footsteps/grass3.ogg
   - /Audio/Effects/Footsteps/grass4.ogg
 
+- type: soundCollection
+  id: FootstepWater
+  files:
+    - /Audio/Effects/Footsteps/water1.ogg
+    - /Audio/Effects/Footsteps/water2.ogg
+    - /Audio/Effects/Footsteps/water3.ogg
+    - /Audio/Effects/Footsteps/water4.ogg
+
 - type: soundCollection
   id: BarestepHard
   files:
index 7bee466496d5fd522425bbe7a9670b245e089e55..c40b7964ef4d144f3de5c0439d3a6a0b73c1eafa 100644 (file)
@@ -1,9 +1,7 @@
 - type: tile
   id: FloorPlanetDirt
   name: tiles-dirt-floor
-  sprite: /Textures/Tiles/dirt.png
-  variants: 4
-  placementVariants: [0, 1, 2, 3]
+  sprite: /Textures/Tiles/Planet/dirt.rsi/dirt.png
   isSubfloor: true
   canCrowbar: false
   footstepSounds:
index c769a8fa996bc0686346d77bea510aad46480fca..1bf9379e9cfdb034a65b13ccc05866d72e51bfd3 100644 (file)
@@ -1,58 +1,67 @@
 # Desert
-# TODO: Water in grasslands
-# TODO: Water in desert / grass?
+# TODO: Water in desert
 - type: biome
   id: LowDesert
+  desc: Desert
   layers:
     - !type:BiomeEntityLayer
-      threshold: 0.99
-      frequency: 1
-      seedOffset: 1
+      threshold: 0.95
+      noise:
+        seed: 0
+        frequency: 2
+        noiseType: OpenSimplex2
       allowedTiles:
         - FloorLowDesert
       entities:
         - FloraRockSolid01
         - FloraRockSolid02
         - FloraRockSolid03
+    # Large rock areas
     - !type:BiomeEntityLayer
-      threshold: 0.9
-      frequency: 0.2
+      threshold: -0.20
+      noise:
+        seed: 0
+        frequency: 0.04
+        noiseType: Cellular
+        fractalType: FBm
+        octaves: 5
+        lacunarity: 2
+        gain: 1
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
       allowedTiles:
         - FloorLowDesert
       entities:
         - AsteroidRock
+    # Fill layer
     - !type:BiomeTileLayer
-      threshold: 0
+      threshold: -1
       variants:
         - 0
       tile: FloorLowDesert
     - !type:BiomeTileLayer
       threshold: 0.6
       tile: FloorLowDesert
-      frequency: 0.1
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 0.1
 
 # Grass
 - type: biome
   id: Grasslands
+  desc: Grasslands
   layers:
+    # Sparse vegetation
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorPlanetGrass
-      seedOffset: 3
-      threshold: 0.98
-      divisions: 1
-      frequency: 1
-      decals:
-        - FlowersBROne
-        - FlowersBRTwo
-        - FlowersBRThree
-    - !type:BiomeDecalLayer
-      allowedTiles:
-        - FloorPlanetGrass
-      seedOffset: 2
-      threshold: 0.95
       divisions: 2
-      frequency: 1
+      threshold: -0.50
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 1
       decals:
         - BushDOne
         - BushDTwo
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorPlanetGrass
-      seedOffset: 1
-      threshold: 0.8
+      noise:
+        seed: 0
+        noiseType: OpenSimplex2
+        frequency: 1
       divisions: 1
-      frequency: 0.05
+      threshold: 0.8
       decals:
-        - BushCOne
-        - BushCTwo
-        - BushCThree
+        - FlowersBROne
+        - FlowersBRTwo
+        - FlowersBRThree
+    # Dense vegetation
     - !type:BiomeDecalLayer
       allowedTiles:
       - FloorPlanetGrass
       divisions: 1
+      threshold: -0.35
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 0.2
+        fractalType: FBm
+        octaves: 5
+        lacunarity: 2
+        gain: 1
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
       decals:
         - BushAOne
         - BushATwo
         - BushAThree
+        - BushCOne
+        - BushCTwo
+        - BushCThree
     - !type:BiomeEntityLayer
-      threshold: 0.9
-      frequency: 1
+      threshold: 0.5
+      noise:
+        seed: 0
+        noiseType: OpenSimplex2
+        fractalType: FBm
+        frequency: 2
       allowedTiles:
         - FloorPlanetGrass
       entities:
         - FloraTreeLarge04
         - FloraTreeLarge05
         - FloraTreeLarge06
-    # Fill remainder with sand.
+    # Rock formations
+    - !type:BiomeEntityLayer
+      allowedTiles:
+        - FloorPlanetGrass
+        - FloorPlanetDirt
+      threshold: -0.15
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 0.05
+        lacunarity: 2
+        fractalType: FBm
+        octaves: 5
+        gain: 1
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
+      entities:
+        - WallRock
+    # Water
+    - !type:BiomeEntityLayer
+      allowedTiles:
+        - FloorPlanetGrass
+        - FloorPlanetDirt
+      threshold: 0.95
+      noise:
+        seed: 3
+        noiseType: OpenSimplex2
+        frequency: 0.003
+        lacunarity: 1.50
+        fractalType: Ridged
+        octaves: 1
+      entities:
+        - FloorWaterEntity
+    # Fill remainder with dirt.
     - !type:BiomeTileLayer
-      threshold: 0
+      threshold: -1.0
       tile: FloorPlanetDirt
     - !type:BiomeTileLayer
-      threshold: 0.5
+      threshold: -0.90
       tile: FloorPlanetGrass
+      noise:
+        seed: 0
+        frequency: 0.02
+        fractalType: None
+    # Water sand
+    - !type:BiomeTileLayer
+      tile: FloorPlanetDirt
+      threshold: 0.95
+      noise:
+        seed: 3
+        noiseType: OpenSimplex2
+        frequency: 0.003
+        lacunarity: 1.50
+        fractalType: Ridged
+        octaves: 1
+    # Rock formation sand
+    - !type:BiomeTileLayer
+      tile: FloorPlanetDirt
+      threshold: -0.15
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 0.05
+        lacunarity: 2
+        fractalType: FBm
+        octaves: 5
+        gain: 1
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
 
 # Lava
 - type: biome
   id: Lava
+  desc: Lava
   layers:
     - !type:BiomeEntityLayer
       threshold: 0.9
-      frequency: 1
-      seedOffset: 3
+      noise:
+        frequency: 1
+        seed: 2
       allowedTiles:
         - FloorBasalt
       entities:
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorBasalt
-      seedOffset: 2
       threshold: 0.9
       divisions: 1
-      frequency: 1
+      noise:
+        seed: 1
+        frequency: 1
       decals:
         - Basalt1
         - Basalt2
         - Basalt8
         - Basalt9
     - !type:BiomeEntityLayer
-      threshold: 0.99
-      frequency: 1
-      seedOffset: 1
+      threshold: 0.95
+      noise:
+        seed: 0
+        noiseType: OpenSimplex2
+        frequency: 1
       allowedTiles:
         - FloorBasalt
       entities:
         - FloraRockSolid02
         - FloraRockSolid03
     - !type:BiomeEntityLayer
-      threshold: 0.7
-      frequency: 0.2
+      threshold: 0.2
+      noise:
+        seed: 0
+        frequency: 0.02
+        fractalType: FBm
+        octaves: 5
+        lacunarity: 2
+        gain: 0.4
       allowedTiles:
         - FloorBasalt
       entities:
         - FloorLavaEntity
+    # Fill basalt
     - !type:BiomeTileLayer
-      threshold: 0
+      threshold: -1
       variants:
         - 0
       tile: FloorBasalt
 
 # Snow
 - type: biome
-  id: Snow
+  id: Snow # Similar to Grasslands... but snow
   layers:
+    # Sparse vegetation
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorSnow
-      seedOffset: 4
-      threshold: 0.95
-      divisions: 1
-      frequency: 1
+      divisions: 2
+      threshold: -0.50
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 1
       decals:
         - grasssnowa1
-        - grasssnowa2
-        - grasssnowa3
+        - grassnowa2
+        - grassnowa3
         - grasssnowb1
         - grasssnowb2
         - grasssnowb3
         - grasssnowc1
         - grasssnowc2
         - grasssnowc3
-    # The main grass texture, this one blends in very well
+    # Dense, bland grass
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorSnow
       divisions: 1
-      seedOffset: 3
-      threshold: 0.8
-      frequency: 0.05
+      threshold: -0.35
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 0.2
+        fractalType: FBm
+        octaves: 5
+        lacunarity: 2
+        gain: 1
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
       decals:
         - grasssnow
         - grasssnow01
         - grasssnow11
         - grasssnow12
         - grasssnow13
+    # Little bit of coloured grass
     - !type:BiomeDecalLayer
       allowedTiles:
         - FloorSnow
-      seedOffset: 2
-      threshold: 0.99
       divisions: 1
-      frequency: 1
+      threshold: -0.0
+      noise:
+        seed: 0
+        noiseType: Cellular
+        frequency: 1
+        fractalType: None
+        cellularDistanceFunction: Euclidean
+        cellularReturnType: Distance2
       decals:
         - bushsnowa1
         - bushsnowa2
         - bushsnowa3
-        - bushsnowb1
+        - bushsnowb3
         - bushsnowb2
         - bushsnowb3
     - !type:BiomeEntityLayer
-      seedOffset: 1
-      threshold: 0.95
-      frequency: 1
+      threshold: 0.5
+      noise:
+        seed: 0
+        noiseType: OpenSimplex2
+        fractalType: FBm
+        frequency: 2
       allowedTiles:
         - FloorSnow
       entities:
         - FloraTreeSnow05
         - FloraTreeSnow06
     - !type:BiomeTileLayer
-      threshold: 0
-      variants:
-        - 0
+      threshold: -1.0
       tile: FloorSnow
     - !type:BiomeTileLayer
-      threshold: 0.6
+      threshold: -0.50
       tile: FloorSnow
-      frequency: 0.1
+      noise:
+        seed: 0
+        frequency: 0.02
+        fractalType: None
index 7c7c7a6e545539964001032d73847fb5c65c93d9..2ad43b037fd47c002594371303e029236edc966b 100644 (file)
@@ -1,3 +1,4 @@
+# High yields
 - type: ore
   id: OreSteel
   oreEntity: SteelOre1
@@ -10,6 +11,7 @@
   minOreYield: 3
   maxOreYield: 7
 
+# Medium yields
 - type: ore
   id: OreGold
   oreEntity: GoldOre1
   maxOreYield: 5
 
 - type: ore
-  id: OrePlasma
-  oreEntity: PlasmaOre1
+  id: OreSilver
+  oreEntity: SilverOre1
   minOreYield: 2
   maxOreYield: 5
 
+# Low yields
 - type: ore
-  id: OreSilver
-  oreEntity: SilverOre1
+  id: OrePlasma
+  oreEntity: PlasmaOre1
   minOreYield: 1
   maxOreYield: 3
 
@@ -42,4 +45,4 @@
     OreGold: 2
     OrePlasma: 4
     OreSilver: 1
-    OreUranium: 1
\ No newline at end of file
+    OreUranium: 1
index 312d1a197edb501217db20470e842555bdf0593c..408cab6fc9fcb6de09b40630e92907d726b40939 100644 (file)
@@ -1,5 +1,3 @@
-# Alphabetical order is now apparently required.
-
 - type: Tag
   id: AirAlarm
 
 - type: Tag
   id: IntercomElectronics
 
+- type: Tag
+  id: JanicartKeys
+
 - type: Tag
   id: JawsOfLife
 
 - type: Tag
   id: Machete
 
+- type: Tag
+  id: MacroBomb
+
+- type: Tag
+  id: MicroBomb
+
 # Magazines ordered by slot then caliber
 
 - type: Tag
 - type: Tag
   id: Payload # for grenade/bomb crafting
 
-- type: Tag
-  id: MacroBomb
-
-- type: Tag
-  id: MicroBomb
-
 - type: Tag
   id: PaintableAirlock
 
 - type: Tag
   id: ProximitySensor
 
-- type: Tag
-  id: JanicartKeys
-
 - type: Tag
   id: Radio
 
 - type: Tag
   id: RollingPaper
 
+- type: Tag
+  id: SalvageExperiment
+
 - type: Tag
   id: Screwdriver
 
 - type: Tag
   id: SecwayKeys
 
-- type: Tag
-  id: ShoesRequiredStepTriggerImmune
-
 - type: Tag
   id: Sheet
 
 - type: Tag
   id: ShellShotgun
 
+- type: Tag
+  id: ShoesRequiredStepTriggerImmune
+
 - type: Tag
   id: Shovel
 
 - type: Tag
   id: StringInstrument
 
+- type: Tag
+  id: SubdermalImplant
+
 - type: Tag
   id: SurveillanceCameraMonitorCircuitboard
 
   id: VehicleKey
 
 - type: Tag
-  id: WetFloorSign
+  id: Wall
 
 - type: Tag
-  id: Wall
+  id: WetFloorSign
 
 - type: Tag
   id: WallmountGeneratorAPUElectronics
 
 - type: Tag
   id: Write
-
-- type: Tag
-  id: SubdermalImplant
\ No newline at end of file
diff --git a/Resources/Textures/Structures/Specific/xeno_building.rsi/frenzytower.png b/Resources/Textures/Structures/Specific/xeno_building.rsi/frenzytower.png
new file mode 100644 (file)
index 0000000..330d8ea
Binary files /dev/null and b/Resources/Textures/Structures/Specific/xeno_building.rsi/frenzytower.png differ
diff --git a/Resources/Textures/Structures/Specific/xeno_building.rsi/meta.json b/Resources/Textures/Structures/Specific/xeno_building.rsi/meta.json
new file mode 100644 (file)
index 0000000..c4a1b41
--- /dev/null
@@ -0,0 +1,27 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "https://github.com/tgstation/TerraGov-Marine-Corps/blob/167684df96d25557864152709913e9c6f870564f/icons/Xeno/1x1building.dmi",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "recoverytower",
+      "directions": 1
+    },
+    {
+      "name": "frenzytower",
+      "directions": 1
+    },
+    {
+      "name": "wardingtower",
+      "directions": 1
+    },
+    {
+      "name": "wardingtower-unshaded",
+      "directions": 1
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Structures/Specific/xeno_building.rsi/recoverytower.png b/Resources/Textures/Structures/Specific/xeno_building.rsi/recoverytower.png
new file mode 100644 (file)
index 0000000..6329f45
Binary files /dev/null and b/Resources/Textures/Structures/Specific/xeno_building.rsi/recoverytower.png differ
diff --git a/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower-unshaded.png b/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower-unshaded.png
new file mode 100644 (file)
index 0000000..8792e5e
Binary files /dev/null and b/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower-unshaded.png differ
diff --git a/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower.png b/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower.png
new file mode 100644 (file)
index 0000000..43fa2d5
Binary files /dev/null and b/Resources/Textures/Structures/Specific/xeno_building.rsi/wardingtower.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid.png b/Resources/Textures/Tiles/Asteroid/asteroid.png
new file mode 100644 (file)
index 0000000..97d9fcc
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid0.png b/Resources/Textures/Tiles/Asteroid/asteroid0.png
new file mode 100644 (file)
index 0000000..97d9fcc
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid0.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid1.png b/Resources/Textures/Tiles/Asteroid/asteroid1.png
new file mode 100644 (file)
index 0000000..6ceabeb
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid1.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid10.png b/Resources/Textures/Tiles/Asteroid/asteroid10.png
new file mode 100644 (file)
index 0000000..9d33861
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid10.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid11.png b/Resources/Textures/Tiles/Asteroid/asteroid11.png
new file mode 100644 (file)
index 0000000..fade0c0
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid11.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid12.png b/Resources/Textures/Tiles/Asteroid/asteroid12.png
new file mode 100644 (file)
index 0000000..b0eabae
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid12.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid2.png b/Resources/Textures/Tiles/Asteroid/asteroid2.png
new file mode 100644 (file)
index 0000000..73bae67
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid2.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid3.png b/Resources/Textures/Tiles/Asteroid/asteroid3.png
new file mode 100644 (file)
index 0000000..def3348
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid3.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid4.png b/Resources/Textures/Tiles/Asteroid/asteroid4.png
new file mode 100644 (file)
index 0000000..c78c764
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid4.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid5.png b/Resources/Textures/Tiles/Asteroid/asteroid5.png
new file mode 100644 (file)
index 0000000..2ceebd6
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid5.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid6.png b/Resources/Textures/Tiles/Asteroid/asteroid6.png
new file mode 100644 (file)
index 0000000..1a2e35e
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid6.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid7.png b/Resources/Textures/Tiles/Asteroid/asteroid7.png
new file mode 100644 (file)
index 0000000..1b1a591
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid7.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid8.png b/Resources/Textures/Tiles/Asteroid/asteroid8.png
new file mode 100644 (file)
index 0000000..45a15ba
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid8.png differ
diff --git a/Resources/Textures/Tiles/Asteroid/asteroid9.png b/Resources/Textures/Tiles/Asteroid/asteroid9.png
new file mode 100644 (file)
index 0000000..c79d007
Binary files /dev/null and b/Resources/Textures/Tiles/Asteroid/asteroid9.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand1.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand1.png
new file mode 100644 (file)
index 0000000..f1b995f
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand1.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand10.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand10.png
new file mode 100644 (file)
index 0000000..811550e
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand10.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand11.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand11.png
new file mode 100644 (file)
index 0000000..56da6c2
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand11.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand12.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand12.png
new file mode 100644 (file)
index 0000000..6e24483
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand12.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand13.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand13.png
new file mode 100644 (file)
index 0000000..066b7ab
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand13.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand14.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand14.png
new file mode 100644 (file)
index 0000000..5b8d0b1
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand14.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand15.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand15.png
new file mode 100644 (file)
index 0000000..059b4cb
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand15.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand2.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand2.png
new file mode 100644 (file)
index 0000000..9cc7769
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand2.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand3.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand3.png
new file mode 100644 (file)
index 0000000..cf72816
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand3.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand4.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand4.png
new file mode 100644 (file)
index 0000000..8fd70e0
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand4.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand5.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand5.png
new file mode 100644 (file)
index 0000000..086cac2
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand5.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand6.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand6.png
new file mode 100644 (file)
index 0000000..51d8c07
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand6.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand7.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand7.png
new file mode 100644 (file)
index 0000000..c25b046
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand7.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand8.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand8.png
new file mode 100644 (file)
index 0000000..d3befb2
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand8.png differ
diff --git a/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand9.png b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand9.png
new file mode 100644 (file)
index 0000000..9a82d3d
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/Desert/iron_sand/ironsand9.png differ
diff --git a/Resources/Textures/Tiles/Planet/dirt.rsi/dirt.png b/Resources/Textures/Tiles/Planet/dirt.rsi/dirt.png
new file mode 100644 (file)
index 0000000..28d1862
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/dirt.rsi/dirt.png differ
diff --git a/Resources/Textures/Tiles/Planet/dirt.rsi/meta.json b/Resources/Textures/Tiles/Planet/dirt.rsi/meta.json
new file mode 100644 (file)
index 0000000..c70bafb
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/20d0b1fab9002c32e5267f16ba2b5cbf4b6f1e07/icons/turf/flooring/dirt.dmi",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "dirt"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Tiles/Planet/water.rsi/meta.json b/Resources/Textures/Tiles/Planet/water.rsi/meta.json
new file mode 100644 (file)
index 0000000..ab44651
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/tree/2ac1c566b89a6862c46380de02700c7c0d21a10d/icons/turf",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "shoreline_water",
+      "delays": [
+        [
+          0.3,
+          0.3,
+          0.3,
+          0.3,
+          0.3,
+          0.3,
+          0.3,
+          0.3
+        ]
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Tiles/Planet/water.rsi/shoreline_water.png b/Resources/Textures/Tiles/Planet/water.rsi/shoreline_water.png
new file mode 100644 (file)
index 0000000..d7807a6
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/water.rsi/shoreline_water.png differ