Port DeltaV Lavaland Initial

This commit is contained in:
deltanedas
2024-12-10 18:37:43 +00:00
committed by tommy
parent 8d66d0bc7c
commit da7cf45fa6
22 changed files with 5141 additions and 7 deletions

View File

@@ -0,0 +1,5 @@
using Content.Shared.DeltaV.Shuttles.Systems;
namespace Content.Client.DeltaV.Shuttles.Systems;
public sealed class DockingConsoleSystem : SharedDockingConsoleSystem;

View File

@@ -0,0 +1,38 @@
using Content.Shared.DeltaV.Shuttles;
namespace Content.Client.DeltaV.Shuttles.UI;
public sealed class DockingConsoleBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private DockingConsoleWindow? _window;
public DockingConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
_window = new DockingConsoleWindow(Owner);
_window.OnFTL += index => SendMessage(new DockingConsoleFTLMessage(index));
_window.OnClose += Close;
_window.OpenCentered();
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);
if (state is DockingConsoleState cast)
_window?.UpdateState(cast);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
_window?.Orphan();
}
}

View File

@@ -0,0 +1,17 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="500 500">
<BoxContainer Orientation="Vertical">
<ScrollContainer SetHeight="256" HorizontalExpand="True">
<ItemList Name="Destinations"/> <!-- Populated from comp.Destinations -->
</ScrollContainer>
<controls:StripeBack MinSize="48 48">
<Label Text="{Loc 'shuttle-console-ftl-label'}" VerticalExpand="True" HorizontalAlignment="Center"/>
</controls:StripeBack>
<Label Name="MapFTLState" Text="{Loc 'shuttle-console-ftl-state-Available'}" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
<ProgressBar Name="FTLBar" HorizontalExpand="True" Margin="5" MinValue="0.0" MaxValue="1.0" Value="1.0" SetHeight="32"/>
<controls:StripeBack HorizontalExpand="True">
<Button Name="FTLButton" Text="{Loc 'docking-console-ftl'}" Disabled="True" SetSize="128 48" Margin="5"/>
</controls:StripeBack>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -0,0 +1,112 @@
using Content.Client.UserInterface.Controls;
using Content.Shared.Access.Systems;
using Content.Shared.DeltaV.Shuttles;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Timing;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
namespace Content.Client.DeltaV.Shuttles.UI;
[GenerateTypedNameReferences]
public sealed partial class DockingConsoleWindow : FancyWindow
{
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPlayerManager _player = default!;
private readonly AccessReaderSystem _access;
public event Action<int>? OnFTL;
private readonly EntityUid _owner;
private readonly StyleBoxFlat _ftlStyle;
private FTLState _state;
private int? _selected;
private StartEndTime _ftlTime;
public DockingConsoleWindow(EntityUid owner)
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_access = _entMan.System<AccessReaderSystem>();
_owner = owner;
_ftlStyle = new StyleBoxFlat(Color.LimeGreen);
FTLBar.ForegroundStyleBoxOverride = _ftlStyle;
if (!_entMan.TryGetComponent<DockingConsoleComponent>(owner, out var comp))
return;
Title = Loc.GetString(comp.WindowTitle);
if (!comp.HasShuttle)
{
MapFTLState.Text = Loc.GetString("docking-console-no-shuttle");
_ftlStyle.BackgroundColor = Color.FromHex("#B02E26");
return;
}
Destinations.OnItemSelected += args => _selected = args.ItemIndex;
Destinations.OnItemDeselected += _ => _selected = null;
FTLButton.OnPressed += _ =>
{
if (_selected is {} index)
OnFTL?.Invoke(index);
};
}
public void UpdateState(DockingConsoleState state)
{
_state = state.FTLState;
_ftlTime = state.FTLTime;
MapFTLState.Text = Loc.GetString($"shuttle-console-ftl-state-{_state.ToString()}");
_ftlStyle.BackgroundColor = Color.FromHex(_state switch
{
FTLState.Available => "#80C71F",
FTLState.Starting => "#169C9C",
FTLState.Travelling => "#8932B8",
FTLState.Arriving => "#F9801D",
_ => "#B02E26" // cooldown and fallback
});
UpdateButton();
if (Destinations.Count == state.Destinations.Count)
return;
Destinations.Clear();
foreach (var dest in state.Destinations)
{
Destinations.AddItem(dest.Name);
}
}
private void UpdateButton()
{
FTLButton.Disabled = _selected == null || _state != FTLState.Available || !HasAccess();
}
private bool HasAccess()
{
return _player.LocalSession?.AttachedEntity is {} player && _access.IsAllowed(player, _owner);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
UpdateButton();
var progress = _ftlTime.ProgressAt(_timing.CurTime);
FTLBar.Value = float.IsFinite(progress) ? progress : 1;
}
}

View File

@@ -0,0 +1,76 @@
using Content.Server.Atmos.EntitySystems;
using Content.Server.Parallax;
using Content.Shared.DeltaV.Planet;
using Content.Shared.Parallax.Biomes;
using Robust.Server.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Server.DeltaV.Planet;
public sealed class PlanetSystem : EntitySystem
{
[Dependency] private readonly AtmosphereSystem _atmos = default!;
[Dependency] private readonly BiomeSystem _biome = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly MapSystem _map = default!;
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
[Dependency] private readonly MetaDataSystem _meta = default!;
private readonly List<(Vector2i, Tile)> _setTiles = new();
/// <summary>
/// Spawn a planet map from a planet prototype.
/// </summary>
public EntityUid SpawnPlanet(ProtoId<PlanetPrototype> id, bool runMapInit = true)
{
var planet = _proto.Index(id);
var map = _map.CreateMap(out _, runMapInit: runMapInit);
_biome.EnsurePlanet(map, _proto.Index(planet.Biome), mapLight: planet.MapLight);
// add each marker layer
var biome = Comp<BiomeComponent>(map);
foreach (var layer in planet.BiomeMarkerLayers)
{
_biome.AddMarkerLayer(map, biome, layer);
}
if (planet.AddedComponents is {} added)
EntityManager.AddComponents(map, added);
_atmos.SetMapAtmosphere(map, false, planet.Atmosphere);
_meta.SetEntityName(map, Loc.GetString(planet.MapName));
return map;
}
/// <summary>
/// Spawns an initialized planet map from a planet prototype and loads a grid onto it.
/// Returns the map entity if loading succeeded.
/// </summary>
public EntityUid? LoadPlanet(ProtoId<PlanetPrototype> id, string path)
{
var map = SpawnPlanet(id, runMapInit: false);
var mapId = Comp<MapComponent>(map).MapId;
if (!_mapLoader.TryLoad(mapId, path, out var grids))
{
Log.Error($"Failed to load planet grid {path} for planet {id}!");
Del(map);
return null;
}
// don't want rocks spawning inside the base
foreach (var gridUid in grids)
{
_setTiles.Clear();
var aabb = Comp<MapGridComponent>(gridUid).LocalAABB;
_biome.ReserveTiles(map, aabb.Enlarged(0.2f), _setTiles);
}
_map.InitializeMap(map);
return map;
}
}

View File

@@ -0,0 +1,164 @@
using Content.Server.Shuttles.Components;
using Content.Server.Shuttles.Events;
using Content.Server.Shuttles.Systems;
using Content.Shared.DeltaV.Shuttles;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Timing;
using Content.Shared.Whitelist;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
namespace Content.Server.DeltaV.Shuttles.Systems;
public sealed class DockingConsoleSystem : SharedDockingConsoleSystem
{
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
[Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
[Dependency] private readonly ShuttleSystem _shuttle = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DockEvent>(OnDock);
SubscribeLocalEvent<UndockEvent>(OnUndock);
Subs.BuiEvents<DockingConsoleComponent>(DockingConsoleUiKey.Key, subs =>
{
subs.Event<BoundUIOpenedEvent>(OnOpened);
subs.Event<DockingConsoleFTLMessage>(OnFTL);
});
}
private void OnDock(DockEvent args)
{
UpdateConsoles(args.GridAUid, args.GridBUid);
}
private void OnUndock(UndockEvent args)
{
UpdateConsoles(args.GridAUid, args.GridBUid);
}
private void OnOpened(Entity<DockingConsoleComponent> ent, ref BoundUIOpenedEvent args)
{
if (TerminatingOrDeleted(ent.Comp.Shuttle))
UpdateShuttle(ent);
UpdateUI(ent);
}
private void UpdateConsoles(EntityUid gridA, EntityUid gridB)
{
UpdateConsolesUsing(gridA);
UpdateConsolesUsing(gridB);
}
/// <summary>
/// Update the UI of every console that is using a certain shuttle.
/// </summary>
public void UpdateConsolesUsing(EntityUid shuttle)
{
if (!HasComp<DockingShuttleComponent>(shuttle))
return;
var query = EntityQueryEnumerator<DockingConsoleComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (comp.Shuttle == shuttle)
UpdateUI((uid, comp));
}
}
private void UpdateUI(Entity<DockingConsoleComponent> ent)
{
if (ent.Comp.Shuttle is not {} shuttle)
return;
var ftlState = FTLState.Available;
StartEndTime ftlTime = default;
List<DockingDestination> destinations = new();
if (TryComp<FTLComponent>(shuttle, out var ftl))
{
ftlState = ftl.State;
ftlTime = _shuttle.GetStateTime(ftl);
}
if (TryComp<DockingShuttleComponent>(shuttle, out var docking))
{
destinations = docking.Destinations;
}
var state = new DockingConsoleState(ftlState, ftlTime, destinations);
_ui.SetUiState(ent.Owner, DockingConsoleUiKey.Key, state);
}
private void OnFTL(Entity<DockingConsoleComponent> ent, ref DockingConsoleFTLMessage args)
{
if (ent.Comp.Shuttle is not {} shuttle || !TryComp<DockingShuttleComponent>(shuttle, out var docking))
return;
if (args.Index < 0 || args.Index > docking.Destinations.Count)
return;
var dest = docking.Destinations[args.Index];
var map = dest.Map;
// can't FTL if its already there or somehow failed whitelist
if (map == Transform(shuttle).MapID || !_shuttle.CanFTLTo(shuttle, map, ent))
return;
if (FindLargestGrid(map) is not {} grid)
return;
_shuttle.FTLToDock(shuttle, Comp<ShuttleComponent>(shuttle), grid, priorityTag: ent.Comp.DockTag);
}
private EntityUid? FindLargestGrid(MapId map)
{
EntityUid? largestGrid = null;
var largestSize = 0f;
var query = EntityQueryEnumerator<MapGridComponent, TransformComponent>();
while (query.MoveNext(out var gridUid, out var grid, out var xform))
{
if (xform.MapID != map)
continue;
var size = grid.LocalAABB.Size.LengthSquared();
if (size < largestSize)
continue;
largestSize = size;
largestGrid = gridUid;
}
return largestGrid;
}
private void UpdateShuttle(Entity<DockingConsoleComponent> ent)
{
var hadShuttle = ent.Comp.HasShuttle;
// no error if it cant find one since it would fail every test as shuttle.grid_fill is false in dev
ent.Comp.Shuttle = FindShuttle(ent.Comp.ShuttleWhitelist);
ent.Comp.HasShuttle = ent.Comp.Shuttle != null;
if (ent.Comp.HasShuttle != hadShuttle)
Dirty(ent);
}
private EntityUid? FindShuttle(EntityWhitelist whitelist)
{
var query = EntityQueryEnumerator<DockingShuttleComponent>();
while (query.MoveNext(out var uid, out _))
{
if (_whitelist.IsValid(whitelist, uid))
return uid;
}
return null;
}
}

View File

@@ -0,0 +1,79 @@
using Content.Server.Shuttles.Events;
using Content.Server.Station.Components;
using Content.Server.Station.Systems;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Whitelist;
using Robust.Shared.Map.Components;
using System.Linq;
namespace Content.Server.DeltaV.Shuttles.Systems;
public sealed class DockingShuttleSystem : SharedDockingShuttleSystem
{
[Dependency] private readonly DockingConsoleSystem _console = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
[Dependency] private readonly StationSystem _station = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DockingShuttleComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<DockingShuttleComponent, FTLStartedEvent>(OnFTLStarted);
SubscribeLocalEvent<DockingShuttleComponent, FTLCompletedEvent>(OnFTLCompleted);
SubscribeLocalEvent<StationGridAddedEvent>(OnStationGridAdded);
}
private void OnMapInit(Entity<DockingShuttleComponent> ent, ref MapInitEvent args)
{
// add any whitelisted destinations that it can FTL to
// since it needs a whitelist, this excludes the station
var query = EntityQueryEnumerator<FTLDestinationComponent, MapComponent>();
while (query.MoveNext(out var mapUid, out var dest, out var map))
{
if (!dest.Enabled || _whitelist.IsWhitelistFailOrNull(dest.Whitelist, ent))
continue;
ent.Comp.Destinations.Add(new DockingDestination()
{
Name = Name(mapUid),
Map = map.MapId
});
}
}
private void OnFTLStarted(Entity<DockingShuttleComponent> ent, ref FTLStartedEvent args)
{
_console.UpdateConsolesUsing(ent);
}
private void OnFTLCompleted(Entity<DockingShuttleComponent> ent, ref FTLCompletedEvent args)
{
_console.UpdateConsolesUsing(ent);
}
private void OnStationGridAdded(StationGridAddedEvent args)
{
var uid = args.GridId;
if (!TryComp<DockingShuttleComponent>(uid, out var comp))
return;
// only add the destination once
if (comp.Station != null)
return;
if (_station.GetOwningStation(uid) is not {} station || !TryComp<StationDataComponent>(station, out var data))
return;
// add the source station as a destination
comp.Station = station;
comp.Destinations.Add(new DockingDestination()
{
Name = Name(station),
Map = Transform(data.Grids.First()).MapID
});
}
}

View File

@@ -0,0 +1,32 @@
using Content.Server.DeltaV.Station.Systems;
using Content.Shared.DeltaV.Planet;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Server.DeltaV.Station.Components;
/// <summary>
/// Loads a planet map on mapinit and spawns a grid on it (e.g. a mining base).
/// The map can then be FTLd to by any shuttle matching its whitelist.
/// </summary>
[RegisterComponent, Access(typeof(StationPlanetSpawnerSystem))]
public sealed partial class StationPlanetSpawnerComponent : Component
{
/// <summary>
/// The planet to create.
/// </summary>
[DataField(required: true)]
public ProtoId<PlanetPrototype> Planet;
/// <summary>
/// Path to the grid to load onto the map.
/// </summary>
[DataField(required: true)]
public ResPath? GridPath;
/// <summary>
/// The map that was loaded.
/// </summary>
[DataField]
public EntityUid? Map;
}

View File

@@ -0,0 +1,30 @@
using Content.Server.DeltaV.Planet;
using Content.Server.DeltaV.Station.Components;
namespace Content.Server.DeltaV.Station.Systems;
public sealed class StationPlanetSpawnerSystem : EntitySystem
{
[Dependency] private readonly PlanetSystem _planet = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<StationPlanetSpawnerComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<StationPlanetSpawnerComponent, ComponentShutdown>(OnShutdown);
}
private void OnMapInit(Entity<StationPlanetSpawnerComponent> ent, ref MapInitEvent args)
{
if (ent.Comp.GridPath is not {} path)
return;
ent.Comp.Map = _planet.LoadPlanet(ent.Comp.Planet, path.ToString());
}
private void OnShutdown(Entity<StationPlanetSpawnerComponent> ent, ref ComponentShutdown args)
{
QueueDel(ent.Comp.Map);
}
}

View File

@@ -0,0 +1,49 @@
using Content.Shared.Atmos;
using Content.Shared.Parallax.Biomes;
using Content.Shared.Parallax.Biomes.Markers;
using Robust.Shared.Prototypes;
namespace Content.Shared.DeltaV.Planet;
[Prototype]
public sealed partial class PlanetPrototype : IPrototype
{
[IdDataField]
public string ID { get; set; } = string.Empty;
/// <summary>
/// The biome to create the planet with.
/// </summary>
[DataField(required: true)]
public ProtoId<BiomeTemplatePrototype> Biome;
/// <summary>
/// Name to give to the map.
/// </summary>
[DataField(required: true)]
public LocId MapName;
/// <summary>
/// Ambient lighting for the map.
/// </summary>
[DataField]
public Color MapLight = Color.FromHex("#D8B059");
/// <summary>
/// Components to add to the map.
/// </summary>
[DataField]
public ComponentRegistry? AddedComponents;
/// <summary>
/// The gas mixture to use for the atmosphere.
/// </summary>
[DataField(required: true)]
public GasMixture Atmosphere = new();
/// <summary>
/// Biome layers to add to the map, i.e. ores.
/// </summary>
[DataField]
public List<ProtoId<BiomeMarkerLayerPrototype>> BiomeMarkerLayers = new();
}

View File

@@ -0,0 +1,48 @@
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// A shuttle console that can only ftl-dock between 2 grids.
/// The shuttle used must have <see cref="DockingShuttleComponent"/>.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedDockingConsoleSystem))]
[AutoGenerateComponentState]
public sealed partial class DockingConsoleComponent : Component
{
/// <summary>
/// Title of the window to use
/// </summary>
[DataField(required: true)]
public LocId WindowTitle;
/// <summary>
/// Airlock tag that it will prioritize docking to.
/// </summary>
[DataField(required: true)]
public ProtoId<TagPrototype> DockTag;
/// <summary>
/// A whitelist the shuttle has to match to be piloted.
/// </summary>
[DataField(required: true)]
public EntityWhitelist ShuttleWhitelist = new();
/// <summary>
/// The shuttle that matches <see cref="ShuttleWhitelist"/>.
/// If this is null a shuttle was not found and this console does nothing.
/// </summary>
[DataField]
public EntityUid? Shuttle;
/// <summary>
/// Whether <see cref="Shuttle"/> is set on the server or not.
/// Client can't use Shuttle outside of PVS range so that isn't networked.
/// </summary>
[DataField, AutoNetworkedField]
public bool HasShuttle;
}

View File

@@ -0,0 +1,46 @@
using Content.Shared.DeltaV.Shuttles.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// Component that stores destinations a docking-only shuttle can use.
/// Used by <see cref="DockingConsoleComponent"/> to access destinations.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedDockingShuttleSystem))]
public sealed partial class DockingShuttleComponent : Component
{
/// <summary>
/// The station this shuttle belongs to.
/// </summary>
[DataField]
public EntityUid? Station;
/// <summary>
/// Every destination this console can FTL to.
/// </summary>
[DataField]
public List<DockingDestination> Destinations = new();
}
/// <summary>
/// A map a shuttle can FTL to.
/// Created automatically on shuttle mapinit.
/// </summary>
[DataDefinition, Serializable, NetSerializable]
public partial struct DockingDestination
{
/// <summary>
/// The name of the destination to use in UI.
/// </summary>
[DataField]
public LocId Name;
/// <summary>
/// The map ID.
/// </summary>
[DataField]
public MapId Map;
}

View File

@@ -0,0 +1,10 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// Marker component for the mining shuttle grid.
/// Used for lavaland's FTL whitelist.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class MiningShuttleComponent : Component;

View File

@@ -0,0 +1,26 @@
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Timing;
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.Shuttles;
[Serializable, NetSerializable]
public enum DockingConsoleUiKey : byte
{
Key
}
[Serializable, NetSerializable]
public sealed class DockingConsoleState(FTLState ftlState, StartEndTime ftlTime, List<DockingDestination> destinations) : BoundUserInterfaceState
{
public FTLState FTLState = ftlState;
public StartEndTime FTLTime = ftlTime;
public List<DockingDestination> Destinations = destinations;
}
[Serializable, NetSerializable]
public sealed class DockingConsoleFTLMessage(int index) : BoundUserInterfaceMessage
{
public int Index = index;
}

View File

@@ -0,0 +1,3 @@
namespace Content.Shared.DeltaV.Shuttles.Systems;
public abstract class SharedDockingConsoleSystem : EntitySystem;

View File

@@ -0,0 +1,3 @@
namespace Content.Shared.DeltaV.Shuttles.Systems;
public abstract class SharedDockingShuttleSystem : EntitySystem;

View File

@@ -0,0 +1,7 @@
docking-console-no-shuttle = No Shuttle Detected
docking-console-ftl = FTL
mining-console-window-title = Mining Shuttle Console
shuttle-destination-lavaland = Lavaland
shuttle-destination-glacier-surface = Glacier Surface

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,495 @@
meta:
format: 6
postmapinit: false
tilemap:
0: Space
74: FloorMono
84: FloorReinforced
89: FloorShuttleBlue
98: FloorSteel
130: Lattice
131: Plating
entities:
- proto: ""
entities:
- uid: 1
components:
- type: MetaData
name: Mining Shuttle
- type: Transform
- type: MapGrid
chunks:
0,0:
ind: 0,0
tiles: YgAAAAAAYgAAAAAASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAgwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
0,-1:
ind: 0,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAgwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAWQAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
-1,-1:
ind: -1,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAWQAAAAAA
version: 6
-1,0:
ind: -1,0
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
- type: Broadphase
- type: Physics
bodyStatus: InAir
angularDamping: 0.05
linearDamping: 0.05
fixedRotation: False
bodyType: Dynamic
- type: Fixtures
fixtures: {}
- type: OccluderTree
- type: SpreaderGrid
- type: Shuttle
- type: MiningShuttle
- type: DockingShuttle
destinations: []
- type: ProtectedGrid
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg
- type: GridPathfinding
- type: DecalGrid
chunkCollection:
version: 2
nodes: []
- type: GridAtmosphere
version: 2
data:
tiles:
0,0:
0: 823
1: 16384
0,-1:
0: 13072
1: 64
-1,0:
0: 2184
1: 16384
-1,-1:
0: 34816
1: 64
uniqueMixes:
- volume: 2500
temperature: 293.15
moles:
- 21.824879
- 82.10312
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- volume: 2500
immutable: True
moles:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- proto: AirlockShuttle
entities:
- uid: 2
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- proto: APCBasic
entities:
- uid: 3
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-1.5
parent: 1
- proto: AtmosDeviceFanDirectional
entities:
- uid: 4
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- proto: CableApcExtension
entities:
- uid: 5
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- uid: 6
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- uid: 7
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- uid: 8
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- uid: 9
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- uid: 10
components:
- type: Transform
pos: 0.5,1.5
parent: 1
- uid: 11
components:
- type: Transform
pos: 0.5,2.5
parent: 1
- proto: CableHV
entities:
- uid: 12
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- uid: 13
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- uid: 14
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- proto: CableMV
entities:
- uid: 15
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- uid: 16
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- uid: 17
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- uid: 18
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- uid: 19
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- proto: ChairPilotSeat
entities:
- uid: 20
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,1.5
parent: 1
- uid: 21
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-0.5
parent: 1
- uid: 22
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-0.5
parent: 1
- uid: 23
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-0.5
parent: 1
- proto: ComputerShuttleMining
entities:
- uid: 24
components:
- type: Transform
pos: 0.5,2.5
parent: 1
- proto: CrateGenericSteel
entities:
- uid: 25
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- proto: GasPassiveVent
entities:
- uid: 26
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-2.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GasPipeStraight
entities:
- uid: 27
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- uid: 28
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GasVentScrubber
entities:
- uid: 29
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GeneratorWallmountBasic
entities:
- uid: 30
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- proto: GravityGeneratorMini
entities:
- uid: 63
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- proto: Grille
entities:
- uid: 31
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- uid: 32
components:
- type: Transform
pos: -1.5,1.5
parent: 1
- uid: 33
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- uid: 34
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- uid: 35
components:
- type: Transform
pos: 0.5,3.5
parent: 1
- proto: OreBox
entities:
- uid: 36
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- proto: Poweredlight
entities:
- uid: 37
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -0.5,0.5
parent: 1
- proto: ShuttleWindow
entities:
- uid: 38
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- uid: 39
components:
- type: Transform
pos: 0.5,3.5
parent: 1
- uid: 40
components:
- type: Transform
pos: -1.5,1.5
parent: 1
- uid: 41
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- uid: 42
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- proto: SubstationWallBasic
entities:
- uid: 43
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,-1.5
parent: 1
- proto: Table
entities:
- uid: 44
components:
- type: Transform
pos: -0.5,2.5
parent: 1
- uid: 45
components:
- type: Transform
pos: 1.5,2.5
parent: 1
- proto: Thruster
entities:
- uid: 46
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-2.5
parent: 1
- proto: WallShuttle
entities:
- uid: 47
components:
- type: Transform
pos: 2.5,2.5
parent: 1
- uid: 48
components:
- type: Transform
pos: 1.5,3.5
parent: 1
- uid: 49
components:
- type: Transform
pos: -0.5,3.5
parent: 1
- uid: 50
components:
- type: Transform
pos: -1.5,2.5
parent: 1
- uid: 51
components:
- type: Transform
pos: -1.5,0.5
parent: 1
- uid: 52
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- uid: 53
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- uid: 54
components:
- type: Transform
pos: 1.5,-2.5
parent: 1
- uid: 55
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- proto: WallShuttleDiagonal
entities:
- uid: 56
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,3.5
parent: 1
- uid: 57
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-2.5
parent: 1
- uid: 58
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,-2.5
parent: 1
- uid: 59
components:
- type: Transform
pos: -1.5,3.5
parent: 1
- proto: WindowReinforcedDirectional
entities:
- uid: 60
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 0.5,-1.5
parent: 1
- uid: 61
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-1.5
parent: 1
- uid: 62
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-1.5
parent: 1
...

View File

@@ -6,6 +6,7 @@
- id: BoxFolderQmClipboard
- id: BoxQMCircuitboards
- id: BoxQMStamps
- id: MiningShuttleConsoleCircuitboard
- id: CigPackGreen
prob: 0.50
- id: ClothingHeadsetAltCargo

View File

@@ -27,6 +27,7 @@
- BaseStationAllEventsEligible
- BaseStationNanotrasen
- BaseStationDeliveries
- BaseStationLavaland # DeltaV
categories: [ HideSpawnMenu ]
components:
- type: Transform

View File

@@ -656,13 +656,18 @@
startNode: start
targetNode: Catwalk
category: construction-category-structures
conditions:
- !type:TileNotBlocked
failIfSpace: false
- !type:TileType
targets:
- Lattice
- Plating
description: Just like a lattice. Except it looks better.
# DeltaV - This prevented building catwalk over lava
#conditions:
#- !type:TileNotBlocked
# failIfSpace: false
#- !type:TileType
# targets:
# - Lattice
# - Plating
icon:
sprite: Structures/catwalk.rsi
state: catwalk_preview
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false