diff --git a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs
index 0945d133c87..9ab1778782a 100644
--- a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs
+++ b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs
@@ -79,6 +79,40 @@ public void SearchRecord(string newFullName)
newFullName));
}
+ public void PrintGeneralRecord()
+ {
+
+ SendMessage(new PrintGeneralRecord());
+ }
+ public void SaveGeneralRecord(string content)
+ {
+
+ SendMessage(new SaveGeneralRecord(content));
+ }
+
+
+ public void PrintMedicalRecord()
+ {
+
+ SendMessage(new PrintMedicalRecord());
+ }
+ public void SaveMedicalRecord(string content)
+ {
+
+ SendMessage(new SaveMedicalRecord(content));
+ }
+
+ public void PrintCriminalRecord()
+ {
+
+ SendMessage(new PrintCriminalRecord());
+ }
+ public void SaveCriminalRecord(string content)
+ {
+
+ SendMessage(new SaveCriminalRecord(content));
+ }
+
public void ResetSpending()
{
SendMessage(new AccountModResetSpending());
diff --git a/Content.Client/Access/UI/IdCardConsoleWindow.xaml b/Content.Client/Access/UI/IdCardConsoleWindow.xaml
index 23a7a99c718..3424e2a5a20 100644
--- a/Content.Client/Access/UI/IdCardConsoleWindow.xaml
+++ b/Content.Client/Access/UI/IdCardConsoleWindow.xaml
@@ -1,9 +1,8 @@
-
-
+ SetSize="700 600"
+ MinSize="700 600">
+
@@ -33,36 +32,122 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs b/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs
index 3f696356ac7..3a998450737 100644
--- a/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs
+++ b/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs
@@ -1,4 +1,5 @@
using Content.Client.CrewAssignments.UI;
+using Content.Client.Message;
using Content.Shared.Access;
using Content.Shared.Access.Systems;
using Content.Shared.CCVar;
@@ -9,6 +10,7 @@
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
using System.Linq;
using static Content.Shared.Access.Components.IdCardConsoleComponent;
@@ -58,6 +60,29 @@ public IdCardConsoleWindow(IdCardConsoleBoundUserInterface owner, IPrototypeMana
FullNameSaveButton.OnPressed += _ => SubmitData();
SpendingReset.OnPressed += _ => ResetSpending();
+ SaveGeneralRecordBtn.OnPressed += _ => SaveGeneralRecord();
+ PrintGeneralRecordBtn.OnPressed += _ => PrintGeneralRecord();
+
+ SaveCriminalRecordBtn.OnPressed += _ => SaveCriminalRecord();
+ PrintCriminalRecordBtn.OnPressed += _ => PrintCriminalRecord();
+
+ SaveMedicalRecordBtn.OnPressed += _ => SaveMedicalRecord();
+ PrintMedicalRecordBtn.OnPressed += _ => PrintMedicalRecord();
+
+ MainTabs.SetTabTitle(0, "Assignment");
+ MainTabs.SetTabTitle(1, "General Record");
+ MainTabs.SetTabTitle(2, "Criminal Record");
+ MainTabs.SetTabTitle(3, "Medical Record");
+
+ GeneralTabs.SetTabTitle(0, "View");
+ GeneralTabs.SetTabTitle(1, "Edit");
+
+ CriminalTabs.SetTabTitle(0, "View");
+ CriminalTabs.SetTabTitle(1, "Edit");
+
+ MedicalTabs.SetTabTitle(0, "View");
+ MedicalTabs.SetTabTitle(1, "Edit");
+
}
@@ -140,6 +165,66 @@ public void UpdateState(IdCardConsoleBoundUserInterfaceState state)
}
}
+ if(state.CrewRecord != null)
+ {
+ GeneralRecordLabel.SetMarkup(state.CrewRecord.GeneralRecord);
+ GeneralRecordTE.TextRope = new Rope.Leaf(state.CrewRecord.GeneralRecord);
+
+ MedicalRecordLabel.SetMarkup(state.CrewRecord.MedicalRecord);
+ MedicalRecordTE.TextRope = new Rope.Leaf(state.CrewRecord.MedicalRecord);
+
+ CriminalRecordLabel.SetMarkup(state.CrewRecord.CriminalRecord);
+ CriminalRecordTE.TextRope = new Rope.Leaf(state.CrewRecord.CriminalRecord);
+ }
+ if (!state.IsOwner && state.PrivAssignment != null)
+ {
+ if (state.IsOwner || state.PrivAssignment.CanEditGeneralRecord)
+ {
+ EditGeneralRecord.Visible = true;
+ }
+ else
+ {
+ EditGeneralRecord.Visible = false;
+ EditCriminalRecord.Visible = false;
+ EditMedicalRecord.Visible = false;
+ }
+ }
+ else
+ {
+ EditGeneralRecord.Visible = false;
+ EditMedicalRecord.Visible = false;
+ }
+ }
+
+
+ private void PrintGeneralRecord()
+ {
+ _owner.PrintGeneralRecord();
+ Close();
+ }
+ private void SaveGeneralRecord()
+ {
+ _owner.SaveGeneralRecord(Rope.Collapse(GeneralRecordTE.TextRope));
+ }
+
+ private void PrintCriminalRecord()
+ {
+ _owner.PrintCriminalRecord();
+ Close();
+ }
+ private void SaveCriminalRecord()
+ {
+ _owner.SaveCriminalRecord(Rope.Collapse(CriminalRecordTE.TextRope));
+ }
+
+ private void PrintMedicalRecord()
+ {
+ _owner.PrintMedicalRecord();
+ Close();
+ }
+ private void SaveMedicalRecord()
+ {
+ _owner.SaveMedicalRecord(Rope.Collapse(MedicalRecordTE.TextRope));
}
private void ResetSpending()
diff --git a/Content.Client/CharacterInfo/CharacterInfoSystem.cs b/Content.Client/CharacterInfo/CharacterInfoSystem.cs
index aeaa48c6f2d..9cb58e0cf76 100644
--- a/Content.Client/CharacterInfo/CharacterInfoSystem.cs
+++ b/Content.Client/CharacterInfo/CharacterInfoSystem.cs
@@ -29,10 +29,15 @@ public void RequestCharacterInfo()
RaiseNetworkEvent(new RequestCharacterInfoEvent(GetNetEntity(entity.Value)));
}
+ public void UpdateDetailExaminable(string content)
+ {
+ RaiseNetworkEvent(new UpdateDetailExaminableEvent(content));
+ }
+
private void OnCharacterInfoEvent(CharacterInfoEvent msg, EntitySessionEventArgs args)
{
var entity = GetEntity(msg.NetEntity);
- var data = new CharacterData(entity, msg.JobTitle, msg.Objectives, msg.Briefing, Name(entity));
+ var data = new CharacterData(entity, msg.JobTitle, msg.Faction, msg.BankBal, msg.Objectives, msg.Briefing, msg.DetailExaminable, Name(entity));
OnCharacterUpdate?.Invoke(data);
}
@@ -47,8 +52,11 @@ public List GetCharacterInfoControls(EntityUid uid)
public readonly record struct CharacterData(
EntityUid Entity,
string Job,
+ string? Faction,
+ string BankBal,
Dictionary> Objectives,
string? Briefing,
+ string? DetailExaminable,
string EntityName
);
diff --git a/Content.Client/CrewAssignments/BUI/StationModificationConsoleBoundUserInterface.cs b/Content.Client/CrewAssignments/BUI/StationModificationConsoleBoundUserInterface.cs
index 1f150ff892f..1b3e7207d0e 100644
--- a/Content.Client/CrewAssignments/BUI/StationModificationConsoleBoundUserInterface.cs
+++ b/Content.Client/CrewAssignments/BUI/StationModificationConsoleBoundUserInterface.cs
@@ -73,7 +73,7 @@ protected override void Open()
_menu.DeleteAssignment.OnPressed += DeleteAssignment;
_menu.DefaultAccessCreate.OnPressed += DefaultAccessCreate;
_menu.ClaimBtn.OnPressed += ToggleClaim;
- _menu.SpendingBtn.OnPressed += ToggleSpend;
+ _menu.GenRecBtn.OnPressed += ToggleGenRec;
_menu.ReassignmentBtn.OnPressed += ToggleAssign;
_menu.ITaxConfirm.OnPressed += ChangeITax;
_menu.ETaxConfirm.OnPressed += ChangeETax;
@@ -250,13 +250,14 @@ private void ToggleClaim(ButtonEventArgs args)
SendMessage(new StationModificationToggleClaim(assignment));
}
- private void ToggleSpend(ButtonEventArgs args)
+ private void ToggleGenRec(ButtonEventArgs args)
{
if (_menu == null) return;
var assignment = _menu.PossibleAssignments.SelectedId;
- SendMessage(new StationModificationToggleSpend(assignment));
+ SendMessage(new StationModificationToggleGenRec(assignment));
}
+
private void ToggleAssign(ButtonEventArgs args)
{
if (_menu == null) return;
diff --git a/Content.Client/CrewAssignments/UI/CodexEntryMenu.xaml b/Content.Client/CrewAssignments/UI/CodexEntryMenu.xaml
index ccbd2087d2a..a101971581c 100644
--- a/Content.Client/CrewAssignments/UI/CodexEntryMenu.xaml
+++ b/Content.Client/CrewAssignments/UI/CodexEntryMenu.xaml
@@ -1,7 +1,7 @@
-
+
diff --git a/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml b/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml
index 00254eeda8e..81ce65b5ed2 100644
--- a/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml
+++ b/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml
@@ -189,8 +189,8 @@
StyleClasses="LabelKeyText" />
-
+
diff --git a/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml.cs b/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml.cs
index 21ab8423501..c3f49eaa219 100644
--- a/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml.cs
+++ b/Content.Client/CrewAssignments/UI/StationModificationMenu.xaml.cs
@@ -248,13 +248,13 @@ public void UpdateAssignment()
{
ReassignmentBtn.Pressed = false;
}
- if (assignment.CanSpend)
+ if(assignment.CanEditGeneralRecord)
{
- SpendingBtn.Pressed = true;
+ GenRecBtn.Pressed = true;
}
else
{
- SpendingBtn.Pressed = false;
+ GenRecBtn.Pressed = false;
}
foreach (Button button in AssignmentAccessesBC.Children)
{
diff --git a/Content.Client/Doors/DoorSystem.cs b/Content.Client/Doors/DoorSystem.cs
index 451d6ccbdc7..0f6537eeadd 100644
--- a/Content.Client/Doors/DoorSystem.cs
+++ b/Content.Client/Doors/DoorSystem.cs
@@ -119,7 +119,7 @@ private void UpdateAppearanceForDoorState(Entity entity, SpriteCo
}
return;
- case DoorState.Opening or DoorState.boltingOpen:
+ case DoorState.Opening:
if (entity.Comp.OpeningAnimationTime == TimeSpan.Zero)
return;
diff --git a/Content.Client/Shuttles/BUI/IFFConsoleBoundUserInterface.cs b/Content.Client/Shuttles/BUI/IFFConsoleBoundUserInterface.cs
index 8d84abed8a5..fed5f3a8af6 100644
--- a/Content.Client/Shuttles/BUI/IFFConsoleBoundUserInterface.cs
+++ b/Content.Client/Shuttles/BUI/IFFConsoleBoundUserInterface.cs
@@ -1,5 +1,6 @@
using Content.Client.Shuttles.UI;
using Content.Shared.Shuttles.BUIStates;
+using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Events;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
@@ -24,6 +25,8 @@ protected override void Open()
_window = this.CreateWindowCenteredLeft();
_window.ShowIFF += SendIFFMessage;
_window.ShowVessel += SendVesselMessage;
+ _window.SetColor += SendColorMessage;
+ _window.SetDesignation += SendDesignationMessage;
}
protected override void UpdateState(BoundUserInterfaceState state)
@@ -52,6 +55,22 @@ private void SendVesselMessage(bool obj)
});
}
+ private void SendColorMessage(string colorHex)
+ {
+ SendMessage(new IFFSetColorMessage()
+ {
+ ColorHex = colorHex,
+ });
+ }
+
+ private void SendDesignationMessage(IFFDesignation designation)
+ {
+ SendMessage(new IFFSetDesignationMessage()
+ {
+ Designation = designation,
+ });
+ }
+
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
diff --git a/Content.Client/Shuttles/UI/BaseShuttleControl.xaml.cs b/Content.Client/Shuttles/UI/BaseShuttleControl.xaml.cs
index 6ed953d1ccc..b8b70a38992 100644
--- a/Content.Client/Shuttles/UI/BaseShuttleControl.xaml.cs
+++ b/Content.Client/Shuttles/UI/BaseShuttleControl.xaml.cs
@@ -115,12 +115,13 @@ protected void DrawCircles(DrawingHandleScreen handle)
var lineColor = Color.MediumSpringGreen.WithAlpha(0.02f);
handle.DrawLine(origin - aExtent, origin + aExtent, lineColor);
}
+ }
- // Draw North pointer
- var northVec = (Angle.FromDegrees(90) - NorthRotation).ToVec();
- // Using ScaledMinimapRadius directly ensures the line always hits the UI edge regardless of zoom.
- var endPos = MidPointVector + new Vector2(northVec.X, -northVec.Y) * Math.Max(ScaledMinimapRadius, 2000f);
- handle.DrawLine(MidPointVector, endPos, Color.Red.WithAlpha(0.5f));
+ protected void DrawNorthLine(DrawingHandleScreen handle, Angle angle)
+ {
+ var origin = ScalePosition(-new Vector2(Offset.X, -Offset.Y)); // center of the screen
+ var northVec = (angle - Math.PI / 2).ToVec() * ScaledMinimapRadius * 1.42f; // a far away point north of the center
+ handle.DrawLine(origin, origin + northVec, Color.Red.WithAlpha(0.5f));
}
protected void DrawGrid(DrawingHandleScreen handle, Matrix3x2 gridToView, Entity grid, Color color, float alpha = 0.01f)
diff --git a/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml b/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml
index dab11a7b622..72d9f7cfad1 100644
--- a/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml
+++ b/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml
@@ -1,7 +1,7 @@
+ MinSize="300 150">
@@ -15,6 +15,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml.cs b/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml.cs
index f14ef22c3c3..3b59ef0f7ad 100644
--- a/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml.cs
+++ b/Content.Client/Shuttles/UI/IFFConsoleWindow.xaml.cs
@@ -3,8 +3,10 @@
using Content.Shared.Shuttles.BUIStates;
using Content.Shared.Shuttles.Components;
using Robust.Client.AutoGenerated;
+using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
+using System.Text;
namespace Content.Client.Shuttles.UI;
@@ -12,10 +14,18 @@ namespace Content.Client.Shuttles.UI;
public sealed partial class IFFConsoleWindow : FancyWindow,
IComputerWindow
{
+ private const int SignatureHexLength = 6;
private readonly ButtonGroup _showIFFButtonGroup = new();
private readonly ButtonGroup _showVesselButtonGroup = new();
+ private readonly StyleBoxFlat _swatchStyleBox = new();
+ private bool _canEditColor;
+ private bool _canEditDesignation;
+ private bool _designationOptionsLoaded;
+ private bool _suppressDesignationEvent;
public event Action? ShowIFF;
public event Action? ShowVessel;
+ public event Action? SetColor;
+ public event Action? SetDesignation;
public IFFConsoleWindow()
{
@@ -29,6 +39,13 @@ public IFFConsoleWindow()
ShowVesselOnButton.Group = _showVesselButtonGroup;
ShowVesselOnButton.OnPressed += args => ShowVesselPressed(true);
ShowVesselOffButton.OnPressed += args => ShowVesselPressed(false);
+
+ SignatureColorSwatch.PanelOverride = _swatchStyleBox;
+ DesignationOptionButton.OnItemSelected += args => OnDesignationSelected(args.Id);
+
+ ApplyColorButton.OnPressed += _ => ApplySignatureColor();
+ SignatureColorLineEdit.OnTextEntered += args => ApplySignatureColor(args.Text);
+ SignatureColorLineEdit.OnTextChanged += args => OnColorTextChanged(args.Text);
}
private void ShowIFFPressed(bool pressed)
@@ -41,6 +58,83 @@ private void ShowVesselPressed(bool pressed)
ShowVessel?.Invoke(pressed);
}
+ private void ApplySignatureColor(string? text = null)
+ {
+ var value = SanitizeColorHex(text ?? SignatureColorLineEdit.Text);
+
+ if (value.Length != SignatureHexLength)
+ return;
+
+ SetColor?.Invoke($"#{value}");
+ }
+
+ private void EnsureDesignationOptions()
+ {
+ if (_designationOptionsLoaded)
+ return;
+
+ DesignationOptionButton.Clear();
+ DesignationOptionButton.AddItem(Loc.GetString("iff-console-designation-ship"), (int) IFFDesignation.Ship);
+ DesignationOptionButton.AddItem(Loc.GetString("iff-console-designation-station"), (int) IFFDesignation.Station);
+ _designationOptionsLoaded = true;
+ }
+
+ private void OnDesignationSelected(int id)
+ {
+ if (_suppressDesignationEvent)
+ return;
+
+ if (!_canEditDesignation)
+ return;
+
+ if (id < byte.MinValue || id > byte.MaxValue)
+ return;
+
+ var designationId = (byte) id;
+ if (!Enum.IsDefined(typeof(IFFDesignation), designationId))
+ return;
+
+ DesignationOptionButton.SelectId(id);
+ SetDesignation?.Invoke((IFFDesignation) designationId);
+ }
+
+ private void OnColorTextChanged(string text)
+ {
+ var sanitized = SanitizeColorHex(text);
+
+ if (SignatureColorLineEdit.Text != sanitized)
+ {
+ SignatureColorLineEdit.Text = sanitized;
+ SignatureColorLineEdit.CursorPosition = sanitized.Length;
+ }
+
+ UpdateApplyButtonState();
+ }
+
+ private static string SanitizeColorHex(string? value)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ return string.Empty;
+
+ var result = new StringBuilder(SignatureHexLength);
+
+ foreach (var ch in value)
+ {
+ if (result.Length >= SignatureHexLength)
+ break;
+
+ if (Uri.IsHexDigit(ch))
+ result.Append(char.ToUpperInvariant(ch));
+ }
+
+ return result.ToString();
+ }
+
+ private void UpdateApplyButtonState()
+ {
+ ApplyColorButton.Disabled = !_canEditColor || SignatureColorLineEdit.Text.Length != SignatureHexLength;
+ }
+
public void UpdateState(IFFConsoleBoundUserInterfaceState state)
{
if ((state.AllowedFlags & IFFFlags.HideLabel) != 0x0)
@@ -82,5 +176,21 @@ public void UpdateState(IFFConsoleBoundUserInterfaceState state)
ShowVesselOffButton.Disabled = true;
ShowVesselOnButton.Disabled = true;
}
+
+ _canEditColor = state.ColorEditable;
+ UpdateApplyButtonState();
+ SignatureColorLineEdit.Editable = state.ColorEditable;
+
+ _canEditDesignation = state.DesignationEditable;
+ EnsureDesignationOptions();
+ DesignationOptionButton.Disabled = !_canEditDesignation;
+ _suppressDesignationEvent = true;
+ DesignationOptionButton.SelectId((int) state.Designation);
+ _suppressDesignationEvent = false;
+
+ var colorHex = state.SignatureColor.ToHexNoAlpha().TrimStart('#');
+ SignatureColorLineEdit.Text = colorHex;
+ _swatchStyleBox.BackgroundColor = state.SignatureColor;
+ UpdateApplyButtonState();
}
}
diff --git a/Content.Client/Shuttles/UI/MapScreen.xaml b/Content.Client/Shuttles/UI/MapScreen.xaml
index dc96fde466a..37bba06951a 100644
--- a/Content.Client/Shuttles/UI/MapScreen.xaml
+++ b/Content.Client/Shuttles/UI/MapScreen.xaml
@@ -28,6 +28,10 @@
TextAlign="Center"
ToggleMode="True"
Pressed="True"/>
+
+
+
+
diff --git a/Content.Client/Shuttles/UI/MapScreen.xaml.cs b/Content.Client/Shuttles/UI/MapScreen.xaml.cs
index 75a009da3fd..81a9cb7b489 100644
--- a/Content.Client/Shuttles/UI/MapScreen.xaml.cs
+++ b/Content.Client/Shuttles/UI/MapScreen.xaml.cs
@@ -99,6 +99,16 @@ public MapScreen()
{
MapRadar.ShowBeacons = args.Pressed;
};
+
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-none"), (int) IFFSortMode.None);
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-station"), (int) IFFSortMode.Station);
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-ship"), (int) IFFSortMode.Ship);
+ SortModeButton.OnItemSelected += args =>
+ {
+ SortModeButton.SelectId(args.Id);
+ MapRadar.SortMode = (IFFSortMode) args.Id;
+ };
+ SortModeButton.SelectId((int) IFFSortMode.None);
}
public void UpdateState(ShuttleMapInterfaceState state)
diff --git a/Content.Client/Shuttles/UI/NavScreen.xaml b/Content.Client/Shuttles/UI/NavScreen.xaml
index d6375f7911f..d67992f8179 100644
--- a/Content.Client/Shuttles/UI/NavScreen.xaml
+++ b/Content.Client/Shuttles/UI/NavScreen.xaml
@@ -65,6 +65,10 @@
Text="{controls:Loc 'shuttle-console-dock-toggle'}"
TextAlign="Center"
ToggleMode="True"/>
+
+
+
+
diff --git a/Content.Client/Shuttles/UI/NavScreen.xaml.cs b/Content.Client/Shuttles/UI/NavScreen.xaml.cs
index e5a259aa8e2..0324cd5e515 100644
--- a/Content.Client/Shuttles/UI/NavScreen.xaml.cs
+++ b/Content.Client/Shuttles/UI/NavScreen.xaml.cs
@@ -37,6 +37,12 @@ public NavScreen()
DampingModeButton.AddItem(Loc.GetString("shuttle-console-damping-normal"), (int) ShuttleDampingMode.Normal);
DampingModeButton.AddItem(Loc.GetString("shuttle-console-damping-anchor"), (int) ShuttleDampingMode.Anchor);
DampingModeButton.OnItemSelected += OnDampingSelected;
+
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-none"), (int) IFFSortMode.None);
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-station"), (int) IFFSortMode.Station);
+ SortModeButton.AddItem(Loc.GetString("shuttle-console-sort-ship"), (int) IFFSortMode.Ship);
+ SortModeButton.OnItemSelected += OnSortSelected;
+ SortModeButton.SelectId((int) IFFSortMode.None);
}
public void SetShuttle(EntityUid? shuttle)
@@ -111,4 +117,10 @@ private void OnDampingSelected(OptionButton.ItemSelectedEventArgs args)
DampingModeButton.SelectId(args.Id);
OnDampingModeChanged?.Invoke((ShuttleDampingMode) args.Id);
}
+
+ private void OnSortSelected(OptionButton.ItemSelectedEventArgs args)
+ {
+ SortModeButton.SelectId(args.Id);
+ NavRadar.SortMode = (IFFSortMode) args.Id;
+ }
}
diff --git a/Content.Client/Shuttles/UI/ShuttleDockControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleDockControl.xaml.cs
index 879e6aa5b06..449323c7467 100644
--- a/Content.Client/Shuttles/UI/ShuttleDockControl.xaml.cs
+++ b/Content.Client/Shuttles/UI/ShuttleDockControl.xaml.cs
@@ -108,11 +108,6 @@ protected override void Draw(DrawingHandleScreen handle)
DrawCircles(handle);
var gridNent = EntManager.GetNetEntity(GridEntity);
-
- // Update NorthRotation to the world rotation of the grid plus the relative angle of the viewed dock
- // to ensure it points to world North correctly in the dock view.
- NorthRotation = _xformSystem.GetWorldRotation(GridEntity.Value) + _angle.Value;
-
var mapPos = _xformSystem.ToMapCoordinates(_coordinates.Value);
var ourGridToWorld = _xformSystem.GetWorldMatrix(GridEntity.Value);
var selectedDockToOurGrid = Matrix3Helpers.CreateTransform(_coordinates.Value.Position, Angle.Zero);
diff --git a/Content.Client/Shuttles/UI/ShuttleMapControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleMapControl.xaml.cs
index daf2622d819..3a02e29ebfe 100644
--- a/Content.Client/Shuttles/UI/ShuttleMapControl.xaml.cs
+++ b/Content.Client/Shuttles/UI/ShuttleMapControl.xaml.cs
@@ -32,6 +32,9 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
public bool ShowBeacons = true;
public MapId ViewingMap = MapId.Nullspace;
+ public IFFSortMode SortMode { get; set; } = IFFSortMode.None;
+
+ private const float SortFadeMultiplier = 0.1f;
private EntityUid? _shuttleEntity;
@@ -67,7 +70,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
private readonly List _mapObjects = new();
private readonly Dictionary> _verts = new();
private readonly Dictionary> _edges = new();
- private readonly Dictionary> _strings = new();
+ private readonly Dictionary> _strings = new();
private readonly List _viewportExclusions = new();
public ShuttleMapControl() : base(256f, 512f, 512f)
@@ -332,7 +335,7 @@ protected override void Draw(DrawingHandleScreen handle)
_beacons.Add(mapO);
var existingStrings = _strings.GetOrNew(beaconColor);
- existingStrings.Add((beaconUiPos, beaconName));
+ existingStrings.Add((beaconUiPos, beaconName, 1f));
}
}
@@ -354,6 +357,9 @@ protected override void Draw(DrawingHandleScreen handle)
var gridColor = _shuttles.GetIFFColor(grid, self: _shuttleEntity == grid.Owner, component: iffComp);
+ if (ShouldFade(iffComp))
+ gridColor = gridColor.WithAlpha(gridColor.A * SortFadeMultiplier);
+
var existingVerts = _verts.GetOrNew(gridColor);
var existingEdges = _edges.GetOrNew(gridColor);
@@ -378,8 +384,10 @@ protected override void Draw(DrawingHandleScreen handle)
if (string.IsNullOrEmpty(iffText))
continue;
+ var designation = iffComp?.Designation ?? IFFDesignation.Ship;
+ var labelScale = designation == IFFDesignation.Station ? 1.3f : 1f;
var existingStrings = _strings.GetOrNew(gridColor);
- existingStrings.Add((gridUiPos, iffText));
+ existingStrings.Add((gridUiPos, iffText, labelScale));
}
// Batch the colors whoopie
@@ -398,10 +406,10 @@ protected override void Draw(DrawingHandleScreen handle)
{
var adjustedColor = Color.FromSrgb(color);
- foreach (var (gridUiPos, iffText) in sendStrings)
+ foreach (var (gridUiPos, iffText, labelScale) in sendStrings)
{
- var textWidth = handle.GetDimensions(_font, iffText, 1f);
- handle.DrawString(_font, gridUiPos + textWidth with { X = -textWidth.X / 2f, Y = textWidth.Y * UIScale }, iffText, adjustedColor);
+ var textWidth = handle.GetDimensions(_font, iffText, labelScale);
+ handle.DrawString(_font, gridUiPos + textWidth with { X = -textWidth.X / 2f, Y = textWidth.Y * UIScale }, iffText, labelScale, adjustedColor);
}
}
@@ -483,6 +491,11 @@ protected override void Draw(DrawingHandleScreen handle)
DrawData(handle, coordsText);
}
+ private bool ShouldFade(IFFComponent? iff)
+ {
+ return !_shuttles.MatchesSortTag(iff, SortMode);
+ }
+
private void AddMapObject(List edges, List verts, ValueList mapObject)
{
var bottom = mapObject[0];
diff --git a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
index df8f0ced1a4..429a9da4dea 100644
--- a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
+++ b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
@@ -42,6 +42,9 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
public bool ShowIFF { get; set; } = true;
public bool ShowDocks { get; set; } = true;
public bool RotateWithEntity { get; set; } = true;
+ public IFFSortMode SortMode { get; set; } = IFFSortMode.None;
+
+ private const float SortFadeMultiplier = 0.1f;
///
/// Raised if the user left-clicks on the radar control with the relevant entitycoordinates.
@@ -155,10 +158,6 @@ protected override void Draw(DrawingHandleScreen handle)
var ourEntRot = RotateWithEntity ? _transform.GetWorldRotation(xform) : _rotation.Value;
var ourEntMatrix = Matrix3Helpers.CreateTransform(_transform.GetWorldPosition(xform), ourEntRot);
- // Update NorthRotation to the world rotation of the grid plus the relative angle of the viewed dock
- // to ensure it points to world North correctly in the Nav view.
- NorthRotation = ourEntRot;
-
var shuttleToWorld = Matrix3x2.Multiply(posMatrix, ourEntMatrix);
Matrix3x2.Invert(shuttleToWorld, out var worldToShuttle);
var shuttleToView = Matrix3x2.CreateScale(new Vector2(MinimapScale, -MinimapScale)) * Matrix3x2.CreateTranslation(MidPointVector);
@@ -202,6 +201,8 @@ protected override void Draw(DrawingHandleScreen handle)
var viewBounds = new Box2Rotated(new Box2(-WorldRange, -WorldRange, WorldRange, WorldRange).Translated(mapPos.Position), rot, mapPos.Position);
var viewAABB = viewBounds.CalcBoundingBox();
+ DrawNorthLine(handle, rot);
+
_grids.Clear();
_mapManager.FindGridsIntersecting(xform.MapID, new Box2(mapPos.Position - MaxRadarRangeVector, mapPos.Position + MaxRadarRangeVector), ref _grids, approx: true, includeMap: false);
@@ -224,10 +225,18 @@ protected override void Draw(DrawingHandleScreen handle)
var labelColor = _shuttles.GetIFFColor(grid, self: false, iff);
var coordColor = new Color(labelColor.R * 0.8f, labelColor.G * 0.8f, labelColor.B * 0.8f, 0.5f);
+ if (ShouldFade(iff))
+ {
+ labelColor = labelColor.WithAlpha(labelColor.A * SortFadeMultiplier);
+ coordColor = coordColor.WithAlpha(coordColor.A * SortFadeMultiplier);
+ }
+
// Others default:
// Color.FromHex("#FFC000FF")
// Hostile default: Color.Firebrick
var labelName = _shuttles.GetIFFLabel(grid, self: false, iff);
+ var designation = iff?.Designation ?? IFFDesignation.Ship;
+ var labelScale = designation == IFFDesignation.Station ? 1.3f : 1f;
if (ShowIFF &&
labelName != null)
@@ -243,7 +252,7 @@ protected override void Draw(DrawingHandleScreen handle)
var coordsText = $"({gridCenterInWorld.X:0.0}, {gridCenterInWorld.Y:0.0})";
// yes 1.0 scale is intended here.
- var labelDimensions = handle.GetDimensions(Font, labelText, 1f);
+ var labelDimensions = handle.GetDimensions(Font, labelText, labelScale);
var coordsDimensions = handle.GetDimensions(Font, coordsText, 0.7f);
// y-offset the control to always render below the grid (vertically)
@@ -272,7 +281,7 @@ protected override void Draw(DrawingHandleScreen handle)
labelUiPosition = Vector2.Clamp(labelUiPosition, Vector2.Zero, controlExtents);
// draw IFF label
- handle.DrawString(Font, labelUiPosition, labelText, labelColor);
+ handle.DrawString(Font, labelUiPosition, labelText, labelScale, labelColor);
// only draw coords label if close enough
if (offsetMax < 1)
@@ -307,6 +316,11 @@ protected override void Draw(DrawingHandleScreen handle)
}
+ private bool ShouldFade(IFFComponent? iff)
+ {
+ return !_shuttles.MatchesSortTag(iff, SortMode);
+ }
+
private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3x2 gridToView)
{
if (!ShowDocks)
diff --git a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs
index bc50826cfd3..90b28fa8887 100644
--- a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs
+++ b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs
@@ -1,5 +1,6 @@
using System.Linq;
using Content.Client.CharacterInfo;
+using Content.Shared.CharacterInfo;
using Content.Client.Gameplay;
using Content.Client.Stylesheets;
using Content.Client.UserInterface.Controls;
@@ -53,6 +54,7 @@ public void OnStateEntered(GameplayState state)
_window.OnClose += DeactivateButton;
_window.OnOpen += ActivateButton;
+ _window.DetailExaminableSubmitButton.OnPressed += OnDetailExaminableSubmit;
CommandBinds.Builder
.Bind(ContentKeyFunctions.OpenCharacterMenu,
@@ -64,6 +66,9 @@ public void OnStateExited(GameplayState state)
{
if (_window != null)
{
+ _window.OnClose -= DeactivateButton;
+ _window.OnOpen -= ActivateButton;
+ _window.DetailExaminableSubmitButton.OnPressed -= OnDetailExaminableSubmit;
_window.Close();
_window = null;
}
@@ -130,17 +135,23 @@ private void CharacterUpdated(CharacterData data)
return;
}
- var (entity, job, objectives, briefing, entityName) = data;
+ var (entity, job, faction, bankBal, objectives, briefing, detailExaminable, entityName) = data;
_window.SpriteView.SetEntity(entity);
UpdateRoleType();
_window.NameLabel.Text = entityName;
- _window.SubText.Text = job;
+ _window.SubText.Text = (faction != null) ? job + " | " + faction : job; // If off-duty don't show faction
+ _window.SubTextBankBal.Text = bankBal;
_window.Objectives.RemoveAllChildren();
_window.ObjectivesLabel.Visible = objectives.Any();
+ if (detailExaminable != null)
+ {
+ _window.DetailExaminableTextEdit.TextRope = new Rope.Leaf(detailExaminable);
+ }
+
foreach (var (groupId, conditions) in objectives)
{
var objectiveControl = new CharacterObjectiveControl
@@ -196,7 +207,7 @@ private void CharacterUpdated(CharacterData data)
_window.Objectives.AddChild(control);
}
- _window.RolePlaceholder.Visible = briefing == null && !controls.Any() && !objectives.Any();
+ _window.RolePlaceholder.Visible = false; // Persistence: briefing == null && !controls.Any() && !objectives.Any(); < false;
}
private void OnRoleTypeChanged(MindRoleTypeChangedEvent ev, EntitySessionEventArgs _)
@@ -255,4 +266,13 @@ private void ToggleWindow()
_window.Open();
}
}
+
+ private void OnDetailExaminableSubmit(ButtonEventArgs args)
+ {
+ if (_window == null)
+ return;
+
+ var text = Rope.Collapse(_window.DetailExaminableTextEdit.TextRope).Trim();
+ _characterInfo.UpdateDetailExaminable(text);
+ }
}
diff --git a/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml b/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml
index fd51403053f..8189230ab33 100644
--- a/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml
+++ b/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml
@@ -7,17 +7,32 @@
MinHeight="545">
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.Highlighting.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.Highlighting.cs
index 46e06865cf4..e38a66b2d9b 100644
--- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.Highlighting.cs
+++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.Highlighting.cs
@@ -135,7 +135,7 @@ private void OnCharacterUpdated(CharacterData data)
if (!_charInfoIsAttach)
return;
- var (_, job, _, _, entityName) = data;
+ var (_, job, _, _, _, _, _, entityName) = data;
// Mark this entity's name as our character name for the "UpdateHighlights" function.
var newHighlights = "@" + entityName;
diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs
index d917bb1a911..035f4be69d8 100644
--- a/Content.Server/Access/Systems/AccessOverriderSystem.cs
+++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs
@@ -159,8 +159,7 @@ private void UpdateUserInterface(EntityUid uid, AccessOverriderComponent compone
List? possibleAccesses = null;
List? personalAccesses = null;
bool personalAccessMode = false;
- var station = _station.GetOwningStation(uid);
-
+ bool isOwner = false;
string stationName = "*None*";
Entity? accessReaderEnt = null;
@@ -172,11 +171,14 @@ private void UpdateUserInterface(EntityUid uid, AccessOverriderComponent compone
if (!_accessReader.GetMainAccessReader(accessReader, out accessReaderEnt))
return;
+ var station = _station.GetOwningStation(accessReaderEnt.Value.Owner);
+
currentAccesses = accessReaderEnt.Value.Comp.AccessNames;
personalAccesses = accessReaderEnt.Value.Comp.PersonalAccessNames;
personalAccessMode = accessReaderEnt.Value.Comp.PersonalAccessMode;
if (station != null)
{
+
if (TryComp(station, out var sD) && sD != null && sD.StationName != null)
{
stationName = sD.StationName;
@@ -196,6 +198,11 @@ private void UpdateUserInterface(EntityUid uid, AccessOverriderComponent compone
{
var realName = "";
if(idCardEnt.FullName != null) realName = idCardEnt.FullName;
+ if(sD != null && realName != "")
+ {
+ if (sD.Owners.Contains(realName)) isOwner = true;
+ }
+
if (TryComp(station, out var crewRecords))
{
if(crewRecords.TryGetRecord(realName, out var crewRecord) && crewRecord != null)
@@ -217,18 +224,21 @@ private void UpdateUserInterface(EntityUid uid, AccessOverriderComponent compone
}
if (allAccesses != null)
{
- if (possibleAccesses == null)
- {
- missingAccesses = currentAccesses;
- }
- else
+ if(!isOwner)
{
- missingAccesses = new List();
- foreach (var access in allAccesses)
+ if (possibleAccesses == null)
+ {
+ missingAccesses = currentAccesses;
+ }
+ else
{
- if (!possibleAccesses.Contains(access) && currentAccesses.Contains(access))
+ missingAccesses = new List();
+ foreach (var access in allAccesses)
{
- missingAccesses.Add(access);
+ if (!possibleAccesses.Contains(access) && currentAccesses.Contains(access))
+ {
+ missingAccesses.Add(access);
+ }
}
}
}
diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs
index 7430fc89095..a1c17e7471f 100644
--- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs
+++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs
@@ -14,6 +14,9 @@
using Content.Shared.Damage;
using Content.Shared.Damage.Systems;
using Content.Shared.Database;
+using Content.Shared.Fax.Components;
+using Content.Shared.Labels.EntitySystems;
+using Content.Shared.Paper;
using Content.Shared.Roles;
using Content.Shared.Station.Components;
using Content.Shared.StationRecords;
@@ -44,6 +47,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly ChatSystem _chat = default!;
[Dependency] private readonly StationSystem _station = default!;
+ [Dependency] private readonly PaperSystem _paperSystem = default!;
+ [Dependency] private readonly MetaDataSystem _metaData = default!;
public override void Initialize()
{
@@ -53,6 +58,12 @@ public override void Initialize()
SubscribeLocalEvent(OnSearchRecord);
SubscribeLocalEvent(OnChangeAssignment);
SubscribeLocalEvent(OnResetSpending);
+ SubscribeLocalEvent(OnSaveGeneralRecord);
+ SubscribeLocalEvent(OnPrintGeneralRecord);
+ SubscribeLocalEvent(OnSaveMedicalRecord);
+ SubscribeLocalEvent(OnPrintMedicalRecord);
+ SubscribeLocalEvent(OnSaveCriminalRecord);
+ SubscribeLocalEvent(OnPrintCriminalRecord);
// one day, maybe bound user interfaces can be shared too.
SubscribeLocalEvent(UpdateUserInterface);
SubscribeLocalEvent(OnEntInserted);
@@ -92,6 +103,89 @@ private void OnEntInserted(EntityUid uid, IdCardConsoleComponent component, EntI
UpdateUserInterface(uid, component, args);
}
+
+ private void OnSaveGeneralRecord(EntityUid uid, IdCardConsoleComponent component, SaveGeneralRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ if (!_station.CanEditGeneralRecord(component.PrivRecord.Name, station.Value)) return;
+
+
+ component.SelectedRecord.GeneralRecord = args.Content;
+
+ UpdateUserInterface(uid, component, args);
+ }
+
+ private void OnPrintGeneralRecord(EntityUid uid, IdCardConsoleComponent component, PrintGeneralRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ SpawnPaper(uid, component.SelectedRecord.GeneralRecord, $"{component.SelectedRecord.Name} General Record");
+ }
+
+ private void OnSaveMedicalRecord(EntityUid uid, IdCardConsoleComponent component, SaveMedicalRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ if (!_station.CanEditGeneralRecord(component.PrivRecord.Name, station.Value)) return;
+
+
+ component.SelectedRecord.MedicalRecord = args.Content;
+
+ UpdateUserInterface(uid, component, args);
+ }
+
+ private void OnPrintMedicalRecord(EntityUid uid, IdCardConsoleComponent component, PrintMedicalRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ SpawnPaper(uid, component.SelectedRecord.MedicalRecord, $"{component.SelectedRecord.Name} Medical Record");
+ }
+
+ private void OnSaveCriminalRecord(EntityUid uid, IdCardConsoleComponent component, SaveCriminalRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ if (!_station.CanEditGeneralRecord(component.PrivRecord.Name, station.Value)) return;
+
+
+ component.SelectedRecord.CriminalRecord = args.Content;
+
+ UpdateUserInterface(uid, component, args);
+ }
+
+ private void OnPrintCriminalRecord(EntityUid uid, IdCardConsoleComponent component, PrintCriminalRecord args)
+ {
+ if (args.Actor is not { Valid: true } player)
+ return;
+ if (component.SelectedRecord == null) return;
+ if (component.PrivRecord == null) return;
+ var station = _station.GetOwningStation(uid);
+ if (station == null) return;
+ SpawnPaper(uid, component.SelectedRecord.CriminalRecord, $"{component.SelectedRecord.Name} Criminal Record");
+ }
+
+
private void OnSearchRecord(EntityUid uid, IdCardConsoleComponent component, SearchRecord args)
{
if (args.Actor is not { Valid: true } player)
@@ -222,6 +316,10 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component
{
component.PrivRecord = TryEnsureRecord(uid, privIdComponent.FullName);
}
+ else
+ {
+ component.PrivRecord = null;
+ }
}
if (component.PrivRecord != null)
@@ -233,6 +331,10 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component
if (privIdComponent != null && privIdComponent.FullName != null && sD.Owners.Contains(privIdComponent.FullName)) owner = true;
}
}
+ else
+ {
+ component.PrivRecord = null;
+ }
if (component.SelectedRecord == null)
{
@@ -249,7 +351,8 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component
privassignment,
possibleAssignments,
owner,
- 0);
+ 0,
+ null);
}
@@ -270,7 +373,8 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component
privassignment,
possibleAssignments,
owner,
- component.SelectedRecord.Spent);
+ component.SelectedRecord.Spent,
+ component.SelectedRecord);
}
@@ -389,6 +493,23 @@ private void OnDamageChanged(Entity entity, ref DamageCh
_chat.TrySendInGameICMessage(entity, Loc.GetString("id-card-console-damaged"), InGameICChatType.Speak, true);
}
+
+ private void SpawnPaper(EntityUid uid, string content, string title)
+ {
+
+ var entityToSpawn = "Paper";
+ var printed = Spawn(entityToSpawn, Transform(uid).Coordinates);
+
+ if (TryComp(printed, out var paper))
+ {
+ _paperSystem.SetContent((printed, paper), content);
+ paper.EditingDisabled = true;
+ }
+
+ _metaData.SetEntityName(printed, title);
+ }
+
+
#region PublicAPI
///
diff --git a/Content.Server/Atmos/Components/GridAtmosphereComponent.cs b/Content.Server/Atmos/Components/GridAtmosphereComponent.cs
index 2a0d87515cb..9d3f1be1db1 100644
--- a/Content.Server/Atmos/Components/GridAtmosphereComponent.cs
+++ b/Content.Server/Atmos/Components/GridAtmosphereComponent.cs
@@ -102,6 +102,14 @@ public sealed partial class GridAtmosphereComponent : Component
[ViewVariables]
public readonly HashSet> AtmosDevices = new();
+ ///
+ /// Serialized list of atmos devices in the same order used to build the processing queue.
+ /// Populated right before map serialization.
+ ///
+ [ViewVariables]
+ [DataField("atmosDevicesOrder")]
+ public List AtmosDevicesOrder = new();
+
[ViewVariables]
public readonly Queue CurrentRunTiles = new();
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs
index fe5e24550b1..1961f4c8265 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.API.cs
@@ -560,11 +560,14 @@ public bool AddAtmosDevice(Entity grid, Entity
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs
index 72b6e9d7459..ddead07bc4b 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs
@@ -1,4 +1,5 @@
using Content.Server.Atmos.Components;
+using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Reactions;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
@@ -49,6 +50,21 @@ private void OnGridAtmosphereInit(EntityUid uid, GridAtmosphereComponent compone
{
tile.GridIndex = uid;
}
+
+ //Check there are devices to pre-add to hashset
+ if (component.AtmosDevicesOrder.Count == 0)
+ return;
+
+ //Pre-load hashset with serialised atmos queue from save
+ foreach (var deviceUid in component.AtmosDevicesOrder)
+ {
+ if (!TryComp(deviceUid, out AtmosDeviceComponent? deviceComp))
+ continue;
+
+ var device = new Entity(deviceUid, deviceComp);
+ if (!component.AtmosDevices.Add(device))
+ continue;
+ }
}
private void OnGridAtmosphereStartup(EntityUid uid, GridAtmosphereComponent component, ComponentStartup args)
diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
index df380912b6c..be7532e35b9 100644
--- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
+++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs
@@ -13,6 +13,7 @@
using Robust.Shared.Map;
using Robust.Shared.Physics.Systems;
using Robust.Shared.Prototypes;
+using Robust.Shared.Map.Events;
using System.Linq;
using Content.Shared.Damage.Systems;
using Robust.Shared.Threading;
@@ -71,6 +72,7 @@ public override void Initialize()
SubscribeLocalEvent(OnTileChanged);
SubscribeLocalEvent(OnPrototypesReloaded);
+ SubscribeLocalEvent(OnBeforeSerialization);
CacheDecals();
}
@@ -127,4 +129,21 @@ private void CacheDecals()
{
_burntDecals = _protoMan.EnumeratePrototypes().Where(x => x.Tags.Contains("burnt")).Select(x => x.ID).ToArray();
}
+
+ private void OnBeforeSerialization(BeforeSerializationEvent ev)
+ {
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out _, out var atmosphere, out var xform))
+ {
+ if (!ev.MapIds.Contains(xform.MapID))
+ continue;
+
+ atmosphere.AtmosDevicesOrder.Clear();
+ atmosphere.AtmosDevicesOrder.EnsureCapacity(atmosphere.AtmosDevices.Count);
+ foreach (var device in atmosphere.AtmosDevices)
+ {
+ atmosphere.AtmosDevicesOrder.Add(device.Owner);
+ }
+ }
+ }
}
diff --git a/Content.Server/Atmos/Reactions/ChlorineTrifluorideReaction.cs b/Content.Server/Atmos/Reactions/ChlorineTrifluorideReaction.cs
index c0933bcd6c9..d9ee1e95149 100644
--- a/Content.Server/Atmos/Reactions/ChlorineTrifluorideReaction.cs
+++ b/Content.Server/Atmos/Reactions/ChlorineTrifluorideReaction.cs
@@ -19,7 +19,21 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos
var initialCLF3Moles = mixture.GetMoles(Gas.ChlorineTrifluoride);
- var decompositionRate = initialCLF3Moles * 0.15f;
+ // Use reaction temperature (hotspot preferred) and scale decomposition with temperature
+ var reactionTemperature = temperature;
+ if (location?.Hotspot.Valid == true)
+ {
+ reactionTemperature = location.Hotspot.Temperature;
+ }
+
+ var temperatureScale = 0f;
+ if (reactionTemperature > Atmospherics.PlasmaUpperTemperature)
+ temperatureScale = 1f;
+ else if (reactionTemperature > Atmospherics.PlasmaMinimumBurnTemperature)
+ temperatureScale = (reactionTemperature - Atmospherics.PlasmaMinimumBurnTemperature) /
+ (Atmospherics.PlasmaUpperTemperature - Atmospherics.PlasmaMinimumBurnTemperature);
+
+ var decompositionRate = initialCLF3Moles * 0.25f * temperatureScale; // increased for faster decomposition
if (decompositionRate > Atmospherics.MinimumHeatCapacity)
{
@@ -27,24 +41,22 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos
mixture.AdjustMoles(Gas.Chlorine, decompositionRate * 0.5f);
mixture.AdjustMoles(Gas.Fluorine, decompositionRate * 1.5f);
- energyReleased = 315000f * decompositionRate;
+ // Release ~=319 kJ per mole of ClF3 decomposed (exothermic)
+ energyReleased = 319000f * decompositionRate;
energyReleased /= heatScale;
mixture.ReactionResults[(byte)GasReaction.Fire] = decompositionRate * 1.5f;
}
- if (energyReleased > 0)
+ if (energyReleased != 0f)
{
var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true);
if (newHeatCapacity > Atmospherics.MinimumHeatCapacity)
mixture.Temperature = (temperature * oldHeatCapacity + energyReleased) / newHeatCapacity;
-
- mixture.Temperature = MathF.Max(mixture.Temperature, Atmospherics.PlasmaMinimumBurnTemperature + 900f);
}
if (location != null && decompositionRate > Atmospherics.MinimumHeatCapacity)
{
- var exposedTemp = MathF.Max(Atmospherics.PlasmaMinimumBurnTemperature + 600f, mixture.Temperature);
- atmosphereSystem.HotspotExpose(location, exposedTemp, mixture.Volume, fuelGas: Gas.ChlorineTrifluoride);
+ atmosphereSystem.HotspotExpose(location, mixture.Temperature, mixture.Volume, fuelGas: Gas.ChlorineTrifluoride);
}
return mixture.ReactionResults[(byte)GasReaction.Fire] != 0 ? (ReactionResult.Reacting | ReactionResult.StopReactions) : ReactionResult.NoReaction;
diff --git a/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs b/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs
index 7d0cf49872c..9ea44a4194a 100644
--- a/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs
+++ b/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs
@@ -42,12 +42,32 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos
var initialHydrogenMoles = mixture.GetMoles(Gas.Hydrogen);
// 2H2 + O2 -> 2H2O
- // Burn rate scales with temperature
- var hydrogenBurnRate = initialHydrogenMoles * temperatureScale * 0.1f; // Base burn rate 10% per cycle
+ var TMin = Atmospherics.PlasmaMinimumBurnTemperature;
+ var Tsen = 200f;
+ var baseRate = 0.06f; // increased for faster burn
- // Limited by available oxygen (stoichiometric ratio 2:1)
- var maxBurnByOxygen = initialOxygenMoles * 2f;
- hydrogenBurnRate = MathF.Min(hydrogenBurnRate, maxBurnByOxygen);
+ var hydrogenBurnRate = 0f;
+
+ if (initialHydrogenMoles > 0f && temperatureScale > 0f)
+ {
+ var rawTempFactor = (reactionTemperature - TMin) / Tsen;
+ rawTempFactor = MathF.Max(rawTempFactor, 0f);
+ rawTempFactor = MathF.Min(rawTempFactor, 8f);
+ var tempFactor = MathF.Exp(rawTempFactor);
+
+ var o2PerFuel = 0.5f;
+ var oxygenFactor = 1f;
+ if (initialHydrogenMoles > 0f)
+ oxygenFactor = MathF.Min(1f, initialOxygenMoles / (initialHydrogenMoles * o2PerFuel));
+
+ var burnFraction = 1f - MathF.Exp(-baseRate * oxygenFactor * tempFactor);
+ burnFraction = MathF.Min(MathF.Max(burnFraction, 0f), 1f);
+
+ hydrogenBurnRate = initialHydrogenMoles * burnFraction;
+
+ var maxBurnByOxygen = initialOxygenMoles * 2f;
+ hydrogenBurnRate = MathF.Min(hydrogenBurnRate, maxBurnByOxygen);
+ }
if (hydrogenBurnRate > Atmospherics.MinimumHeatCapacity)
{
diff --git a/Content.Server/Atmos/Reactions/MethaneFireReaction.cs b/Content.Server/Atmos/Reactions/MethaneFireReaction.cs
index 5c297b9b874..29601b6cd93 100644
--- a/Content.Server/Atmos/Reactions/MethaneFireReaction.cs
+++ b/Content.Server/Atmos/Reactions/MethaneFireReaction.cs
@@ -42,12 +42,32 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos
var initialMethaneMoles = mixture.GetMoles(Gas.Methane);
// CH4 + 2O2 -> CO2 + 2H2O
- // Burn rate scales with temperature
- var methaneBurnRate = initialMethaneMoles * temperatureScale * 0.1f; // Base burn rate 10% per cycle
+ var TMin = Atmospherics.PlasmaMinimumBurnTemperature;
+ var Tsen = 200f;
+ var baseRate = 0.06f; // increased for faster burn
- // Limited by available oxygen (stoichiometric ratio 1:2)
- var maxBurnByOxygen = initialOxygenMoles * 0.5f;
- methaneBurnRate = MathF.Min(methaneBurnRate, maxBurnByOxygen);
+ var methaneBurnRate = 0f;
+
+ if (initialMethaneMoles > 0f && temperatureScale > 0f)
+ {
+ var rawTempFactor = (reactionTemperature - TMin) / Tsen;
+ rawTempFactor = MathF.Max(rawTempFactor, 0f);
+ rawTempFactor = MathF.Min(rawTempFactor, 8f);
+ var tempFactor = MathF.Exp(rawTempFactor);
+
+ var o2PerFuel = 2f;
+ var oxygenFactor = 1f;
+ if (initialMethaneMoles > 0f)
+ oxygenFactor = MathF.Min(1f, initialOxygenMoles / (initialMethaneMoles * o2PerFuel));
+
+ var burnFraction = 1f - MathF.Exp(-baseRate * oxygenFactor * tempFactor);
+ burnFraction = MathF.Min(MathF.Max(burnFraction, 0f), 1f);
+
+ methaneBurnRate = initialMethaneMoles * burnFraction;
+
+ var maxBurnByOxygen = initialOxygenMoles * 0.5f;
+ methaneBurnRate = MathF.Min(methaneBurnRate, maxBurnByOxygen);
+ }
if (methaneBurnRate > Atmospherics.MinimumHeatCapacity)
{
diff --git a/Content.Server/Body/Systems/MetabolizerSystem.cs b/Content.Server/Body/Systems/MetabolizerSystem.cs
index 1861ab8d235..dbc844e0b36 100644
--- a/Content.Server/Body/Systems/MetabolizerSystem.cs
+++ b/Content.Server/Body/Systems/MetabolizerSystem.cs
@@ -41,6 +41,8 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem
private EntityQuery _solutionQuery;
private static readonly ProtoId Gas = "Gas";
+ private HashSet> _cachedMetabolizers = new();
+
public override void Initialize()
{
base.Initialize();
@@ -49,9 +51,11 @@ public override void Initialize()
_solutionQuery = GetEntityQuery();
SubscribeLocalEvent(OnMetabolizerInit);
+ SubscribeLocalEvent(OnMetabolizerShutdown);
SubscribeLocalEvent(OnMapInit);
SubscribeLocalEvent(OnApplyMetabolicMultiplier);
}
+
private void OnMapInit(Entity ent, ref MapInitEvent args)
{
ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.AdjustedUpdateInterval;
@@ -68,23 +72,32 @@ private void OnMetabolizerInit(Entity entity, ref Componen
{
_solutionContainerSystem.EnsureSolution(body, entity.Comp.SolutionName, out _);
}
+ _cachedMetabolizers.Add(entity);
+ }
- Timer.Spawn((int)(entity.Comp.NextUpdate - _gameTiming.CurTime).TotalMilliseconds, () => TimerFired(entity));
+ private void OnMetabolizerShutdown(Entity ent, ref ComponentShutdown args)
+ {
+ _cachedMetabolizers.Remove(ent);
}
- private void TimerFired(Entity ent)
+ public override void Update(float frameTime)
{
- if (TerminatingOrDeleted(ent))
- return;
+ base.Update(frameTime);
- ent.Comp.NextUpdate += ent.Comp.AdjustedUpdateInterval;
- TryMetabolize(ent);
+ foreach (var (uid, metab) in _cachedMetabolizers)
+ {
+ if (IsPaused(uid)) continue;
+ // Only update as frequently as it should
+ if (_gameTiming.CurTime < metab.NextUpdate)
+ continue;
- var ms = (int)(ent.Comp.NextUpdate - _gameTiming.CurTime).TotalMilliseconds;
- DebugTools.Assert(ms >= ent.Comp.AdjustedUpdateInterval.TotalMilliseconds / 2);
- Timer.Spawn(ms, () => TimerFired(ent));
+ metab.NextUpdate += metab.AdjustedUpdateInterval;
+ TryMetabolize((uid, metab));
+ }
}
+
+
private void OnApplyMetabolicMultiplier(Entity ent, ref ApplyMetabolicMultiplierEvent args)
{
ent.Comp.UpdateIntervalMultiplier = args.Multiplier;
diff --git a/Content.Server/CharacterInfo/CharacterInfoSystem.cs b/Content.Server/CharacterInfo/CharacterInfoSystem.cs
index 3d83a667057..c3647bf937a 100644
--- a/Content.Server/CharacterInfo/CharacterInfoSystem.cs
+++ b/Content.Server/CharacterInfo/CharacterInfoSystem.cs
@@ -1,10 +1,16 @@
using Content.Server.Mind;
using Content.Server.Roles;
using Content.Server.Roles.Jobs;
+using Content.Server._NF.Bank;
+using Content.Server.CrewAssignments.Systems;
+using Content.Shared.CCVar;
using Content.Shared.CharacterInfo;
+using Content.Shared.DetailExaminable;
using Content.Shared.Objectives;
using Content.Shared.Objectives.Components;
using Content.Shared.Objectives.Systems;
+using Robust.Shared.Configuration;
+using Robust.Shared.Utility;
namespace Content.Server.CharacterInfo;
@@ -14,12 +20,16 @@ public sealed class CharacterInfoSystem : EntitySystem
[Dependency] private readonly MindSystem _minds = default!;
[Dependency] private readonly RoleSystem _roles = default!;
[Dependency] private readonly SharedObjectivesSystem _objectives = default!;
+ [Dependency] private readonly BankSystem _bank = default!;
+ [Dependency] private readonly JobNetSystem _jobNet = default!;
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
public override void Initialize()
{
base.Initialize();
SubscribeNetworkEvent(OnRequestCharacterInfoEvent);
+ SubscribeNetworkEvent(OnUpdateDetailExaminableEvent);
}
private void OnRequestCharacterInfoEvent(RequestCharacterInfoEvent msg, EntitySessionEventArgs args)
@@ -31,7 +41,13 @@ private void OnRequestCharacterInfoEvent(RequestCharacterInfoEvent msg, EntitySe
var entity = args.SenderSession.AttachedEntity.Value;
var objectives = new Dictionary>();
- var jobTitle = Loc.GetString("character-info-no-profession");
+
+ var (jobTitle, faction) = _jobNet.GetJobNetStrings(entity); // Persistence: Job & faction names from implant
+ if (jobTitle == null)
+ jobTitle = Loc.GetString("character-info-off-duty");
+
+ _bank.TryGetBalance(entity, out var bankBal);
+
string? briefing = null;
if (_minds.TryGetMind(entity, out var mindId, out var mind))
{
@@ -56,6 +72,50 @@ private void OnRequestCharacterInfoEvent(RequestCharacterInfoEvent msg, EntitySe
briefing = _roles.MindGetBriefing(mindId);
}
- RaiseNetworkEvent(new CharacterInfoEvent(GetNetEntity(entity), jobTitle, objectives, briefing), args.SenderSession);
+ var detailExaminable = EnsureComp(entity, out var detail) ? detail.Content : Loc.GetString("flavor-text-placeholder");
+
+ RaiseNetworkEvent(new CharacterInfoEvent(
+ GetNetEntity(entity),
+ jobTitle,
+ faction,
+ "$" + bankBal.ToString(),
+ objectives,
+ briefing,
+ detailExaminable),
+ args.SenderSession
+ );
+
+ Dirty(entity, detail);
+ }
+
+ private void OnUpdateDetailExaminableEvent(UpdateDetailExaminableEvent msg, EntitySessionEventArgs args)
+ {
+ if (args.SenderSession.AttachedEntity is not { } entity)
+ return;
+
+ string newContent = "";
+ var maxFlavorTextLength = _cfg.GetCVar(CCVars.MaxFlavorTextLength);
+ if (msg.Content.Length > maxFlavorTextLength)
+ {
+ newContent = FormattedMessage.RemoveMarkupOrThrow(msg.Content)[..maxFlavorTextLength];
+ }
+ else
+ {
+ newContent = FormattedMessage.RemoveMarkupOrThrow(msg.Content);
+ }
+
+ var detail = EnsureComp(entity);
+ detail.Content = newContent;
+ Dirty(entity, detail);
}
+
+// var maxFlavorTextLength = configManager.GetCVar(CCVars.MaxFlavorTextLength);
+// if (FlavorText.Length > maxFlavorTextLength)
+// {
+// flavortext = FormattedMessage.RemoveMarkupOrThrow(FlavorText)[..maxFlavorTextLength];
+// }
+// else
+// {
+// flavortext = FormattedMessage.RemoveMarkupOrThrow(FlavorText);
+// }
}
diff --git a/Content.Server/CrewAssignments/Systems/CrewAssignmentsSystem.SMUI.cs b/Content.Server/CrewAssignments/Systems/CrewAssignmentsSystem.SMUI.cs
index 032197ed451..6736e3b06d3 100644
--- a/Content.Server/CrewAssignments/Systems/CrewAssignmentsSystem.SMUI.cs
+++ b/Content.Server/CrewAssignments/Systems/CrewAssignmentsSystem.SMUI.cs
@@ -48,7 +48,7 @@ private void InitializeConsole()
SubscribeLocalEvent(OnEnableChannel);
SubscribeLocalEvent(OnDisableChannel);
SubscribeLocalEvent(OnToggleClaim);
- SubscribeLocalEvent(OnToggleSpend);
+ SubscribeLocalEvent(OnToggleGenRec);
SubscribeLocalEvent(OnToggleAssign);
SubscribeLocalEvent(OnChangeCLevel);
SubscribeLocalEvent(OnChangeWage);
@@ -578,7 +578,8 @@ private void OnToggleAssign(EntityUid uid, StationModificationConsoleComponent c
Dirty((EntityUid)station, crewAssignments);
UpdateOrders(station.Value);
}
- private void OnToggleSpend(EntityUid uid, StationModificationConsoleComponent component, StationModificationToggleSpend args)
+
+ private void OnToggleClaim(EntityUid uid, StationModificationConsoleComponent component, StationModificationToggleClaim args)
{
if (args.Actor is not { Valid: true } player)
return;
@@ -597,11 +598,12 @@ private void OnToggleSpend(EntityUid uid, StationModificationConsoleComponent co
ConsolePopup(player, "Invalid Assignment!");
return;
}
- crewAssignment.CanSpend = !crewAssignment.CanSpend;
+ crewAssignment.CanClaim = !crewAssignment.CanClaim;
Dirty((EntityUid)station, crewAssignments);
UpdateOrders(station.Value);
}
- private void OnToggleClaim(EntityUid uid, StationModificationConsoleComponent component, StationModificationToggleClaim args)
+
+ private void OnToggleGenRec(EntityUid uid, StationModificationConsoleComponent component, StationModificationToggleGenRec args)
{
if (args.Actor is not { Valid: true } player)
return;
@@ -620,11 +622,12 @@ private void OnToggleClaim(EntityUid uid, StationModificationConsoleComponent co
ConsolePopup(player, "Invalid Assignment!");
return;
}
- crewAssignment.CanClaim = !crewAssignment.CanClaim;
+ crewAssignment.CanEditGeneralRecord = !crewAssignment.CanEditGeneralRecord;
Dirty((EntityUid)station, crewAssignments);
UpdateOrders(station.Value);
}
+
private void OnChangeName(EntityUid uid, StationModificationConsoleComponent component, StationModificationChangeName args)
{
if (args.Actor is not { Valid: true } player)
diff --git a/Content.Server/CrewAssignments/Systems/JobNetSystem.Ui.cs b/Content.Server/CrewAssignments/Systems/JobNetSystem.Ui.cs
index 49a66f3e274..2565e257fb7 100644
--- a/Content.Server/CrewAssignments/Systems/JobNetSystem.Ui.cs
+++ b/Content.Server/CrewAssignments/Systems/JobNetSystem.Ui.cs
@@ -19,6 +19,7 @@
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using System.Linq;
+using Content.Shared.Implants.Components;
namespace Content.Server.CrewAssignments.Systems;
@@ -41,7 +42,7 @@ private void InitializeUi()
SubscribeLocalEvent(OnRequestUpdate);
}
-
+
public void ToggleUi(EntityUid user, EntityUid jobnetEnt, JobNetComponent? component = null)
@@ -67,6 +68,54 @@ public void CloseUi(EntityUid uid, JobNetComponent? component = null)
_ui.CloseUi(uid, JobNetUiKey.Key);
}
+ public (string? jobTitle, string? factionName) GetJobNetStrings(EntityUid? user)
+ {
+ if(!TryComp(user, out var implanted)) return (null, null);
+
+ EntityUid? jobNet = null;
+ JobNetComponent? component = null;
+
+ foreach (var implant in implanted.ImplantContainer.ContainedEntities)
+ {
+ if (TryComp(implant, out var comp))
+ {
+ jobNet = implant;
+ component = comp;
+ }
+ }
+
+ if (component == null || jobNet == null)
+ return (null, null);
+
+ var stations = _station.GetStationsSet();
+ string? jobTitle = null;
+ string? factionName = null;
+ foreach (var station in stations)
+ {
+ if (!TryComp(station, out var crewRecord)
+ || (!crewRecord.TryGetRecord(Name(user.Value), out var record)
+ || record == null)
+ || !TryComp(station, out var stationData)
+ || stationData.StationName == null
+ || (component.WorkingFor == null || component.WorkingFor == 0)
+ || !TryComp(station, out var crewAssignments))
+ continue;
+
+ if (stationData.UID == component.WorkingFor)
+ {
+ factionName = stationData.StationName;
+ }
+
+ if (crewAssignments.TryGetAssignment(record.AssignmentID, out var assignment) &&
+ assignment != null)
+ {
+ jobTitle = assignment.Name;
+ }
+ }
+
+ return (jobTitle, factionName);
+ }
+
public void UpdateUserInterface(EntityUid? user, EntityUid jobnet, JobNetComponent? component = null)
{
if (!Resolve(jobnet, ref component) || user == null || component == null)
diff --git a/Content.Server/DeviceLinking/Components/DoorSignalControlComponent.cs b/Content.Server/DeviceLinking/Components/DoorSignalControlComponent.cs
index f87af0a882b..8d2e984753f 100644
--- a/Content.Server/DeviceLinking/Components/DoorSignalControlComponent.cs
+++ b/Content.Server/DeviceLinking/Components/DoorSignalControlComponent.cs
@@ -7,21 +7,18 @@ namespace Content.Server.DeviceLinking.Components
public sealed partial class DoorSignalControlComponent : Component
{
[DataField("openPort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string OpenSink = "Open";
+ public string OpenPort = "Open";
[DataField("closePort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string CloseSink = "Close";
+ public string ClosePort = "Close";
[DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string ToggleSink = "Toggle";
+ public string TogglePort = "Toggle";
[DataField("boltPort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string BoltSink = "DoorBolt";
+ public string InBolt = "DoorBolt";
- [DataField("directDrivePort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string DirectDriveSink = "DirectDrive";
-
- [DataField("statusPort", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string StatusSource = "DoorStatus";
+ [DataField("onOpenPort", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string OutOpen = "DoorStatus";
}
}
diff --git a/Content.Server/DeviceLinking/Systems/DoorSignalControlSystem.cs b/Content.Server/DeviceLinking/Systems/DoorSignalControlSystem.cs
index 47cb612b6c1..a7089780581 100644
--- a/Content.Server/DeviceLinking/Systems/DoorSignalControlSystem.cs
+++ b/Content.Server/DeviceLinking/Systems/DoorSignalControlSystem.cs
@@ -27,8 +27,8 @@ public override void Initialize()
private void OnInit(EntityUid uid, DoorSignalControlComponent component, ComponentInit args)
{
- _signalSystem.EnsureSinkPorts(uid, component.OpenSink, component.CloseSink, component.ToggleSink);
- _signalSystem.EnsureSourcePorts(uid, component.StatusSource);
+ _signalSystem.EnsureSinkPorts(uid, component.OpenPort, component.ClosePort, component.TogglePort);
+ _signalSystem.EnsureSourcePorts(uid, component.OutOpen);
}
private void OnSignalReceived(EntityUid uid, DoorSignalControlComponent component, ref SignalReceivedEvent args)
@@ -39,45 +39,47 @@ private void OnSignalReceived(EntityUid uid, DoorSignalControlComponent componen
var state = SignalState.Momentary;
args.Data?.TryGetValue(DeviceNetworkConstants.LogicState, out state);
- // A special "fuzzy" helper state, which equates to either High or Momentary(pulse signal).
- // Used for signals that respond on prompt rather than sustained.
- bool fuzzyState = state == SignalState.High || state == SignalState.Momentary;
- switch (args.Port)
+
+ if (args.Port == component.OpenPort)
+ {
+ if (state == SignalState.High || state == SignalState.Momentary)
+ {
+ if (door.State == DoorState.Closed)
+ _doorSystem.TryOpen(uid, door);
+ }
+ }
+ else if (args.Port == component.ClosePort)
+ {
+ if (state == SignalState.High || state == SignalState.Momentary)
+ {
+ if (door.State == DoorState.Open)
+ _doorSystem.TryClose(uid, door);
+ }
+ }
+ else if (args.Port == component.TogglePort)
{
- case var port when port == component.OpenSink && door.State == DoorState.Closed && fuzzyState:
- _doorSystem.TryOpen(uid, door);
- break;
- case var port when port == component.CloseSink && door.State == DoorState.Open && fuzzyState:
- _doorSystem.TryClose(uid, door);
- break;
- case var port when port == component.ToggleSink && fuzzyState:
+ if (state == SignalState.High || state == SignalState.Momentary)
+ {
_doorSystem.TryToggleDoor(uid, door);
- break;
- case var port when port == component.BoltSink && TryComp(uid, out var bolts):
- switch (state)
- {
- case SignalState.Momentary:
- _doorSystem.SetBoltsDown((uid, bolts), !bolts.BoltsDown);
- break;
- case SignalState.High:
- _doorSystem.SetBoltsDown((uid, bolts), true);
- break;
- case SignalState.Low:
- _doorSystem.SetBoltsDown((uid, bolts), false);
- break;
- }
- break;
- case var port when port == component.DirectDriveSink:
- switch (state)
- {
- case SignalState.High:
- _doorSystem.DirectDriveOpen(uid, door, null, false, true);
- break;
- case SignalState.Low:
- _doorSystem.DirectDriveClose(uid, door, null, false);
- break;
- }
- break;
+ }
+ }
+ else if (args.Port == component.InBolt)
+ {
+ if (!TryComp(uid, out var bolts))
+ return;
+
+ // if its a pulse toggle, otherwise set bolts to high/low
+ bool bolt;
+ if (state == SignalState.Momentary)
+ {
+ bolt = !bolts.BoltsDown;
+ }
+ else
+ {
+ bolt = state == SignalState.High;
+ }
+
+ _doorSystem.SetBoltsDown((uid, bolts), bolt);
}
}
@@ -86,16 +88,15 @@ private void OnStateChanged(EntityUid uid, DoorSignalControlComponent door, Door
if (args.State == DoorState.Closed)
{
// only ever say the door is closed when it is completely airtight
- _signalSystem.SendSignal(uid, door.StatusSource, false);
+ _signalSystem.SendSignal(uid, door.OutOpen, false);
}
else if (args.State == DoorState.Open
|| args.State == DoorState.Opening
|| args.State == DoorState.Closing
- || args.State == DoorState.Emagging
- || args.State == DoorState.boltingOpen)
+ || args.State == DoorState.Emagging)
{
// say the door is open whenever it would be letting air pass
- _signalSystem.SendSignal(uid, door.StatusSource, true);
+ _signalSystem.SendSignal(uid, door.OutOpen, true);
}
}
}
diff --git a/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs b/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs
index 8a557049bc3..f87fd35673d 100644
--- a/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs
+++ b/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs
@@ -1,5 +1,6 @@
using Content.Server.DeviceLinking.Components;
using Content.Server.DeviceNetwork;
+using Content.Shared.DeviceLinking;
using Content.Shared.Interaction;
using Content.Shared.Lock;
using Robust.Shared.Audio;
@@ -11,6 +12,7 @@ public sealed class SignalSwitchSystem : EntitySystem
{
[Dependency] private readonly DeviceLinkSystem _deviceLink = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly LockSystem _lock = default!;
public override void Initialize()
@@ -24,6 +26,7 @@ public override void Initialize()
private void OnInit(EntityUid uid, SignalSwitchComponent comp, ComponentInit args)
{
_deviceLink.EnsureSourcePorts(uid, comp.OnPort, comp.OffPort, comp.StatusPort);
+ UpdateVisualState(uid, comp);
}
private void OnActivated(EntityUid uid, SignalSwitchComponent comp, ActivateInWorldEvent args)
@@ -45,6 +48,13 @@ private void OnActivated(EntityUid uid, SignalSwitchComponent comp, ActivateInWo
_audio.PlayPvs(comp.ClickSound, uid, AudioParams.Default.WithVariation(0.125f).WithVolume(8f));
+ UpdateVisualState(uid, comp);
+
args.Handled = true;
}
+
+ private void UpdateVisualState(EntityUid uid, SignalSwitchComponent comp)
+ {
+ _appearance.SetData(uid, SignalSwitchVisuals.State, comp.State);
+ }
}
diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs
index b8bcb497b49..0fc7103bd26 100644
--- a/Content.Server/GameTicking/GameTicker.Spawning.cs
+++ b/Content.Server/GameTicking/GameTicker.Spawning.cs
@@ -8,6 +8,7 @@
using Content.Server.Spawners.EntitySystems;
using Content.Server.Speech.Components;
using Content.Server.Station.Components;
+using Content.Server.Station.Systems;
using Content.Shared.CCVar;
using Content.Shared.CrewMetaRecords;
using Content.Shared.Database;
@@ -48,7 +49,7 @@ public sealed partial class GameTicker
[Dependency] private readonly IEntityManager _ent = default!;
[Dependency] private readonly BankSystem _bankSystem = default!;
[Dependency] private readonly CrewMetaRecordsSystem _crewMetaRecords = default!;
-
+ [Dependency] private readonly StationSystem _stationSystem = default!;
public static readonly EntProtoId ObserverPrototypeName = "MobObserver";
public static readonly EntProtoId AdminObserverPrototypeName = "AdminObserver";
@@ -178,13 +179,9 @@ private void SpawnPlayerPersistent(ICommonSession player)
var silent = true;
var lateJoin = true;
HumanoidCharacterProfile? character = GetPlayerProfile(player);
- EntityUid station;
- var stations = GetSpawnableStations();
- _robustRandom.Shuffle(stations);
- if (stations.Count == 0)
- station = EntityUid.Invalid;
- else
- station = stations[0];
+ EntityUid? station;
+ station = _stationSystem.GetStationByID(1);
+ if (station == null) return;
string speciesId;
PlayerJoinGame(player);
@@ -203,7 +200,7 @@ private void SpawnPlayerPersistent(ICommonSession player)
_bankSystem.EnsureAccount(character.Name, 50);
if (_crewMetaRecords.MetaRecords != null)
_crewMetaRecords.MetaRecords.CreateRecord(character!.Name, out _);
- var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character);
+ var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station.Value, jobId, character);
DebugTools.AssertNotNull(mobMaybe);
var mob = mobMaybe!.Value;
@@ -215,12 +212,12 @@ private void SpawnPlayerPersistent(ICommonSession player)
var jobName = _jobs.MindTryGetJobName(newMind);
_admin.UpdatePlayerList(player);
- _stationJobs.TryAssignJob(station, jobPrototype, player.UserId);
+ _stationJobs.TryAssignJob(station.Value, jobPrototype, player.UserId);
_adminLogger.Add(LogType.LateJoin,
LogImpact.Medium,
- $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}.");
+ $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station.Value):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}.");
if (!silent && TryComp(station, out MetaDataComponent? metaData))
@@ -240,7 +237,7 @@ private void SpawnPlayerPersistent(ICommonSession player)
lateJoin,
silent,
PlayersJoinedRoundNormally,
- station,
+ station.Value,
character);
RaiseLocalEvent(mob, aev, true);
var saveFilePath = new ResPath($"{data!.UserId}]{character.Name}");
@@ -249,6 +246,11 @@ private void SpawnPlayerPersistent(ICommonSession player)
EntityUid mobSure = (EntityUid)mobMaybe;
_loader.TrySaveGeneric(mobSure, saveFilePath, out var category);
}
+ _chatSystem.DispatchStationAnnouncement(station.Value,
+ $"{MetaData(mob).EntityName} has arrived into the Threshold.",
+ "Arrival",
+ playDefaultSound: false,
+ colorOverride: Color.Gold);
}
private void SpawnPlayerPersistentLoad(ICommonSession player)
diff --git a/Content.Server/GridControl/Systems/GridConfigSystem.cs b/Content.Server/GridControl/Systems/GridConfigSystem.cs
index d72bde48ecf..63d4d337774 100644
--- a/Content.Server/GridControl/Systems/GridConfigSystem.cs
+++ b/Content.Server/GridControl/Systems/GridConfigSystem.cs
@@ -115,9 +115,13 @@ public override void Initialize()
private void OnUnlink(EntityUid uid, StationTaggerComponent component, EntityEventArgs args)
{
if (component.TargetAccessReaderId == EntityUid.Invalid) return;
- if (TryComp(component.TargetAccessReaderId, out var comp) && comp != null)
+
+ if (!_accessReader.GetMainAccessReader(component.TargetAccessReaderId, out var accessReaderEnt))
+ return;
+ if (accessReaderEnt == null) return;
+ if (TryComp(accessReaderEnt.Value.Owner, out var comp) && comp != null)
{
- EntityManager.RemoveComponent(component.TargetAccessReaderId, comp);
+ EntityManager.RemoveComponent(accessReaderEnt.Value.Owner, comp);
}
UpdateUserInterface(uid, component, args);
}
@@ -129,13 +133,17 @@ private void OnLink(EntityUid uid, StationTaggerComponent component, EntityEvent
{
return;
}
+ if (!_accessReader.GetMainAccessReader(component.TargetAccessReaderId, out var accessReaderEnt))
+ return;
+ if (accessReaderEnt == null) return;
+
if (component.ConnectedStation == null) return;
var station = _station.GetStationByID(component.ConnectedStation.Value);
if (station == null) return;
- var comp2 = EnsureComp(component.TargetAccessReaderId);
+ var comp2 = EnsureComp(accessReaderEnt.Value.Owner);
if (comp2 == null) return;
comp2.locked = false;
- _station.SetStation((component.TargetAccessReaderId, comp2), station);
+ _station.SetStation((accessReaderEnt.Value.Owner, comp2), station);
comp2.locked = true;
UpdateUserInterface(uid, component, args);
}
@@ -840,7 +848,11 @@ private void UpdateUserInterface(EntityUid uid, StationTaggerComponent component
int taggedStationUID = 0;
if (component.TargetAccessReaderId is { Valid: true } accessReader)
{
- if (TryComp(accessReader, out var stationTracker) && stationTracker != null)
+ if (!_accessReader.GetMainAccessReader(component.TargetAccessReaderId, out var accessReaderEnt2))
+ return;
+ if (accessReaderEnt2 == null) return;
+
+ if (TryComp(accessReaderEnt2.Value.Owner, out var stationTracker) && stationTracker != null)
{
var taggedStation = stationTracker.Station;
if (TryComp(taggedStation, out var taggedSD) && taggedSD != null)
@@ -851,10 +863,8 @@ private void UpdateUserInterface(EntityUid uid, StationTaggerComponent component
}
targetLabel = Loc.GetString("access-overrider-window-target-label") + " " + Comp(component.TargetAccessReaderId).EntityName;
targetLabelColor = Color.White;
- if (accessReader != null)
- {
- allowed = PrivilegedIdIsAuthorized(uid, accessReader, component);
- }
+ allowed = PrivilegedIdIsAuthorized(uid, accessReaderEnt2.Value.Owner, component);
+
}
StationTaggerBoundUserInterfaceState newState;
diff --git a/Content.Server/Materials/MaterialStorageSystem.cs b/Content.Server/Materials/MaterialStorageSystem.cs
index 0fada62fd2a..6e156164e0b 100644
--- a/Content.Server/Materials/MaterialStorageSystem.cs
+++ b/Content.Server/Materials/MaterialStorageSystem.cs
@@ -106,6 +106,35 @@ public override bool TryInsertMaterialEntity(EntityUid user,
return false;
if (TryComp(receiver, out var power) && !power.Powered)
return false;
+
+ if (TryComp(toInsert, out var stackComponent)
+ && storage.StorageLimit != null
+ && composition.MaterialComposition.Count > 0)
+ {
+ var unitVolume = 0;
+ foreach (var (_, volume) in composition.MaterialComposition)
+ {
+ unitVolume += volume;
+ }
+
+ if (unitVolume > 0)
+ {
+ var currentTotal = GetTotalMaterialAmount(receiver, storage, localOnly: true);
+ var available = storage.StorageLimit.Value - currentTotal;
+ var maxInsertCount = Math.Min(stackComponent.Count, available / unitVolume);
+
+ if (maxInsertCount <= 0)
+ return false;
+
+ if (maxInsertCount < stackComponent.Count)
+ {
+ var split = _stackSystem.Split((toInsert, stackComponent), maxInsertCount, Transform(receiver).Coordinates);
+ if (split is { } splitEntity)
+ toInsert = splitEntity;
+ }
+ }
+ }
+
if (!base.TryInsertMaterialEntity(user, toInsert, receiver, storage, material, composition))
return false;
_audio.PlayPvs(storage.InsertingSound, receiver);
diff --git a/Content.Server/NPC/Systems/NPCSystem.cs b/Content.Server/NPC/Systems/NPCSystem.cs
index 94dc52448c5..8856184d629 100644
--- a/Content.Server/NPC/Systems/NPCSystem.cs
+++ b/Content.Server/NPC/Systems/NPCSystem.cs
@@ -27,6 +27,7 @@ public sealed partial class NPCSystem : EntitySystem
[Dependency] private readonly IConfigurationManager _configurationManager = default!;
[Dependency] private readonly HTNSystem _htn = default!;
[Dependency] private readonly MobStateSystem _mobState = default!;
+ [Dependency] private readonly SharedMindSystem _mind = default!;
///
/// Whether any NPCs are allowed to run at all.
@@ -48,7 +49,7 @@ public override void Initialize()
public void OnPlayerNPCAttach(EntityUid uid, HTNComponent component, PlayerAttachedEvent args)
{
- SleepNPC(uid, component);
+ SleepNPC(uid, component, true);
}
public void OnPlayerNPCDetach(EntityUid uid, HTNComponent component, PlayerDetachedEvent args)
@@ -115,7 +116,7 @@ public void WakeNPC(EntityUid uid, HTNComponent? component = null)
SetPaused(uid, false);
}
- public void SleepNPC(EntityUid uid, HTNComponent? component = null)
+ public void SleepNPC(EntityUid uid, HTNComponent? component = null, bool preventPause = false)
{
if (!Resolve(uid, ref component, false))
{
@@ -136,7 +137,10 @@ public void SleepNPC(EntityUid uid, HTNComponent? component = null)
Log.Debug($"Sleeping {ToPrettyString(uid)}");
RemComp(uid);
- SetPaused(uid, true);
+ if (!preventPause && !_mind.TryGetMind(uid, out _, out _))
+ {
+ SetPaused(uid, true);
+ }
}
///
diff --git a/Content.Server/Power/Generation/GasGenerator/GasGeneratorComponent.cs b/Content.Server/Power/Generation/GasGenerator/GasGeneratorComponent.cs
index f2c31323bf7..4e7b4716146 100644
--- a/Content.Server/Power/Generation/GasGenerator/GasGeneratorComponent.cs
+++ b/Content.Server/Power/Generation/GasGenerator/GasGeneratorComponent.cs
@@ -4,21 +4,6 @@
namespace Content.Server.Power.Generation.GasGenerator;
-///
-/// Component for a gas generator that consumes fuel mixtures and produces power based on composition and temperature.
-///
-///
-///
-/// The gas generator works by consuming a fuel gas mixture (typically methane-rich) through an inlet.
-/// Power output is determined by two primary factors:
-/// 1. Fuel composition (lean/rich ratio): The optimal mixture ratio affects efficiency
-/// 2. Fuel temperature: Hotter fuel produces more power and affects consumption rate
-///
-///
-/// The generator maintains efficiency metrics and adjusts consumption based on these factors.
-/// A PowerSupplierComponent must be present on the same entity for power generation.
-///
-///
[RegisterComponent]
public sealed partial class GasGeneratorComponent : Component
{
@@ -37,26 +22,9 @@ public sealed partial class GasGeneratorComponent : Component
/// Used as reference point for efficiency calculations.
///
[DataField("optimalInputRatio")]
- public float OptimalInputRatio = 0.8f; // 80% primary, 20% secondary is optimal
+ public float OptimalInputRatio = 0.2f; // 20% primary, 80% secondary is optimal
- ///
- /// Minimum temperature (in Kelvin) for efficient fuel burning.
- /// Below this, efficiency drops significantly.
- ///
- [DataField("minimumTemperature")]
- public float MinimumTemperature = 373.15f; // 100°C
-
- ///
- /// Optimal temperature (in Kelvin) for peak fuel efficiency.
- ///
- [DataField("optimalTemperature")]
- public float OptimalTemperature = 573.15f; // 300°C
-
- ///
- /// Maximum useful temperature (in Kelvin) before efficiency drops due to heat dissipation.
- ///
- [DataField("maximumTemperature")]
- public float MaximumTemperature = 1273.15f; // 1000°C
+ // Temperature-based fields removed: temperature no longer affects generation.
///
/// Primary fuel gas (e.g., Methane).
@@ -117,6 +85,13 @@ public sealed partial class GasGeneratorComponent : Component
[DataField("maxInletFlowRate")]
public float MaxInletFlowRate = 2.0f; // moles/sec
+ ///
+ /// Volume (liters) applied to the inlet pipe node for this generator.
+ /// Exposed to YAML so different generator prototypes can specify inlet volumes.
+ ///
+ [DataField("inletNodeVolume")]
+ public float InletNodeVolume = 1.0f; // liters
+
///
/// Maximum possible fuel consumption rate (in moles per second at full efficiency).
/// Adjusted by efficiency modifiers.
@@ -124,6 +99,13 @@ public sealed partial class GasGeneratorComponent : Component
[DataField("maxFuelConsumptionRate")]
public float MaxFuelConsumptionRate = 10.0f; // moles/sec
+ ///
+ /// Base fraction of available primary fuel consumed per update tick (0-1).
+ /// This used to be hardcoded in the system as `0.05f`.
+ ///
+ [DataField("baseConsumptionFraction")]
+ public float BaseConsumptionFraction = 0.05f;
+
///
/// Maximum power output (in watts).
/// Mapped from YAML field `maxOutput`.
@@ -131,6 +113,19 @@ public sealed partial class GasGeneratorComponent : Component
[DataField("maxOutput")]
public float MaxPowerOutput = 50000f; // 50 kW
+ ///
+ /// Multiplier applied to effective power-per-mole to scale power output
+ /// relative to mole consumption. This replaces the hardcoded `3.0f`.
+ ///
+ [DataField("powerScaleMultiplier")]
+ public float PowerScaleMultiplier = 3.0f;
+
+ ///
+ /// Additional flat power boost applied multiplicatively (replaces hardcoded `1.2f`).
+ ///
+ [DataField("powerExtraBoost")]
+ public float PowerExtraBoost = 1.2f;
+
///
///
/// Simple fuel efficiency scalar (0-1).
@@ -146,6 +141,14 @@ public sealed partial class GasGeneratorComponent : Component
[DataField("fuelSlipRate")]
public float FuelSlipRate = 0.1f;
+ ///
+ /// Combustion energy released per mole of primary fuel consumed (in Joules).
+ /// This determines exhaust temperature. Default is FireMethaneEnergyReleased (560 kJ/mol).
+ /// Can be customized per generator type in YAML for different fuel reactions.
+ ///
+ [DataField("combustionEnergyPerMole")]
+ public float CombustionEnergyPerMole = 560000f; // 560 kJ/mol (methane default)
+
///
/// Molar ratio of WasteGas1 produced per mole of primary fuel consumed.
/// For CH4 combustion: H2O is produced at 2:1 ratio.
diff --git a/Content.Server/Power/Generation/GasGenerator/GasGeneratorSystem.cs b/Content.Server/Power/Generation/GasGenerator/GasGeneratorSystem.cs
index 3b371fbdb7f..933454eb637 100644
--- a/Content.Server/Power/Generation/GasGenerator/GasGeneratorSystem.cs
+++ b/Content.Server/Power/Generation/GasGenerator/GasGeneratorSystem.cs
@@ -55,6 +55,15 @@ private void OnComponentInit(EntityUid uid, GasGeneratorComponent component, Com
{
// Initialize internal atmosphere with specified volume
component.InternalAtmosphere = new GasMixture(component.InternalVolume);
+
+ // If the entity has a node container with an inlet pipe node, apply configured inlet volume
+ if (_nodeContainerQuery.TryGetComponent(uid, out var nodeContainer))
+ {
+ if (nodeContainer.Nodes.TryGetValue(GasGeneratorComponent.NodeNameInlet, out var inletNode) && inletNode is PipeNode pipe)
+ {
+ pipe.Volume = component.InletNodeVolume;
+ }
+ }
}
private void GeneratorExamined(EntityUid uid, GasGeneratorComponent component, ExaminedEvent args)
@@ -124,22 +133,40 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
}
// STEP 2: Check if we have enough fuel in internal chamber for combustion
- var totalFuel = internalMixture.GetMoles(component.InputGas1) + internalMixture.GetMoles(component.InputGas2);
+ // Generator should only work when internal chamber is reasonably full (not just trace amounts)
+ var availablePrimary = internalMixture.GetMoles(component.InputGas1);
+ var availableSecondary = internalMixture.GetMoles(component.InputGas2);
+
+ // Don't activate if either input gas is missing
+ if (availablePrimary <= 0 || availableSecondary <= 0)
+ {
+ supplier.MaxSupply = 0;
+ component.CurrentConsumptionRate = 0;
+ component.CurrentEfficiency = 0;
+ _ambientSound.SetAmbience(uid, false);
+ _appearance.SetData(uid, PowerDeviceVisuals.Powered, false);
+ return;
+ }
+
+ // Ensure we have minimum amounts of BOTH gases based on their optimal ratio
+ // Use 10% of capacity instead of 50% so generator can continue operating through combustion cycles
+ var minRequiredMoles = (component.MaxInternalPressure * component.InternalVolume) / (Atmospherics.R * internalMixture.Temperature) * 0.1f; // At least 10% capacity
+ var minPrimary = minRequiredMoles * component.OptimalInputRatio;
+ var minSecondary = minRequiredMoles * (1.0f - component.OptimalInputRatio);
- if (totalFuel < 0.5f)
+ if (availablePrimary < minPrimary || availableSecondary < minSecondary)
{
supplier.MaxSupply = 0;
component.CurrentConsumptionRate = 0;
+ component.CurrentEfficiency = 0;
_ambientSound.SetAmbience(uid, false);
_appearance.SetData(uid, PowerDeviceVisuals.Powered, false);
return;
}
// STEP 3: Consume from internal chamber for combustion
- var availablePrimary = internalMixture.GetMoles(component.InputGas1);
- var availableSecondary = internalMixture.GetMoles(component.InputGas2);
- // Don't consume anything if either input is empty
+ // Additional safety check (redundant but explicit)
if (availablePrimary <= 0 || availableSecondary <= 0)
{
component.CurrentConsumptionRate = 0;
@@ -180,8 +207,8 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
consumptionMultiplier = 1.0f - (1.0f - normalizedRatio) * 0.25f; // Down to 0.75x slower when lean
// Consume gas based on mixture ratio
- var consumed = availablePrimary * 0.05f * consumptionMultiplier; // Base rate
- var secondaryConsumed = availableSecondary * 0.05f * consumptionMultiplier;
+ var consumed = availablePrimary * component.BaseConsumptionFraction * consumptionMultiplier; // Base rate from YAML
+ var secondaryConsumed = availableSecondary * component.BaseConsumptionFraction * consumptionMultiplier;
// Clamp to available amounts
consumed = Math.Min(consumed, availablePrimary);
@@ -190,9 +217,9 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
internalMixture.AdjustMoles(component.InputGas1, -consumed);
internalMixture.AdjustMoles(component.InputGas2, -secondaryConsumed);
- // Calculate efficiency based on composition and temperature (after collecting incompatible gases but before exhaust)
+ // Calculate efficiency based on composition only
var (compositionEfficiency, powerMultiplier, fuelMultiplier) = CalculateCompositionEfficiency(internalMixture, component);
- var temperatureEfficiency = CalculateTemperatureEfficiency(internalMixture, component);
+ var temperatureEfficiency = 1.0f;
// Apply composition tradeoffs to power and consumption
component.CurrentEfficiency = MathHelper.Clamp(
@@ -201,7 +228,8 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
// Power scales directly with consumption: power per mole of fuel consumed
var powerPerMole = component.MaxPowerOutput / component.MaxFuelConsumptionRate;
- var power = consumed * powerPerMole * component.CurrentEfficiency * powerMultiplier * 1.2f; // 20% power boost
+ // Apply configurable scaling and boosts (previously hardcoded multipliers)
+ var power = consumed * powerPerMole * component.PowerScaleMultiplier * component.CurrentEfficiency * powerMultiplier * component.PowerExtraBoost;
// Clamp power to max output
power = Math.Min(power, component.MaxPowerOutput);
@@ -216,11 +244,14 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
var richness = (newPrimaryMoles / (newPrimaryMoles + newSecondaryMoles)) - component.OptimalInputRatio;
var exhaustTempAdjust = -richness * 200f; // ±200K based on richness
- var exhaustMixture = new GasMixture { Temperature = MathF.Max(internalMixture.Temperature + exhaustTempAdjust, Atmospherics.TCMB) };
+ var exhaustMixture = new GasMixture { Temperature = Atmospherics.T20C };
// Only generate exhaust if fuel was actually consumed
if (consumed > 0.01f)
{
+ // Calculate combustion heat released using configured energy per mole
+ var combustionEnergy = component.CombustionEnergyPerMole * consumed;
+
// Generate exhaust based on mixture leanness/richness and actual consumption
// Rich mixture (excess fuel, normalizedRatio > 1.0): Incomplete combustion
if (normalizedRatio > 1.0f)
@@ -268,6 +299,14 @@ private void GeneratorUpdate(EntityUid uid, GasGeneratorComponent component, ref
exhaustMixture.AdjustMoles(incompatibleGas, moles);
}
+ // Apply combustion heat to exhaust mixture (heat exhaust like a real burn reaction)
+ var exhaustHeatCapacity = _atmosphere.GetHeatCapacity(exhaustMixture, true);
+ if (exhaustHeatCapacity > Atmospherics.MinimumHeatCapacity && combustionEnergy > 0)
+ {
+ // Heat the exhaust to combustion temperature
+ exhaustMixture.Temperature = (exhaustMixture.Temperature * exhaustHeatCapacity + combustionEnergy) / exhaustHeatCapacity;
+ }
+
// Output exhaust ONLY to the tile atmosphere, never to pipe network
// Use GetTileMixture to output to the grid tile, not the entity's container
var tileMixture = _atmosphere.GetTileMixture(uid, excite: true);
@@ -339,7 +378,7 @@ private bool TryGetPipes(EntityUid uid, out PipeNode? inlet)
// Base efficiency: Gaussian penalty for deviation
var deviation = Math.Abs(richness);
var baseEfficiency = MathF.Exp(-(deviation * deviation) / (2 * 0.15f * 0.15f));
- baseEfficiency = MathHelper.Clamp(baseEfficiency, 0.4f, 1.0f);
+ baseEfficiency = MathHelper.Clamp(baseEfficiency, 0.0f, 1.0f); // Allow efficiency to drop to 0% for very poor mixtures
// Rich mixture (excess fuel): More power, worse fuel economy
// Lean mixture (excess oxidizer): Less power, better fuel economy
@@ -368,42 +407,4 @@ private bool TryGetPipes(EntityUid uid, out PipeNode? inlet)
return (baseEfficiency, powerMultiplier, fuelMultiplier);
}
-
- ///
- /// Calculate efficiency multiplier based on fuel temperature.
- /// Efficiency rises from minimum temp, peaks at optimal, then slightly degrades at extreme temps.
- ///
- private float CalculateTemperatureEfficiency(GasMixture mixture, GasGeneratorComponent component)
- {
- var temp = mixture.Temperature;
-
- // Below minimum temperature: poor efficiency
- if (temp < component.MinimumTemperature)
- {
- var cold = component.MinimumTemperature - temp;
- var coldPenalty = MathF.Pow(0.5f, cold / 100); // Halve efficiency per 100K below minimum
- return MathHelper.Clamp(coldPenalty, 0.1f, 1.0f);
- }
-
- // Between minimum and optimal: efficiency improves linearly
- if (temp < component.OptimalTemperature)
- {
- var warmFactor = (temp - component.MinimumTemperature) /
- (component.OptimalTemperature - component.MinimumTemperature);
- return MathHelper.Clamp(0.5f + (0.5f * warmFactor), 0.5f, 1.0f);
- }
-
- // Between optimal and maximum: slight degradation due to heat loss
- if (temp < component.MaximumTemperature)
- {
- var hotFactor = (temp - component.OptimalTemperature) /
- (component.MaximumTemperature - component.OptimalTemperature);
- var degradation = MathF.Pow(hotFactor, 2) * 0.2f; // Up to 20% penalty
- return MathHelper.Clamp(1.0f - degradation, 0.8f, 1.0f);
- }
-
- // Above maximum temperature: severe degradation
- var extreme = temp - component.MaximumTemperature;
- var extremePenalty = MathF.Pow(0.5f, extreme / 500); // Halve per 500K above maximum
- return MathHelper.Clamp(extremePenalty * 0.8f, 0.2f, 1.0f);
- }}
+}
diff --git a/Content.Server/Shuttles/Components/IFFConsoleComponent.cs b/Content.Server/Shuttles/Components/IFFConsoleComponent.cs
index 562bec51c26..ead5eae85c5 100644
--- a/Content.Server/Shuttles/Components/IFFConsoleComponent.cs
+++ b/Content.Server/Shuttles/Components/IFFConsoleComponent.cs
@@ -11,4 +11,16 @@ public sealed partial class IFFConsoleComponent : Component
///
[ViewVariables(VVAccess.ReadWrite), DataField("allowedFlags")]
public IFFFlags AllowedFlags = IFFFlags.HideLabel;
+
+ ///
+ /// Whether this console can edit the grid IFF signature color.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("allowColorChange")]
+ public bool AllowColorChange = true;
+
+ ///
+ /// Whether this console can edit the grid IFF designation.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("allowDesignationChange")]
+ public bool AllowDesignationChange = true;
}
diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs
index 5e746fd4953..966d3770365 100644
--- a/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs
+++ b/Content.Server/Shuttles/Systems/ShuttleSystem.IFF.cs
@@ -3,6 +3,7 @@
using Content.Shared.Shuttles.BUIStates;
using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Events;
+using Robust.Shared.Maths;
namespace Content.Server.Shuttles.Systems;
@@ -13,6 +14,8 @@ private void InitializeIFF()
SubscribeLocalEvent(OnIFFConsoleAnchor);
SubscribeLocalEvent(OnIFFShow);
SubscribeLocalEvent(OnIFFShowVessel);
+ SubscribeLocalEvent(OnIFFSetColor);
+ SubscribeLocalEvent(OnIFFSetDesignation);
SubscribeLocalEvent(OnGridSplit);
}
@@ -71,6 +74,41 @@ private void OnIFFShowVessel(EntityUid uid, IFFConsoleComponent component, IFFSh
}
}
+ private void OnIFFSetColor(EntityUid uid, IFFConsoleComponent component, IFFSetColorMessage args)
+ {
+ if (!component.AllowColorChange ||
+ !TryComp(uid, out TransformComponent? xform) ||
+ xform.GridUid is not { } gridUid)
+ {
+ return;
+ }
+
+ var parsed = Color.TryFromHex(args.ColorHex);
+ if (!parsed.HasValue)
+ return;
+
+ var normalized = IFFComponent.NormalizeSignatureColor(parsed.Value);
+ SetIFFColor(gridUid, normalized);
+ }
+
+ private void OnIFFSetDesignation(EntityUid uid, IFFConsoleComponent component, IFFSetDesignationMessage args)
+ {
+ if (!component.AllowDesignationChange ||
+ !TryComp(uid, out TransformComponent? xform) ||
+ xform.GridUid is not { } gridUid)
+ {
+ return;
+ }
+
+ var iff = EnsureComp(gridUid);
+ if (iff.Designation == args.Designation)
+ return;
+
+ iff.Designation = args.Designation;
+ Dirty(gridUid, iff);
+ UpdateIFFInterfaces(gridUid, iff);
+ }
+
private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, ref AnchorStateChangedEvent args)
{
// If we anchor / re-anchor then make sure flags up to date.
@@ -82,6 +120,10 @@ private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, re
{
AllowedFlags = component.AllowedFlags,
Flags = IFFFlags.None,
+ SignatureColor = IFFComponent.IFFColor,
+ ColorEditable = component.AllowColorChange,
+ Designation = IFFDesignation.Ship,
+ DesignationEditable = component.AllowDesignationChange,
});
}
else
@@ -90,6 +132,10 @@ private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, re
{
AllowedFlags = component.AllowedFlags,
Flags = iff.Flags,
+ SignatureColor = iff.Color,
+ ColorEditable = component.AllowColorChange,
+ Designation = iff.Designation,
+ DesignationEditable = component.AllowDesignationChange,
});
}
}
@@ -108,6 +154,10 @@ protected override void UpdateIFFInterfaces(EntityUid gridUid, IFFComponent comp
{
AllowedFlags = comp.AllowedFlags,
Flags = component.Flags,
+ SignatureColor = component.Color,
+ ColorEditable = comp.AllowColorChange,
+ Designation = component.Designation,
+ DesignationEditable = comp.AllowDesignationChange,
});
}
}
diff --git a/Content.Server/Solar/Components/SolarLocationComponent.cs b/Content.Server/Solar/Components/SolarLocationComponent.cs
index b262feca550..e98a7eb664a 100644
--- a/Content.Server/Solar/Components/SolarLocationComponent.cs
+++ b/Content.Server/Solar/Components/SolarLocationComponent.cs
@@ -7,6 +7,13 @@ namespace Content.Server.Solar.Components
[Access(typeof(SolarPositioningSystem))]
public sealed partial class SolarLocationComponent : Component
{
+ ///
+ /// This is set to true when the SolarLocationComponent's angle & vel
+ /// are randomized, and is used to prevent resetting these when loading a save
+ ///
+ [DataField]
+ public bool WasInitialized = false;
+
///
/// The current sun angle.
///
diff --git a/Content.Server/Solar/EntitySystems/SolarPositioningSystem.cs b/Content.Server/Solar/EntitySystems/SolarPositioningSystem.cs
index 4f08ee41b58..3213f72f83a 100644
--- a/Content.Server/Solar/EntitySystems/SolarPositioningSystem.cs
+++ b/Content.Server/Solar/EntitySystems/SolarPositioningSystem.cs
@@ -44,9 +44,14 @@ private void OnMapCreated(Entity ent, ref MapCreatedEvent args)
private void RandomizeSun(EntityUid eid, SolarLocationComponent solarLocation)
{
+ // If the sun has already been randomized
+ if (solarLocation.WasInitialized)
+ return;
+
// Initialize the sun to something random
solarLocation.TowardsSun = MathHelper.TwoPi * _robustRandom.NextDouble();
solarLocation.SunAngularVelocity = Angle.FromDegrees(0.1 + ((_robustRandom.NextDouble() - 0.5) * 0.05));
+ solarLocation.WasInitialized = true;
}
public SolarLocationComponent? GetSolarLocation(EntityUid gridUid)
@@ -57,4 +62,4 @@ private void RandomizeSun(EntityUid eid, SolarLocationComponent solarLocation)
return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/Content.Shared/Access/Components/IdCardConsoleComponent.cs b/Content.Shared/Access/Components/IdCardConsoleComponent.cs
index 71c20bb944b..76d7e4ba157 100644
--- a/Content.Shared/Access/Components/IdCardConsoleComponent.cs
+++ b/Content.Shared/Access/Components/IdCardConsoleComponent.cs
@@ -48,6 +48,57 @@ public sealed class AccountModResetSpending : BoundUserInterfaceMessage
{
}
+ [Serializable, NetSerializable]
+ public sealed class PrintGeneralRecord : BoundUserInterfaceMessage
+ {
+ }
+
+ [Serializable, NetSerializable]
+ public sealed class SaveGeneralRecord : BoundUserInterfaceMessage
+ {
+ public readonly string Content;
+
+ public SaveGeneralRecord(string content)
+ {
+ Content = content;
+ }
+ }
+
+
+ [Serializable, NetSerializable]
+ public sealed class PrintCriminalRecord : BoundUserInterfaceMessage
+ {
+ }
+
+ [Serializable, NetSerializable]
+ public sealed class SaveCriminalRecord : BoundUserInterfaceMessage
+ {
+ public readonly string Content;
+
+ public SaveCriminalRecord(string content)
+ {
+ Content = content;
+ }
+ }
+
+
+ [Serializable, NetSerializable]
+ public sealed class PrintMedicalRecord : BoundUserInterfaceMessage
+ {
+ }
+
+ [Serializable, NetSerializable]
+ public sealed class SaveMedicalRecord : BoundUserInterfaceMessage
+ {
+ public readonly string Content;
+
+ public SaveMedicalRecord(string content)
+ {
+ Content = content;
+ }
+ }
+
+
[Serializable, NetSerializable]
public sealed class SearchRecord : BoundUserInterfaceMessage
{
@@ -124,6 +175,7 @@ public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceSta
public readonly Dictionary? AllAssignments;
public readonly bool IsOwner = false;
public readonly int SpentFunds;
+ public readonly CrewRecord? CrewRecord;
public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
bool isPrivilegedIdAuthorized,
@@ -136,7 +188,8 @@ public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
CrewAssignment? privCrewAssignment,
Dictionary? allAssignments,
bool isOwner,
- int spentFunds)
+ int spentFunds,
+ CrewRecord? crewRecord)
{
IsPrivilegedIdPresent = isPrivilegedIdPresent;
IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized;
@@ -150,6 +203,8 @@ public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
AllAssignments = allAssignments;
this.IsOwner = isOwner;
SpentFunds = spentFunds;
+ CrewRecord = crewRecord;
+
}
}
diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs
index 503d8205cf2..02144448993 100644
--- a/Content.Shared/Access/Systems/AccessReaderSystem.cs
+++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs
@@ -272,6 +272,7 @@ public bool IsAllowed(EntityUid user, EntityUid target, AccessReaderComponent? r
if (readerTrue != null)
{
reader = readerTrue.Value.Comp;
+ target = readerTrue.Value.Owner;
}
if (!reader.Enabled)
return true;
diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs
index dc7f5f61517..b87c70fc86d 100644
--- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs
+++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs
@@ -92,6 +92,15 @@ private void OnBodyInit(Entity ent, ref ComponentInit args)
{
// Setup the initial container.
ent.Comp.RootContainer = Containers.EnsureContainer(ent, BodyRootContainerId);
+ if (ent.Comp.Prototype is null)
+ return;
+
+ var prototype = Prototypes.Index(ent.Comp.Prototype.Value);
+ if (ent.Comp.RootContainer.ContainedEntity == null) return;
+ var rootPart = Comp(ent.Comp.RootContainer.ContainedEntity.Value);
+ var protoRoot = prototype.Slots[prototype.Root];
+ // Setup the rest of the body entities.
+ SetupOrgans((ent.Comp.RootContainer.ContainedEntity.Value, rootPart), protoRoot.Organs);
}
private void OnBodyMapInit(Entity ent, ref MapInitEvent args)
@@ -190,6 +199,16 @@ private void SetupOrgans(Entity ent, Dictionary> Objectives;
public readonly string? Briefing;
+ public readonly string? DetailExaminable;
- public CharacterInfoEvent(NetEntity netEntity, string jobTitle, Dictionary> objectives, string? briefing)
+ public CharacterInfoEvent(NetEntity netEntity, string jobTitle, string? faction, string bankBal, Dictionary> objectives, string? briefing, string? detailExaminable)
{
NetEntity = netEntity;
JobTitle = jobTitle;
+ Faction = faction;
+ BankBal = bankBal;
Objectives = objectives;
Briefing = briefing;
+ DetailExaminable = detailExaminable;
+ }
+}
+
+[Serializable, NetSerializable]
+public sealed class UpdateDetailExaminableEvent : EntityEventArgs
+{
+ public readonly string Content;
+
+ public UpdateDetailExaminableEvent(string content)
+ {
+ Content = content;
}
}
diff --git a/Content.Shared/CrewAssignments/Components/CrewAssignmentsComponent.cs b/Content.Shared/CrewAssignments/Components/CrewAssignmentsComponent.cs
index b33faf352c7..1a3ff505a2d 100644
--- a/Content.Shared/CrewAssignments/Components/CrewAssignmentsComponent.cs
+++ b/Content.Shared/CrewAssignments/Components/CrewAssignmentsComponent.cs
@@ -58,12 +58,13 @@ public partial class CrewAssignment
public List AccessIDs = new();
[DataField("_canAssign")]
public bool CanAssign = false;
- [DataField("_canSpend")]
- public bool CanSpend = false;
[DataField("_canClaim")]
public bool CanClaim = false;
[DataField("_spendingLimit")]
public int SpendingLimit = 0;
+ [DataField("_canEditGeneralRecord")]
+ public bool CanEditGeneralRecord = false;
+
public CrewAssignment(int id, string name, int wage, int clevel)
{
diff --git a/Content.Shared/CrewAssignments/Events/StationModificationCoreFunctions.cs b/Content.Shared/CrewAssignments/Events/StationModificationCoreFunctions.cs
index 0d56152c445..9e78138a5db 100644
--- a/Content.Shared/CrewAssignments/Events/StationModificationCoreFunctions.cs
+++ b/Content.Shared/CrewAssignments/Events/StationModificationCoreFunctions.cs
@@ -18,6 +18,19 @@ public StationModificationToggleSpend(int id)
}
}
+
+[Serializable, NetSerializable]
+public sealed class StationModificationToggleGenRec : BoundUserInterfaceMessage
+{
+ public int AccessID;
+
+ public StationModificationToggleGenRec(int id)
+ {
+ AccessID = id;
+ }
+}
+
+
[Serializable, NetSerializable]
public sealed class StationModificationToggleClaim : BoundUserInterfaceMessage
{
diff --git a/Content.Shared/CrewRecords/Components/CrewRecordsComponent.cs b/Content.Shared/CrewRecords/Components/CrewRecordsComponent.cs
index d353c9e8a78..b16e904f14a 100644
--- a/Content.Shared/CrewRecords/Components/CrewRecordsComponent.cs
+++ b/Content.Shared/CrewRecords/Components/CrewRecordsComponent.cs
@@ -54,7 +54,12 @@ public partial class CrewRecord
public int AssignmentID = 0;
[DataField("_spent")]
public int Spent = 0;
-
+ [DataField("_generalRecord")]
+ public string GeneralRecord = "";
+ [DataField("_criminalRecord")]
+ public string CriminalRecord = "";
+ [DataField("_medicalRecord")]
+ public string MedicalRecord = "";
public CrewRecord(string name)
{
Name = name;
diff --git a/Content.Shared/DeviceLinking/SignalSwitchVisuals.cs b/Content.Shared/DeviceLinking/SignalSwitchVisuals.cs
new file mode 100644
index 00000000000..2249eff31f4
--- /dev/null
+++ b/Content.Shared/DeviceLinking/SignalSwitchVisuals.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.DeviceLinking;
+
+[Serializable, NetSerializable]
+public enum SignalSwitchVisuals : byte
+{
+ State
+}
diff --git a/Content.Shared/Doors/Components/DoorComponent.cs b/Content.Shared/Doors/Components/DoorComponent.cs
index e106cce2356..e66dff2611d 100644
--- a/Content.Shared/Doors/Components/DoorComponent.cs
+++ b/Content.Shared/Doors/Components/DoorComponent.cs
@@ -25,10 +25,6 @@ public sealed partial class DoorComponent : Component
[DataField, AutoNetworkedField]
[Access(typeof(SharedDoorSystem))]
public DoorState State = DoorState.Closed;
- // There isn't an easy safe way to shut and bolt the door in one go.
- // Collisions and shit make it unrealistic, unlike bolting open, which is infallible.
- // Our best alternative is to just have the door "want" to be bolted when it's closed.
- public bool BoltingOnShut = false;
#region Timing
// if you want do dynamically adjust these times, you need to add networking for them. So for now, they are all
@@ -311,8 +307,7 @@ public enum DoorState : byte
Opening,
Welded,
Denying,
- Emagging,
- boltingOpen
+ Emagging
}
[Serializable, NetSerializable]
diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs
index 37e012f5779..310ea70bdc8 100644
--- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs
+++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs
@@ -179,7 +179,7 @@ public bool SetState(EntityUid uid, DoorState state, DoorComponent? door = null)
door.NextStateChange = GameTiming.CurTime + door.EmagDuration;
break;
- case DoorState.Open or DoorState.boltingOpen:
+ case DoorState.Open:
door.Partial = false;
if (door.NextStateChange == null)
_activeDoors.Remove((uid, door));
@@ -321,27 +321,6 @@ public bool TryOpen(EntityUid uid, DoorComponent? door = null, EntityUid? user =
return true;
}
- public bool DirectDriveOpen(EntityUid uid, DoorComponent? door = null, EntityUid? user = null, bool predicted = false, bool quiet = false)
- {
- if (!Resolve(uid, ref door))
- return false;
-
- if (TryComp(uid, out var doorBoltComponent))
- {
- SetBoltsDown((uid, doorBoltComponent), false, null, true);
- }
-
- if (!CanOpen(uid, door, user, quiet))
- return false;
-
- if (!SetState(uid, DoorState.boltingOpen, door))
- return false;
-
- StartOpening(uid, door, user, predicted);
-
- return true;
- }
-
public bool CanOpen(EntityUid uid, DoorComponent? door = null, EntityUid? user = null, bool quiet = true)
{
if (!Resolve(uid, ref door))
@@ -388,7 +367,7 @@ public void StartOpening(EntityUid uid, DoorComponent? door = null, EntityUid? u
else if (_net.IsServer)
Audio.PlayPvs(door.OpenSound, uid, AudioParams.Default.WithVolume(-5));
- if ((lastState == DoorState.Emagging || lastState == DoorState.boltingOpen) && TryComp(uid, out var doorBoltComponent))
+ if (lastState == DoorState.Emagging && TryComp(uid, out var doorBoltComponent))
SetBoltsDown((uid, doorBoltComponent), true, user, true);
}
@@ -441,26 +420,6 @@ public bool TryClose(EntityUid uid, DoorComponent? door = null, EntityUid? user
return true;
}
- public bool DirectDriveClose(EntityUid uid, DoorComponent? door = null, EntityUid? user = null, bool predicted = false)
- {
- if (!Resolve(uid, ref door))
- return false;
-
- if (TryComp(uid, out var doorBoltComponent))
- {
- SetBoltsDown((uid, doorBoltComponent), false, null, true);
- }
-
- door.BoltingOnShut = true;
- Dirty(uid, door);
-
- if (!CanClose(uid, door, user))
- return false;
-
- StartClosing(uid, door, user, predicted);
- return true;
- }
-
///
/// Immediately start closing a door
///
@@ -524,11 +483,6 @@ public bool OnPartialClose(EntityUid uid, DoorComponent? door = null, PhysicsCom
door.Partial = true;
SetCollidable(uid, true, door, physics);
door.NextStateChange = GameTiming.CurTime + door.CloseTimeTwo;
- if (door.BoltingOnShut && TryComp(uid, out var doorBoltComponent))
- {
- door.BoltingOnShut = false;
- SetBoltsDown((uid, doorBoltComponent), true, null, true);
- }
Dirty(uid, door);
_activeDoors.Add((uid, door));
diff --git a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs
index 7c2a3532fd4..f2de7fdf6a0 100644
--- a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs
+++ b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs
@@ -74,6 +74,8 @@ private void OnCollide(EntityUid uid, CollideMaterialReclaimerComponent componen
{
if (args.OurFixtureId != component.FixtureId)
return;
+ if (TerminatingOrDeleted(args.OtherEntity) || EntityManager.IsQueuedForDeletion(args.OtherEntity))
+ return;
if (!TryComp(uid, out var reclaimer))
return;
TryStartProcessItem(uid, args.OtherEntity, reclaimer);
diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs
index 2fc03dd997e..c34186575d6 100644
--- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs
+++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs
@@ -2,6 +2,7 @@
using Content.Shared.Interaction;
using Content.Shared.Interaction.Components;
using Content.Shared.Stacks;
+using Content.Shared.Storage.Components;
using Content.Shared.Whitelist;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
@@ -35,6 +36,8 @@ public override void Initialize()
SubscribeLocalEvent(OnMapInit);
SubscribeLocalEvent(OnInteractUsing);
SubscribeLocalEvent(OnDatabaseModified);
+ SubscribeLocalEvent(OnGetDumpableVerb);
+ SubscribeLocalEvent(OnDump);
}
public override void Update(float frameTime)
@@ -410,6 +413,28 @@ private void OnDatabaseModified(Entity ent, ref Techno
UpdateMaterialWhitelist(ent);
}
+ private void OnGetDumpableVerb(Entity ent, ref GetDumpableVerbEvent args)
+ {
+ if (!HasComp(ent))
+ return;
+
+ args.Verb = Loc.GetString("dump-material-storage-verb-name", ("storage", ent));
+ }
+
+ private void OnDump(Entity ent, ref DumpEvent args)
+ {
+ if (args.Handled || !HasComp(ent))
+ return;
+
+ args.Handled = true;
+ args.PlaySound = true;
+
+ foreach (var entity in args.DumpQueue)
+ {
+ TryInsertMaterialEntity(args.User, entity, ent, ent.Comp);
+ }
+ }
+
public int GetSheetVolume(MaterialPrototype material)
{
if (material.StackEntity == null)
diff --git a/Content.Shared/RCD/Components/RCDComponent.cs b/Content.Shared/RCD/Components/RCDComponent.cs
index 1ea31665310..da8ec68b4c4 100644
--- a/Content.Shared/RCD/Components/RCDComponent.cs
+++ b/Content.Shared/RCD/Components/RCDComponent.cs
@@ -57,4 +57,7 @@ public Direction ConstructionDirection
///
[ViewVariables(VVAccess.ReadOnly)]
public Transform ConstructionTransform { get; private set; }
+
+ [ViewVariables(VVAccess.ReadWrite), DataField("chargeUse")]
+ public float ChargeUse = 5f;
}
diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs
index 504576216ac..3c550529670 100644
--- a/Content.Shared/RCD/Systems/RCDSystem.cs
+++ b/Content.Shared/RCD/Systems/RCDSystem.cs
@@ -10,6 +10,7 @@
using Content.Shared.Physics;
using Content.Shared.Popups;
using Content.Shared.RCD.Components;
+using Content.Shared.PowerCell;
using Content.Shared.Tag;
using Content.Shared.Tiles;
using Robust.Shared.Audio.Systems;
@@ -33,6 +34,7 @@ public sealed class RCDSystem : EntitySystem
[Dependency] private readonly FloorTileSystem _floors = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedChargesSystem _sharedCharges = default!;
+ [Dependency] private readonly PowerCellSystem _powerCell = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
@@ -291,7 +293,18 @@ private void OnDoAfter(EntityUid uid, RCDComponent component, RCDDoAfterEvent ar
// Play audio and consume charges
_audio.PlayPredicted(component.SuccessSound, uid, args.User);
- _sharedCharges.AddCharges(uid, -args.Cost);
+ if (args.Cost > 0)
+ {
+ _sharedCharges.AddCharges(uid, -args.Cost);
+ }
+ else if (args.Cost == 0)
+ {
+ if (!_powerCell.TryUseCharge(uid, component.ChargeUse))
+ {
+ return;
+ }
+ }
+
}
private void OnRCDconstructionGhostRotationEvent(RCDConstructionGhostRotationEvent ev, EntitySessionEventArgs session)
@@ -321,24 +334,39 @@ public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, Enti
{
var prototype = _protoManager.Index(component.ProtoId);
- // Check that the RCD has enough ammo to get the job done
- var charges = _sharedCharges.GetCurrentCharges(uid);
-
// Both of these were messages were suppose to be predicted, but HasInsufficientCharges wasn't being checked on the client for some reason?
- if (charges == 0)
+ if (prototype.Cost > 0)
{
- if (popMsgs)
- _popup.PopupClient(Loc.GetString("rcd-component-no-ammo-message"), uid, user);
- return false;
- }
+ // Check that the RCD has enough ammo to get the job done
+ var charges = _sharedCharges.GetCurrentCharges(uid);
+
+ if (charges == 0)
+ {
+ if (popMsgs)
+ _popup.PopupClient(Loc.GetString("rcd-component-no-ammo-message"), uid, user);
- if (prototype.Cost > charges)
+ return false;
+ }
+
+ if (prototype.Cost > charges)
+ {
+ if (popMsgs)
+ _popup.PopupClient(Loc.GetString("rcd-component-insufficient-ammo-message"), uid, user);
+
+ return false;
+ }}
+ if (prototype.Cost == 0)
{
- if (popMsgs)
- _popup.PopupClient(Loc.GetString("rcd-component-insufficient-ammo-message"), uid, user);
+ // Check that the HCD has enough energy in the cell to get the job done
+ var charges = _powerCell.GetRemainingUses(uid, component.ChargeUse);
+ if (!_powerCell.HasCharge(uid, component.ChargeUse))
+ {
+ if (popMsgs)
+ _popup.PopupClient(Loc.GetString("rcd-component-insufficient-ammo-message"), uid, user);
- return false;
+ return false;
+ }
}
// Exit if the target / target location is obstructed
diff --git a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs
index 3950b1b72bf..f25b53d71ff 100644
--- a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs
+++ b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs
@@ -42,62 +42,68 @@ public ISalvageMagnetOffering GetSalvageOffering(int seed)
{
var rand = new System.Random(seed);
- var type = SharedRandomExtensions.Pick(_offeringWeights, rand);
- switch (type)
+ var id = rand.Pick(_debrisConfigs);
+ return new DebrisOffering
{
- case AsteroidOffering:
- var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)];
- var configProto =_proto.Index(configId);
- var layers = new Dictionary();
+ Id = id
+ };
- var config = new DungeonConfig
- {
- Layers = new(configProto.Layers),
- MaxCount = configProto.MaxCount,
- MaxOffset = configProto.MaxOffset,
- MinCount = configProto.MinCount,
- MinOffset = configProto.MinOffset,
- ReserveTiles = configProto.ReserveTiles
- };
-
- var count = _asteroidOreCount.Next(rand);
- var weightedProto = _proto.Index(_asteroidOreWeights);
- for (var i = 0; i < count; i++)
- {
- var ore = weightedProto.Pick(rand);
- config.Layers.Add(_proto.Index(ore));
-
- var layerCount = layers.GetOrNew(ore);
- layerCount++;
- layers[ore] = layerCount;
- }
-
- return new AsteroidOffering
- {
- Id = configId,
- DungeonConfig = config,
- MarkerLayers = layers,
- };
- case DebrisOffering:
- var id = rand.Pick(_debrisConfigs);
- return new DebrisOffering
- {
- Id = id
- };
- case SalvageOffering:
- // Salvage map seed
- _salvageMaps.Clear();
- _salvageMaps.AddRange(_proto.EnumeratePrototypes());
- _salvageMaps.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
- var mapIndex = rand.Next(_salvageMaps.Count);
- var map = _salvageMaps[mapIndex];
-
- return new SalvageOffering
- {
- SalvageMap = map,
- };
- default:
- throw new NotImplementedException($"Salvage type {type} not implemented!");
- }
+ // var type = SharedRandomExtensions.Pick(_offeringWeights, rand); // # Persistence: Magnet only spawns wrecks
+ // switch (type)
+ // {
+ // case AsteroidOffering:
+ // var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)];
+ // var configProto =_proto.Index(configId);
+ // var layers = new Dictionary();
+ //
+ // var config = new DungeonConfig
+ // {
+ // Layers = new(configProto.Layers),
+ // MaxCount = configProto.MaxCount,
+ // MaxOffset = configProto.MaxOffset,
+ // MinCount = configProto.MinCount,
+ // MinOffset = configProto.MinOffset,
+ // ReserveTiles = configProto.ReserveTiles
+ // };
+ //
+ // var count = _asteroidOreCount.Next(rand);
+ // var weightedProto = _proto.Index(_asteroidOreWeights);
+ // for (var i = 0; i < count; i++)
+ // {
+ // var ore = weightedProto.Pick(rand);
+ // config.Layers.Add(_proto.Index(ore));
+ //
+ // var layerCount = layers.GetOrNew(ore);
+ // layerCount++;
+ // layers[ore] = layerCount;
+ // }
+ //
+ // return new AsteroidOffering
+ // {
+ // Id = configId,
+ // DungeonConfig = config,
+ // MarkerLayers = layers,
+ // };
+ // case DebrisOffering:
+ // var id = rand.Pick(_debrisConfigs);
+ // return new DebrisOffering
+ // {
+ // Id = id
+ // };
+ // case SalvageOffering:
+ // // Salvage map seed
+ // _salvageMaps.Clear();
+ // _salvageMaps.AddRange(_proto.EnumeratePrototypes());
+ // _salvageMaps.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
+ // var mapIndex = rand.Next(_salvageMaps.Count);
+ // var map = _salvageMaps[mapIndex];
+ //
+ // return new SalvageOffering
+ // {
+ // SalvageMap = map,
+ // };
+ // default:
+ // throw new NotImplementedException($"Salvage type {type} not implemented!");
+ // }
}
}
diff --git a/Content.Shared/Shuttles/BUIStates/IFFConsoleBoundUserInterfaceState.cs b/Content.Shared/Shuttles/BUIStates/IFFConsoleBoundUserInterfaceState.cs
index a6af9d904b7..21d24b3872b 100644
--- a/Content.Shared/Shuttles/BUIStates/IFFConsoleBoundUserInterfaceState.cs
+++ b/Content.Shared/Shuttles/BUIStates/IFFConsoleBoundUserInterfaceState.cs
@@ -1,4 +1,5 @@
using Content.Shared.Shuttles.Components;
+using Robust.Shared.Maths;
using Robust.Shared.Serialization;
namespace Content.Shared.Shuttles.BUIStates;
@@ -8,6 +9,10 @@ public sealed class IFFConsoleBoundUserInterfaceState : BoundUserInterfaceState
{
public IFFFlags AllowedFlags;
public IFFFlags Flags;
+ public Color SignatureColor;
+ public bool ColorEditable;
+ public IFFDesignation Designation;
+ public bool DesignationEditable;
}
[Serializable, NetSerializable]
diff --git a/Content.Shared/Shuttles/Components/IFFComponent.cs b/Content.Shared/Shuttles/Components/IFFComponent.cs
index 6bacbd2b5b1..68c9525e5b6 100644
--- a/Content.Shared/Shuttles/Components/IFFComponent.cs
+++ b/Content.Shared/Shuttles/Components/IFFComponent.cs
@@ -1,4 +1,6 @@
using Content.Shared.Shuttles.Systems;
+using Content.Shared.Tag;
+using Robust.Shared.Prototypes;
using Robust.Shared.GameStates;
namespace Content.Shared.Shuttles.Components;
@@ -17,14 +19,80 @@ public sealed partial class IFFComponent : Component
///
public static readonly Color IFFColor = Color.Gold;
+ public static readonly ProtoId SortTagShip = "IFFShip";
+ public static readonly ProtoId SortTagStation = "IFFStation";
+ private static readonly ProtoId[] ShipSortTags = { SortTagShip };
+ private static readonly ProtoId[] StationSortTags = { SortTagStation };
+
+ public const float SignatureAlpha = 1f;
+ public const float MinSignatureSaturation = 0.8f;
+ public const float MinSignatureValue = 0.65f;
+ public const float MaxSignatureValue = 0.9f;
+
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
public IFFFlags Flags = IFFFlags.None;
+ [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ public IFFDesignation Designation = IFFDesignation.Ship;
+
+ [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ public List> SortTags = new();
+
///
/// Color for this to show up on IFF.
///
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
public Color Color = IFFColor;
+
+ public static Color NormalizeSignatureColor(Color color)
+ {
+ var hsv = Color.ToHsv(color);
+ var fallbackHue = Color.ToHsv(IFFColor).X;
+
+ if (hsv.Y < MinSignatureSaturation)
+ {
+ hsv.X = fallbackHue;
+ hsv.Y = MinSignatureSaturation;
+ }
+
+ hsv.Y = Math.Clamp(hsv.Y, MinSignatureSaturation, 1f);
+ hsv.Z = Math.Clamp(hsv.Z, MinSignatureValue, MaxSignatureValue);
+ hsv.W = SignatureAlpha;
+
+ return Color.FromHsv(hsv);
+ }
+
+ public IReadOnlyList> GetSortTags()
+ {
+ if (SortTags.Count > 0)
+ return SortTags;
+
+ return Designation == IFFDesignation.Station ? StationSortTags : ShipSortTags;
+ }
+
+ public bool HasSortTag(ProtoId tag)
+ {
+ foreach (var sortTag in GetSortTags())
+ {
+ if (sortTag == tag)
+ return true;
+ }
+
+ return false;
+ }
+}
+
+public enum IFFDesignation : byte
+{
+ Ship,
+ Station,
+}
+
+public enum IFFSortMode : byte
+{
+ None,
+ Ship,
+ Station,
}
[Flags]
diff --git a/Content.Shared/Shuttles/Events/IFFSetColorMessage.cs b/Content.Shared/Shuttles/Events/IFFSetColorMessage.cs
new file mode 100644
index 00000000000..eb0356ec619
--- /dev/null
+++ b/Content.Shared/Shuttles/Events/IFFSetColorMessage.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Shuttles.Events;
+
+[Serializable, NetSerializable]
+public sealed class IFFSetColorMessage : BoundUserInterfaceMessage
+{
+ public string ColorHex = string.Empty;
+}
diff --git a/Content.Shared/Shuttles/Events/IFFSetDesignationMessage.cs b/Content.Shared/Shuttles/Events/IFFSetDesignationMessage.cs
new file mode 100644
index 00000000000..c463cce40da
--- /dev/null
+++ b/Content.Shared/Shuttles/Events/IFFSetDesignationMessage.cs
@@ -0,0 +1,10 @@
+using Content.Shared.Shuttles.Components;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Shuttles.Events;
+
+[Serializable, NetSerializable]
+public sealed class IFFSetDesignationMessage : BoundUserInterfaceMessage
+{
+ public IFFDesignation Designation;
+}
diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs
index 8231e48e2db..6645589b7f1 100644
--- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs
+++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs
@@ -50,6 +50,7 @@ public Color GetIFFColor(EntityUid gridUid, bool self = false, IFFComponent? com
public void SetIFFColor(EntityUid gridUid, Color color, IFFComponent? component = null)
{
component ??= EnsureComp(gridUid);
+ color = IFFComponent.NormalizeSignatureColor(color);
if (component.Color.Equals(color))
return;
@@ -85,4 +86,19 @@ public void RemoveIFFFlag(EntityUid gridUid, IFFFlags flags, IFFComponent? compo
Dirty(gridUid, component);
UpdateIFFInterfaces(gridUid, component);
}
+
+ public bool MatchesSortTag(IFFComponent? component, IFFSortMode sortMode)
+ {
+ if (sortMode == IFFSortMode.None)
+ return true;
+
+ if (component == null)
+ return sortMode == IFFSortMode.Ship;
+
+ var tag = sortMode == IFFSortMode.Station
+ ? IFFComponent.SortTagStation
+ : IFFComponent.SortTagShip;
+
+ return component.HasSortTag(tag);
+ }
}
diff --git a/Content.Shared/Station/SharedStationSystem.cs b/Content.Shared/Station/SharedStationSystem.cs
index 3016db086e6..0b4e9b1d7ca 100644
--- a/Content.Shared/Station/SharedStationSystem.cs
+++ b/Content.Shared/Station/SharedStationSystem.cs
@@ -77,6 +77,35 @@ public bool HasRecord(string userName, EntityUid station)
}
return false;
}
+
+
+ public bool CanEditGeneralRecord(string userName, EntityUid station, int toSpend = 0)
+ {
+ if (TryComp(station, out var sD) && sD != null)
+ {
+ if (sD.Owners.Contains(userName))
+ {
+ return true;
+ }
+ }
+ if (TryComp(station, out var crewRecords) && crewRecords != null)
+ {
+ crewRecords.TryGetRecord(userName, out var crewRecord);
+ if (crewRecord != null)
+ {
+ if (TryComp(station, out var crewAssignments) && crewAssignments != null)
+ {
+ if (crewAssignments.TryGetAssignment(crewRecord.AssignmentID, out var assignment) && assignment != null)
+ {
+ return assignment.CanEditGeneralRecord;
+ }
+ }
+
+ }
+ }
+ return false;
+ }
+
public bool CanSpend(string userName, EntityUid station, int toSpend = 0)
{
if (TryComp(station, out var sD) && sD != null)
@@ -95,15 +124,12 @@ public bool CanSpend(string userName, EntityUid station, int toSpend = 0)
{
if (crewAssignments.TryGetAssignment(crewRecord.AssignmentID, out var assignment) && assignment != null)
{
- if (assignment.CanSpend)
+ if (toSpend > 0)
{
- if (toSpend > 0)
- {
- var spendable = assignment.SpendingLimit - crewRecord.Spent;
- if (spendable >= toSpend) return true;
- }
- else return true;
+ var spendable = assignment.SpendingLimit - crewRecord.Spent;
+ if (spendable >= toSpend) return true;
}
+ else return true;
}
}
diff --git a/Content.Shared/Storage/Components/DumpTargetComponent.cs b/Content.Shared/Storage/Components/DumpTargetComponent.cs
new file mode 100644
index 00000000000..860f9c08e33
--- /dev/null
+++ b/Content.Shared/Storage/Components/DumpTargetComponent.cs
@@ -0,0 +1,13 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Storage.Components;
+
+///
+/// Marks a storage entity as a valid target for dumping items from dumpable containers (like trashbags, ore bags).
+/// When a dumpable container is used on an entity with this component,
+/// compatible items will be transferred into the storage.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class DumpTargetComponent : Component
+{
+}
diff --git a/Content.Shared/Storage/Components/DumpableComponent.cs b/Content.Shared/Storage/Components/DumpableComponent.cs
index 0c751df2a3b..13cd2c6c52a 100644
--- a/Content.Shared/Storage/Components/DumpableComponent.cs
+++ b/Content.Shared/Storage/Components/DumpableComponent.cs
@@ -1,5 +1,6 @@
using Content.Shared.DoAfter;
using Content.Shared.Storage.EntitySystems;
+using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
@@ -32,6 +33,12 @@ public sealed partial class DumpableComponent : Component
///
[DataField("multiplier"), AutoNetworkedField]
public float Multiplier = 1.0f;
+
+ ///
+ /// If set, only allows dumping into targets that match this whitelist.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntityWhitelist? DumpWhitelist;
}
///
diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs
index 0d744a4fe90..831dccee581 100644
--- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs
@@ -4,6 +4,7 @@
using Content.Shared.Item;
using Content.Shared.Storage.Components;
using Content.Shared.Verbs;
+using Content.Shared.Whitelist;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers;
using Robust.Shared.Prototypes;
@@ -16,6 +17,7 @@ public sealed class DumpableSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
@@ -26,7 +28,7 @@ public override void Initialize()
{
base.Initialize();
_itemQuery = GetEntityQuery();
- SubscribeLocalEvent(OnAfterInteract, after: new[]{ typeof(SharedEntityStorageSystem) });
+ SubscribeLocalEvent(OnAfterInteract, before: new[]{ typeof(SharedStorageSystem) }, after: new[]{ typeof(SharedEntityStorageSystem) });
SubscribeLocalEvent>(AddDumpVerb);
SubscribeLocalEvent>(AddUtilityVerbs);
SubscribeLocalEvent(OnDoAfter);
@@ -42,6 +44,10 @@ private void OnAfterInteract(EntityUid uid, DumpableComponent component, AfterIn
if (evt.Verb is null)
return;
+ // Check if this dumpable has a whitelist and if the target matches
+ if (_whitelistSystem.IsWhitelistFail(component.DumpWhitelist, target))
+ return;
+
if (!TryComp(uid, out var storage))
return;
@@ -86,6 +92,10 @@ private void AddUtilityVerbs(EntityUid uid, DumpableComponent dumpable, GetVerbs
if (evt.Verb is not { } verbText)
return;
+ // Check if this dumpable has a whitelist and if the target matches
+ if (_whitelistSystem.IsWhitelistFail(dumpable.DumpWhitelist, args.Target))
+ return;
+
UtilityVerb verb = new()
{
Act = () =>
diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
index 540ea541d5d..24bed665132 100644
--- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
@@ -157,6 +157,9 @@ public override void Initialize()
SubscribeLocalEvent(OnDoAfter);
SubscribeLocalEvent(OnReclaimed);
+ SubscribeLocalEvent(OnGetDumpableVerb);
+ SubscribeLocalEvent(OnDump);
+
SubscribeLocalEvent(OnStackCountChanged);
SubscribeAllEvent(OnStorageNested);
@@ -503,6 +506,15 @@ private void OnInteractUsing(EntityUid uid, StorageComponent storageComp, Intera
if (attemptEv.Cancelled)
return;
+ // If this storage is a dump target and the used item is dumpable with a matching whitelist,
+ // don't try to insert the item - let the dumping logic handle it via AfterInteract.
+ if (HasComp(uid) &&
+ TryComp(args.Used, out var dumpable) &&
+ !_whitelistSystem.IsWhitelistFail(dumpable.DumpWhitelist, uid))
+ {
+ return;
+ }
+
PlayerInsertHeldEntity((uid, storageComp), args.User);
// Always handle it, even if insertion fails.
// We don't want to trigger any AfterInteract logic here.
@@ -715,6 +727,31 @@ private void OnReclaimed(EntityUid uid, StorageComponent storageComp, GotReclaim
ContainerSystem.EmptyContainer(storageComp.Container, destination: args.ReclaimerCoordinates);
}
+ private void OnGetDumpableVerb(Entity ent, ref GetDumpableVerbEvent args)
+ {
+ if (!HasComp(ent))
+ return;
+
+ args.Verb = Loc.GetString("dump-storage-verb-name", ("storage", ent));
+ }
+
+ private void OnDump(Entity ent, ref DumpEvent args)
+ {
+ if (args.Handled || !HasComp(ent))
+ return;
+
+ args.Handled = true;
+ args.PlaySound = true;
+
+ foreach (var entity in args.DumpQueue)
+ {
+ if (CanInsert(ent, entity, out _, ent.Comp))
+ {
+ Insert(ent, entity, out _, args.User, ent.Comp);
+ }
+ }
+ }
+
private void OnDestroy(EntityUid uid, StorageComponent storageComp, DestructionEventArgs args)
{
var coordinates = TransformSystem.GetMoverCoordinates(uid);
diff --git a/Resources/Locale/en-US/cargo/bounties.ftl b/Resources/Locale/en-US/cargo/bounties.ftl
index 266b0154071..6512a976ca9 100644
--- a/Resources/Locale/en-US/cargo/bounties.ftl
+++ b/Resources/Locale/en-US/cargo/bounties.ftl
@@ -81,8 +81,6 @@ bounty-item-flash = Flash
bounty-item-tooth-space-carp = Space carp tooth
bounty-item-tooth-sharkminnow = Sharkminnow tooth
bounty-item-ring = Ring
-bounty-item-remains = Hivelord remains
-bounty-item-plates = Goliath hide plates
bounty-item-steel = Steel sheets
bounty-item-gold = Gold bars
bounty-item-silver = Silver bars
@@ -110,11 +108,11 @@ bounty-item-anomalylocator = Anomaly locator
bounty-item-apeboard = A.P.E. machine board
bounty-item-bearhide = Bear hide
bounty-item-bearmeat = Bear meat
-bounty-item-goliathmeat = Goliath meat
bounty-item-spidermeat = Spider meat
bounty-item-snakemeat = Snake meat
bounty-item-snakeboots = Snakeskin boots
bounty-item-xenomeat = Xeno meat
+bounty-item-egg-spider = Egg spider
bounty-description-artifact = NanoTrasen is in some hot water for stealing artifacts from non-spacefaring planets. Return one and we'll compensate you for it.
bounty-description-baseball-bat = Baseball fever is going on at CentComm! Be a dear and ship them some baseball bats, so that management can live out their childhood dream.
@@ -204,6 +202,6 @@ bounty-description-diamond = My pet fox needs a new diamond studded collar as sh
bounty-description-ripley = We're down an industrial miner vessel (and a miner - don't ask) and need a replacement unit. Send an assembly kit for us to put together. The crew down here is into BATTLECHECK building.
bounty-description-anomalyscience = This idiotic Dr. Leeman triggered an anomaly from our artifact and we can't find it! It's, uh, sort of urgent - so please send us the stuff to find and neutralize it! Please...
bounty-description-bear = I want one'o them fancy schmancy Ol' Sollian Bearhide Hats that's on the medias these days. Gimme one, along with some meat to make jerky with.
-bounty-description-spider = I wonder if Spider tastes like Crab? Get me some spider meat! I'll pay big bucks!
+bounty-description-spider = I wonder if Spider tastes like Crab? Get me some spider meat! and, yknow what! Their egg too! I'll pay big bucks!
bounty-description-snake = Snakeskin seems so luxurious... I have a dire need for some snakeskin boots. Freshly killed for, ideally... send me its fresh meat as proof.
-bounty-description-xeno = Some people say their flesh tastes good. I don't believe that. Gimme some to sample... it can't be that good, can it?
+bounty-description-xeno = Some people say their flesh tastes good. I don't believe that. Gimme some to sample... it can't be that good, can it?
\ No newline at end of file
diff --git a/Resources/Locale/en-US/character-info/components/character-info-component.ftl b/Resources/Locale/en-US/character-info/components/character-info-component.ftl
index dd2f848f775..dfee64994d3 100644
--- a/Resources/Locale/en-US/character-info/components/character-info-component.ftl
+++ b/Resources/Locale/en-US/character-info/components/character-info-component.ftl
@@ -2,3 +2,6 @@ character-info-title = Character
character-info-roles-antagonist-text = You have no special Roles
character-info-objectives-label = Objectives
character-info-no-profession = No Profession
+character-info-off-duty = Off Duty
+character-info-detail-examinable-label = Flavor Text
+character-info-detail-examinable-submit = Submit
diff --git a/Resources/Locale/en-US/construction/recipes/structures.ftl b/Resources/Locale/en-US/construction/recipes/structures.ftl
index 8a02203dbed..d662587f9af 100644
--- a/Resources/Locale/en-US/construction/recipes/structures.ftl
+++ b/Resources/Locale/en-US/construction/recipes/structures.ftl
@@ -4,6 +4,7 @@ construction-recipe-diagonal-shuttle-wall = shuttle wall (diagonal)
construction-recipe-diagonal-solid-wall = solid wall (diagonal)
construction-recipe-diagonal-reinforced-wall = reinforced wall (diagonal)
construction-window-diagonal = window (diagonal)
+construction-recipe-diagonal-mining-wall = mining wall (diagonal)
construction-recipe-reinforced-window-diagonal = reinforced window (diagonal)
construction-recipe-clockwork-window-diagonal = clockwork window (diagonal)
construction-recipe-plasma-window-diagonal = plasma window (diagonal)
@@ -24,6 +25,9 @@ construction-recipe-fence-wood-end-small = small wooden fence end
construction-recipe-fence-wood-corner-small = small wooden fence corner
construction-recipe-fence-wood-t-junction-small = small wooden fence T-junction
construction-recipe-fence-wood-gate-small = small wooden fence gate
+construction-recipe-glass-mining-airlock = glass mining airlock
+construction-recipe-mining-airlock = mining airlock
+construction-recipe-mining-window-diagonal = mining window (diagonal)
construction-recipe-pinion-airlock = clockwork airlock
construction-recipe-pinion-airlock-glass = glass clockwork airlock
construction-recipe-airlock-glass-shuttle = glass shuttle airlock
@@ -35,4 +39,5 @@ construction-recipe-button-frame-danger = button frame (danger)
construction-recipe-button-frame-exit = button frame (exit)
construction-recipe-button-frame-janitor = button frame (janitor)
construction-recipe-storagecanister = storage canister
-construction-recipe-generictank = storage tank
\ No newline at end of file
+construction-recipe-generictank = storage tank
+construction-recipe-airlock-vault = vault door
diff --git a/Resources/Locale/en-US/lathe/lathe-categories.ftl b/Resources/Locale/en-US/lathe/lathe-categories.ftl
index 209daf1ad3a..93667639fc4 100644
--- a/Resources/Locale/en-US/lathe/lathe-categories.ftl
+++ b/Resources/Locale/en-US/lathe/lathe-categories.ftl
@@ -52,3 +52,8 @@ lathe-category-command = Command
lathe-category-hats = Hats
lathe-category-jumpsuits = Jumpsuits
lathe-category-neck = Neck
+lathe-category-shoes = Shoes
+lathe-category-gloves = Gloves
+lathe-category-belts = Belts
+lathe-category-glasses = Glasses
+lathe-category-masks = Masks
\ No newline at end of file
diff --git a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
index f89cd84f327..aa34b415c5c 100644
--- a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
+++ b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
@@ -25,9 +25,6 @@ signal-port-description-close = Closes a device.
signal-port-name-doorbolt = Door bolt
signal-port-description-doorbolt = Bolts door when HIGH.
-signal-port-name-direct-drive = Direct drive
-signal-port-description-direct-drive = Switches the door to be directly driven by signals, and remains bolted otherwise. HIGH opens the door, LOW closes it.
-
signal-port-name-trigger-receiver = Trigger
signal-port-description-trigger-receiver = Triggers some mechanism on the device.
diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl
index 2c5bd5465ea..2ea309956f1 100644
--- a/Resources/Locale/en-US/research/technologies.ftl
+++ b/Resources/Locale/en-US/research/technologies.ftl
@@ -16,6 +16,7 @@ research-technology-shuttlecraft = Shuttlecraft
research-technology-ripley-aplu = Ripley APLU
research-technology-advanced-atmospherics = Advanced Atmospherics
research-technology-advanced-tools = Advanced Tools
+research-technology-construction-devices = Construction Devices
research-technology-super-powercells = Super Powercells
research-technology-bluespace-storage = Bluespace Storage
research-technology-optimized-microgalvanism = Optimized Microgalvanism
diff --git a/Resources/Locale/en-US/shuttles/console.ftl b/Resources/Locale/en-US/shuttles/console.ftl
index 1f7d4b3adb1..75b82fa69ed 100644
--- a/Resources/Locale/en-US/shuttles/console.ftl
+++ b/Resources/Locale/en-US/shuttles/console.ftl
@@ -22,6 +22,11 @@ shuttle-console-damping-cruise = Cruise
shuttle-console-damping-normal = Normal
shuttle-console-damping-anchor = Anchor
+shuttle-console-sort-label = Filter
+shuttle-console-sort-none = None
+shuttle-console-sort-ship = Ship
+shuttle-console-sort-station = Station
+
shuttle-console-unknown = Unknown
shuttle-console-iff-label = {$name} ({$distance}m)
shuttle-console-exclusion = Exclusion area
diff --git a/Resources/Locale/en-US/shuttles/iff.ftl b/Resources/Locale/en-US/shuttles/iff.ftl
index 7f394dbbe24..d2b0c86723e 100644
--- a/Resources/Locale/en-US/shuttles/iff.ftl
+++ b/Resources/Locale/en-US/shuttles/iff.ftl
@@ -1,5 +1,16 @@
iff-console-window-title = IFF console
iff-console-show-iff-label = Show IFF
iff-console-show-vessel-label = Show vessel
+iff-console-designation-label = Designation
+iff-console-designation-ship = Ship
+iff-console-designation-station = Station
+iff-console-signature-color-label = IFF color
+iff-console-signature-color-placeholder = RRGGBB
+iff-console-signature-color-apply = Apply
+iff-console-status-iff-label = IFF label status
+iff-console-status-vessel-label = Vessel visibility status
+iff-console-status-signature-color-label = Current signature color
+iff-console-status-value-visible = Visible
+iff-console-status-value-hidden = Hidden
iff-console-on = On
iff-console-off = Off
diff --git a/Resources/Locale/en-US/spray-painter/spray-painter.ftl b/Resources/Locale/en-US/spray-painter/spray-painter.ftl
index 552e727f17d..5a73fa077a8 100644
--- a/Resources/Locale/en-US/spray-painter/spray-painter.ftl
+++ b/Resources/Locale/en-US/spray-painter/spray-painter.ftl
@@ -115,6 +115,14 @@ spray-painter-style-locker-hos = HOS
spray-painter-style-locker-medicine = Medicine
spray-painter-style-locker-mime = Mime
spray-painter-style-locker-paramedic = Paramedic
+spray-painter-style-locker-prisoner1 = Prisoner 1
+spray-painter-style-locker-prisoner2 = Prisoner 2
+spray-painter-style-locker-prisoner3 = Prisoner 3
+spray-painter-style-locker-prisoner4 = Prisoner 4
+spray-painter-style-locker-prisoner5 = Prisoner 5
+spray-painter-style-locker-prisoner6 = Prisoner 6
+spray-painter-style-locker-prisoner7 = Prisoner 7
+spray-painter-style-locker-prisoner8 = Prisoner 8
spray-painter-style-locker-quartermaster = Quartermaster
spray-painter-style-locker-rd = RD
spray-painter-style-locker-representative = Representative
@@ -157,6 +165,14 @@ spray-painter-style-wallcloset-yellow = Yellow
spray-painter-style-walllocker-evac = Evac repair
spray-painter-style-walllocker-medical = Medical
+spray-painter-style-walllocker-wallprisoner1 = Prisoner 1
+spray-painter-style-walllocker-wallprisoner2 = Prisoner 2
+spray-painter-style-walllocker-wallprisoner3 = Prisoner 3
+spray-painter-style-walllocker-wallprisoner4 = Prisoner 4
+spray-painter-style-walllocker-wallprisoner5 = Prisoner 5
+spray-painter-style-walllocker-wallprisoner6 = Prisoner 6
+spray-painter-style-walllocker-wallprisoner7 = Prisoner 7
+spray-painter-style-walllocker-wallprisoner8 = Prisoner 8
# Crates
spray-painter-style-cratesteel-basic = Basic
@@ -233,10 +249,47 @@ spray-painter-style-itempdas-passenger = Passenger
spray-painter-style-itempdas-captain = Captain
spray-painter-style-itempdas-clown = Clown
spray-painter-style-itempdas-mime = Mime
-spray-painter-style-itempdas-medical = Medical
+spray-painter-style-itempdas-medicalintern = Medical Intern
spray-painter-style-itempdas-security = Security
spray-painter-style-itempdas-cargo = Cargo
-spray-painter-style-itempdas-research = Research
+spray-painter-style-itempdas-researchassistant = Research Assistant
+spray-painter-style-itempdas-botanist = Botanist
+spray-painter-style-itempdas-technicalassistant = Technical Assistant
+spray-painter-style-itempdas-securitycadet = Security Cadet
+spray-painter-style-itempdas-serviceworker = Service Worker
+spray-painter-style-itempdas-chef = Chef
+spray-painter-style-itempdas-chaplain = Chaplain
+spray-painter-style-itempdas-qm = Quartermaster
+spray-painter-style-itempdas-salvage = Salvage
+spray-painter-style-itempdas-bartender = Bartender
+spray-painter-style-itempdas-librarian = Librarian
+spray-painter-style-itempdas-lawyer = Lawyer
+spray-painter-style-itempdas-janitor = Janitor
+spray-painter-style-itempdas-hop = Head of Personnel
+spray-painter-style-itempdas-ce = Chief Engineer
+spray-painter-style-itempdas-engineer = Engineer
+spray-painter-style-itempdas-cmo = Chief Medical Officer
+spray-painter-style-itempdas-medical = Medical
+spray-painter-style-itempdas-paramedic = Paramedic
+spray-painter-style-itempdas-chemistry = Chemistry
+spray-painter-style-itempdas-rnd = Research Director
+spray-painter-style-itempdas-science = Science
+spray-painter-style-itempdas-hos = Head of Security
+spray-painter-style-itempdas-warden = Warden
+spray-painter-style-itempdas-atmos = Atmospherics Technician
+spray-painter-style-itempdas-clear = Clear
+spray-painter-style-itempdas-psychologist = Psychologist
+spray-painter-style-itempdas-reporter = Reporter
+spray-painter-style-itempdas-zookeeper = Zookeeper
+spray-painter-style-itempdas-boxer = Boxer
+spray-painter-style-itempdas-detective = Detective
+spray-painter-style-itempdas-brigmedic = Brigmedic
+spray-painter-style-itempdas-seniorengineer = Senior Engineer
+spray-painter-style-itempdas-senioreresearcher = Senior Researcher
+spray-painter-style-itempdas-seniorphysician = Senior Physician
+spray-painter-style-itempdas-seniorofficer = Senior Officer
+spray-painter-style-itempdas-seniorcourier = Senior Courier
+spray-painter-style-itempdas-pirate = Pirate
# Items - Headsets
spray-painter-style-itemheadsets-general = General
diff --git a/Resources/Locale/en-US/storage/components/dumpable-component.ftl b/Resources/Locale/en-US/storage/components/dumpable-component.ftl
index 867b461f1fb..d259043f5f2 100644
--- a/Resources/Locale/en-US/storage/components/dumpable-component.ftl
+++ b/Resources/Locale/en-US/storage/components/dumpable-component.ftl
@@ -2,3 +2,5 @@ dump-verb-name = Dump out on ground
dump-disposal-verb-name = Dump out into {$unit}
dump-placeable-verb-name = Dump out onto {$surface}
dump-smartfridge-verb-name = Restock into {$unit}
+dump-storage-verb-name = Dump out into {$storage}
+dump-material-storage-verb-name = Dump out into {$storage}
diff --git a/Resources/Locale/en-US/wires/wires_panel-security-levels.ftl b/Resources/Locale/en-US/wires/wires_panel-security-levels.ftl
index d6fc9eecb2a..d757df23cdb 100644
--- a/Resources/Locale/en-US/wires/wires_panel-security-levels.ftl
+++ b/Resources/Locale/en-US/wires/wires_panel-security-levels.ftl
@@ -6,3 +6,6 @@ wires-panel-component-on-examine-security-level4 = A plasteel plate has been wel
wires-panel-component-on-examine-security-level5 = The inside of the [color=lightgray]maintenance panel[/color] is protected by a security grille. Use [color=cyan]Wirecutters[/color] to remove it.
wires-panel-component-on-examine-security-level6 = A plasteel plate sits within the interior of the [color=lightgray]maintenance panel[/color]. Use a [color=cyan]Crowbar[/color] to remove it.
wires-panel-component-on-examine-security-level7 = A welded plasteel plate protects the interior of the [color=lightgray]maintenance panel[/color]. Use a [color=cyan]Welder[/color] to free it.
+
+wires-panel-component-on-examine-security-level8 = A titanium plate sits within the interior of the [color=lightgray]maintenance panel[/color]. Use a [color=cyan]Crowbar[/color] to remove it.
+wires-panel-component-on-examine-security-level9 = A welded titanium plate protects the interior of the [color=lightgray]maintenance panel[/color]. Use a [color=cyan]Welder[/color] to free it.
\ No newline at end of file
diff --git a/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLcommdart b/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLcommdart
new file mode 100644
index 00000000000..837c9abf647
--- /dev/null
+++ b/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLcommdart
@@ -0,0 +1,2158 @@
+meta:
+ format: 7
+ category: Grid
+ engineVersion: 270.0.0
+ forkId: ""
+ forkVersion: ""
+ time: 01/25/2026 06:16:17
+ entityCount: 142
+maps: []
+grids:
+- 1
+orphans:
+- 1
+nullspace: []
+tilemap:
+ 2: Space
+ 0: FloorMiningDark
+ 3: Lattice
+ 1: Plating
+entities:
+- proto: ""
+ entities:
+ - uid: 1
+ components:
+ - type: MetaData
+ name: grid
+ - type: Transform
+ pos: -0.14212209,-0.7083334
+ parent: invalid
+ - type: MapGrid
+ chunks:
+ 0,0:
+ ind: 0,0
+ tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAwAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAAAAAMAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAMAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA==
+ version: 7
+ -1,0:
+ ind: -1,0
+ tiles: AgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA==
+ version: 7
+ -1,-1:
+ ind: -1,-1
+ tiles: AgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAMAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAA==
+ version: 7
+ 0,-1:
+ ind: 0,-1
+ tiles: AgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAwAAAAAAAAEAAAAAAAABAAAAAAAAAwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAMAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAADAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAMAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA==
+ version: 7
+ - type: Broadphase
+ - type: Physics
+ bodyStatus: InAir
+ fixedRotation: False
+ bodyType: Dynamic
+ - type: Fixtures
+ fixtures: {}
+ - type: OccluderTree
+ - type: SpreaderGrid
+ - type: Shuttle
+ dampingModifier: 0.25
+ - type: ImplicitRoof
+ - type: GridPathfinding
+ - type: Gravity
+ gravityShakeSound: !type:SoundPathSpecifier
+ path: /Audio/Effects/alert.ogg
+ - type: DecalGrid
+ chunkCollection:
+ version: 2
+ nodes: []
+ - type: GridAtmosphere
+ version: 2
+ data:
+ tiles:
+ 0,0:
+ 0: 17663
+ 1: 4096
+ 0,-1:
+ 0: 62528
+ 1: 25
+ -1,0:
+ 0: 8
+ 1: 32768
+ 0,1:
+ 1: 9
+ 1,0:
+ 0: 55
+ 1: 5248
+ 1,-1:
+ 0: 12288
+ 1: 33808
+ -1,-1:
+ 1: 128
+ uniqueMixes:
+ - volume: 2500
+ temperature: 293.15
+ moles:
+ Oxygen: 21.824879
+ Nitrogen: 82.10312
+ - volume: 2500
+ immutable: True
+ moles: {}
+ chunkSize: 4
+ - type: GasTileOverlay
+ - type: ExplosionAirtightGrid
+ - type: RadiationGridResistance
+- proto: AirAlarm
+ entities:
+ - uid: 2
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: AIR-4925-614B
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: DeviceList
+ devices:
+ - 72
+ - 73
+ - 74
+ - type: Wires
+ wireSeed: 955329306
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AirCanister
+ entities:
+ - uid: 3
+ components:
+ - type: Transform
+ anchored: True
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ bodyType: Static
+- proto: AirlockShuttleSyndicate
+ entities:
+ - uid: 4
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,0.5
+ parent: 1
+ - type: Wires
+ wireSeed: 453875804
+ - type: DeviceNetwork
+ address: 100D-D166
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: APCHighCapacity
+ entities:
+ - uid: 5
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 2056990709
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+ - uid: 6
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 25051595
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AtmosDeviceFanDirectional
+ entities:
+ - uid: 7
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,0.5
+ parent: 1
+- proto: CableApcExtension
+ entities:
+ - uid: 8
+ components:
+ - type: Transform
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 9
+ components:
+ - type: Transform
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 10
+ components:
+ - type: Transform
+ pos: 6.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 11
+ components:
+ - type: Transform
+ pos: 5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 12
+ components:
+ - type: Transform
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 13
+ components:
+ - type: Transform
+ pos: 6.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 14
+ components:
+ - type: Transform
+ pos: 7.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 15
+ components:
+ - type: Transform
+ pos: 6.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 16
+ components:
+ - type: Transform
+ pos: 5.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 17
+ components:
+ - type: Transform
+ pos: 5.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 18
+ components:
+ - type: Transform
+ pos: 4.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 19
+ components:
+ - type: Transform
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 20
+ components:
+ - type: Transform
+ pos: 3.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 21
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 22
+ components:
+ - type: Transform
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 23
+ components:
+ - type: Transform
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 24
+ components:
+ - type: Transform
+ pos: 3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 25
+ components:
+ - type: Transform
+ pos: 2.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 26
+ components:
+ - type: Transform
+ pos: 2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 27
+ components:
+ - type: Transform
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 28
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 29
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 30
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 31
+ components:
+ - type: Transform
+ pos: -0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 32
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 33
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 34
+ components:
+ - type: Transform
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 35
+ components:
+ - type: Transform
+ pos: -0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableHV
+ entities:
+ - uid: 36
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 37
+ components:
+ - type: Transform
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 38
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 39
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 40
+ components:
+ - type: Transform
+ pos: 1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableMV
+ entities:
+ - uid: 41
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 42
+ components:
+ - type: Transform
+ pos: 2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 43
+ components:
+ - type: Transform
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 44
+ components:
+ - type: Transform
+ pos: 1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 45
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 46
+ components:
+ - type: Transform
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 47
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 48
+ components:
+ - type: Transform
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableTerminal
+ entities:
+ - uid: 49
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ChairPilotSeat
+ entities:
+ - uid: 50
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 51
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 52
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ClosetWallPink
+ entities:
+ - uid: 53
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-1.5
+ parent: 1
+ - type: ContainerContainer
+ containers:
+ entity_storage: !type:Container
+ showEnts: False
+ occludes: True
+ ents:
+ - 54
+ - 55
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: ComputerRadar
+ entities:
+ - uid: 56
+ components:
+ - type: Transform
+ pos: 5.5,1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 1988565992
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ComputerShuttle
+ entities:
+ - uid: 57
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 6.5,0.5
+ parent: 1
+ - type: Wires
+ wireSeed: 1558567118
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: FaxMachineBase
+ entities:
+ - uid: 58
+ components:
+ - type: Transform
+ pos: 5.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 7B65-0A51
+ transmitFrequency: 2640
+ receiveFrequency: 2640
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: GasPassiveVent
+ entities:
+ - uid: 59
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 60
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeBend
+ entities:
+ - uid: 61
+ components:
+ - type: Transform
+ pos: 1.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 62
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 63
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeStraight
+ entities:
+ - uid: 64
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 65
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 66
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 67
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 68
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 69
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeTJunction
+ entities:
+ - uid: 70
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPort
+ entities:
+ - uid: 71
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentPump
+ entities:
+ - uid: 72
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 2
+ address: VNT-120D-BC29
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentScrubber
+ entities:
+ - uid: 73
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,1.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 2
+ address: SCR-14C7-1A6C
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 74
+ components:
+ - type: Transform
+ pos: 2.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 2
+ address: SCR-6108-1686
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GravityGeneratorMini
+ entities:
+ - uid: 75
+ components:
+ - type: Transform
+ pos: 4.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Grille
+ entities:
+ - uid: 76
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 77
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 78
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 79
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 80
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 81
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 82
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 83
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 5.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 84
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 7.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 85
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 86
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: GrilleDiagonal
+ entities:
+ - uid: 87
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 88
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 89
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 7.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 90
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 6.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 91
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 92
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 7.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Gyroscope
+ entities:
+ - uid: 142
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: MCTNodeMachine
+ entities:
+ - uid: 93
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Physics
+ canCollide: False
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PortableGeneratorPacman
+ entities:
+ - uid: 94
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 1AC3-2947
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PoweredlightRed
+ entities:
+ - uid: 95
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 3D60-FB1B
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 96
+ components:
+ - type: Transform
+ pos: 4.5,1.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 7E2D-20AA
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PoweredlightSodium
+ entities:
+ - uid: 97
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 45CA-C84C
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 98
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,-1.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 5193-CA00
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedPlasmaWindow
+ entities:
+ - uid: 99
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 100
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 101
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 102
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 5.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 103
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 104
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 7.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 105
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 106
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 107
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 108
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 109
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedPlasmaWindowDiagonal
+ entities:
+ - uid: 110
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 111
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 112
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 7.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 113
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 7.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 114
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 6.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 115
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SheetPlasma
+ entities:
+ - uid: 54
+ components:
+ - type: Transform
+ parent: 53
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 53
+ - uid: 55
+ components:
+ - type: Transform
+ parent: 53
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 53
+ - uid: 116
+ components:
+ - type: Transform
+ pos: 0.25575858,-0.44612205
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SMESAdvanced
+ entities:
+ - uid: 117
+ components:
+ - type: Transform
+ pos: 1.5,-0.5
+ parent: 1
+ - type: PowerNetworkBattery
+ maxSupply: 5000
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: SMS-2554-7A7E
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+- proto: SubstationWallBasic
+ entities:
+ - uid: 118
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: TableReinforced
+ entities:
+ - uid: 119
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: TelecomServer1k
+ entities:
+ - uid: 120
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Thruster
+ entities:
+ - uid: 121
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 122
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 123
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 124
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 125
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 126
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WallTitanium
+ entities:
+ - uid: 127
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 128
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 129
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 130
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 131
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 132
+ components:
+ - type: Transform
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 133
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 134
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 135
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 136
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 137
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 138
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 139
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 140
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Wrench
+ entities:
+ - uid: 141
+ components:
+ - type: Transform
+ pos: 0.74534196,-0.57112205
+ parent: 1
+...
diff --git a/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLdeliverance b/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLdeliverance
new file mode 100644
index 00000000000..8c3ded76170
--- /dev/null
+++ b/Resources/Maps/Shuttles/PS14 Shuttle Grids/SLdeliverance
@@ -0,0 +1,4442 @@
+meta:
+ format: 7
+ category: Grid
+ engineVersion: 270.0.0
+ forkId: ""
+ forkVersion: ""
+ time: 01/25/2026 21:34:22
+ entityCount: 315
+maps: []
+grids:
+- 1
+orphans:
+- 1
+nullspace: []
+tilemap:
+ 4: Space
+ 2: FloorReinforced
+ 1: FloorTechMaintDark
+ 3: Lattice
+ 0: Plating
+entities:
+- proto: ""
+ entities:
+ - uid: 1
+ components:
+ - type: MetaData
+ name: grid
+ - type: Transform
+ pos: -0.4375,-0.515625
+ parent: invalid
+ - type: MapGrid
+ chunks:
+ 0,0:
+ ind: 0,0
+ tiles: AAAAAAAAAAEAAAAAAAABAAAAAAAAAgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ 0,-1:
+ ind: 0,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAIAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAMAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAACAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ -1,-1:
+ ind: -1,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAAEAAAAAAAAAwAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAACAAAAAAAAAQAAAAAAAA==
+ version: 7
+ -1,0:
+ ind: -1,0
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ - type: Broadphase
+ - type: Physics
+ bodyStatus: InAir
+ fixedRotation: False
+ bodyType: Dynamic
+ - type: Fixtures
+ fixtures: {}
+ - type: OccluderTree
+ - type: SpreaderGrid
+ - type: Shuttle
+ dampingModifier: 0.25
+ - type: ImplicitRoof
+ - type: GridPathfinding
+ - type: Gravity
+ gravityShakeSound: !type:SoundPathSpecifier
+ path: /Audio/Effects/alert.ogg
+ - type: DecalGrid
+ chunkCollection:
+ version: 2
+ nodes: []
+ - type: GridAtmosphere
+ version: 2
+ data:
+ tiles:
+ 0,0:
+ 0: 4991
+ 1: 32768
+ 0,-1:
+ 0: 29525
+ 1: 32768
+ -1,0:
+ 0: 2254
+ 1: 8449
+ 0,1:
+ 1: 52
+ -1,1:
+ 1: 132
+ 1,0:
+ 1: 327
+ 1,-1:
+ 1: 32597
+ 2,0:
+ 1: 17
+ 2,-1:
+ 1: 4369
+ 0,-2:
+ 0: 4352
+ 1: 33792
+ -1,-1:
+ 0: 51268
+ 1: 12561
+ 1,-2:
+ 1: 16384
+ 2,-2:
+ 1: 4096
+ -2,-2:
+ 1: 20480
+ -2,-1:
+ 1: 57173
+ -2,0:
+ 1: 93
+ -1,-2:
+ 1: 9216
+ uniqueMixes:
+ - volume: 2500
+ temperature: 293.15
+ moles:
+ Oxygen: 21.824879
+ Nitrogen: 82.10312
+ - volume: 2500
+ immutable: True
+ moles: {}
+ chunkSize: 4
+ - type: GasTileOverlay
+ - type: RadiationGridResistance
+ - type: ExplosionAirtightGrid
+- proto: AirAlarm
+ entities:
+ - uid: 249
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: AIR-2DC8-ED34
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: DeviceList
+ devices:
+ - 231
+ - 230
+ - type: Wires
+ wireSeed: 1244485628
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+ - uid: 311
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,-4.5
+ parent: 1
+ - type: DeviceNetwork
+ address: AIR-77F0-6974
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: DeviceList
+ devices:
+ - 312
+ - type: Wires
+ wireSeed: 804377221
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AirCanister
+ entities:
+ - uid: 247
+ components:
+ - type: Transform
+ anchored: True
+ pos: -1.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ bodyType: Static
+- proto: AirlockExternal
+ entities:
+ - uid: 222
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,0.5
+ parent: 1
+ - type: Wires
+ wireSeed: 1483240328
+ - type: DeviceNetwork
+ address: 4068-9925
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 223
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -2.5,0.5
+ parent: 1
+ - type: Wires
+ wireSeed: 744319711
+ - type: DeviceNetwork
+ address: 6108-FCBA
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: AirlockGlassShuttle
+ entities:
+ - uid: 57
+ components:
+ - type: Transform
+ pos: 0.5,-5.5
+ parent: 1
+ - type: Wires
+ wireSeed: 294509743
+ - type: DeviceNetwork
+ address: 1993-B4F2
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: AirSensor
+ entities:
+ - uid: 312
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 311
+ address: SNS-0EA5-1180
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+- proto: APCSuperCapacity
+ entities:
+ - uid: 309
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 2088435814
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+ - uid: 310
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 1825131980
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AtmosDeviceFanDirectional
+ entities:
+ - uid: 224
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -2.5,0.5
+ parent: 1
+ - uid: 225
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 3.5,0.5
+ parent: 1
+ - uid: 226
+ components:
+ - type: Transform
+ pos: 0.5,-5.5
+ parent: 1
+- proto: AtmosFixBlockerMarker
+ entities:
+ - uid: 303
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,-2.5
+ parent: 1
+ - uid: 304
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,-3.5
+ parent: 1
+ - uid: 305
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,-3.5
+ parent: 1
+ - uid: 306
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,-2.5
+ parent: 1
+- proto: ButtonFrameCaution
+ entities:
+ - uid: 250
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+- proto: CableApcExtension
+ entities:
+ - uid: 172
+ components:
+ - type: Transform
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 174
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 175
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 176
+ components:
+ - type: Transform
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 177
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 178
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 179
+ components:
+ - type: Transform
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 180
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 181
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 182
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 183
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 184
+ components:
+ - type: Transform
+ pos: -1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 185
+ components:
+ - type: Transform
+ pos: -2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 186
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 187
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 188
+ components:
+ - type: Transform
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 189
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 190
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 191
+ components:
+ - type: Transform
+ pos: 3.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 192
+ components:
+ - type: Transform
+ pos: 4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 193
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 194
+ components:
+ - type: Transform
+ pos: -1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 195
+ components:
+ - type: Transform
+ pos: -2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 196
+ components:
+ - type: Transform
+ pos: -3.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 197
+ components:
+ - type: Transform
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 198
+ components:
+ - type: Transform
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 199
+ components:
+ - type: Transform
+ pos: 3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 200
+ components:
+ - type: Transform
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 201
+ components:
+ - type: Transform
+ pos: -2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 202
+ components:
+ - type: Transform
+ pos: -2.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 269
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 308
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableHV
+ entities:
+ - uid: 31
+ components:
+ - type: Transform
+ pos: -4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 46
+ components:
+ - type: Transform
+ pos: -7.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 61
+ components:
+ - type: Transform
+ pos: -7.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 62
+ components:
+ - type: Transform
+ pos: -7.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 63
+ components:
+ - type: Transform
+ pos: -7.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 64
+ components:
+ - type: Transform
+ pos: -7.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 65
+ components:
+ - type: Transform
+ pos: -5.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 66
+ components:
+ - type: Transform
+ pos: -5.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 67
+ components:
+ - type: Transform
+ pos: -5.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 68
+ components:
+ - type: Transform
+ pos: -5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 69
+ components:
+ - type: Transform
+ pos: -5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 70
+ components:
+ - type: Transform
+ pos: 6.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 71
+ components:
+ - type: Transform
+ pos: 8.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 72
+ components:
+ - type: Transform
+ pos: -1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 73
+ components:
+ - type: Transform
+ pos: 8.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 74
+ components:
+ - type: Transform
+ pos: -3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 75
+ components:
+ - type: Transform
+ pos: -3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 76
+ components:
+ - type: Transform
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 79
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 80
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 82
+ components:
+ - type: Transform
+ pos: 4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 83
+ components:
+ - type: Transform
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 84
+ components:
+ - type: Transform
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 85
+ components:
+ - type: Transform
+ pos: 7.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 86
+ components:
+ - type: Transform
+ pos: 6.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 87
+ components:
+ - type: Transform
+ pos: 6.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 88
+ components:
+ - type: Transform
+ pos: 8.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 89
+ components:
+ - type: Transform
+ pos: 8.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 90
+ components:
+ - type: Transform
+ pos: 8.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 91
+ components:
+ - type: Transform
+ pos: 8.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 92
+ components:
+ - type: Transform
+ pos: 8.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 93
+ components:
+ - type: Transform
+ pos: 6.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 94
+ components:
+ - type: Transform
+ pos: 6.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 95
+ components:
+ - type: Transform
+ pos: 6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 96
+ components:
+ - type: Transform
+ pos: 6.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 107
+ components:
+ - type: Transform
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 108
+ components:
+ - type: Transform
+ pos: -6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 109
+ components:
+ - type: Transform
+ pos: -5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 110
+ components:
+ - type: Transform
+ pos: -5.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 111
+ components:
+ - type: Transform
+ pos: -7.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 112
+ components:
+ - type: Transform
+ pos: -7.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 114
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 115
+ components:
+ - type: Transform
+ pos: 1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 116
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 140
+ components:
+ - type: Transform
+ pos: -1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 141
+ components:
+ - type: Transform
+ pos: -0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 142
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 143
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 144
+ components:
+ - type: Transform
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 145
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 146
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 147
+ components:
+ - type: Transform
+ pos: 0.5,-5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 148
+ components:
+ - type: Transform
+ pos: 1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 153
+ components:
+ - type: Transform
+ pos: 2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 154
+ components:
+ - type: Transform
+ pos: -0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableMV
+ entities:
+ - uid: 149
+ components:
+ - type: Transform
+ pos: 1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 150
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 151
+ components:
+ - type: Transform
+ pos: 0.5,-5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 152
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 173
+ components:
+ - type: Transform
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 252
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 253
+ components:
+ - type: Transform
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 254
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 255
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 256
+ components:
+ - type: Transform
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 257
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 258
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 259
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 260
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 261
+ components:
+ - type: Transform
+ pos: -0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 262
+ components:
+ - type: Transform
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 263
+ components:
+ - type: Transform
+ pos: 1.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 264
+ components:
+ - type: Transform
+ pos: -0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 265
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 266
+ components:
+ - type: Transform
+ pos: -1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 267
+ components:
+ - type: Transform
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 268
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableTerminal
+ entities:
+ - uid: 97
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 98
+ components:
+ - type: Transform
+ pos: -1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Catwalk
+ entities:
+ - uid: 276
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 277
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 278
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 279
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 280
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 281
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 282
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 283
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 284
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 285
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 286
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 287
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 288
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 289
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -7.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 290
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 291
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 292
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 293
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 294
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 295
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 296
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 297
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 6.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 298
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 7.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 299
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 8.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 300
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 301
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 302
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 307
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ChairFolding
+ entities:
+ - uid: 157
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5002241,2.5237763
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 158
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5470991,1.6019013
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ClosetWallPink
+ entities:
+ - uid: 242
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,2.5
+ parent: 1
+ - type: ContainerContainer
+ containers:
+ entity_storage: !type:Container
+ showEnts: False
+ occludes: True
+ ents:
+ - 243
+ - 244
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: ComputerShuttle
+ entities:
+ - uid: 81
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: Wires
+ wireSeed: 1021433368
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ComputerSolarControl
+ entities:
+ - uid: 77
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,1.5
+ parent: 1
+ - type: Wires
+ wireSeed: 751685664
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Emitter
+ entities:
+ - uid: 165
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: 1385-9279
+ receiveFrequency: 1280
+ - uid: 168
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: 33E9-F77A
+ receiveFrequency: 1280
+- proto: FaxMachineBase
+ entities:
+ - uid: 248
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 473F-BA3E
+ transmitFrequency: 2640
+ receiveFrequency: 2640
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: GasOutletInjector
+ entities:
+ - uid: 203
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,-3.5
+ parent: 1
+ - type: AtmosPipeLayers
+ pipeLayer: Tertiary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+- proto: GasPassiveVent
+ entities:
+ - uid: 236
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,-2.5
+ parent: 1
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 237
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,-2.5
+ parent: 1
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 275
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-5.5
+ parent: 1
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+- proto: GasPipeBend
+ entities:
+ - uid: 234
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeBendAlt1
+ entities:
+ - uid: 270
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 271
+ components:
+ - type: Transform
+ pos: 2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+- proto: GasPipeBendAlt2
+ entities:
+ - uid: 241
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+- proto: GasPipeStraight
+ entities:
+ - uid: 207
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 208
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 209
+ components:
+ - type: Transform
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 210
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 211
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 233
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeStraightAlt1
+ entities:
+ - uid: 239
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 240
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 272
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+ - uid: 274
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+- proto: GasPipeStraightAlt2
+ entities:
+ - uid: 204
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+ - uid: 206
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+ - uid: 227
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+ - uid: 228
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+ - uid: 229
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+- proto: GasPipeTJunction
+ entities:
+ - uid: 235
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeTJunctionAlt1
+ entities:
+ - uid: 238
+ components:
+ - type: Transform
+ pos: -0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+- proto: GasPipeTJunctionAlt2
+ entities:
+ - uid: 205
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+- proto: GasPort
+ entities:
+ - uid: 232
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentPump
+ entities:
+ - uid: 230
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 249
+ address: VNT-33BE-2191
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentScrubber
+ entities:
+ - uid: 231
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 249
+ address: SCR-45BF-DFC4
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: AtmosPipeLayers
+ pipeLayer: Tertiary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#3AB334FF'
+- proto: GasVolumePumpAlt1
+ entities:
+ - uid: 273
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-3.5
+ parent: 1
+ - type: DeviceNetwork
+ address: VPP-770A-391C
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#947507FF'
+- proto: Grille
+ entities:
+ - uid: 3
+ components:
+ - type: Transform
+ pos: -0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 4
+ components:
+ - type: Transform
+ pos: -0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 5
+ components:
+ - type: Transform
+ pos: -1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 9
+ components:
+ - type: Transform
+ pos: 2.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 12
+ components:
+ - type: Transform
+ pos: -1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 17
+ components:
+ - type: Transform
+ pos: 1.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 18
+ components:
+ - type: Transform
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 19
+ components:
+ - type: Transform
+ pos: 2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 113
+ components:
+ - type: Transform
+ pos: -2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 118
+ components:
+ - type: Transform
+ pos: -0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 119
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 120
+ components:
+ - type: Transform
+ pos: -1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 121
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 122
+ components:
+ - type: Transform
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 123
+ components:
+ - type: Transform
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 124
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 125
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Gyroscope
+ entities:
+ - uid: 29
+ components:
+ - type: Transform
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: LockableButtonChiefEngineer
+ entities:
+ - uid: 251
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: SignalSwitch
+ state: True
+ - type: DeviceNetwork
+ address: 1888-72C5
+ - type: DeviceLinkSource
+ linkedPorts:
+ 168:
+ - - Pressed
+ - Toggle
+ 165:
+ - - Pressed
+ - Toggle
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: MCTNodeMachine
+ entities:
+ - uid: 58
+ components:
+ - type: Transform
+ pos: 0.5,-5.5
+ parent: 1
+ - type: Physics
+ canCollide: False
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PortableGeneratorPacman
+ entities:
+ - uid: 156
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 23DE-3F0F
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PoweredLightPostSmall
+ entities:
+ - uid: 166
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,5.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 3387-15E2
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PoweredlightSodium
+ entities:
+ - uid: 117
+ components:
+ - type: Transform
+ pos: 2.5,-5.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 4712-8E6B
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 313
+ components:
+ - type: Transform
+ pos: -1.5,-5.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 106B-BB72
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 314
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 7C79-B3B6
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 315
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-0.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 4E1F-412C
+ receiveFrequency: 1173
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Railing
+ entities:
+ - uid: 214
+ components:
+ - type: Transform
+ pos: 5.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 215
+ components:
+ - type: Transform
+ pos: 4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 216
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 217
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -3.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 219
+ components:
+ - type: Transform
+ pos: -3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 220
+ components:
+ - type: Transform
+ pos: -4.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: RailingCorner
+ entities:
+ - uid: 212
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 221
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: RailingCornerSmall
+ entities:
+ - uid: 213
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 218
+ components:
+ - type: Transform
+ pos: -4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedPhoronGlassWindow
+ entities:
+ - uid: 21
+ components:
+ - type: Transform
+ pos: -1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 22
+ components:
+ - type: Transform
+ pos: -0.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 23
+ components:
+ - type: Transform
+ pos: -0.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 24
+ components:
+ - type: Transform
+ pos: 1.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 25
+ components:
+ - type: Transform
+ pos: 1.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 26
+ components:
+ - type: Transform
+ pos: 2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 53
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 54
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 126
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 127
+ components:
+ - type: Transform
+ pos: -2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 128
+ components:
+ - type: Transform
+ pos: -1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 129
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 130
+ components:
+ - type: Transform
+ pos: -0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 131
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 132
+ components:
+ - type: Transform
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 133
+ components:
+ - type: Transform
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 134
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedPhoronGlassWindowDirectional
+ entities:
+ - uid: 47
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 48
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 49
+ components:
+ - type: Transform
+ pos: -2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 50
+ components:
+ - type: Transform
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 51
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 52
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SheetPlasma
+ entities:
+ - uid: 243
+ components:
+ - type: Transform
+ parent: 242
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 242
+ - uid: 244
+ components:
+ - type: Transform
+ parent: 242
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 242
+ - uid: 245
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.6522242,2.6780105
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SMESAdvancedEmpty
+ entities:
+ - uid: 59
+ components:
+ - type: Transform
+ pos: -1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: SMS-5328-E5E5
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - uid: 60
+ components:
+ - type: Transform
+ pos: 2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: SMS-6EEF-058C
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+- proto: SolarPanelPhoron
+ entities:
+ - uid: 2
+ components:
+ - type: Transform
+ pos: -7.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 32
+ components:
+ - type: Transform
+ pos: 6.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 33
+ components:
+ - type: Transform
+ pos: 6.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 34
+ components:
+ - type: Transform
+ pos: 6.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 35
+ components:
+ - type: Transform
+ pos: 8.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 36
+ components:
+ - type: Transform
+ pos: 8.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 37
+ components:
+ - type: Transform
+ pos: -5.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 38
+ components:
+ - type: Transform
+ pos: 8.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 39
+ components:
+ - type: Transform
+ pos: -5.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 40
+ components:
+ - type: Transform
+ pos: 6.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 41
+ components:
+ - type: Transform
+ pos: -5.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 42
+ components:
+ - type: Transform
+ pos: -5.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 43
+ components:
+ - type: Transform
+ pos: -7.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 44
+ components:
+ - type: Transform
+ pos: -7.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 45
+ components:
+ - type: Transform
+ pos: -7.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 78
+ components:
+ - type: Transform
+ pos: 8.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 99
+ components:
+ - type: Transform
+ pos: 6.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 100
+ components:
+ - type: Transform
+ pos: 6.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 101
+ components:
+ - type: Transform
+ pos: 8.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 102
+ components:
+ - type: Transform
+ pos: 8.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 103
+ components:
+ - type: Transform
+ pos: -7.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 104
+ components:
+ - type: Transform
+ pos: -7.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 105
+ components:
+ - type: Transform
+ pos: -5.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 106
+ components:
+ - type: Transform
+ pos: -5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SolarTracker
+ entities:
+ - uid: 30
+ components:
+ - type: Transform
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SubstationWallBasic
+ entities:
+ - uid: 139
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: TableReinforced
+ entities:
+ - uid: 155
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Thruster
+ entities:
+ - uid: 159
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -3.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 160
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 161
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 162
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 163
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 164
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 167
+ components:
+ - type: Transform
+ pos: 3.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 169
+ components:
+ - type: Transform
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 170
+ components:
+ - type: Transform
+ pos: -2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 171
+ components:
+ - type: Transform
+ pos: -1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WallReinforced
+ entities:
+ - uid: 6
+ components:
+ - type: Transform
+ pos: -2.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 7
+ components:
+ - type: Transform
+ pos: -2.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 10
+ components:
+ - type: Transform
+ pos: -0.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 11
+ components:
+ - type: Transform
+ pos: 1.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 14
+ components:
+ - type: Transform
+ pos: 3.5,-3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 15
+ components:
+ - type: Transform
+ pos: 3.5,-2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 16
+ components:
+ - type: Transform
+ pos: 3.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 20
+ components:
+ - type: Transform
+ pos: -2.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 27
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 28
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -0.5,-1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 55
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,-5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 56
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 135
+ components:
+ - type: Transform
+ pos: -2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 136
+ components:
+ - type: Transform
+ pos: -1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 137
+ components:
+ - type: Transform
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 138
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WallReinforcedDiagonal
+ entities:
+ - uid: 8
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 13
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -2.5,-4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Wrench
+ entities:
+ - uid: 246
+ components:
+ - type: Transform
+ pos: -0.33972418,2.5821333
+ parent: 1
+...
diff --git a/Resources/Maps/Shuttles/PS14 Shuttle Grids/WDarrow b/Resources/Maps/Shuttles/PS14 Shuttle Grids/WDarrow
new file mode 100644
index 00000000000..b9abd1e2004
--- /dev/null
+++ b/Resources/Maps/Shuttles/PS14 Shuttle Grids/WDarrow
@@ -0,0 +1,2068 @@
+meta:
+ format: 7
+ category: Grid
+ engineVersion: 270.0.0
+ forkId: ""
+ forkVersion: ""
+ time: 01/25/2026 04:00:40
+ entityCount: 131
+maps: []
+grids:
+- 1
+orphans:
+- 1
+nullspace: []
+tilemap:
+ 3: Space
+ 1: FloorDark
+ 2: Lattice
+ 0: Plating
+entities:
+- proto: ""
+ entities:
+ - uid: 1
+ components:
+ - type: MetaData
+ name: grid
+ - type: Transform
+ pos: -1.40625,-0.6875
+ parent: invalid
+ - type: MapGrid
+ chunks:
+ 0,0:
+ ind: 0,0
+ tiles: AAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAACAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAA==
+ version: 7
+ 0,-1:
+ ind: 0,-1
+ tiles: AwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAIAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAA==
+ version: 7
+ -1,0:
+ ind: -1,0
+ tiles: AwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAAAAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAAAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAAAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAA==
+ version: 7
+ - type: Broadphase
+ - type: Physics
+ bodyStatus: InAir
+ fixedRotation: False
+ bodyType: Dynamic
+ - type: Fixtures
+ fixtures: {}
+ - type: OccluderTree
+ - type: SpreaderGrid
+ - type: Shuttle
+ dampingModifier: 0.25
+ - type: ImplicitRoof
+ - type: GridPathfinding
+ - type: Gravity
+ gravityShakeSound: !type:SoundPathSpecifier
+ path: /Audio/Effects/alert.ogg
+ - type: DecalGrid
+ chunkCollection:
+ version: 2
+ nodes: []
+ - type: GridAtmosphere
+ version: 2
+ data:
+ tiles:
+ 0,-1:
+ 0: 62464
+ 0,0:
+ 1: 65262
+ -1,0:
+ 0: 8
+ 1: 32768
+ 0,1:
+ 1: 61166
+ 0,2:
+ 0: 161
+ 1: 14
+ 1,2:
+ 0: 1
+ 1,-1:
+ 0: 4096
+ 1,0:
+ 0: 2
+ uniqueMixes:
+ - volume: 2500
+ immutable: True
+ moles: {}
+ - volume: 2500
+ temperature: 293.15
+ moles:
+ Oxygen: 21.824879
+ Nitrogen: 82.10312
+ chunkSize: 4
+ - type: GasTileOverlay
+ - type: ExplosionAirtightGrid
+ - type: RadiationGridResistance
+- proto: AirAlarm
+ entities:
+ - uid: 2
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,4.5
+ parent: 1
+ - type: DeviceNetwork
+ address: AIR-7F11-9474
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: DeviceList
+ devices:
+ - 63
+ - 52
+ - 64
+ - 46
+ - type: Wires
+ wireSeed: 1125148929
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AirCanister
+ entities:
+ - uid: 3
+ components:
+ - type: Transform
+ anchored: True
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ bodyType: Static
+ - uid: 4
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: AirlockGlassShuttle
+ entities:
+ - uid: 5
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,3.5
+ parent: 1
+ - type: Wires
+ wireSeed: 923808896
+ - type: DeviceNetwork
+ address: 7025-40B2
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: APCBasic
+ entities:
+ - uid: 6
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,2.5
+ parent: 1
+ - type: Battery
+ lastCharge: 50000
+ - type: Wires
+ wireSeed: 1818167359
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: AtmosDeviceFanDirectional
+ entities:
+ - uid: 7
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,3.5
+ parent: 1
+- proto: CableApcExtension
+ entities:
+ - uid: 8
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 9
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 10
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 11
+ components:
+ - type: Transform
+ pos: 2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 12
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 13
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 14
+ components:
+ - type: Transform
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 15
+ components:
+ - type: Transform
+ pos: 2.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 16
+ components:
+ - type: Transform
+ pos: 2.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableHV
+ entities:
+ - uid: 17
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 18
+ components:
+ - type: Transform
+ pos: 1.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 19
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 20
+ components:
+ - type: Transform
+ pos: 2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 21
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 22
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 23
+ components:
+ - type: Transform
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 24
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 25
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableMV
+ entities:
+ - uid: 26
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 27
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 28
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 29
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableTerminal
+ entities:
+ - uid: 30
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ChairPilotSeat
+ entities:
+ - uid: 31
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 32
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 33
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 34
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 35
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 36
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 37
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ClosetWallPink
+ entities:
+ - uid: 38
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,0.5
+ parent: 1
+ - type: ContainerContainer
+ containers:
+ entity_storage: !type:Container
+ showEnts: False
+ occludes: True
+ ents:
+ - 40
+ - 39
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Fixtures
+ fixtures: {}
+- proto: ComputerShuttle
+ entities:
+ - uid: 41
+ components:
+ - type: Transform
+ pos: 2.5,8.5
+ parent: 1
+ - type: Wires
+ wireSeed: 181077545
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: GasPassiveVent
+ entities:
+ - uid: 42
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-1.5
+ parent: 1
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeBend
+ entities:
+ - uid: 44
+ components:
+ - type: Transform
+ pos: 2.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 45
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeBendAlt1
+ entities:
+ - uid: 47
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeStraight
+ entities:
+ - uid: 48
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 49
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 50
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 51
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 53
+ components:
+ - type: Transform
+ pos: 2.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeStraightAlt1
+ entities:
+ - uid: 55
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 56
+ components:
+ - type: Transform
+ pos: 2.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 57
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 58
+ components:
+ - type: Transform
+ pos: 2.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 59
+ components:
+ - type: Transform
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 60
+ components:
+ - type: Transform
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPipeTJunction
+ entities:
+ - uid: 54
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 61
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasPipeTJunctionAlt1
+ entities:
+ - uid: 62
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: GasPort
+ entities:
+ - uid: 43
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentPump
+ entities:
+ - uid: 46
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 2
+ address: VNT-6F00-D10E
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+ - uid: 52
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,6.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ deviceLists:
+ - 2
+ address: VNT-6D05-9BC3
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
+- proto: GasVentScrubber
+ entities:
+ - uid: 63
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,6.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ - invalid
+ deviceLists:
+ - 2
+ address: SCR-0223-D045
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: Construction
+ step: 1
+ edge: 0
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+ - uid: 64
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,0.5
+ parent: 1
+ - type: DeviceNetwork
+ configurators:
+ - invalid
+ - invalid
+ deviceLists:
+ - 2
+ address: SCR-214C-55CC
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+ - type: AtmosPipeLayers
+ pipeLayer: Secondary
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: AtmosPipeColor
+ color: '#990000FF'
+- proto: Grille
+ entities:
+ - uid: 65
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 66
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 67
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 68
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 69
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 70
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 71
+ components:
+ - type: Transform
+ pos: 0.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 72
+ components:
+ - type: Transform
+ pos: 4.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 73
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 2.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: GrilleDiagonal
+ entities:
+ - uid: 74
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 75
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 3.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 76
+ components:
+ - type: Transform
+ pos: 0.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 77
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 78
+ components:
+ - type: Transform
+ pos: 1.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 79
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Gyroscope
+ entities:
+ - uid: 80
+ components:
+ - type: Transform
+ pos: 2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: LedLightTube
+ entities:
+ - uid: 82
+ components:
+ - type: Transform
+ parent: 81
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - uid: 84
+ components:
+ - type: Transform
+ parent: 83
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+- proto: MCTNodeMachine
+ entities:
+ - uid: 85
+ components:
+ - type: Transform
+ pos: -0.5,3.5
+ parent: 1
+ - type: Physics
+ canCollide: False
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PortableGeneratorPacman
+ entities:
+ - uid: 86
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 1A78-7DE4
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PoweredlightEmpty
+ entities:
+ - uid: 81
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,2.5
+ parent: 1
+ - type: ContainerContainer
+ containers:
+ light_bulb: !type:ContainerSlot
+ showEnts: False
+ occludes: True
+ ent: 82
+ - type: ApcPowerReceiver
+ powerLoad: 12
+ - type: DeviceNetwork
+ address: 07CC-CA62
+ receiveFrequency: 1173
+ - type: DamageOnInteract
+ isDamageActive: False
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 83
+ components:
+ - type: Transform
+ pos: 2.5,8.5
+ parent: 1
+ - type: ContainerContainer
+ containers:
+ light_bulb: !type:ContainerSlot
+ showEnts: False
+ occludes: True
+ ent: 84
+ - type: ApcPowerReceiver
+ powerLoad: 12
+ - type: DeviceNetwork
+ address: 2275-1EE5
+ receiveFrequency: 1173
+ - type: DamageOnInteract
+ isDamageActive: False
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedWindow
+ entities:
+ - uid: 87
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 88
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 89
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 90
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 91
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 92
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,6.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 93
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,5.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 94
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 95
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,3.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedWindowDiagonal
+ entities:
+ - uid: 96
+ components:
+ - type: Transform
+ pos: 0.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 97
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 98
+ components:
+ - type: Transform
+ pos: 1.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 99
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 3.5,9.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 100
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 3.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 101
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,8.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SheetPlasma
+ entities:
+ - uid: 39
+ components:
+ - type: Transform
+ parent: 38
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 38
+ - uid: 40
+ components:
+ - type: Transform
+ parent: 38
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Physics
+ canCollide: False
+ - type: InsideEntityStorage
+ storage: 38
+ - uid: 102
+ components:
+ - type: Transform
+ pos: 3.67739,1.6079532
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SMESBasic
+ entities:
+ - uid: 103
+ components:
+ - type: Transform
+ pos: 1.5,1.5
+ parent: 1
+ - type: Battery
+ lastCharge: 16000000
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: SMS-0CD6-6943
+ transmitFrequency: 1621
+ receiveFrequency: 1621
+- proto: SubstationWallBasic
+ entities:
+ - uid: 104
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,1.5
+ parent: 1
+ - type: Battery
+ lastCharge: 2000000
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: TableReinforced
+ entities:
+ - uid: 105
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 106
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,7.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Thruster
+ entities:
+ - uid: 107
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 108
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 109
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 110
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 0.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 111
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 112
+ components:
+ - type: Transform
+ pos: 5.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WallSolid
+ entities:
+ - uid: 113
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 114
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 115
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 116
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,4.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 117
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 118
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 0.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 119
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 120
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,1.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 121
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Windoor
+ entities:
+ - uid: 122
+ components:
+ - type: Transform
+ pos: 2.5,2.5
+ parent: 1
+ - type: DeviceNetwork
+ address: 771D-B507
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Wires
+ wireSeed: 1967662057
+- proto: WindowReinforcedDirectional
+ entities:
+ - uid: 123
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 124
+ components:
+ - type: Transform
+ pos: 3.5,2.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 125
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 126
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 127
+ components:
+ - type: Transform
+ pos: 3.5,0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 128
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 129
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 130
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-0.5
+ parent: 1
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: Wrench
+ entities:
+ - uid: 131
+ components:
+ - type: Transform
+ pos: 3.275074,1.3694627
+ parent: 1
+...
diff --git a/Resources/Maps/zenith.yml b/Resources/Maps/zenith.yml
new file mode 100644
index 00000000000..efc2485e988
--- /dev/null
+++ b/Resources/Maps/zenith.yml
@@ -0,0 +1,2748 @@
+meta:
+ format: 7
+ category: Map
+ engineVersion: 270.0.0
+ forkId: ""
+ forkVersion: ""
+ time: 01/23/2026 05:34:02
+ entityCount: 196
+maps:
+- 1
+grids:
+- 2
+orphans: []
+nullspace: []
+tilemap:
+ 4: Space
+ 2: FloorAstroGrass
+ 0: FloorRGlass
+ 3: Lattice
+ 1: Plating
+entities:
+- proto: ""
+ entities:
+ - uid: 1
+ components:
+ - type: MetaData
+ name: Map Entity
+ - type: Transform
+ - type: Map
+ mapPaused: True
+ - type: GridTree
+ - type: SolarLocation
+ sunAngularVelocity: 0.0014357170367608957 rad
+ towardsSun: 1.0161689503098847 rad
+ - type: Broadphase
+ - type: OccluderTree
+ - uid: 2
+ components:
+ - type: MetaData
+ name: grid
+ - type: Transform
+ pos: -0.48958334,-0.5416667
+ parent: 1
+ - type: MapGrid
+ chunks:
+ 0,0:
+ ind: 0,0
+ tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ 0,-1:
+ ind: 0,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAABAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAA==
+ version: 7
+ -1,-1:
+ ind: -1,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA==
+ version: 7
+ -1,0:
+ ind: -1,0
+ tiles: AQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABAAAAAAAAAQAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAIAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAADAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAwAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAMAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAA==
+ version: 7
+ 0,1:
+ ind: 0,1
+ tiles: AQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ -1,1:
+ ind: -1,1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ -2,-1:
+ ind: -2,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAA==
+ version: 7
+ -2,0:
+ ind: -2,0
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ 1,-1:
+ ind: 1,-1
+ tiles: BAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ 1,0:
+ ind: 1,0
+ tiles: AQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAQAAAAAAAAEAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAA==
+ version: 7
+ - type: Broadphase
+ - type: Physics
+ bodyStatus: InAir
+ fixedRotation: False
+ bodyType: Dynamic
+ - type: Fixtures
+ fixtures: {}
+ - type: OccluderTree
+ - type: SpreaderGrid
+ - type: Shuttle
+ dampingModifier: 0.25
+ - type: ImplicitRoof
+ - type: GridPathfinding
+ - type: Gravity
+ gravityShakeSound: !type:SoundPathSpecifier
+ path: /Audio/Effects/alert.ogg
+ - type: DecalGrid
+ chunkCollection:
+ version: 2
+ nodes:
+ - node:
+ color: '#FFFFFFFF'
+ id: FlowersBRThree
+ decals:
+ 0: -0.2138511,3.03488
+ - node:
+ color: '#FFFFFFFF'
+ id: Flowersy3
+ decals:
+ 1: 1.6923988,2.7327964
+ - type: GridAtmosphere
+ version: 2
+ data:
+ chunkSize: 4
+ - type: GasTileOverlay
+ - type: RadiationGridResistance
+ - type: ExplosionAirtightGrid
+- proto: AirlockCommand
+ entities:
+ - uid: 193
+ components:
+ - type: Transform
+ pos: -2.5,-11.5
+ parent: 2
+ - type: WiresPanelSecurity
+ wiresAccessible: False
+ examine: wires-panel-component-on-examine-security-level2
+ - type: Wires
+ wireSeed: 428474181
+ - type: DeviceNetwork
+ address: 7EF2-66EC
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Construction
+ node: medSecurity
+- proto: Biogenerator
+ entities:
+ - uid: 4
+ components:
+ - type: Transform
+ pos: -0.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: CableApcExtension
+ entities:
+ - uid: 34
+ components:
+ - type: Transform
+ pos: -3.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 35
+ components:
+ - type: Transform
+ pos: -2.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 36
+ components:
+ - type: Transform
+ pos: -1.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 37
+ components:
+ - type: Transform
+ pos: -0.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 38
+ components:
+ - type: Transform
+ pos: 0.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 39
+ components:
+ - type: Transform
+ pos: 1.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 40
+ components:
+ - type: Transform
+ pos: 2.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 41
+ components:
+ - type: Transform
+ pos: 3.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 42
+ components:
+ - type: Transform
+ pos: 4.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 43
+ components:
+ - type: Transform
+ pos: 5.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 44
+ components:
+ - type: Transform
+ pos: -4.5,0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 45
+ components:
+ - type: Transform
+ pos: 0.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 46
+ components:
+ - type: Transform
+ pos: 0.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 47
+ components:
+ - type: Transform
+ pos: 0.5,3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 48
+ components:
+ - type: Transform
+ pos: 0.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 49
+ components:
+ - type: Transform
+ pos: 0.5,5.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 50
+ components:
+ - type: Transform
+ pos: 0.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 51
+ components:
+ - type: Transform
+ pos: 0.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 52
+ components:
+ - type: Transform
+ pos: 0.5,-2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 53
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 54
+ components:
+ - type: Transform
+ pos: 0.5,-4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: FloraTree
+ entities:
+ - uid: 24
+ components:
+ - type: Transform
+ pos: -0.9694445,3.430052
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: FloraTreeLarge
+ entities:
+ - uid: 3
+ components:
+ - type: Transform
+ pos: 0.43680552,4.377969
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: hydroponicsSoil
+ entities:
+ - uid: 5
+ components:
+ - type: Transform
+ pos: -0.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 6
+ components:
+ - type: Transform
+ pos: -0.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 7
+ components:
+ - type: Transform
+ pos: -2.5,-2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 8
+ components:
+ - type: Transform
+ pos: -2.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 9
+ components:
+ - type: Transform
+ pos: -2.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 11
+ components:
+ - type: Transform
+ pos: 1.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 12
+ components:
+ - type: Transform
+ pos: 1.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 13
+ components:
+ - type: Transform
+ pos: 3.5,-2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 14
+ components:
+ - type: Transform
+ pos: 3.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 15
+ components:
+ - type: Transform
+ pos: 3.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 16
+ components:
+ - type: Transform
+ pos: 4.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 17
+ components:
+ - type: Transform
+ pos: -3.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 18
+ components:
+ - type: Transform
+ pos: -3.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 19
+ components:
+ - type: Transform
+ pos: -2.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 20
+ components:
+ - type: Transform
+ pos: -2.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 21
+ components:
+ - type: Transform
+ pos: -2.5,3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 22
+ components:
+ - type: Transform
+ pos: -0.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 23
+ components:
+ - type: Transform
+ pos: -0.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 28
+ components:
+ - type: Transform
+ pos: 1.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 29
+ components:
+ - type: Transform
+ pos: 1.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 30
+ components:
+ - type: Transform
+ pos: 3.5,3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 31
+ components:
+ - type: Transform
+ pos: 3.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 32
+ components:
+ - type: Transform
+ pos: 3.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 33
+ components:
+ - type: Transform
+ pos: 4.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: PlasmaReinforcedWindowDirectional
+ entities:
+ - uid: 147
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 8.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 148
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 9.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 149
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 10.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 150
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 11.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 151
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 12.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 152
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 13.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 153
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 14.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 154
+ components:
+ - type: Transform
+ pos: 14.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 155
+ components:
+ - type: Transform
+ pos: 13.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 156
+ components:
+ - type: Transform
+ pos: 12.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 157
+ components:
+ - type: Transform
+ pos: 11.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 158
+ components:
+ - type: Transform
+ pos: 10.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 159
+ components:
+ - type: Transform
+ pos: 9.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 160
+ components:
+ - type: Transform
+ pos: 8.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 161
+ components:
+ - type: Transform
+ pos: 8.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 162
+ components:
+ - type: Transform
+ pos: 9.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 163
+ components:
+ - type: Transform
+ pos: 10.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 164
+ components:
+ - type: Transform
+ pos: 11.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 165
+ components:
+ - type: Transform
+ pos: 12.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 166
+ components:
+ - type: Transform
+ pos: 13.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 167
+ components:
+ - type: Transform
+ pos: 14.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 168
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 14.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 169
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 13.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 170
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 12.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 171
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 11.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 172
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 10.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 173
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 9.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 174
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 8.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: ReinforcedPhoronGlassWindowDirectional
+ entities:
+ - uid: 91
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,8.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 92
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,9.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 93
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,10.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 94
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 95
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,12.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 96
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,13.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 97
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,14.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 98
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,14.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 99
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,13.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 100
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,12.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 101
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 102
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,10.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 103
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,9.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 104
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,8.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 105
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,8.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 106
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,9.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 107
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,10.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 108
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 109
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,12.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 110
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,13.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 111
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: -0.5,14.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 112
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,14.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 113
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,13.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 114
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,12.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 115
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 116
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,10.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 117
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,9.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 118
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: 1.5,8.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SeedExtractor
+ entities:
+ - uid: 10
+ components:
+ - type: Transform
+ pos: 0.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: SprayPainterRecharging
+ entities:
+ - uid: 175
+ components:
+ - type: Transform
+ pos: -5.6859665,0.42685974
+ parent: 2
+ - type: SprayPainter
+ selectedDecalColor: '#FFFFFFFF'
+ selectedDecal: SpaceStationSign2
+ selectedTab: 6
+- proto: TableReinforced
+ entities:
+ - uid: 191
+ components:
+ - type: Transform
+ pos: -4.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 192
+ components:
+ - type: Transform
+ pos: -5.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: UraniumReinforcedWindowDirectional
+ entities:
+ - uid: 55
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 56
+ components:
+ - type: Transform
+ pos: -3.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 57
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 58
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 59
+ components:
+ - type: Transform
+ pos: -2.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 60
+ components:
+ - type: Transform
+ pos: -1.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 61
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 62
+ components:
+ - type: Transform
+ pos: -0.5,5.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 63
+ components:
+ - type: Transform
+ pos: 0.5,5.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 64
+ components:
+ - type: Transform
+ pos: 1.5,5.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 65
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 66
+ components:
+ - type: Transform
+ pos: 2.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 67
+ components:
+ - type: Transform
+ pos: 3.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 68
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 69
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 70
+ components:
+ - type: Transform
+ pos: 4.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 71
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 5.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 72
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 5.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 73
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 4.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 74
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 75
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 4.5,-2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 76
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 3.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 77
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 2.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 78
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 2.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 79
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 1.5,-4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 80
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: 0.5,-4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 81
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -0.5,-4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 82
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -1.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 83
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -1.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 84
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -2.5,-3.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 85
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,-2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 86
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -3.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 87
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -3.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 88
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 119
+ components:
+ - type: Transform
+ pos: -7.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 120
+ components:
+ - type: Transform
+ pos: -8.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 121
+ components:
+ - type: Transform
+ pos: -9.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 122
+ components:
+ - type: Transform
+ pos: -10.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 123
+ components:
+ - type: Transform
+ pos: -11.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 124
+ components:
+ - type: Transform
+ pos: -12.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 125
+ components:
+ - type: Transform
+ pos: -13.5,2.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 126
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -13.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 127
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -12.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 128
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -11.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 129
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -10.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 130
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -9.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 131
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -8.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 132
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -7.5,1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 133
+ components:
+ - type: Transform
+ pos: -7.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 134
+ components:
+ - type: Transform
+ pos: -8.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 135
+ components:
+ - type: Transform
+ pos: -9.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 136
+ components:
+ - type: Transform
+ pos: -10.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 137
+ components:
+ - type: Transform
+ pos: -11.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 138
+ components:
+ - type: Transform
+ pos: -12.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 139
+ components:
+ - type: Transform
+ pos: -13.5,-0.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 140
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -13.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 141
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -12.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 142
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -11.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 143
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -10.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 144
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -9.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 145
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -8.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 146
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -7.5,-1.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: VendingMachineSeeds
+ entities:
+ - uid: 27
+ components:
+ - type: Transform
+ pos: 1.5,-3.5
+ parent: 2
+ - type: Wires
+ wireSeed: 1956777458
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WallReinforced
+ entities:
+ - uid: 25
+ components:
+ - type: Transform
+ pos: -5.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 176
+ components:
+ - type: Transform
+ pos: -4.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 177
+ components:
+ - type: Transform
+ pos: -3.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 178
+ components:
+ - type: Transform
+ pos: -2.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 179
+ components:
+ - type: Transform
+ pos: 3.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 180
+ components:
+ - type: Transform
+ pos: 4.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 181
+ components:
+ - type: Transform
+ pos: 5.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 182
+ components:
+ - type: Transform
+ pos: 6.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 183
+ components:
+ - type: Transform
+ pos: -6.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 184
+ components:
+ - type: Transform
+ pos: -1.5,-6.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 185
+ components:
+ - type: Transform
+ pos: -1.5,-7.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 186
+ components:
+ - type: Transform
+ pos: -1.5,-8.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 187
+ components:
+ - type: Transform
+ pos: -1.5,-9.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 188
+ components:
+ - type: Transform
+ pos: -1.5,-10.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 189
+ components:
+ - type: Transform
+ pos: -1.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 190
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -3.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - uid: 196
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -6.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+- proto: WindoorSecure
+ entities:
+ - uid: 194
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -5.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: 6EF7-BE03
+ receiveFrequency: 1280
+ - type: Wires
+ wireSeed: 1172026776
+ - uid: 195
+ components:
+ - type: Transform
+ rot: 3.141592653589793 rad
+ pos: -4.5,-11.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: DeviceNetwork
+ address: 6984-E7F3
+ receiveFrequency: 1280
+ - type: Wires
+ wireSeed: 1440449725
+- proto: WindoorUranium
+ entities:
+ - uid: 89
+ components:
+ - type: Transform
+ rot: 1.5707963267948966 rad
+ pos: -4.5,0.5
+ parent: 2
+ - type: DeviceNetwork
+ address: 5D3A-70E7
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Wires
+ wireSeed: 692671233
+ - uid: 90
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 5.5,0.5
+ parent: 2
+ - type: DeviceNetwork
+ address: 5C71-A73E
+ receiveFrequency: 1280
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Structural: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+ - type: Wires
+ wireSeed: 397578053
+- proto: WoodenBench
+ entities:
+ - uid: 26
+ components:
+ - type: Transform
+ pos: 1.5,4.5
+ parent: 2
+ - type: Damageable
+ damageDictCopy:
+ Heat: 0
+ Shock: 0
+ Blunt: 0
+ Slash: 0
+ Piercing: 0
+...
diff --git a/Resources/Prototypes/Atmospherics/gases.yml b/Resources/Prototypes/Atmospherics/gases.yml
index 9083b4d6820..125284595c8 100644
--- a/Resources/Prototypes/Atmospherics/gases.yml
+++ b/Resources/Prototypes/Atmospherics/gases.yml
@@ -160,4 +160,4 @@
gasMolesVisible: 0.8
color: FF6B35
reagent: ChlorineTrifluoride
- pricePerMole: 1.5
+ pricePerMole: 3
diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml
index 152c4c4112c..f7efe3d554f 100644
--- a/Resources/Prototypes/Body/Organs/Animal/animal.yml
+++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml
@@ -22,6 +22,7 @@
- type: Tag
tags:
- Meat
+ - Recyclable
- type: entity
id: BaseAnimalOrgan
diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml
index 337ead6e09d..21524795cfc 100644
--- a/Resources/Prototypes/Body/Organs/arachnid.yml
+++ b/Resources/Prototypes/Body/Organs/arachnid.yml
@@ -24,6 +24,7 @@
- type: Tag
tags:
- Meat
+ - Recyclable
- type: entity
id: OrganArachnidStomach
diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml
index 15ec63232bc..83956ece20a 100644
--- a/Resources/Prototypes/Body/Organs/diona.yml
+++ b/Resources/Prototypes/Body/Organs/diona.yml
@@ -23,6 +23,9 @@
- type: FlavorProfile
flavors:
- people
+ - type: Tag
+ tags:
+ - Recyclable
- type: entity
id: OrganDionaBrain
@@ -50,6 +53,8 @@
reagents:
- ReagentId: GreyMatter
Quantity: 5
+ - type: Tag
+ tags: [] # don't inherit recyclable for brains
- type: entity
id: OrganDionaEyes
diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml
index df9eb3f5da8..9dc25167324 100644
--- a/Resources/Prototypes/Body/Organs/human.yml
+++ b/Resources/Prototypes/Body/Organs/human.yml
@@ -25,6 +25,7 @@
- type: Tag
tags:
- Meat
+ - Recyclable
- type: entity
id: BaseHumanOrgan
diff --git a/Resources/Prototypes/Catalog/Bounties/salvage_jobs.yml b/Resources/Prototypes/Catalog/Bounties/salvage_jobs.yml
index 1037f398e7c..391d0c753b4 100644
--- a/Resources/Prototypes/Catalog/Bounties/salvage_jobs.yml
+++ b/Resources/Prototypes/Catalog/Bounties/salvage_jobs.yml
@@ -120,41 +120,6 @@
tags:
- OreBananium
-- type: cargoBounty
- id: BountyGoliathPlates
- reward: 12500
- description: bounty-description-plates
- group: HunterBounty
- sprite:
- sprite: Mobs/Aliens/Asteroid/goliath.rsi
- state: goliath
- entries:
- - name: bounty-item-plates
- amount: 4
- whitelist:
- tags:
- - GoliathPlate
- - name: bounty-item-goliathmeat
- amount: 6
- whitelist:
- tags:
- - GoliathMeat
-
-- type: cargoBounty
- id: BountyHivelordRemains
- reward: 17500
- description: bounty-description-remains
- group: HunterBounty
- sprite:
- sprite: Mobs/Aliens/Asteroid/hivelord.rsi
- state: hivelord
- entries:
- - name: bounty-item-remains
- amount: 3
- whitelist:
- tags:
- - HivelordRemains
-
- type: cargoBounty
id: BountyBear
reward: 7500
@@ -174,7 +139,7 @@
- type: cargoBounty
id: BountySpider
- reward: 7500
+ reward: 8000
description: bounty-description-spider
entries:
- name: bounty-item-spidermeat
@@ -182,6 +147,11 @@
whitelist:
tags:
- SpiderMeat
+ - name: bounty-item-egg-spider
+ amount: 1
+ whitelist:
+ tags:
+ - EggSpider
group: HunterBounty
- type: cargoBounty
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_bounties_food.yml b/Resources/Prototypes/Catalog/Cargo/cargo_bounties_food.yml
deleted file mode 100644
index 6eefd1e15a3..00000000000
--- a/Resources/Prototypes/Catalog/Cargo/cargo_bounties_food.yml
+++ /dev/null
@@ -1,154 +0,0 @@
-# Cargo bounty rebalance for issue #161
-# REMOVED trivial single-item bounties like:
-# - $3000 / 10x Carrots
-# - $2000 / 3x Carrot fries
-# REPLACED with combined multi-item bounties that require ~45+ min to complete
-# Reward guideline: ~20% above one of the constituent bounties (not a hard rule)
-# Refresh timer context: 2.5 hours, so bounties should feel meaningful but obtainable
-
-- type: cargoBounty
- id: FoodCarrotMixed
- label: cargo-bounty-food-carrot-mixed
- reward: 2500
- entries:
- # WHY: merged 10x Carrots ($3000) + 3x Carrot Fries ($2000) into one bounty
- # Quantities increased to raise complexity; reward set between the two originals
- # so players feel rewarded without it being a windfall for trivial effort
- - id: FoodCarrot
- name: cargo-bounty-entry-carrot
- amount: 25
- orGroup: null
- - id: FoodCarrotFries
- name: cargo-bounty-entry-carrot-fries
- amount: 8
- orGroup: null
- # WHY: carrot cake added as optional complexity boost per issue guidance
- # "adding related items to increase complexity is also valid where it makes sense"
- - id: FoodCarrotCake
- name: cargo-bounty-entry-carrot-cake
- amount: 4
- orGroup: null
-
-- type: cargoBounty
- id: FoodBreadAssorted
- label: cargo-bounty-food-bread-assorted
- reward: 3000
- entries:
- # WHY: replaces trivial single bread bounties; baker must produce a full assortment
- # This requires sustained kitchen effort rather than a single quick craft
- - id: FoodBreadPlain
- name: cargo-bounty-entry-bread-plain
- amount: 10
- orGroup: null
- - id: FoodBreadMeatball
- name: cargo-bounty-entry-bread-meatball
- amount: 5
- orGroup: null
- - id: FoodBreadBanana
- name: cargo-bounty-entry-bread-banana
- amount: 5
- orGroup: null
-
-- type: cargoBounty
- id: FoodSaladPlatter
- label: cargo-bounty-food-salad-platter
- reward: 2800
- entries:
- # WHY: salad items are fast to make individually but sourcing ingredients
- # for all three together creates meaningful kitchen coordination time
- - id: FoodSaladGarden
- name: cargo-bounty-entry-salad-garden
- amount: 8
- orGroup: null
- - id: FoodSaladCaesar
- name: cargo-bounty-entry-salad-caesar
- amount: 6
- orGroup: null
- - id: FoodSaladWaldorf
- name: cargo-bounty-entry-salad-waldorf
- amount: 4
- orGroup: null
-
-- type: cargoBounty
- id: FoodMeatCooked
- label: cargo-bounty-food-meat-cooked
- reward: 3500
- entries:
- # WHY: requires both hunting/processing AND cooking, two distinct gameplay loops
- # combining them ensures the bounty can't be trivialized by one player alone quickly
- - id: FoodMeatSteak
- name: cargo-bounty-entry-meat-steak
- amount: 10
- orGroup: null
- - id: FoodMeatBurger
- name: cargo-bounty-entry-meat-burger
- amount: 8
- orGroup: null
- - id: FoodMeatCutlet
- name: cargo-bounty-entry-meat-cutlet
- amount: 6
- orGroup: null
-
-- type: cargoBounty
- id: FoodDairyProducts
- label: cargo-bounty-food-dairy-products
- reward: 2200
- entries:
- # WHY: dairy requires botany (seeds) + kitchen processing chain
- # multiple products ensure it cannot be completed with a single recipe loop
- - id: FoodCheese
- name: cargo-bounty-entry-cheese
- amount: 8
- orGroup: null
- - id: FoodButter
- name: cargo-bounty-entry-butter
- amount: 6
- orGroup: null
- - id: FoodMilkCarton
- name: cargo-bounty-entry-milk-carton
- amount: 10
- orGroup: null
-
-- type: cargoBounty
- id: FoodFruitBasket
- label: cargo-bounty-food-fruit-basket
- reward: 2600
- entries:
- # WHY: variety of fruits means botany must grow multiple crop types
- # prevents trivial single-crop speed-run completion
- - id: FoodApple
- name: cargo-bounty-entry-apple
- amount: 15
- orGroup: null
- - id: FoodOrange
- name: cargo-bounty-entry-orange
- amount: 12
- orGroup: null
- - id: FoodWatermelon
- name: cargo-bounty-entry-watermelon
- amount: 6
- orGroup: null
- - id: FoodGrapes
- name: cargo-bounty-entry-grapes
- amount: 10
- orGroup: null
-
-- type: cargoBounty
- id: FoodSoupSelection
- label: cargo-bounty-food-soup-selection
- reward: 3200
- entries:
- # WHY: soups require pots, ingredients from multiple sources, and cook time
- # a selection of 3 types ensures sustained kitchen engagement
- - id: FoodSoupTomato
- name: cargo-bounty-entry-soup-tomato
- amount: 8
- orGroup: null
- - id: FoodSoupMushroom
- name: cargo-bounty-entry-soup-mushroom
- amount: 6
- orGroup: null
- - id: FoodSoupPotato
- name: cargo-bounty-entry-soup-potato
- amount: 6
- orGroup: null
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_bounties_materials.yml b/Resources/Prototypes/Catalog/Cargo/cargo_bounties_materials.yml
deleted file mode 100644
index 9c4c78b0418..00000000000
--- a/Resources/Prototypes/Catalog/Cargo/cargo_bounties_materials.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-# Material cargo bounties rebalance for issue #161
-# REMOVED trivial low-quantity single-material bounties
-# REPLACED with combined multi-material bounties requiring coordinated station effort
-# Context: 2.5-hour refresh timer; bounties should feel like a shift goal, not a sidebar
-
-- type: cargoBounty
- id: MaterialsMetalSheet
- label: cargo-bounty-materials-metal-sheet
- reward: 4000
- entries:
- # WHY: merged trivial small-stack metal bounties into one requiring
- # sustained mining + smelting loop; quantities set so one player can
- # complete within the refresh window with focused effort but not trivially
- - id: SheetSteel
- name: cargo-bounty-entry-sheet-steel
- amount: 50
- orGroup: null
- - id: SheetPlastic
- name: cargo-bounty-entry-sheet-plastic
- amount: 30
- orGroup: null
- - id: SheetGlass
- name: cargo-bounty-entry-sheet-glass
- amount: 40
- orGroup: null
-
-- type: cargoBounty
- id: MaterialsExoticAlloy
- label: cargo-bounty-materials-exotic-alloy
- reward: 6500
- entries:
- # WHY: exotic/refined materials require mining rare ores AND processing
- # combining them gates completion behind both a mining run and R&D/smelting
- - id: SheetPlasma
- name: cargo-bounty-entry-sheet-plasma
- amount: 20
- orGroup: null
- - id: SheetUranium
- name: cargo-bounty-entry-sheet-uranium
- amount: 15
- orGroup: null
- - id: SheetGold
- name: cargo-bounty-entry-sheet-gold
- amount: 10
- orGroup: null
-
-- type: cargoBounty
- id: MaterialsClothFiber
- label: cargo-bounty-materials-cloth-fiber
- reward: 3000
- entries:
- # WHY: cloth production involves botany (cotton/durathread) + processing
- # multiple cloth types ensures varied production rather than single-source spam
- - id: ClothingMaterialCloth
- name: cargo-bounty-entry-cloth
- amount: 30
- orGroup: null
- - id: ClothingMaterialDurathread
- name: cargo-bounty-entry-durathread
- amount: 20
- orGroup: null
-
-- type: cargoBounty
- id: MaterialsChemReagents
- label: cargo-bounty-materials-chem-reagents
- reward: 5000
- entries:
- # WHY: chemical reagents require chemistry department involvement
- # multiple reagents prevent one quick chem-loop from trivializing the bounty
- - id: ChemistryReagentOmega3
- name: cargo-bounty-entry-omega3
- amount: 10
- orGroup: null
- - id: ChemistryReagentSodiumChloride
- name: cargo-bounty-entry-sodium-chloride
- amount: 15
- orGroup: null
- - id: ChemistryReagentSugar
- name: cargo-bounty-entry-sugar
- amount: 20
- orGroup: null
-
-- type: cargoBounty
- id: MaterialsCircuitBoards
- label: cargo-bounty-materials-circuit-boards
- reward: 5500
- entries:
- # WHY: circuit boards require science/engineering investment
- # asking for multiple board types gates completion behind cross-department effort
- - id: CircuitboardComputer
- name: cargo-bounty-entry-circuit-computer
- amount: 5
- orGroup: null
- - id: CircuitboardMachineAME
- name: cargo-bounty-entry-circuit-ame
- amount: 3
- orGroup: null
- - id: CircuitboardMachineAnomalyGenerator
- name: cargo-bounty-entry-circuit-anomaly
- amount: 2
- orGroup: null
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
index 16546d4af27..b24a0aaae73 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml
@@ -265,3 +265,287 @@
cost: 1200
category: cargoproduct-category-name-service
group: market
+
+## PERSISTENCE - The vendors themselves
+
+## Arbitrarily increased cost by 300 more than the restocks because you're paying for the vendor itself too
+
+- type: cargoProduct
+ id: VendingMachineBooze
+ icon:
+ sprite: Structures/Machines/VendingMachines/boozeomat.rsi
+ state: off #make a new folder with icons if you ever do bother to update these sprites
+ product: VendingMachineBooze
+ cost: 3800
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineChefvend
+ icon:
+ sprite: Structures/Machines/VendingMachines/chefvend.rsi
+ state: off
+ product: VendingMachineChefvend
+ cost: 980
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineClothing
+ icon:
+ sprite: Structures/Machines/VendingMachines/clothing.rsi
+ state: off
+ product: VendingMachineClothing
+ cost: 2800
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineTheater
+ icon:
+ sprite: Structures/Machines/VendingMachines/theater.rsi
+ state: off
+ product: VendingMachineTheater
+ cost: 2800
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineDinnerware
+ icon:
+ sprite: Structures/Machines/VendingMachines/dinnerware.rsi
+ state: off
+ product: VendingMachineDinnerware
+ cost: 2300
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineCondiments
+ icon:
+ sprite: Structures/Machines/VendingMachines/condiments.rsi
+ state: off
+ product: VendingMachineCondiments
+ cost: 600
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineEngivend
+ icon:
+ sprite: Structures/Machines/VendingMachines/engivend.rsi
+ state: off
+ product: VendingMachineEngivend
+ cost: 3500
+ category: cargoproduct-category-name-engineering
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineGames
+ icon:
+ sprite: Structures/Machines/VendingMachines/games.rsi
+ state: off
+ product: VendingMachineGames
+ cost: 1050
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineCoffee
+ icon:
+ sprite: Structures/Machines/VendingMachines/coffee.rsi
+ state: off
+ product: VendingMachineCoffee
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineMedical
+ icon:
+ sprite: Structures/Machines/VendingMachines/medical.rsi
+ state: off
+ product: VendingMachineMedical
+ cost: 2050
+ category: cargoproduct-category-name-medical
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineChemicals
+ icon:
+ sprite: Structures/Machines/VendingMachines/chemvend.rsi
+ state: off
+ product: VendingMachineChemicals
+ cost: 4120
+ category: cargoproduct-category-name-medical
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineNutri
+ icon:
+ sprite: Structures/Machines/VendingMachines/nutri.rsi
+ state: off
+ product: VendingMachineNutri
+ cost: 2400
+ category: cargoproduct-category-name-hydroponics
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineCart
+ icon:
+ sprite: Structures/Machines/VendingMachines/cart.rsi
+ state: off
+ product: VendingMachineCart
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineCola
+ icon:
+ sprite: Structures/Machines/VendingMachines/cola.rsi
+ state: off
+ product: VendingMachineCola
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSalvage
+ icon:
+ sprite: Structures/Machines/VendingMachines/mining.rsi
+ state: off
+ product: VendingMachineSalvage
+ cost: 1800
+ category: cargoproduct-category-name-engineering
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSec
+ icon:
+ sprite: Structures/Machines/VendingMachines/sec.rsi
+ state: off
+ product: VendingMachineSec
+ cost: 2500
+ category: cargoproduct-category-name-security
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSeedsUnlocked
+ icon:
+ sprite: Structures/Machines/VendingMachines/seeds.rsi
+ state: off
+ product: VendingMachineSeedsUnlocked
+ cost: 3900
+ category: cargoproduct-category-name-hydroponics
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineCigs
+ icon:
+ sprite: Structures/Machines/VendingMachines/cigs.rsi
+ state: off
+ product: VendingMachineCigs
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineVendomat
+ icon:
+ sprite: Structures/Machines/VendingMachines/vendomat.rsi
+ state: off
+ product: VendingMachineVendomat
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineRobotics
+ icon:
+ sprite: Structures/Machines/VendingMachines/robotics.rsi
+ state: off
+ product: VendingMachineRobotics
+ cost: 1900
+ category: cargoproduct-category-name-science
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineTankDispenserEVA
+ icon:
+ sprite: Structures/Machines/VendingMachines/tankdispenser.rsi
+ state: dispenser
+ product: VendingMachineTankDispenserEVA
+ cost: 1300
+ category: cargoproduct-category-name-atmospherics
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineHappyHonk
+ icon:
+ sprite: Structures/Machines/VendingMachines/happyhonk.rsi
+ state: off
+ product: VendingMachineHappyHonk
+ cost: 2400
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSnack
+ icon:
+ sprite: Structures/Machines/VendingMachines/snack.rsi
+ state: off
+ product: VendingMachineSnack
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineChang
+ icon:
+ sprite: Structures/Machines/VendingMachines/changs.rsi
+ state: off
+ product: VendingMachineChang
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineDiscount
+ icon:
+ sprite: Structures/Machines/VendingMachines/discount.rsi
+ state: off
+ product: VendingMachineDiscount
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineDonut
+ icon:
+ sprite: Structures/Machines/VendingMachines/donut.rsi
+ state: off
+ product: VendingMachineDonut
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSovietSoda
+ icon:
+ sprite: Structures/Machines/VendingMachines/sovietsoda.rsi
+ state: off
+ product: VendingMachineSovietSoda
+ cost: 1500
+ category: cargoproduct-category-name-service
+ group: market
+
+- type: cargoProduct
+ id: VendingMachineSustenance
+ icon:
+ sprite: Structures/Machines/VendingMachines/sustenance.rsi
+ state: off
+ product: VendingMachineSustenance
+ cost: 980
+ category: cargoproduct-category-name-service
+ group: market
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
index 51b1124eaa5..0b74ac82e43 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
@@ -63,7 +63,7 @@
- id: BoxCaptainCircuitboards
- id: DoorRemoteCustom
- id: MedalCase
- - id: NukeDisk
+# - id: NukeDisk # Persistence: no nuke, no disk
- id: PinpointerNuclear
- id: PlushieNuke
prob: 0.1
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml
index 9f59fa0d64a..66aea19a3fe 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml
@@ -84,6 +84,7 @@
- id: LightReplacer
- id: BoxLightMixed
- id: Holoprojector
+ - id: ClothingShoesGaloshes
- !type:AllSelector
rolls: 2
children:
diff --git a/Resources/Prototypes/DeviceLinking/sink_ports.yml b/Resources/Prototypes/DeviceLinking/sink_ports.yml
index 99e80f7c9b8..45e15ba0d6d 100644
--- a/Resources/Prototypes/DeviceLinking/sink_ports.yml
+++ b/Resources/Prototypes/DeviceLinking/sink_ports.yml
@@ -43,11 +43,6 @@
name: signal-port-name-doorbolt
description: signal-port-description-doorbolt
-- type: sinkPort
- id: DirectDrive
- name: signal-port-name-direct-drive
- description: signal-port-description-direct-drive
-
- type: sinkPort
id: Trigger
name: signal-port-name-trigger-receiver
diff --git a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml
index 76af5067aea..f9228ea50e7 100644
--- a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml
+++ b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml
@@ -16,7 +16,7 @@
materialComposition:
Cloth: 50
- type: StaticPrice
- price: 20
+ price: 10
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml
index 8e30fe2c7e5..36c122225c8 100644
--- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml
+++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml
@@ -187,7 +187,7 @@
- type: ExplosionResistance
damageCoefficient: 0.1
- type: StaticPrice
- price: 500
+ price: 150
- type: entity
parent: ClothingBeltMilitaryWebbing
diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml
index aa0aa8a083b..99fbabbe25d 100644
--- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml
+++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml
@@ -129,7 +129,7 @@
- type: VisionCorrection
- type: IdentityBlocker
- type: StaticPrice
- price: 500
+ price: 10
- type: entity
parent: ClothingEyesBase
@@ -189,7 +189,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: IdentityBlocker
coverage: EYES
diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml
index 05dda23f0a2..213a74c90dd 100644
--- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml
+++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml
@@ -625,7 +625,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: entity #Admeme
parent: ClothingHandsKnuckleDusters
diff --git a/Resources/Prototypes/Entities/Clothing/Hands/rings.yml b/Resources/Prototypes/Entities/Clothing/Hands/rings.yml
index f07e64c85a5..6d1ac9a0ea9 100644
--- a/Resources/Prototypes/Entities/Clothing/Hands/rings.yml
+++ b/Resources/Prototypes/Entities/Clothing/Hands/rings.yml
@@ -32,7 +32,7 @@
- state: gem
color: "#c1ffff"
- type: StaticPrice
- price: 1500
+ price: 750
- type: entity
parent: [ RingBase, SilverRingBase ]
@@ -46,7 +46,7 @@
- state: gem
color: "#c1ffff"
- type: StaticPrice
- price: 1400
+ price: 700
- type: entity
parent: [ RingBase, GoldRingBase ]
@@ -61,7 +61,7 @@
- state: gem
map: [ "gemColor" ]
- type: StaticPrice
- price: 2100
+ price: 1050
- type: RandomSprite
getAllGroups: true
available:
@@ -80,7 +80,7 @@
- state: gem
map: [ "gemColor" ]
- type: StaticPrice
- price: 2000
+ price: 1000
- type: RandomSprite
getAllGroups: true
available:
diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
index 02f4e46050c..167493a75fc 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
@@ -506,7 +506,7 @@
- type: Clothing
sprite: Clothing/Head/Hats/outlawhat.rsi
- type: StaticPrice
- price: 500
+ price: 10
- type: Tag
tags:
- PetWearable
diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml
index 332efb731be..008bdf8807d 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml
@@ -201,7 +201,7 @@
- type: TypingIndicatorClothing
proto: regal
- type: StaticPrice
- price: 3000
+ price: 1500
- type: AddAccentClothing
accent: MobsterAccent
@@ -221,7 +221,7 @@
- type: AddAccentClothing
accent: OwOAccent
- type: StaticPrice
- price: 15000
+ price: 7500
- type: entity
parent: [ClothingHeadHatCatEars, BaseToggleClothing]
diff --git a/Resources/Prototypes/Entities/Clothing/Head/welding.yml b/Resources/Prototypes/Entities/Clothing/Head/welding.yml
index c0ae440a56e..9bd3eba3b95 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/welding.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/welding.yml
@@ -15,7 +15,7 @@
Steel: 200
Glass: 100
- type: StaticPrice
- price: 50
+ price: 20
- type: Tag
tags:
- WhitelistChameleon
diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
index 6ab6da4c0fe..fc3ba04e2ae 100644
--- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
+++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
@@ -10,7 +10,7 @@
- type: Clothing
slots: [mask]
- type: StaticPrice
- price: 25
+ price: 10
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml
index 0af2cb0a77a..08330b68115 100644
--- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml
+++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml
@@ -307,7 +307,7 @@
materialComposition:
Plastic: 25
- type: StaticPrice
- price: 5
+ price: 2
- type: entity
parent: ClothingMaskBase
diff --git a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
index 33f0ec3ad60..1db5c6116a4 100644
--- a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
+++ b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
@@ -78,4 +78,4 @@
- Snout
- type: IngestionBlocker
- type: StaticPrice
- price: 5000
+ price: 2000
diff --git a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml
index fe037a888ff..22f92c4f216 100644
--- a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml
+++ b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml
@@ -96,8 +96,6 @@
sprite: Clothing/Neck/Scarfs/syndiegreen.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/syndiegreen.rsi
- - type: StaticPrice
- price: 500
- type: entity
parent: [ ClothingScarfBase, BaseSyndicateContraband ]
@@ -109,8 +107,6 @@
sprite: Clothing/Neck/Scarfs/syndiered.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/syndiered.rsi
- - type: StaticPrice
- price: 500
- type: entity
parent: [ ClothingScarfBase, BaseCentcommContraband ]
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
index 341404af2b2..fc0a167f459 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
@@ -170,7 +170,7 @@
- type: ExplosionResistance
damageCoefficient: 0.9
- type: StaticPrice
- price: 1500
+ price: 200
#Elite web vest
- type: entity
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
index 1de646a363a..71ef7e4d7ab 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
@@ -41,7 +41,7 @@
enum.StorageUiKey.Key:
type: StorageBoundUserInterface
- type: StaticPrice
- price: 70
+ price: 10
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
index 86df3c6ec1a..87fcd63b087 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
@@ -36,7 +36,7 @@
- Recyclable
- WhitelistChameleon
- type: StaticPrice
- price: 50
+ price: 10
- type: entity
parent: ClothingOuterWinterCoat
diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
index 0c0c7592456..83a63afce09 100644
--- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
+++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
@@ -18,7 +18,7 @@
- type: CombatMode
- type: NoSlip
- type: StaticPrice
- price: 1250
+ price: 200
- type: Fixtures
fixtures:
fix1:
@@ -527,7 +527,7 @@
guides:
- Cyborgs
- Robotics
- - Xenoborgs
+ #- Xenoborgs, Persistence Station
- type: Access
tags:
- Xenoborg
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
index 61649052cca..c90d35f1adf 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
@@ -329,7 +329,7 @@
entity: FoodHivelordRemainsInert
stage: 1
- type: StaticPrice
- price: 5000
+ price: 2000
- type: Tag
tags:
- HivelordRemains
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
index d6727c7d88b..a1e2a7550b1 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
@@ -230,4 +230,4 @@
types:
Blunt: 0.11
- type: StaticPrice
- price: 400
+ price: 10
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
index 3e0edee084b..b8b00ded204 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
@@ -120,9 +120,9 @@
- NamesRegalratKingdom
- NamesRegalratTitle
nameFormat: name-format-regal-rat
- - type: GuideHelp
- guides:
- - MinorAntagonists
+# - type: GuideHelp Persistence Station start
+# guides:
+# - MinorAntagonists Persistence Station end
- type: Grammar
attributes:
gender: male
@@ -161,9 +161,9 @@
speedModifierThresholds:
200: 0.7
250: 0.5
- - type: GuideHelp
- guides:
- - MinorAntagonists
+ # - type: GuideHelp Persistence Station start
+ # guides:
+ # - MinorAntagonists Persistence Station end
- type: entity
name: rat servant
@@ -300,9 +300,9 @@
isBoss: false
- type: Speech
speechVerb: SmallMob
- - type: GuideHelp
- guides:
- - MinorAntagonists
+# - type: GuideHelp, Persistence Station start
+# guides:
+# - MinorAntagonists Persistence Station end
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Mouse_burning
diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
index 5aa7f05f0ea..67540d04c3b 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
@@ -183,9 +183,9 @@
- type: ActionGun
action: ActionDragonsBreath
gunProto: DragonsBreathGun
- - type: GuideHelp
- guides:
- - MinorAntagonists
+# - type: GuideHelp Persistence Station start
+# guides:
+# - MinorAntagonists Persistence Station end
- type: entity
categories: [ HideSpawnMenu ]
diff --git a/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml b/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml
index f5897fd2c9d..597e004017e 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml
@@ -162,7 +162,7 @@
- type: GuideHelp
guides:
- Robotics
- - Xenoborgs
+ #- Xenoborgs, Persistence Station
- type: Inventory
templateId: borg
- type: NpcFactionMember
diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
index d9bc7c5829e..66836ffef03 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
@@ -1,4 +1,4 @@
-# Be careful with these as they get removed on shutdown too!
+# Be careful with these as they get removed on shutdown too!
- type: entity
id: AiHeld
description: Components added / removed from an entity that gets inserted into an AI core.
@@ -319,7 +319,7 @@
board:
- StationAiCoreElectronics
- type: StaticPrice
- price: 5000
+ price: 500
# The job-ready version of an AI spawn.
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml
index ce82ba1e1b0..a6f15d72cb5 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml
@@ -66,6 +66,7 @@
- type: Tag
tags:
- Trash
+ - MessyDrinkerImmune
- type: entity
parent: BaseItem
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml
index ff92ad0417a..7ecaf2863ae 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml
@@ -49,7 +49,7 @@
- type: Damageable
damageContainer: Inorganic
- type: StaticPrice
- price: 50
+ price: 15
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml
index 1a6c04038b4..30f307b6eb0 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml
@@ -370,178 +370,6 @@
- Meat
# Tastes like bun, brains.
-# Series of organ burgers
-- type: entity
- parent: FoodBurgerBase
- id: FoodBurgerLung
- name: lung burger
- description: A strange looking burger.
- components:
- - type: Item
- storedOffset: 0,1
- inhandVisuals:
- left:
- - state: plain-inhand-left
- right:
- - state: plain-inhand-right
- - type: FlavorProfile
- flavors:
- - bun
- - meaty
- - type: Sprite
- state: cheese
- - type: SolutionContainerManager
- solutions:
- food:
- maxVol: 20
- reagents:
- - ReagentId: Nutriment
- Quantity: 6
- - ReagentId: Protein
- Quantity: 6
- - ReagentId: Vitamin
- Quantity: 5
- - type: Tag
- tags:
- - Meat
-
-- type: entity
- parent: FoodBurgerBase
- id: FoodBurgerLiver
- name: liver burger
- description: A strange looking burger.
- components:
- - type: Item
- storedOffset: 0,1
- inhandVisuals:
- left:
- - state: plain-inhand-left
- right:
- - state: plain-inhand-right
- - type: FlavorProfile
- flavors:
- - bun
- - meaty
- - type: Sprite
- state: cheese
- - type: SolutionContainerManager
- solutions:
- food:
- maxVol: 20
- reagents:
- - ReagentId: Nutriment
- Quantity: 6
- - ReagentId: Protein
- Quantity: 6
- - ReagentId: Vitamin
- Quantity: 5
- - type: Tag
- tags:
- - Meat
-
-- type: entity
- parent: FoodBurgerBase
- id: FoodBurgerStomach
- name: stomach burger
- description: A strange looking burger.
- components:
- - type: Item
- storedOffset: 0,1
- inhandVisuals:
- left:
- - state: plain-inhand-left
- right:
- - state: plain-inhand-right
- - type: FlavorProfile
- flavors:
- - bun
- - meaty
- - type: Sprite
- state: cheese
- - type: SolutionContainerManager
- solutions:
- food:
- maxVol: 20
- reagents:
- - ReagentId: Nutriment
- Quantity: 6
- - ReagentId: Protein
- Quantity: 6
- - ReagentId: Vitamin
- Quantity: 5
- - type: Tag
- tags:
- - Meat
-
-- type: entity
- parent: FoodBurgerBase
- id: FoodBurgerKidneys
- name: kidneys burger
- description: A strange looking burger.
- components:
- - type: Item
- storedOffset: 0,1
- inhandVisuals:
- left:
- - state: plain-inhand-left
- right:
- - state: plain-inhand-right
- - type: FlavorProfile
- flavors:
- - bun
- - meaty
- - type: Sprite
- state: cheese
- - type: SolutionContainerManager
- solutions:
- food:
- maxVol: 20
- reagents:
- - ReagentId: Nutriment
- Quantity: 6
- - ReagentId: Protein
- Quantity: 6
- - ReagentId: Vitamin
- Quantity: 5
- - type: Tag
- tags:
- - Meat
-
-- type: entity
- parent: FoodBurgerBase
- id: FoodBurgerHeart
- name: heart burger
- description: A strange looking burger.
- components:
- - type: Item
- storedOffset: 0,1
- inhandVisuals:
- left:
- - state: plain-inhand-left
- right:
- - state: plain-inhand-right
- - type: FlavorProfile
- flavors:
- - bun
- - meaty
- - type: Sprite
- state: cheese
- - type: SolutionContainerManager
- solutions:
- food:
- maxVol: 20
- reagents:
- - ReagentId: Nutriment
- Quantity: 6
- - ReagentId: Protein
- Quantity: 6
- - ReagentId: Vitamin
- Quantity: 5
- - type: Tag
- tags:
- - Meat
-
-
- type: entity
parent: FoodBurgerBase
id: FoodBurgerCat
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
index 3f41a21c332..c061a9a7b56 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
@@ -769,7 +769,7 @@
count: 3
slice: FoodMeatTomatoCutlet
- type: StaticPrice
- price: 100
+ price: 90
- type: Item
storedOffset: 0,-2
inhandVisuals:
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
index eb202e63452..be99fbc4107 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
@@ -12,7 +12,7 @@
- type: Item
storedRotation: -90
- type: StaticPrice
- price: 100
+ price: 90
- type: PhysicalComposition
materialComposition:
Glass: 230
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
index 4ffecae14a1..9f1d614a125 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
@@ -11,7 +11,7 @@
- type: Item
storedRotation: -90
- type: StaticPrice
- price: 100
+ price: 90
- type: PhysicalComposition
materialComposition:
Glass: 230
@@ -96,7 +96,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrders
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -109,7 +109,7 @@
- type: ComputerBoard
prototype: ComputerStationModification
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -122,7 +122,7 @@
- type: ComputerBoard
prototype: ComputerStationModification
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -135,7 +135,7 @@
- type: ComputerBoard
prototype: ComputerIdPrinter
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
@@ -149,7 +149,7 @@
- type: ComputerBoard
prototype: ComputerInvoicePrinter
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -162,7 +162,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrdersEngineering
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -175,7 +175,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrdersMedical
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -188,7 +188,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrdersScience
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -201,7 +201,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrdersSecurity
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -214,7 +214,7 @@
- type: ComputerBoard
prototype: ComputerCargoOrdersService
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -227,7 +227,7 @@
- type: ComputerBoard
prototype: ComputerFundingAllocation
- type: StaticPrice
- price: 750
+ price: 90
- type: entity
parent: BaseComputerCircuitboard
@@ -392,7 +392,7 @@
- type: ComputerBoard
prototype: ComputerId
- type: StaticPrice
- price: 750
+ price: 90
- type: Tag
tags:
- HighRiskItem
@@ -566,7 +566,7 @@
- type: Sprite
state: cpu_service
- type: StaticPrice
- price: 150
+ price: 90
- type: ComputerBoard
prototype: ComputerMassMedia
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml
index c54fb770e51..bf1b0ed737d 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml
@@ -122,7 +122,7 @@
laws: AntimovLawset
lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg
- type: StaticPrice
- price: 10000
+ price: 90
- type: entity
id: NutimovCircuitBoard
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/intercom.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/intercom.yml
index c1a8a9d70bf..2371ce2a4c0 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/intercom.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/intercom.yml
@@ -11,4 +11,4 @@
tags:
- IntercomElectronics
- type: StaticPrice
- price: 55
+ price: 20
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml
index 637d7e6a546..c50cb27aae4 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml
@@ -11,4 +11,4 @@
tags:
- StationAiCoreElectronics
- type: StaticPrice
- price: 404
+ price: 90
diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml
index 0ad24174705..8dae1670f23 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml
@@ -10,6 +10,9 @@
sprite: Objects/Devices/encryption_keys.rsi
- type: Sprite
sprite: Objects/Devices/encryption_keys.rsi
+ - type: Tag
+ tags:
+ - Recyclable
- type: entity
parent: EncryptionKey
@@ -28,6 +31,7 @@
- type: Tag
tags:
- EncryptionCommon
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseCargoContraband ]
@@ -46,6 +50,7 @@
- type: Tag
tags:
- EncryptionCargo
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseCentcommContraband ]
@@ -101,6 +106,7 @@
- type: Tag
tags:
- EncryptionCommand
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseEngineeringContraband ]
@@ -119,6 +125,7 @@
- type: Tag
tags:
- EncryptionEngineering
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseMedicalContraband ]
@@ -137,6 +144,7 @@
- type: Tag
tags:
- EncryptionMedical
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseMedicalScienceContraband ]
@@ -171,6 +179,7 @@
- type: Tag
tags:
- EncryptionScience
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseScienceContraband ]
@@ -204,6 +213,7 @@
- type: Tag
tags:
- EncryptionSecurity
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseCivilianContraband ]
@@ -222,6 +232,7 @@
- type: Tag
tags:
- EncryptionService
+ - Recyclable
- type: entity
parent: [ EncryptionKey, BaseSyndicateContraband ]
diff --git a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml
index 045c3d306e8..2d706e580b4 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml
@@ -34,7 +34,7 @@
cpu_science: "#D381C9"
cpu_supply: "#A46106"
- type: StaticPrice
- price: 250
+ price: 100
- type: entity
parent: BaseFlatpack
diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
index e1a15b74935..46a9eafe83b 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
@@ -165,7 +165,7 @@
- HolofanProjector
- SecBeltEquip
- type: StaticPrice
- price: 50
+ price: 20
- type: entity
parent: HoloprojectorSecurity
diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml
index ff6d5a6a4a9..2234ab95eab 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml
@@ -76,7 +76,7 @@
- !type:DoActsBehavior
acts: ["Breakage"]
- type: StaticPrice
- price: 25
+ price: 10
- type: entity
parent: DefaultStationBeacon
@@ -95,6 +95,9 @@
bodyType: dynamic
- type: Transform
anchored: false
+ - type: Construction
+ graph: StationBeacon
+ node: stationbeacon
- type: entity
parent: BaseItem
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
index f6be1ddb338..fc20f1a6863 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
@@ -49,6 +49,8 @@
solutions:
glass:
canReact: false
+ - type: Stack
+ count: 50
- type: entity
parent: SheetGlassBase
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
index bd4721d8024..3b0ec7c74fc 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
@@ -31,6 +31,8 @@
solutions:
steel:
canReact: false
+ - type: Stack
+ count: 50
- type: GuideHelp
guides:
- ExpandingRepairingStation
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
index bd9a1333746..0707e2309a9 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
@@ -27,6 +27,8 @@
solutions:
paper:
canReact: false
+ - type: Stack
+ count: 50
- type: entity
parent: SheetOtherBase
diff --git a/Resources/Prototypes/Entities/Objects/Materials/ore.yml b/Resources/Prototypes/Entities/Objects/Materials/ore.yml
index ee8607e3658..8f3f9f47511 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/ore.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/ore.yml
@@ -45,7 +45,7 @@
goldore:
reagents:
- ReagentId: Gold
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: gold
- type: Tag
@@ -82,7 +82,7 @@
diamondore:
reagents:
- ReagentId: Carbon
- Quantity: 20
+ Quantity: 13
- type: Item
heldPrefix: diamond
@@ -115,7 +115,7 @@
ironore:
reagents:
- ReagentId: Iron
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: iron
@@ -153,7 +153,7 @@
plasmaore:
reagents:
- ReagentId: Plasma
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: plasma
- type: Tag
@@ -190,7 +190,7 @@
silverore:
reagents:
- ReagentId: Silver
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: silver
- type: Tag
@@ -227,7 +227,7 @@
quartzaore:
reagents:
- ReagentId: Silicon
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: spacequartz
@@ -265,9 +265,9 @@
uraniumore:
reagents:
- ReagentId: Uranium
- Quantity: 8
+ Quantity: 5.2
- ReagentId: Radium
- Quantity: 2
+ Quantity: 1.3
canReact: false
- type: Item
heldPrefix: uranium
@@ -420,7 +420,7 @@
aluminumore:
reagents:
- ReagentId: Aluminium
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: aluminum
- type: Tag
@@ -456,7 +456,7 @@
copperore:
reagents:
- ReagentId: Copper
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: copper
- type: Tag
@@ -528,7 +528,7 @@
titaniumore:
reagents:
- ReagentId: Titanium
- Quantity: 10
+ Quantity: 6.5
- type: Item
heldPrefix: titanium
- type: Tag
diff --git a/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml b/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml
index 4ddfabd7935..b14331b5a0c 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml
@@ -134,7 +134,7 @@
color: orange
- type: ItemTogglePointLight
- type: StaticPrice
- price: 1500
+ price: 750
- type: Prayable
sentMessage: prayer-popup-notify-lamp-sent
notificationPrefix: prayer-chat-notify-lamp
diff --git a/Resources/Prototypes/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Entities/Objects/Misc/books.yml
index 6caa12215f9..16efbbb50a7 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/books.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/books.yml
@@ -190,6 +190,9 @@
- type: GuideHelp
guides:
- Threshold
+ - type: Tag
+ tags:
+ - Recyclable
- type: entity
id: BookFactionHandbook
@@ -271,7 +274,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: entity
id: BookHowToKeepStationClean
diff --git a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
index 523385788ba..dcf6ec49cf6 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
@@ -42,3 +42,4 @@
- type: Tag
tags:
- FakeNukeDisk
+ - Recyclable
diff --git a/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml b/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml
index c2357ed3c8c..926a95c99ac 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml
@@ -21,3 +21,5 @@
color: "#4faffb"
- type: StaticPrice
price: 500
+ - type: Tag
+ tags: [ EggSpider ]
diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
index ee796f1d766..82d6af9a099 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
@@ -26,7 +26,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: UseDelay
delay: 3
diff --git a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml
index 4ff8864bb71..61789b92cbd 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml
@@ -219,7 +219,7 @@
- type: Sprite
state: stamp-syndicate
- type: StaticPrice
- price: 1000
+ price: 200
- type: entity
name: warden's rubber stamp
diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml
index 05d4215d3e2..d1e108a7858 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml
@@ -43,6 +43,9 @@
- type: GuideHelp
guides:
- ExpandingRepairingStation
+ - type: Tag
+ tags:
+ - Recyclable
- type: entity
name: steel dark checker tile
diff --git a/Resources/Prototypes/Entities/Objects/Misc/treasure.yml b/Resources/Prototypes/Entities/Objects/Misc/treasure.yml
index a351d98dd9b..b25c3f2b9ee 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/treasure.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/treasure.yml
@@ -92,7 +92,7 @@
- type: Item
size: Tiny
- type: StaticPrice
- price: 750
+ price: 600
- type: Tag
tags: [ TreasureOldCPU ]
@@ -163,7 +163,7 @@
- type: Item
size: Tiny
- type: StackPrice # Persistence: Static < Stack
- price: 75
+ price: 50
- type: Stack # Persistence: Stackable coins
stackType: TreasureCoinIron
count: 1
@@ -176,7 +176,7 @@
- type: Sprite
state: coin_silver
- type: StackPrice # Persistence: Static < Stack
- price: 125
+ price: 100
- type: Stack # Persistence: Stackable coins
stackType: TreasureCoinSilver
count: 1
@@ -188,7 +188,7 @@
- type: Sprite
state: coin_gold
- type: StackPrice # Persistence: Static < Stackv
- price: 175
+ price: 150
- type: Stack # Persistence: Stackable coins
stackType: TreasureCoinGold
count: 1
@@ -200,7 +200,7 @@
- type: Sprite
state: coin_adamantine
- type: StackPrice # Persistence: Static < Stack
- price: 250
+ price: 200
- type: Stack # Persistence: Stackable coins
stackType: TreasureCoinAdamantine
count: 1
@@ -212,7 +212,7 @@
- type: Sprite
state: coin_diamond
- type: StackPrice # Persistence: Static < Stack
- price: 500
+ price: 300
- type: Stack # Persistence: Stackable coins
stackType: TreasureCoinDiamond
count: 1
diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml
index c82debbfc98..1b3c57cab2c 100644
--- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml
+++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml
@@ -60,7 +60,7 @@
min: 2
max: 2
- type: StaticPrice
- price: 100
+ price: 50
- type: entity
name: base repairable shield
@@ -88,7 +88,7 @@
description: A large tower shield. Good for controlling crowds.
components:
- type: StaticPrice
- price: 90
+ price: 40
- type: Blocking
passiveBlockModifier:
coefficients:
@@ -197,7 +197,7 @@
min: 5
max: 5
- type: StaticPrice
- price: 150
+ price: 20
- type: entity
name: cardboard shield
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml
index 7c90a82d7d6..ba3164f93af 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml
@@ -41,6 +41,9 @@
# - Virology (when it's back)
- Botany
- Chemicals
+ - type: Tag
+ tags:
+ - Recyclable
- type: entity
parent: BaseItem
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml
index eb602ec9854..7b3cfd5737c 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml
@@ -230,7 +230,7 @@
Plastic: 50
- type: SpaceGarbage
- type: StaticPrice
- price: 75 # These are limited supply items.
+ price: 20
- type: TrashOnSolutionEmpty
solution: pen
@@ -592,7 +592,7 @@
changeColor: false
emptySpriteName: stimpen_empty
- type: StaticPrice
- price: 1500
+ price: 50
- type: entity
parent: [ChemicalMedipen, BaseSyndicateContraband]
@@ -631,7 +631,7 @@
changeColor: false
emptySpriteName: microstimpen_empty
- type: StaticPrice
- price: 583 # 3500 for 6 as a freaky fraction
+ price: 50
- type: entity
parent: [ChemicalMedipen, BaseSyndicateContraband]
@@ -670,7 +670,7 @@
- ReagentId: TranexamicAcid
Quantity: 5
- type: StaticPrice
- price: 1500
+ price: 50
- type: entity
parent: Pen # It is just like normal pen, isn't it?
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml
index 8868e256190..e87efbf1be2 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml
@@ -152,6 +152,6 @@
Quantity: 25
- ReagentId: Necrosol
Quantity: 25
- - type: GuideHelp
- guides:
- - MinorAntagonists
+# - type: GuideHelp Persistence Station start
+# guides:
+# - MinorAntagonists Persistence Station end
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
index f212354123f..260e14cf559 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
@@ -1258,7 +1258,7 @@
- state: base-stripes-inhand-right
color: "#7B0F12"
- type: StaticPrice
- price: 2500
+ price: 100
- type: entity
parent: [ BaseBorgModuleSyndicate, BaseProviderBorgModule, BaseSyndicateContraband ]
@@ -1381,7 +1381,7 @@
- state: base-stripes-inhand-right
color: "#7B0F12"
- type: StaticPrice
- price: 2000
+ price: 100
# mothership module
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml
index 87643773db5..a4ebc78ea9d 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml
@@ -26,6 +26,10 @@
- ArtifactFragment
- Ore
- type: Dumpable
+ dumpWhitelist:
+ tags:
+ - OreBox
+ - OreProcessor
- type: entity
parent: OreBag
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml
index fb83b791068..c37248353ca 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml
@@ -80,11 +80,12 @@
parent: BaseVendingMachineRestock
id: VendingMachineRestockChefvend
name: ChefVend restock box
- description: Refill the ChefVend. Just don't break any more of the eggs.
+ description: Refill the ChefVend and Sustenance Vendor. Just don't break any more of the eggs. #Persistence station
components:
- type: VendingMachineRestock
canRestock:
- ChefvendInventory
+ - SustenanceInventory #Persistence Station, 542,64 is the value of all the contents inside, the restock costs 680
- type: Sprite
layers:
- state: base
diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml
index 2422d7d7120..4a6d5e751ee 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml
@@ -72,7 +72,7 @@
- type: TrashOnSolutionEmpty
solution: beaker
- type: StaticPrice
- price: 100
+ price: 20
- type: DamageOnLand
damage:
types:
diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
index 95482244408..feb9d442ef7 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
@@ -95,7 +95,7 @@
types:
Blunt: 5
- type: StaticPrice
- price: 30
+ price: 10
- type: DnaSubstanceTrace
- type: entity
@@ -161,7 +161,7 @@
damageContainer: Inorganic
damageModifierSet: Glass
- type: StaticPrice
- price: 30
+ price: 10
- type: DnaSubstanceTrace
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml
index 82f1ff6725d..5ed173a2653 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml
@@ -17,7 +17,7 @@
state: storage
- type: Blueprint
- type: StaticPrice
- price: 1000
+ price: 200
- type: Tag
tags:
- BlueprintAutolathe
diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml
index 5a6bc352c44..28f2ccb7235 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml
@@ -127,7 +127,7 @@
slots:
- Back
- type: StaticPrice
- price: 1000
+ price: 100
# Filled black
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
index 339ba9eeae8..de0d34d1db8 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
@@ -524,3 +524,51 @@
- type: Construction
graph: WoodenRollingPin
node: rollingpin
+
+- type: entity
+ id: HCD
+ parent: [ BaseItem, BaseEngineeringContraband ]
+ name: HCD
+ description: The hardlight construction device can be used to depoy long lasting holograms, used to assist in construction.
+ components:
+ - type: RCD
+ availablePrototypes:
+ - HoloWallBlue
+ - HoloWallRed
+ - HoloGrille
+ - HoloWindow
+ - HoloWindowDirectional
+ - HoloAirlock
+ - type: ContainerContainer
+ containers:
+ cell_slot: !type:ContainerSlot {}
+ - type: PowerCellSlot
+ cellSlotId: cell_slot
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ startingItem: PowerCellMedium
+ - type: Sprite
+ sprite: Objects/Tools/hcd.rsi
+ state: icon
+ - type: Item
+ size: Normal
+ - type: Clothing
+ sprite: Objects/Tools/hcd.rsi
+ quickEquip: false
+ slots:
+ - Belt
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 600
+ Plastic: 100
+ - type: StaticPrice
+ price: 110
+ - type: UserInterface
+ interfaces:
+ enum.RcdUiKey.Key:
+ type: RCDMenuBoundUserInterface
+ - type: ActivatableUI
+ inHandsOnly: true
+ key: enum.RcdUiKey.Key
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
index b1bfdeef9a3..d6c7299a4a7 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: BasePlasticExplosive
parent: BaseItem
abstract: true
@@ -92,7 +92,7 @@
sprite:
festive: Objects/Weapons/Bombs/c4gift.rsi
- type: StaticPrice
- price: 625 # 5000 for a bundle of 8
+ price: 200
- type: entity
name: seismic charge
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
index e06c59536df..fe3ad9dbd60 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
@@ -561,7 +561,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists Persistence Station
- type: PacifismAllowedGun
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
index 7d234d5e1e5..284791ce83a 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
@@ -145,7 +145,7 @@
params:
volume: 2.25
- type: StaticPrice
- price: 1500 # Botany can shit these out like candy, but let's see how it goes
+ price: 3 # Persistence, was 1500
- type: entity
parent: WeaponRevolverPython
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml
index 31cb00f1640..e2b4f59cfb1 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml
@@ -109,6 +109,10 @@
temperature: 293.15
- type: StaticPrice
price: 350
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 25
+ Plastic: 25
- type: GenericVisualizer
visuals:
enum.ReleaseGasOnTriggerVisuals.Key:
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
index 7cce1d49caf..e999fa13f5d 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
@@ -54,7 +54,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: Tag
tags:
- HandGrenade
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml
index 2f6ac834ba4..fd0365d7bd1 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml
@@ -90,7 +90,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: entity
name: truncheon
@@ -127,7 +127,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: entity
name: flash
@@ -174,7 +174,7 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists, Persistence Station
- type: entity
name: flash
@@ -230,4 +230,4 @@
- type: GuideHelp
guides:
- Security
- - Antagonists
+ #- Antagonists Persistence Station
diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml
index 52747a3f27c..75e7006fe5f 100644
--- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml
+++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml
@@ -141,6 +141,9 @@
layoutId: AirlockCargo
- type: Paintable
group: null
+ - type: Construction
+ graph: AirlockMining
+ node: airlock
- type: entity
parent: AirlockCommand # if you get centcom door somehow it counts as command, also inherit panel
@@ -321,6 +324,9 @@
sprite: Structures/Doors/Airlocks/Glass/mining.rsi
- type: Paintable
group: null
+ - type: Construction
+ graph: AirlockMining
+ node: glassAirlock
- type: entity
parent: AirlockCommandGlass # see standard
diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml
index 8824b946e73..a74483bb860 100644
--- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml
+++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml
@@ -108,6 +108,9 @@
- type: Sprite
sprite: Structures/Doors/Airlocks/Standard/external.rsi
state: "assembly"
+ - type: Construction
+ graph: AirlockExternal
+ node: assembly
- type: entity
parent: AirlockAssembly
@@ -117,6 +120,9 @@
- type: Sprite
sprite: Structures/Doors/Airlocks/Glass/external.rsi
state: "assembly"
+ - type: Construction
+ graph: AirlockExternal
+ node: assembly
#Public (Glass Airlock)
- type: entity
@@ -318,6 +324,9 @@
- type: Sprite
sprite: Structures/Doors/Airlocks/Standard/mining.rsi
state: "assembly"
+ - type: Construction
+ graph: AirlockMining
+ node: assembly
- type: entity
parent: AirlockAssembly
@@ -327,6 +336,9 @@
- type: Sprite
sprite: Structures/Doors/Airlocks/Glass/mining.rsi
state: "assembly"
+ - type: Construction
+ graph: AirlockMining
+ node: assembly
#Syndicate
- type: entity
@@ -370,8 +382,12 @@
- type: entity
parent: AirlockAssembly
id: AirlockAssemblyHighSec
+ name: vault door assembly
suffix: HighSec
components:
- type: Sprite
sprite: Structures/Doors/Airlocks/highsec/highsec.rsi
state: "assembly"
+ - type: Construction
+ graph: VaultDoor
+ node: assembly
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml
index 9caae0c829b..717530bfb79 100644
--- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml
+++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml
@@ -122,7 +122,6 @@
- Toggle
- AutoClose
- DoorBolt
- - DirectDrive
- type: DeviceLinkSource
ports:
- DoorStatus
diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml
index 773065bea04..efe4b7132ba 100644
--- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml
+++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml
@@ -20,6 +20,9 @@
layoutId: AirlockExternal
- type: Paintable
group: null
+ - type: Construction
+ graph: AirlockExternal
+ node: airlock
- type: entity
parent: AirlockExternal
@@ -43,3 +46,6 @@
- FullTileMask
layer: #removed opaque from the layer, allowing lasers to pass through glass airlocks
- GlassAirlockLayer
+ - type: Construction
+ graph: AirlockExternal
+ node: glassAirlock
diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml
index 98be00450f7..a68bc607b4e 100644
--- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml
+++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml
@@ -130,4 +130,19 @@
- type: Tag
tags:
- HighSecDoor
+ - Airlock
# This tag is used to nagivate the Airlock construction graph. It's needed because this construction graph is shared between Airlock, AirlockGlass, and HighSecDoor
+
+- type: entity
+ id: VaultDoor # Persistence14: Craftable variant
+ parent: HighSecDoor
+ name: vault door
+ description: Keeps the bad out and keeps the good in. Reinforced with titanium and plasteel, you're not getting through this anytime soon.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: WiresPanelSecurity
+ securityLevel: vaultdoor
+ - type: Construction
+ graph: VaultDoor
+ node: complete_vault_door
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/bench.yml b/Resources/Prototypes/Entities/Structures/Furniture/bench.yml
index ce8f8b56861..6bb0d1529d1 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/bench.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/bench.yml
@@ -16,7 +16,7 @@
- type: Physics
bodyType: Static
- type: StaticPrice
- price: 35
+ price: 10
- type: entity
id: BenchColorfulComfy
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml
index 6e89400925a..7ce0f47682d 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml
@@ -48,7 +48,7 @@
sound:
collection: MetalBreak
- type: StaticPrice
- price: 50
+ price: 10
- type: GravityAffected
#Starts unanchored, cannot be rotated while anchored
@@ -240,7 +240,7 @@
tags:
- Wooden
- type: StaticPrice
- price: 75
+ price: 24
- type: entity
name: ritual chair
@@ -473,7 +473,7 @@
min: 2
max: 4
- type: StaticPrice
- price: 50
+ price: 24
- type: entity
parent: StoolBase
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml
index 9a9bbd9a7dd..3bad911064d 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml
@@ -72,7 +72,7 @@
- type: Drain
autoDrain: false
- type: StaticPrice
- price: 100
+ price: 60
- type: ActivatableUI
key: enum.DisposalUnitUiKey.Key
verbOnly: true # Not strictly needed, but we want E to toggle lid
diff --git a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml
index 4867fc84d80..11334e6cba8 100644
--- a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml
+++ b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml
@@ -92,7 +92,7 @@
components:
- type: Physics
bodyType: Static
- canCollide: true
+ canCollide: false
- type: Sprite
sprite: Structures/Holo/security.rsi
state: icon
@@ -154,3 +154,261 @@
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
+
+#HoloRCD holograms
+
+# Holo Walls
+
+- type: entity
+ id: HoloWallBlue # Changed ID so it doesn't conflict with the sign
+ name: blue holographic wall
+ description: A flickering blue projection of a wall.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Walls/solid.rsi # The path to standard wall textures
+ drawdepth: Overlays
+ layers:
+ - state: full # The "icon" for a wall is just 'wall'
+ color: "#00f2ff99" # Adjusts the color to a ghostly blue
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: blue
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
+
+- type: entity
+ id: HoloWallRed # Changed ID so it doesn't conflict with the sign
+ name: red holographic wall
+ description: A flickering red projection of a wall.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Walls/solid.rsi # The path to standard wall textures
+ drawdepth: Overlays
+ layers:
+ - state: full # The "icon" for a wall is just 'wall'
+ color: "#ff000099" # Adjusts the color to a ghostly red
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: red
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
+
+- type: entity
+ id: HoloGrille # Changed ID so it doesn't conflict with the sign
+ name: blue holographic grille
+ description: A flickering blue projection of a grille.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Walls/grille.rsi # The path to standard wall textures
+ drawdepth: Overlays
+ layers:
+ - state: grille # The "icon" for a wall is just 'wall'
+ color: "#00f2ff99" # Adjusts the color to a ghostly blue
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: blue
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
+
+- type: entity
+ id: HoloWindow # Changed ID so it doesn't conflict with the sign
+ name: blue holographic window
+ description: A flickering blue projection of a window.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Windows/window.rsi # The path to standard wall textures
+ drawdepth: Overlays
+ layers:
+ - state: full # The "icon" for a window is just 'window'
+ color: "#00f2ff99" # Adjusts the color to a ghostly blue
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: blue
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
+
+- type: entity
+ id: HoloWindowDirectional # Changed ID so it doesn't conflict with the sign
+ name: blue holographic directional window
+ description: A flickering blue projection of a directional window.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Windows/directional.rsi # The path to standard wall textures
+ drawdepth: Overlays
+ layers:
+ - state: window # The "icon" for a window is just 'window'
+ color: "#00f2ff99" # Adjusts the color to a ghostly blue
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: blue
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
+
+# Holo Airlock
+
+- type: entity
+ id: HoloAirlock
+ name: blue holographic airlock
+ description: A flickering blue projection of an airlock.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Physics
+ bodyType: Static
+ canCollide: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.49,-0.49,0.49,0.49"
+ mask:
+ - FullTileMask
+ layer:
+ - GlassLayer
+ - type: Sprite
+ sprite: Structures/Doors/Airlocks/Standard/basic.rsi
+ drawdepth: Overlays
+ layers:
+ - state: closed
+ color: "#00f2ff99"
+ - type: PointLight
+ enabled: true
+ radius: 1
+ color: blue
+ - type: Damageable
+ damageContainer: Inorganic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Clickable
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
index 8c7872c23f6..be1f5c3da17 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
@@ -42,7 +42,7 @@
- type: Anchorable
- type: Pullable
- type: StaticPrice
- price: 300
+ price: 200
- type: SpamEmitSoundRequirePower
- type: SpamEmitSound
minInterval: 30
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
index 1cdbdc59219..827fad3152b 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
@@ -123,6 +123,8 @@
- type: ShuttleConsole
- type: ActivatableUI
key: enum.ShuttleConsoleUiKey.Key
+ - type: ActivatableUIRequiresAccess
+ - type: AccessReader
- type: UserInterface
interfaces:
enum.ShuttleConsoleUiKey.Key:
@@ -131,7 +133,7 @@
type: WiresBoundUserInterface
- type: RadarConsole
- type: WorldLoader
- radius: 256
+ radius: 512
- type: PointLight
radius: 1.5
energy: 4.0
@@ -199,7 +201,7 @@
tags:
- Syndicate
- type: RadarConsole
- maxRange: 384
+ maxRange: 768
- type: WorldLoader
radius: 1536
- type: PointLight
@@ -231,7 +233,7 @@
components:
- type: CargoShuttle
- type: RadarConsole
- maxRange: 256
+ maxRange: 512
- type: PointLight
radius: 1.5
energy: 4.0
@@ -841,7 +843,7 @@
- map: [ "enum.WiresVisualLayers.MaintenancePanel" ]
state: generic_panel_open
- type: RadarConsole
- maxRange: 512
+ maxRange: 1024
- type: ActivatableUI
key: enum.RadarConsoleUiKey.Key
- type: UserInterface
@@ -1047,7 +1049,6 @@
energy: 4.0
color: "#b89f25"
- type: AccessReader
- access: [["Cargo"]]
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: BasicDevice
diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml
index 064dc68c686..8616944d354 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml
@@ -323,7 +323,7 @@
False: { visible: false }
- type: WiresVisuals
- type: StaticPrice
- price: 5000
+ price: 100
- type: AccessReader
access: [["Research"]]
- type: GuideHelp
diff --git a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml
index 09902be9707..baa530cc62d 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: CloningPod
parent: BaseMachinePowered
name: cloning pod
@@ -65,7 +65,7 @@
Idle: { state: pod_0 }
- type: Climbable
- type: StaticPrice
- price: 1000
+ price: 200
- type: ContainerContainer
containers:
machine_board: !type:Container
diff --git a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml
index c4b26e043ba..00ad9f35ee4 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: FatExtractor
parent: BaseMachinePowered
name: lipid extractor
@@ -107,7 +107,7 @@
- type: DatasetVocalizer
dataset: FatExtractorFacts
- type: StaticPrice
- price: 1000
+ price: 160
- type: ResistLocker
- type: EntityStorage
capacity: 1
diff --git a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml
index f7f1bcba1b1..88bc9989ad9 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: MachineFlatpacker
parent: [ BaseMachinePowered, ConstructibleMachine ]
name: Flatpacker 1001
@@ -80,7 +80,7 @@
- machine_board
- board_slot
- type: StaticPrice
- price: 2000
+ price: 184
- type: entity
id: FlatpackerNoBoardEffect
diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml
index 133562d2eb7..b11e9b40222 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: GravityGenerator
parent: BaseMachinePowered
name: gravity generator
@@ -78,7 +78,7 @@
castShadows: false
color: "#a8ffd9"
- type: StaticPrice
- price: 5000
+ price: 200
- type: entity
id: GravityGeneratorMini
@@ -138,4 +138,4 @@
lightRadiusMin: 0.75
lightRadiusMax: 2.5
- type: StaticPrice
- price: 2000
+ price: 350
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index a37ab23e26f..9487f3e6dbb 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -46,7 +46,7 @@
anchored: true
- type: Pullable
- type: StaticPrice
- price: 800
+ price: 360
- type: ResearchClient
- type: TechnologyDatabase
@@ -585,6 +585,17 @@
name: ore processor
description: It produces sheets and ingots using ores.
components:
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.4,-0.4,0.4,0.4"
+ density: 200
+ mask:
+ - MachineMask
+ layer:
+ - MachineLayer
- type: Sprite
sprite: Structures/Machines/ore_processor.rsi
layers:
@@ -611,6 +622,10 @@
staticPacks:
- OreSmelting
- RGlassSmelting
+ - type: DumpTarget
+ - type: Tag
+ tags:
+ - OreProcessor
- type: entity
parent: BaseLathe
@@ -618,6 +633,17 @@
name: industrial ore processor
description: An ore processor specifically designed for mass-producing metals in industrial applications.
components:
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.4,-0.4,0.4,0.4"
+ density: 200
+ mask:
+ - MachineMask
+ layer:
+ - MachineLayer
- type: Sprite
sprite: Structures/Machines/ore_processor_industrial.rsi
layers:
@@ -647,6 +673,10 @@
- OreSmelting
- RGlassSmelting
- AdvancedSmelting
+ - type: DumpTarget
+ - type: Tag
+ tags:
+ - OreProcessor
- type: entity
parent: BaseLathe
diff --git a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml
index 0ac4a9e98f2..894c3756789 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml
@@ -184,4 +184,4 @@
- type: ReagentTank
transferAmount: 100
- type: StaticPrice
- price: 5000 # That's a pretty fancy keg you got there.
+ price: 1000 # That's a pretty fancy keg you got there.
diff --git a/Resources/Prototypes/Entities/Structures/Machines/silo.yml b/Resources/Prototypes/Entities/Structures/Machines/silo.yml
index 7923152676e..8c7933fdb65 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/silo.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/silo.yml
@@ -62,4 +62,4 @@
- type: WiresVisuals
- type: WiresPanel
- type: StaticPrice
- price: 1500
+ price: 360
diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml
index a41cf8b6486..9ec0b7ecabb 100644
--- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml
+++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml
@@ -470,6 +470,7 @@
Lockout: { state: vent_lockout }
- type: PipeColorVisuals
- type: GasVentPump
+ pressureLockoutOverride: true
inlet: inlet
outlet: outlet
canLink: true
diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml
index 0e7db8d02be..f74d93c547c 100644
--- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml
+++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml
@@ -64,7 +64,7 @@
canCollide: false
bodyType: static
- type: StaticPrice
- price: 30
+ price: 14
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/collector.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/collector.yml
index eb70dcfacfc..7c6e89fc268 100644
--- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/collector.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/collector.yml
@@ -60,7 +60,10 @@
chargeModifier: 15000
radiationReactiveGases:
- reactantPrototype: Plasma
- powerGenerationEfficiency: 1
+ powerGenerationEfficiency: 0.25
+ reactantBreakdownRate: 0.0001
+ - reactantPrototype: Tritium
+ powerGenerationEfficiency: 0.50
reactantBreakdownRate: 0.0001
- type: RadiationReceiver
- type: PowerSupplier
diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/gas_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/gas_generator.yml
index d8600cfa4be..a75ca36f507 100644
--- a/Resources/Prototypes/Entities/Structures/Power/Generation/gas_generator.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/Generation/gas_generator.yml
@@ -42,7 +42,6 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- volume: 1
output:
!type:CableDeviceNode
nodeGroupID: HVPower
@@ -59,22 +58,23 @@
inputGas2Ratio: 2.0
wasteGas1: WaterVapor
wasteGas2: CarbonDioxide
- fuelEfficiency: 0.9
+ fuelEfficiency: 1
fuelSlipRate: 0.1
wasteGas1Ratio: 2.0
wasteGas2Ratio: 1.0
+ combustionEnergyPerMole: 336000 # 60% of 560 kJ/mol (methane combustion energy waste heat)
maxOutput: 100000
maxFuelConsumptionRate: 10.0
- maxInternalPressure: 150 # kPa - realistic for small methane engines
- internalVolume: 200 # liters - combustion chamber volume
- maxInletFlowRate: 2.0 # moles/sec - internal pump capacity
- optimalInputRatio: 0.8
- minimumTemperature: 373.15
- optimalTemperature: 573.15
- maximumTemperature: 1273.15
+ maxInternalPressure: 150
+ maxInletFlowRate: 5.0 # moles/sec - internal pump capacity
+ inletNodeVolume: 10.0
+ optimalInputRatio: 0.2
+ baseConsumptionFraction: 0.2
+ powerScaleMultiplier: 2
+ powerExtraBoost: 1.1
- type: Appearance
- type: ApcPowerReceiver
- powerLoad: 500
+ powerLoad: 10
needsPower: true
- type: AtmosDevice
- type: AmbientSound
diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml
index b7dd0732f6a..b9acb873427 100644
--- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml
@@ -14,7 +14,7 @@
- type: Physics
bodyType: Dynamic
- type: StaticPrice
- price: 500
+ price: 200
- type: AmbientSound
range: 5
volume: -5
@@ -168,7 +168,7 @@
fuelMaterial: Plasma
multiplier: 0.01
- type: MaterialStorage
- storageLimit: 3000
+ storageLimit: 5000
materialWhiteList: [Plasma]
- type: PortableGenerator
startChance: 0.8
@@ -229,7 +229,7 @@
fuelMaterial: Uranium
multiplier: 0.01
- type: MaterialStorage
- storageLimit: 3000
+ storageLimit: 5000
materialWhiteList: [Uranium]
- type: PortableGenerator
- type: PowerMonitoringDevice
@@ -398,7 +398,7 @@
fuelMaterial: Coal
multiplier: 0.01
- type: MaterialStorage
- storageLimit: 3000
+ storageLimit: 5000
materialWhiteList: [Coal]
- type: PortableGenerator
startChance: 0.5
@@ -451,6 +451,12 @@
True: { visible: true }
False: { visible: false }
+ - type: NodeContainer
+ examinable: true
+ nodes:
+ output:
+ !type:CableDeviceNode
+ nodeGroupID: HVPower
- type: Machine
board: PortableGeneratorMegamanMachineCircuitboard
- type: FuelGenerator
@@ -466,7 +472,7 @@
fuelMaterial: Phoron
multiplier: 0.01
- type: MaterialStorage
- storageLimit: 3000
+ storageLimit: 5000
materialWhiteList: [Phoron]
- type: PortableGenerator
startChance: 0.95
diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml
index 4efc5d0fe65..aacf5a2480f 100644
--- a/Resources/Prototypes/Entities/Structures/Power/apc.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml
@@ -150,7 +150,7 @@
- type: LightningTarget
priority: 1
- type: StaticPrice
- price: 500
+ price: 60
- type: GuideHelp
guides:
- VoltageNetworks
diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml
index 25e3616f183..1e7b946c088 100644
--- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml
@@ -151,7 +151,7 @@
- type: Machine
board: PowerCageRechargerCircuitboard
- type: StaticPrice
- price: 500
+ price: 200
- type: entity
parent: BaseItemRecharger
diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml b/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
index a9b9931b566..745972f4505 100644
--- a/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
+++ b/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
@@ -32,7 +32,7 @@
- type: AutoShootGun
- type: GunSignalControl
- type: StaticPrice
- price: 1500
+ price: 250
# ---- Laser weapon branch ----
# naming: LSE (Laser) + conventional power + suffix (c for PowerCage, e for wired energy) + Name
diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml
index d9a30df5d81..b3f6cf37b3a 100644
--- a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml
+++ b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
id: StationAnchorBase
abstract: true
name: station anchor
@@ -94,7 +94,7 @@
sound:
collection: MetalBreak
- type: StaticPrice
- price: 10000
+ price: 300
- type: Machine
board: StationAnchorCircuitboard
- type: ContainerContainer
diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
index bb43cb3b2c3..d14b03f643c 100644
--- a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
+++ b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
@@ -54,7 +54,7 @@
sound:
collection: MetalBreak
- type: StaticPrice
- price: 300
+ price: 80
- type: GuideHelp
guides:
- ShuttleCraft
@@ -170,7 +170,7 @@
- type: Anchorable
flags: None
- type: StaticPrice
- price: 1500
+ price: 90
- type: entity
id: ThrusterUnanchored
@@ -269,7 +269,7 @@
damageContainer: StructuralInorganic
damageModifierSet: Electronic
- type: StaticPrice
- price: 2000
+ price: 150
- type: entity
id: GyroscopeUnanchored
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml
index 8f22f8d68c3..988c96f255a 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml
@@ -454,6 +454,9 @@
hard: True
restitution: 0
friction: 0.4
+ - type: Construction
+ graph: ClosetPrisonerSecure
+ node: closetprisonersecure
- type: entity
parent: LockerPrisoner
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml
index 839e5ef1fbe..f04d0fd9ead 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml
@@ -101,7 +101,7 @@
stateDoorOpen: generic_open
stateDoorClosed: generic_door
- type: StaticPrice
- price: 75
+ price: 60
# steel closet base (that can be constructed/deconstructed)
- type: entity
@@ -127,7 +127,7 @@
- type: ResistLocker
- type: Weldable
- type: StaticPrice
- price: 75
+ price: 60
- type: Sprite
drawdepth: WallMountedItems
noRot: false
@@ -218,7 +218,7 @@
#I am terribly sorry for duplicating the closet almost-wholesale, but the game malds at me if I don't so here we are.
- type: entity
id: SuitStorageBase
- parent: BaseStructure
+ parent: BaseStructureDynamic
name: suit storage unit
description: A fancy hi-tech storage unit made for storing space suits.
components:
@@ -227,7 +227,7 @@
- type: Anchorable
delay: 2
- type: StaticPrice
- price: 80
+ price: 60
- type: ResistLocker
- type: Transform
noRot: true
@@ -244,6 +244,9 @@
- state: locked
map: ["enum.LockVisualLayers.Lock"]
shader: unshaded
+ - type: Icon
+ sprite: Structures/Storage/suit_storage.rsi
+ state: "base"
- type: MovedByPressure
- type: DamageOnHighSpeedImpact
damage:
@@ -305,3 +308,6 @@
stateDoorOpen: base
stateDoorClosed: door
- type: LockVisuals
+ - type: Construction
+ graph: SuitStorageUnit
+ node: suitstorage
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml
index 1e90d332d1e..becd2f197f3 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml
@@ -175,12 +175,31 @@
- type: AccessReader
access: [["Engineering"]]
+- type: entity
+ parent: BaseWallLocker
+ id: ClosetWallSecure
+ name: secure wall closet
+ description: A wall closet with a built-in access reader. Secure when configured correctly.
+ components:
+ - type: EntityStorageVisuals
+ stateBaseClosed: generic
+ stateDoorOpen: generic_open
+ stateDoorClosed: generic_door
+ - type: AccessReader
+ - type: Construction
+ graph: ClosetWallSecure
+ node: closetwallsecure
+
- type: entity
parent: [ GenpopBase , BaseWallLocker ]
id: LockerWallBasePrisoner
name: prisoner wall closet
description: It's a secure locker for an inmate's personal belongings during their time in prison.
suffix: 1
+ components:
+ - type: Construction
+ graph: ClosetWallPrisonerSecure
+ node: closetwallprisonersecure
- type: entity
parent: LockerWallBasePrisoner
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml
index ea64297f521..4376e4ef263 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml
@@ -8,7 +8,7 @@
suffix: Empty
components:
- type: StaticPrice
- price: 750
+ price: 300
- type: Sprite
sprite: Structures/Storage/tanks.rsi
layers:
@@ -57,7 +57,7 @@
suffix: Full
components:
- type: StaticPrice
- price: 2500
+ price: 2000
- type: Sprite
sprite: Structures/Storage/tanks.rsi
layers:
@@ -89,7 +89,7 @@
suffix: Empty
components:
- type: StaticPrice
- price: 500
+ price: 300
- type: Sprite
sprite: Structures/Storage/tanks.rsi
layers:
@@ -176,7 +176,7 @@
suffix: Full
components:
- type: StaticPrice
- price: 2500
+ price: 2000
- type: Sprite
sprite: Structures/Storage/tanks.rsi
layers:
@@ -208,7 +208,7 @@
suffix: Empty
components:
- type: StaticPrice
- price: 500
+ price: 300
- type: Sprite
sprite: Structures/Storage/tanks.rsi
layers:
@@ -227,4 +227,4 @@
state: "generictank-1"
- type: Construction
graph: GenericTankGraph
- node: generictank
\ No newline at end of file
+ node: generictank
diff --git a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml
index f563a77ad02..80ff467ac8d 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml
@@ -103,7 +103,7 @@
min: 1
max: 2
- type: StaticPrice
- price: 80
+ price: 40
- type: Construction
graph: FilingCabinet
diff --git a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml
index b374f9600bb..08154998011 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml
@@ -71,7 +71,7 @@
anchored: true
- type: AntiRottingContainer
- type: StaticPrice
- price: 200
+ price: 80
- type: Construction
graph: MorgueGraph
node: morgue
@@ -109,7 +109,7 @@
- type: Transform
anchored: true
- type: StaticPrice
- price: 200
+ price: 0
- type: Construction
graph: MorgueGraph
node: cables
@@ -220,7 +220,7 @@
- type: Transform
anchored: true
- type: StaticPrice
- price: 200
+ price: 0
- type: Construction
graph: CrematoriumGraph
- node: crematorelectronics
\ No newline at end of file
+ node: crematorelectronics
diff --git a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml
index a23818ee466..b5bb54a91e0 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml
@@ -51,13 +51,18 @@
False: { visible: true }
- type: Storage
grid:
- - 0,0,9,5
+ - 0,0,19,9
maxItemSize: Normal
storageOpenSound: /Audio/Effects/closetopen.ogg
storageCloseSound: /Audio/Effects/closetclose.ogg
whitelist:
tags:
+ - ArtifactFragment
- Ore
+ - type: DumpTarget
+ - type: Tag
+ tags:
+ - OreBox
- type: UserInterface
interfaces:
enum.StorageUiKey.Key:
@@ -72,8 +77,7 @@
shape:
!type:PhysShapeCircle
radius: 0.3
- # very not dense to make it easy to pull
- density: 20
+ density: 170
mask:
- MachineMask
layer:
diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Switches/switch.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Switches/switch.yml
index 5af7c39fdb6..366bbecb01b 100644
--- a/Resources/Prototypes/Entities/Structures/Wallmounts/Switches/switch.yml
+++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Switches/switch.yml
@@ -10,7 +10,16 @@
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/switch.rsi
- state: on
+ layers:
+ - state: off
+ map: [ "base" ]
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.SignalSwitchVisuals.State:
+ base:
+ True: { state: on }
+ False: { state: off }
- type: SignalSwitch
- type: UseDelay
delay: 0.5 # prevent light-toggling auto-clickers.
diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/WallmountMachines/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/WallmountMachines/surveillance_camera.yml
index 561991cd268..e9bf555db41 100644
--- a/Resources/Prototypes/Entities/Structures/Wallmounts/WallmountMachines/surveillance_camera.yml
+++ b/Resources/Prototypes/Entities/Structures/Wallmounts/WallmountMachines/surveillance_camera.yml
@@ -74,7 +74,7 @@
enum.WiresUiKey.Key:
type: WiresBoundUserInterface
- type: StaticPrice
- price: 200
+ price: 100
- type: Destructible
thresholds:
- trigger:
diff --git a/Resources/Prototypes/Entities/Structures/Walls/girders.yml b/Resources/Prototypes/Entities/Structures/Walls/girders.yml
index 2faac1e6316..6edda3b6aed 100644
--- a/Resources/Prototypes/Entities/Structures/Walls/girders.yml
+++ b/Resources/Prototypes/Entities/Structures/Walls/girders.yml
@@ -53,7 +53,7 @@
sound:
collection: MetalBreak
- type: StaticPrice
- price: 30
+ price: 28
- type: entity
id: GirderDiagonal
@@ -126,7 +126,7 @@
sound:
collection: MetalBreak
- type: StaticPrice
- price: 130
+ price: 80
- type: entity
id: ReinforcedGirderDiagonal
@@ -171,7 +171,7 @@
graph: ClockworkGirder
node: clockGirder
- type: StaticPrice
- price: 75
+ price: 40
- type: Destructible
thresholds:
- trigger:
diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml
index bbe9fa8cb75..c8575448b4c 100644
--- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml
+++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml
@@ -1508,6 +1508,9 @@
id: WallMining
name: mining wall
components:
+ - type: Construction
+ graph: Girder
+ node: miningWall
- type: Sprite
sprite: Structures/Walls/mining.rsi
- type: Icon
@@ -1516,10 +1519,24 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 700
+ damage: 500
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 300
+ behaviors:
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ Girder:
+ min: 1
+ max: 1
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalSlam
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
- type: IconSmooth
key: walls
base: mining
@@ -1532,7 +1549,7 @@
- type: entity
parent: WallDiagonalBase
id: WallMiningDiagonal
- name: mining wall
+ name: diagonal mining wall
components:
- type: Sprite
drawdepth: Walls
@@ -1541,6 +1558,9 @@
- type: Icon
sprite: Structures/Walls/mining_diagonal.rsi
state: state0
+ - type: Construction
+ graph: GirderDiagonal
+ node: miningWallDiagonal
- type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: StructuralMetallicStrong
@@ -1548,7 +1568,7 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 600
+ damage: 400
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
diff --git a/Resources/Prototypes/Entities/Structures/Windows/mining.yml b/Resources/Prototypes/Entities/Structures/Windows/mining.yml
index 8e276b0bb9c..65b38068802 100644
--- a/Resources/Prototypes/Entities/Structures/Windows/mining.yml
+++ b/Resources/Prototypes/Entities/Structures/Windows/mining.yml
@@ -18,13 +18,13 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 200
+ damage: 150
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
- damage: 100
+ damage: 75
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -50,9 +50,12 @@
sprite: Structures/Windows/cracks.rsi
- type: StaticPrice
price: 100
+ - type: Construction
+ graph: Window
+ node: miningWindow
- type: entity
- parent: ShuttleWindow
+ parent: MiningWindow
id: MiningWindowDiagonal
suffix: diagonal
placement:
@@ -96,3 +99,6 @@
- type: DamageVisuals
damageOverlay:
sprite: Structures/Windows/cracks_diagonal.rsi
+ - type: Construction
+ graph: WindowDiagonal
+ node: miningWindowDiagonal
diff --git a/Resources/Prototypes/Entities/Structures/Windows/phoronglass.yml b/Resources/Prototypes/Entities/Structures/Windows/phoronglass.yml
index 45aa586514a..df3f7290b65 100644
--- a/Resources/Prototypes/Entities/Structures/Windows/phoronglass.yml
+++ b/Resources/Prototypes/Entities/Structures/Windows/phoronglass.yml
@@ -15,7 +15,7 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 300
+ damage: 3000
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
@@ -24,7 +24,7 @@
collection: WindowShatter
- trigger:
!type:DamageTrigger
- damage: 150
+ damage: 1500
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -72,7 +72,7 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 600
+ damage: 6000
behaviors: #excess damage, don't spawn entities.
- !type:DoActsBehavior
acts: [ "Destruction" ]
@@ -81,7 +81,7 @@
collection: WindowShatter
- trigger:
!type:DamageTrigger
- damage: 300
+ damage: 3000
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -144,7 +144,7 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 150
+ damage: 1500
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
@@ -153,7 +153,7 @@
collection: WindowShatter
- trigger:
!type:DamageTrigger
- damage: 75
+ damage: 750
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -201,7 +201,7 @@
thresholds:
- trigger:
!type:DamageTrigger
- damage: 300
+ damage: 3000
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
@@ -210,7 +210,7 @@
collection: WindowShatter
- trigger:
!type:DamageTrigger
- damage: 150
+ damage: 1500
behaviors:
- !type:PlaySoundBehavior
sound:
diff --git a/Resources/Prototypes/Entities/World/Debris/asteroids.yml b/Resources/Prototypes/Entities/World/Debris/asteroids.yml
index f2ab4aa2845..2590f9b3b6a 100644
--- a/Resources/Prototypes/Entities/World/Debris/asteroids.yml
+++ b/Resources/Prototypes/Entities/World/Debris/asteroids.yml
@@ -347,8 +347,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 7
- floorPlacements: 30
+ radius: 30
+ floorPlacements: 250
- type: entity
id: IronrockDebrisSmallBarren
@@ -358,8 +358,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 7
- floorPlacements: 30
+ radius: 30
+ floorPlacements: 250
- type: entity
id: IronrockDebrisSmallRich
@@ -369,8 +369,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 7
- floorPlacements: 30
+ radius: 30
+ floorPlacements: 250
- type: entity
id: IronrockDebrisMedium
@@ -380,8 +380,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 15
- floorPlacements: 50
+ radius: 40
+ floorPlacements: 300
- type: entity
id: IronrockDebrisMediumBarren
@@ -391,8 +391,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 15
- floorPlacements: 50
+ radius: 40
+ floorPlacements: 300
- type: entity
id: IronrockDebrisMediumRich
@@ -402,8 +402,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 15
- floorPlacements: 50
+ radius: 40
+ floorPlacements: 300
- type: entity
id: IronrockDebrisLarge
@@ -413,8 +413,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 30
- floorPlacements: 250
+ radius: 50
+ floorPlacements: 350
- type: entity
id: IronrockDebrisLargeBarren
@@ -424,8 +424,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 30
- floorPlacements: 250
+ radius: 50
+ floorPlacements: 350
- type: entity
id: IronrockDebrisLargeRich
@@ -435,8 +435,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 30
- floorPlacements: 250
+ radius: 50
+ floorPlacements: 350
- type: entity
id: IronrockDebrisHuge
@@ -446,8 +446,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 50
- floorPlacements: 400
+ radius: 60
+ floorPlacements: 500
- type: entity
id: IronrockDebrisHugeBarren
@@ -457,8 +457,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 50
- floorPlacements: 400
+ radius: 60
+ floorPlacements: 500
- type: entity
id: IronrockDebrisHugeRich
@@ -468,8 +468,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 50
- floorPlacements: 400
+ radius: 60
+ floorPlacements: 500
- type: entity
id: BaseChromiteDebris
@@ -685,8 +685,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 10
- floorPlacements: 30
+ radius: 35
+ floorPlacements: 125
- type: entity
id: ChromiteDebrisSmallBarren
@@ -697,8 +697,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 10
- floorPlacements: 30
+ radius: 35
+ floorPlacements: 125
- type: entity
id: ChromiteDebrisSmallRich
@@ -709,8 +709,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 10
- floorPlacements: 30
+ radius: 35
+ floorPlacements: 125
- type: entity
id: ChromiteDebrisMedium
@@ -721,8 +721,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 15
- floorPlacements: 40
+ radius: 45
+ floorPlacements: 160
- type: entity
id: ChromiteDebrisMediumBarren
@@ -733,8 +733,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 15
- floorPlacements: 40
+ radius: 45
+ floorPlacements: 160
- type: entity
id: ChromiteDebrisMediumRich
@@ -745,8 +745,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 15
- floorPlacements: 40
+ radius: 45
+ floorPlacements: 160
- type: entity
id: ChromiteDebrisLarge
@@ -757,8 +757,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 35
- floorPlacements: 90
+ radius: 60
+ floorPlacements: 200
- type: entity
id: ChromiteDebrisLargeBarren
@@ -769,8 +769,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 35
- floorPlacements: 90
+ radius: 60
+ floorPlacements: 200
- type: entity
id: ChromiteDebrisLargeRich
@@ -781,8 +781,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 35
- floorPlacements: 90
+ radius: 60
+ floorPlacements: 200
- type: entity
id: ChromiteDebrisHuge
@@ -793,8 +793,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 50
- floorPlacements: 150
+ radius: 75
+ floorPlacements: 275
- type: entity
id: ChromiteDebrisHugeBarren
@@ -805,8 +805,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 50
- floorPlacements: 150
+ radius: 75
+ floorPlacements: 275
- type: entity
id: ChromiteDebrisHugeRich
@@ -817,8 +817,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: 0.66
- radius: 50
- floorPlacements: 150
+ radius: 75
+ floorPlacements: 275
- type: entity
id: BaseBasaltDebris
@@ -1039,8 +1039,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: BasaltDebrisSmallBarren
@@ -1051,8 +1051,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: BasaltDebrisSmallRich
@@ -1063,8 +1063,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: BasaltDebrisMedium
@@ -1075,8 +1075,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: BasaltDebrisMediumBarren
@@ -1087,8 +1087,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: BasaltDebrisMediumRich
@@ -1099,8 +1099,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: BasaltDebrisLarge
@@ -1111,8 +1111,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: BasaltDebrisLargeBarren
@@ -1123,8 +1123,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: BasaltDebrisLargeRich
@@ -1135,8 +1135,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: BasaltDebrisHuge
@@ -1147,8 +1147,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 225
+ radius: 75
+ floorPlacements: 375
- type: entity
id: BasaltDebrisHugeBarren
@@ -1159,8 +1159,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 225
+ radius: 75
+ floorPlacements: 375
- type: entity
id: BasaltDebrisHugeRich
@@ -1171,8 +1171,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 225
+ radius: 75
+ floorPlacements: 375
- type: entity
id: BaseAndesiteDebris
@@ -1390,8 +1390,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: AndesiteDebrisSmallBarren
@@ -1402,8 +1402,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: AndesiteDebrisSmallRich
@@ -1414,8 +1414,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 25
+ floorPlacements: 125
- type: entity
id: AndesiteDebrisMedium
@@ -1426,8 +1426,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: AndesiteDebrisMediumBarren
@@ -1438,8 +1438,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: AndesiteDebrisMediumRich
@@ -1450,8 +1450,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 20
- floorPlacements: 80
+ radius: 35
+ floorPlacements: 175
- type: entity
id: AndesiteDebrisLarge
@@ -1462,8 +1462,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: AndesiteDebrisLargeBarren
@@ -1474,8 +1474,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: AndesiteDebrisLargeRich
@@ -1486,8 +1486,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 100
+ radius: 50
+ floorPlacements: 250
- type: entity
id: AndesiteDebrisHuge
@@ -1498,8 +1498,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 200
+ radius: 75
+ floorPlacements: 375
- type: entity
id: AndesiteDebrisHugeBarren
@@ -1510,8 +1510,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 200
+ radius: 75
+ floorPlacements: 375
- type: entity
id: AndesiteDebrisHugeRich
@@ -1522,8 +1522,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 50
- floorPlacements: 200
+ radius: 75
+ floorPlacements: 375
- type: entity
id: BaseIceDebris
@@ -1698,8 +1698,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 150
- type: entity
id: IceDebrisSmallBarren
@@ -1710,8 +1710,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 150
- type: entity
id: IceDebrisSmallRich
@@ -1722,8 +1722,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 10
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 150
- type: entity
id: IceDebrisMedium
@@ -1734,8 +1734,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 75
+ radius: 40
+ floorPlacements: 200
- type: entity
id: IceDebrisMediumBarren
@@ -1746,8 +1746,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 75
+ radius: 40
+ floorPlacements: 200
- type: entity
id: IceDebrisMediumRich
@@ -1758,8 +1758,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 75
+ radius: 40
+ floorPlacements: 200
- type: entity
id: IceDebrisLarge
@@ -1770,8 +1770,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 250
- type: entity
id: IceDebrisLargeBarren
@@ -1782,8 +1782,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 250
- type: entity
id: IceDebrisLargeRich
@@ -1794,8 +1794,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 250
- type: entity
id: IceDebrisHuge
@@ -1806,8 +1806,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 30
- floorPlacements: 175
+ radius: 65
+ floorPlacements: 400
- type: entity
id: IceDebrisHugeBarren
@@ -1818,8 +1818,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 30
- floorPlacements: 175
+ radius: 65
+ floorPlacements: 400
- type: entity
id: IceDebrisHugeRich
@@ -1830,8 +1830,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 30
- floorPlacements: 175
+ radius: 65
+ floorPlacements: 400
- type: entity
id: BaseConglomerateDebris
@@ -2073,8 +2073,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 7
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 170
- type: entity
id: ConglomerateDebrisSmallBarren
@@ -2085,8 +2085,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 7
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 170
- type: entity
id: ConglomerateDebrisSmallRich
@@ -2097,8 +2097,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 7
- floorPlacements: 40
+ radius: 30
+ floorPlacements: 170
- type: entity
id: ConglomerateDebrisMedium
@@ -2109,8 +2109,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 80
+ radius: 40
+ floorPlacements: 230
- type: entity
id: ConglomerateDebrisMediumBarren
@@ -2121,8 +2121,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 80
+ radius: 40
+ floorPlacements: 230
- type: entity
id: ConglomerateDebrisMediumRich
@@ -2133,8 +2133,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 15
- floorPlacements: 80
+ radius: 40
+ floorPlacements: 230
- type: entity
id: ConglomerateDebrisLarge
@@ -2145,8 +2145,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 285
- type: entity
id: ConglomerateDebrisLargeBarren
@@ -2157,8 +2157,9 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 285
+
- type: entity
id: ConglomerateDebrisLargeRich
@@ -2169,8 +2170,9 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 25
- floorPlacements: 125
+ radius: 50
+ floorPlacements: 285
+
- type: entity
id: ConglomerateDebrisHuge
@@ -2181,8 +2183,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 35
- floorPlacements: 225
+ radius: 60
+ floorPlacements: 340
- type: entity
id: ConglomerateDebrisHugeBarren
@@ -2193,8 +2195,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 35
- floorPlacements: 225
+ radius: 60
+ floorPlacements: 340
- type: entity
id: ConglomerateDebrisHugeRich
@@ -2205,8 +2207,8 @@
- type: MapGrid
- type: BlobFloorPlanBuilder
blobDrawProb: .66
- radius: 35
- floorPlacements: 225
+ radius: 60
+ floorPlacements: 340
- type: entity
id: BaseBrassDebris
diff --git a/Resources/Prototypes/Entities/World/Debris/threshold1_biomes.yml b/Resources/Prototypes/Entities/World/Debris/threshold1_biomes.yml
index 1525a03954a..c8d1cd8bc38 100644
--- a/Resources/Prototypes/Entities/World/Debris/threshold1_biomes.yml
+++ b/Resources/Prototypes/Entities/World/Debris/threshold1_biomes.yml
@@ -87,7 +87,7 @@
noiseRanges:
BiomeBase:
- 2,4
- debrisEntityTable: 'DarkSpaceMobTable'
+ debrisEntityTable: 'CarpMobCreaturesTable'
chunkComponents:
- type: DebrisFeaturePlacerController
densityNoiseChannel: DensityLow
@@ -273,12 +273,12 @@
- type: NoiseDrivenDebrisSelector
noiseChannel: Wreck
debrisTable:
- - id: ScrapDebrisSmall
+ - id: BrassWreckSmall
prob: 0.9
- - id: ScrapDebrisMedium
- prob: 0.3
- - id: ScrapDebrisLarge
- prob: 0.1
+ - id: BrassWreckMedium
+ prob: 0.7
+ - id: BrassWreckLarge
+ prob: 0.4
- type: NoiseRangeCarver
ranges:
- 0.4, 0.6
diff --git a/Resources/Prototypes/Entities/World/Debris/wrecks.yml b/Resources/Prototypes/Entities/World/Debris/wrecks.yml
index ebc563e36ae..dff67814dce 100644
--- a/Resources/Prototypes/Entities/World/Debris/wrecks.yml
+++ b/Resources/Prototypes/Entities/World/Debris/wrecks.yml
@@ -32,9 +32,9 @@
- id: Grille
prob: 0.5
- id: SalvageSpawnerScrapCommon
- prob: 0.9
+ prob: 0.9
- id: SalvageSpawnerScrapValuable
- prob: 0.4
+ prob: 0.4
Lattice:
- prob: 1.5
- id: Grille
@@ -50,19 +50,19 @@
- id: SalvageSpawnerScrapValuable
prob: 0.3
- id: SalvageSpawnerScrapCommon
- prob: 0.3
+ prob: 0.3
FloorSteel:
- prob: 2 # Intentional blank.
- id: SalvageSpawnerStructuresVarious
prob: 0.2
- id: SalvageSpawnerScrapCommon
- prob: 0.8
+ prob: 0.8
- id: SalvageSpawnerStructuresVarious
prob: 0.3
- id: SalvageSpawnerMobMagnet
prob: 0.4
- id: SalvageSpawnerScrapValuable
- prob: 0.3
+ prob: 0.3
- type: IFF
flags: HideLabel
color: "#88b0d1"
@@ -85,8 +85,8 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 9
- floorPlacements: 24
+ radius: 15
+ floorPlacements: 60
- type: entity
id: ScrapDebrisLarge
@@ -96,5 +96,118 @@
components:
- type: MapGrid
- type: BlobFloorPlanBuilder
- radius: 11
- floorPlacements: 36
+ radius: 25
+ floorPlacements: 80
+
+- type: entity
+ id: BaseBrassWreck
+ parent: BaseDebris
+ name: brass wreck
+ abstract: true
+ components:
+ - type: MapGrid
+ - type: BlobFloorPlanBuilder
+ floorTileset:
+ - PlatingBrass
+ - PlatingBrass
+ - PlatingBrass
+ - FloorBrassFilled
+ - TrainLattice
+ blobDrawProb: 0.5
+ radius: 6
+ floorPlacements: 16
+ - type: SimpleFloorPlanPopulator
+ entries:
+ PlatingBrass:
+ - prob: 2.5 # Intentional blank.
+ - id: SalvageMaterialCrateSpawner
+ prob: 0.4
+ - id: SalvageCanisterSpawner
+ prob: 0.2
+ - id: WaterVaporCanister
+ prob: 0.05
+ - id: RandomInstruments
+ prob: 0.08
+ - id: SalvageSpawnerMobMagnet
+ prob: 0.2
+ - id: SalvageSpawnerMobMagnet
+ prob: 0.3
+ - id: WallClock
+ prob: 1
+ - id: ClockworkGrille
+ prob: 0.5
+ - id: SalvageSpawnerScrapCommon
+ prob: 0.9
+ - id: SalvageSpawnerScrapValuable
+ prob: 0.4
+ TrainLattice:
+ - prob: 1.5
+ - id: ClockworkGrille
+ prob: 0.4
+ - id: SheetBrass1
+ prob: 0.15
+ - id: RandomInstruments
+ prob: 0.06
+ - id: SalvageMaterialCrateSpawner
+ prob: 0.1
+ - id: SalvageSpawnerScrapValuable
+ prob: 0.4
+ - id: SalvageCanisterSpawner
+ prob: 0.2
+ - id: SalvageSpawnerMobMagnet
+ prob: 0.2
+ - id: SalvageSpawnerScrapValuable
+ prob: 0.3
+ - id: SalvageSpawnerScrapCommon
+ prob: 0.3
+ FloorBrassFilled:
+ - prob: 2 # Intentional blank.
+ - id: SalvageSpawnerStructuresVarious
+ prob: 0.2
+ - id: RandomInstruments
+ prob: 0.05
+ - id: WaterVaporCanister
+ prob: 0.03
+ - id: SalvageSpawnerScrapCommon
+ prob: 0.8
+ - id: SalvageSpawnerStructuresVarious
+ prob: 0.3
+ - id: SalvageSpawnerMobMagnet
+ prob: 0.4
+ - id: SalvageSpawnerScrapValuable
+ prob: 0.3
+ - type: IFF
+ flags: HideLabel
+ color: "#d4af37"
+
+- type: entity
+ id: BrassWreckSmall
+ parent: BaseBrassWreck
+ name: brass wreck small
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: MapGrid
+ - type: BlobFloorPlanBuilder
+ floorPlacements: 16
+
+- type: entity
+ id: BrassWreckMedium
+ parent: BaseBrassWreck
+ name: brass wreck medium
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: MapGrid
+ - type: BlobFloorPlanBuilder
+ radius: 15
+ floorPlacements: 75
+
+- type: entity
+ id: BrassWreckLarge
+ parent: BaseBrassWreck
+ name: brass wreck large
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: MapGrid
+ - type: BlobFloorPlanBuilder
+ radius: 30
+ floorPlacements: 120
diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml
deleted file mode 100644
index 66cb65218a9..00000000000
--- a/Resources/Prototypes/Guidebook/antagonist.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-- type: guideEntry
- id: Antagonists
- name: guide-entry-antagonists
- text: "/ServerInfo/Guidebook/Antagonist/Antagonists.xml"
- children:
- - Traitors
- - Thieves
- - Revolutionaries
- - NuclearOperatives
- - SpaceNinja
- - Wizard
- - Zombies
- - Xenoborgs
- - MinorAntagonists
-
-- type: guideEntry
- id: Traitors
- name: guide-entry-traitors
- text: "/ServerInfo/Guidebook/Antagonist/Traitors.xml"
-
-- type: guideEntry
- id: NuclearOperatives
- name: guide-entry-nuclear-operatives
- text: "/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml"
-
-- type: guideEntry
- id: Zombies
- name: guide-entry-zombies
- text: "/ServerInfo/Guidebook/Antagonist/Zombies.xml"
-
-- type: guideEntry
- id: Revolutionaries
- name: guide-entry-revolutionaries
- text: "/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml"
-
-- type: guideEntry
- id: MinorAntagonists
- name: guide-entry-minor-antagonists
- text: "/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml"
-
-- type: guideEntry
- id: SpaceNinja
- name: guide-entry-space-ninja
- text: "/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml"
-
-- type: guideEntry
- id: Thieves
- name: guide-entry-thieves
- text: "/ServerInfo/Guidebook/Antagonist/Thieves.xml"
-
-- type: guideEntry
- id: Wizard
- name: guide-entry-wizard
- text: "/ServerInfo/Guidebook/Antagonist/Wizard.xml"
-
-- type: guideEntry
- id: Xenoborgs
- name: guide-entry-xenoborgs
- text: "/ServerInfo/Guidebook/Antagonist/Xenoborgs.xml"
diff --git a/Resources/Prototypes/Guidebook/station.yml b/Resources/Prototypes/Guidebook/station.yml
index 4dee5967006..568556c833f 100644
--- a/Resources/Prototypes/Guidebook/station.yml
+++ b/Resources/Prototypes/Guidebook/station.yml
@@ -6,7 +6,7 @@
children:
- Jobs
- Survival
- - Antagonists
+ #- Antagonists, Persistence Station
- Glossary
- type: guideEntry
diff --git a/Resources/Prototypes/Guidebook/factions.yml b/Resources/Prototypes/Guidebook/threshold.yml
similarity index 99%
rename from Resources/Prototypes/Guidebook/factions.yml
rename to Resources/Prototypes/Guidebook/threshold.yml
index 117e6fe23c5..c7928516203 100644
--- a/Resources/Prototypes/Guidebook/factions.yml
+++ b/Resources/Prototypes/Guidebook/threshold.yml
@@ -1,22 +1,3 @@
-- type: guideEntry
- id: Factions
- name: Factions
- text: "/ServerInfo/Guidebook/Persistence/Factions.xml"
- children:
- - FactionCreation
- - FactionModification
-
-- type: guideEntry
- id: FactionCreation
- name: Faction Creation
- text: "/ServerInfo/Guidebook/Persistence/FactionCreation.xml"
-
-- type: guideEntry
- id: FactionModification
- name: Faction Modification
- text: "/ServerInfo/Guidebook/Persistence/FactionModification.xml"
-
-
- type: guideEntry
id: Threshold
name: The Threshold
@@ -30,6 +11,7 @@
- Achievements
- GridControl
- AccessControl
+ - Factions
- type: guideEntry
id: MakingMoney
@@ -70,3 +52,21 @@
id: AccessControl
name: Access Control
text: "/ServerInfo/Guidebook/Persistence/AccessControl.xml"
+
+- type: guideEntry
+ id: Factions
+ name: Factions
+ text: "/ServerInfo/Guidebook/Persistence/Factions.xml"
+ children:
+ - FactionCreation
+ - FactionModification
+
+- type: guideEntry
+ id: FactionCreation
+ name: Faction Creation
+ text: "/ServerInfo/Guidebook/Persistence/FactionCreation.xml"
+
+- type: guideEntry
+ id: FactionModification
+ name: Faction Modification
+ text: "/ServerInfo/Guidebook/Persistence/FactionModification.xml"
diff --git a/Resources/Prototypes/Hydroponics/randomChemicals.yml b/Resources/Prototypes/Hydroponics/randomChemicals.yml
index 52f66ed78f3..dabbf84f702 100644
--- a/Resources/Prototypes/Hydroponics/randomChemicals.yml
+++ b/Resources/Prototypes/Hydroponics/randomChemicals.yml
@@ -6,7 +6,6 @@
reagents:
- Omnizine
- Impedrezene
- - Fresium
- HeartbreakerToxin
- Honk
- BuzzochloricBees
diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml
index 9a2b4eafae9..68f43a2f303 100644
--- a/Resources/Prototypes/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Hydroponics/seeds.yml
@@ -593,8 +593,8 @@
packetPrototype: BloodTomatoSeeds
productPrototypes:
- FoodBloodTomato
- mutationPrototypes:
- - killerTomato
+# mutationPrototypes:
+# - killerTomato # Persistence: massive performance risk & no real gameplay benefit
harvestRepeat: Repeat
lifespan: 60
maturation: 8
diff --git a/Resources/Prototypes/Paintables/items_groups.yml b/Resources/Prototypes/Paintables/items_groups.yml
index 45d016823a2..a237f096573 100644
--- a/Resources/Prototypes/Paintables/items_groups.yml
+++ b/Resources/Prototypes/Paintables/items_groups.yml
@@ -37,10 +37,47 @@
captain: CaptainPDA
clown: ClownPDA
mime: MimePDA
- medical: MedicalInternPDA
+ medicalintern: MedicalInternPDA
security: SecurityPDA
cargo: CargoPDA
- research: ResearchAssistantPDA
+ researchassistant: ResearchAssistantPDA
+ botanist: BotanistPDA
+ technicalassistant: TechnicalAssistantPDA
+ securitycadet: SecurityCadetPDA
+ serviceworker: ServiceWorkerPDA
+ chef: ChefPDA
+ chaplain: ChaplainPDA
+ qm: QuartermasterPDA
+ salvage: SalvagePDA
+ bartender: BartenderPDA
+ librarian: LibrarianPDA
+ lawyer: LawyerPDA
+ janitor: JanitorPDA
+ hop: HoPPDA
+ ce: CEPDA
+ engineer: EngineerPDA
+ cmo: CMOPDA
+ medical: MedicalPDA
+ paramedic: ParamedicPDA
+ chemistry: ChemistryPDA
+ rnd: RnDPDA
+ science: SciencePDA
+ hos: HoSPDA
+ warden: WardenPDA
+ atmos: AtmosPDA
+ clear: ClearPDA
+ psychologist: PsychologistPDA
+ reporter: ReporterPDA
+ zookeeper: ZookeeperPDA
+ boxer: BoxerPDA
+ detective: DetectivePDA
+ brigmedic: BrigmedicPDA
+ seniorengineer: SeniorEngineerPDA
+ senioreresearcher: SeniorResearcherPDA
+ seniorphysician: SeniorPhysicianPDA
+ seniorofficer: SeniorOfficerPDA
+ seniorcourier: SeniorCourierPDA
+ pirate: PiratePDA
- type: paintableGroup
id: ItemHeadsets
diff --git a/Resources/Prototypes/Paintables/locker_groups.yml b/Resources/Prototypes/Paintables/locker_groups.yml
index b9bdf1c89fa..0e4fd07b56a 100644
--- a/Resources/Prototypes/Paintables/locker_groups.yml
+++ b/Resources/Prototypes/Paintables/locker_groups.yml
@@ -21,6 +21,14 @@
mime: LockerMime
medicine: LockerMedicine
paramedic: LockerParamedic
+ prisoner1: LockerPrisoner
+ prisoner2: LockerPrisoner2
+ prisoner3: LockerPrisoner3
+ prisoner4: LockerPrisoner4
+ prisoner5: LockerPrisoner5
+ prisoner6: LockerPrisoner6
+ prisoner7: LockerPrisoner7
+ prisoner8: LockerPrisoner8
quartermaster: LockerQuarterMaster
rd: LockerResearchDirector
representative: LockerRepresentative
@@ -78,3 +86,11 @@
styles:
evac: LockerWallEvacRepair
medical: LockerWallMedical
+ wallprisoner1: LockerWallBasePrisoner
+ wallprisoner2: LockerWallPrisoner2
+ wallprisoner3: LockerWallPrisoner3
+ wallprisoner4: LockerWallPrisoner4
+ wallprisoner5: LockerWallPrisoner5
+ wallprisoner6: LockerWallPrisoner6
+ wallprisoner7: LockerWallPrisoner7
+ wallprisoner8: LockerWallPrisoner8
diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml
index 5fb5356f91d..28f8673085d 100644
--- a/Resources/Prototypes/RCD/rcd.yml
+++ b/Resources/Prototypes/RCD/rcd.yml
@@ -273,3 +273,85 @@
collisionMask: Impassable
rotation: User
fx: EffectRCDConstruct0
+
+# Holo Walls
+
+- type: rcd
+ id: HoloWallBlue
+ category: WallsAndFlooring
+ sprite: /Textures/Interface/Radial/RCD/solid_wall.png
+ mode: ConstructObject
+ prototype: HoloWallBlue
+ collisionMask: FullTileMask
+ cost: 0
+ delay: 1
+ rotation: Fixed
+ fx: EffectRCDConstruct2
+
+- type: rcd
+ id: HoloWallRed
+ category: WallsAndFlooring
+ sprite: /Textures/Interface/Radial/RCD/solid_wall.png
+ mode: ConstructObject
+ prototype: HoloWallRed
+ collisionMask: FullTileMask
+ cost: 0
+ delay: 1
+ rotation: Fixed
+ fx: EffectRCDConstruct2
+
+- type: rcd
+ id: HoloGrille
+ category: WindowsAndGrilles
+ sprite: /Textures/Interface/Radial/RCD/grille.png
+ mode: ConstructObject
+ prototype: HoloGrille
+ cost: 0
+ delay: 1
+ collisionMask: FullTileMask
+ rotation: Fixed
+ fx: EffectRCDConstruct2
+
+# Holo Windows
+- type: rcd
+ id: HoloWindow
+ category: WindowsAndGrilles
+ sprite: /Textures/Interface/Radial/RCD/window.png
+ mode: ConstructObject
+ prototype: HoloWindow
+ cost: 0
+ delay: 1
+ collisionMask: Impassable
+ rules:
+ - IsWindow
+ rotation: Fixed
+ fx: EffectRCDConstruct2
+
+- type: rcd
+ id: HoloWindowDirectional
+ category: WindowsAndGrilles
+ sprite: /Textures/Interface/Radial/RCD/directional.png
+ mode: ConstructObject
+ prototype: HoloWindowDirectional
+ cost: 0
+ delay: 1
+ collisionMask: Impassable
+ collisionBounds: "-0.23,-0.49,0.23,-0.36"
+ rules:
+ - IsWindow
+ rotation: User
+ fx: EffectRCDConstruct1
+
+# Holo airlock
+
+- type: rcd
+ id: HoloAirlock
+ category: Airlocks
+ sprite: /Textures/Interface/Radial/RCD/airlock.png
+ mode: ConstructObject
+ prototype: HoloAirlock
+ collisionMask: FullTileMask
+ cost: 0
+ delay: 1
+ rotation: Fixed
+ fx: EffectRCDConstruct2
diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml
index e9e3a03fc2a..57a47d5ca7d 100644
--- a/Resources/Prototypes/Reagents/gases.yml
+++ b/Resources/Prototypes/Reagents/gases.yml
@@ -379,9 +379,9 @@
minScale: 1
effectProto: StatusEffectSeeingRainbow
type: Add
- time: 500
+ time: 33.3
- !type:Drunk
- boozePower: 500
+ boozePower: 33.3
minScale: 1
- !type:PopupMessage
type: Local
diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml
index 1d587ee89ed..8cf0e87668d 100644
--- a/Resources/Prototypes/Reagents/medicine.yml
+++ b/Resources/Prototypes/Reagents/medicine.yml
@@ -108,6 +108,7 @@
color: "#2d5708"
metabolisms:
Medicine:
+ metabolismRate: 0.1
effects:
- !type:ModifyStatusEffect
effectProto: StatusEffectDrunk
@@ -116,7 +117,7 @@
- !type:HealthChange
damage:
types:
- Poison: -0.5
+ Poison: -0.1
- type: reagent
id: Arithrazine
@@ -1407,6 +1408,7 @@
color: "#07E79E"
metabolisms:
Medicine:
+ metabolismRate: 0.3
effects:
- !type:HealthChange
conditions:
@@ -1415,7 +1417,7 @@
min: 30
damage:
types:
- Poison: 2
+ Poison: 1.2
- !type:ModifyStatusEffect
effectProto: StatusEffectSeeingRainbow
conditions:
@@ -1423,14 +1425,14 @@
reagent: Psicodine
min: 30
type: Add
- time: 8
+ time: 4.8
- !type:GenericStatusEffect
key: Jitter
time: 2.0
type: Remove
- !type:ModifyStatusEffect
effectProto: StatusEffectDrunk
- time: 6.0
+ time: 18.0
type: Remove
- !type:PopupMessage # we dont have sanity/mood so this will have to do
type: Local
@@ -1439,7 +1441,7 @@
- "psicodine-effect-fearless"
- "psicodine-effect-anxieties-wash-away"
- "psicodine-effect-at-peace"
- probability: 0.2
+ probability: 0.15
- type: reagent
id: PotassiumIodide
@@ -1491,7 +1493,7 @@
type: Remove
- !type:ModifyStatusEffect
effectProto: StatusEffectSeeingRainbow
- time: 10.0
+ time: 50.0
type: Remove
- !type:AdjustReagent
reagent: Desoxyephedrine
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_external.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_external.yml
new file mode 100644
index 00000000000..e92a9397267
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_external.yml
@@ -0,0 +1,163 @@
+- type: constructionGraph
+ id: AirlockExternal
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: assembly
+ completed:
+ - !type:SetAnchor
+ value: false
+ steps:
+ - material: Steel
+ amount: 4
+ doAfter: 2
+
+ - node: assembly
+ entity: AirlockAssemblyExternal
+ actions:
+ - !type:SnapToGrid {}
+ - !type:SetAnchor {}
+ edges:
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: Cable
+ amount: 5
+ doAfter: 2.5
+ - to: start
+ conditions:
+ - !type:EntityAnchored
+ anchored: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 4
+ - !type:DeleteEntity {}
+ steps:
+ - tool: Welding
+ doAfter: 3
+
+ - node: wired
+ entity: AirlockAssemblyExternal
+ edges:
+ - to: electronics
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - tag: DoorElectronics
+ store: board
+ name: construction-graph-tag-door-electronics-circuit-board
+ icon:
+ sprite: "Objects/Misc/module.rsi"
+ state: "door_electronics"
+ doAfter: 3
+ - to: assembly
+ completed:
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 5
+ steps:
+ - tool: Cutting
+ doAfter: 2.5
+
+ - node: electronics
+ edges:
+ - to: airlock
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - tool: Screwing
+ doAfter: 2.5
+ - to: glassElectronics
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: ReinforcedGlass
+ amount: 1
+ doAfter: 2
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ steps:
+ - tool: Prying
+ doAfter: 5
+
+ - node: glassElectronics
+ entity: AirlockAssemblyExternalGlass
+ edges:
+ - to: glassAirlock
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: ReinforcedGlass
+ amount: 1
+ doAfter: 2
+ - tool: Screwing
+ doAfter: 2.5
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 1
+ steps:
+ - tool: Prying
+ doAfter: 5
+
+## Glass airlock
+ - node: glassAirlock
+ entity: AirlockExternalGlass
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
+ edges:
+ - to: glassElectronics
+ conditions:
+ - !type:EntityAnchored {}
+ - !type:DoorWelded {}
+ - !type:DoorBolted
+ value: false
+ - !type:WirePanel {}
+ - !type:AllWiresCut
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 1
+ steps:
+ - tool: Prying
+ doAfter: 2
+
+## Standard airlock
+ - node: airlock
+ entity: AirlockExternal
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
+ edges:
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ - !type:DoorWelded {}
+ - !type:DoorBolted
+ value: false
+ - !type:WirePanel {}
+ - !type:AllWiresCut
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ steps:
+ - tool: Prying
+ doAfter: 5
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_mining.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_mining.yml
new file mode 100644
index 00000000000..0cef27b6bfb
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_mining.yml
@@ -0,0 +1,164 @@
+- type: constructionGraph
+ id: AirlockMining
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: assembly
+ completed:
+ - !type:SetAnchor
+ value: false
+ steps:
+ - material: Steel
+ amount: 4
+ doAfter: 2
+
+ - node: assembly
+ entity: AirlockAssemblyMining
+ actions:
+ - !type:SnapToGrid {}
+ - !type:SetAnchor {}
+ edges:
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: Cable
+ amount: 5
+ doAfter: 2.5
+ - to: start
+ conditions:
+ - !type:EntityAnchored
+ anchored: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 4
+ - !type:DeleteEntity {}
+ steps:
+ - tool: Welding
+ doAfter: 3
+
+ - node: wired
+ entity: AirlockAssemblyMining
+ edges:
+ - to: electronics
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - tag: DoorElectronics
+ store: board
+ name: construction-graph-tag-door-electronics-circuit-board
+ icon:
+ sprite: "Objects/Misc/module.rsi"
+ state: "door_electronics"
+ doAfter: 3
+ - to: assembly
+ completed:
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 5
+ steps:
+ - tool: Cutting
+ doAfter: 2.5
+
+ - node: electronics
+ entity: AirlockAssemblyMining
+ edges:
+ - to: airlock
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - tool: Screwing
+ doAfter: 2.5
+ - to: glassElectronics
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: ReinforcedGlass
+ amount: 1
+ doAfter: 2
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ steps:
+ - tool: Prying
+ doAfter: 5
+
+ - node: glassElectronics
+ entity: AirlockAssemblyMiningGlass
+ edges:
+ - to: glassAirlock
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: ReinforcedGlass
+ amount: 1
+ doAfter: 2
+ - tool: Screwing
+ doAfter: 2.5
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 1
+ steps:
+ - tool: Prying
+ doAfter: 5
+
+## glass mining
+ - node: glassAirlock
+ entity: AirlockMiningGlass
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
+ edges:
+ - to: glassElectronics
+ conditions:
+ - !type:EntityAnchored {}
+ - !type:DoorWelded {}
+ - !type:DoorBolted
+ value: false
+ - !type:WirePanel {}
+ - !type:AllWiresCut
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 1
+ steps:
+ - tool: Prying
+ doAfter: 2
+
+## mining
+ - node: airlock
+ entity: AirlockMining
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
+ edges:
+ - to: wired
+ conditions:
+ - !type:EntityAnchored {}
+ - !type:DoorWelded {}
+ - !type:DoorBolted
+ value: false
+ - !type:WirePanel {}
+ - !type:AllWiresCut
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ steps:
+ - tool: Prying
+ doAfter: 5
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml
index 2b15477ed07..835b46bfb1f 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml
@@ -72,6 +72,22 @@
- tool: Welding
doAfter: 10
+ - to: miningWall
+ completed:
+ - !type:SnapToGrid
+ southRotation: true
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Screwing
+ doAfter: 2
+ - material: Steel
+ amount: 4
+ doAfter: 1
+ - material: Plastic
+ amount: 2
+ doAfter: 1
+
- to: silverWall
completed:
- !type:SnapToGrid
@@ -205,6 +221,21 @@
- tool: Prying
doAfter: 10
+ - node: miningWall
+ entity: WallMining
+ edges:
+ - to: girder
+ completed:
+ - !type:GivePrototype
+ prototype: SheetSteel1
+ amount: 4
+ - !type:GivePrototype
+ prototype: SheetPlastic1
+ amount: 2
+ steps:
+ - tool: Welding
+ doAfter: 10
+
- node: silverWall
entity: WallSilver
edges:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder_diagonal.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder_diagonal.yml
index 776d15b78a5..1f84f6de9df 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder_diagonal.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder_diagonal.yml
@@ -32,6 +32,17 @@
amount: 2
doAfter: 1
+ - to: miningWallDiagonal
+ steps:
+ - tool: Screwing
+ doAfter: 1
+ - material: Steel
+ amount: 2
+ doAfter: 1
+ - material: Plastic
+ amount: 2
+ doAfter: 1
+
- to: reinforcedGirder
completed:
- !type:SnapToGrid
@@ -55,6 +66,21 @@
- tool: Welding
doAfter: 10
+ - node: miningWallDiagonal
+ entity: WallMiningDiagonal
+ edges:
+ - to: girder
+ completed:
+ - !type:GivePrototype
+ prototype: SheetSteel1
+ amount: 2
+ - !type:GivePrototype
+ prototype: SheetPlastic1
+ amount: 2
+ steps:
+ - tool: Welding
+ doAfter: 10
+
- node: reinforcedGirder
entity: ReinforcedGirderDiagonal
edges:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_beacon.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_beacon.yml
index d9c2c2c6aa0..d570d101e53 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_beacon.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_beacon.yml
@@ -24,3 +24,31 @@
amount: 1
- !type:DeleteEntity
+- type: constructionGraph
+ id: StationBeacon
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: stationbeacon
+ steps:
+ - material: Steel
+ amount: 1
+ - material: Cable
+ amount: 1
+ doAfter: 2
+ - node: stationbeacon
+ entity: DefaultStationBeaconUnanchored
+ edges:
+ - to: start
+ steps:
+ - tool: Screwing
+ doAfter: 2
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 1
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 1
+ - !type:DeleteEntity
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/vault_door.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/vault_door.yml
new file mode 100644
index 00000000000..6969711fa31
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/vault_door.yml
@@ -0,0 +1,271 @@
+- type: constructionGraph
+ id: VaultDoor
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: assembly
+ completed:
+ - !type:SetAnchor
+ value: false
+ steps:
+ - material: Titanium
+ amount: 4
+ doAfter: 5
+
+ - node: assembly
+ entity: AirlockAssemblyHighSec
+ actions:
+ - !type:SnapToGrid {}
+ - !type:SetAnchor {}
+ edges:
+ - to: reinforce
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: Plasteel
+ amount: 2
+ doAfter: 2
+ - to: start
+ conditions:
+ - !type:EntityAnchored
+ anchored: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetTitanium1
+ amount: 4
+ - !type:DeleteEntity {}
+ steps:
+ - tool: Welding
+ doAfter: 8
+
+ - node: reinforce
+ entity: AirlockAssemblyHighSec
+ edges:
+ - to: wiring
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - tool: Screwing
+ doAfter: 2
+ - material: Plasteel
+ amount: 3
+ doAfter: 3
+ - to: assembly
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetPlasteel1
+ amount: 2
+ steps:
+ - tool: Welding
+ doAfter: 5
+ - tool: Prying
+ doAfter: 1
+
+ - node: wiring
+ entity: AirlockAssemblyHighSec
+ edges:
+ - to: electronics
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - material: Cable
+ amount: 5
+ doAfter: 3
+ - to: reinforce
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetPlasteel1
+ amount: 3
+ steps:
+ - tool: Prying
+ doAfter: 8
+ - tool: Welding
+ doAfter: 10
+ - tool: Prying
+ doAfter: 1
+
+ - node: electronics
+ entity: AirlockAssemblyHighSec
+ edges:
+ - to: vaultdoor
+ conditions:
+ - !type:EntityAnchored {}
+ steps:
+ - component: DoorElectronics
+ store: board
+ name: construction-graph-component-door-electronics-circuit-board
+ icon:
+ sprite: "Objects/Misc/module.rsi"
+ state: "door_electronics"
+ doAfter: 5
+ - tool: Welding
+ doAfter: 4
+ - tool: Screwing
+ doAfter: 3
+ - tool: Welding
+ doAfter: 5
+ - tool: Prying
+ doAfter: 1
+ - tool: Welding
+ doAfter: 10
+ - tool: Prying
+ doAfter: 1
+ - tool: Screwing
+ doAfter: 1
+ - to: wiring
+ completed:
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 5
+ steps:
+ - tool: Cutting
+ doAfter: 2
+
+ - node: vaultdoor
+ entity: VaultDoor
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
+ edges:
+ - to: electronics
+ conditions:
+ - !type:EntityAnchored {}
+ - !type:DoorWelded {}
+ - !type:DoorBolted
+ value: false
+ - !type:WirePanel {}
+ - !type:AllWiresCut
+ completed:
+ - !type:EmptyAllContainers
+ pickup: true
+ emptyAtUser: true
+ steps:
+ - tool: Prying
+ doAfter: 5
+ - tool: Cutting
+ doAfter: 3
+ - tool: Prying
+ doAfter: 8
+
+ - to: highSecurityUnfinished
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - material: Titanium
+ amount: 2
+ doAfter: 4
+
+## High security level door: a layer of plasteel plating protects the internal wiring
+ - node: highSecurityUnfinished
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level8
+ wiresAccessible: false
+ edges:
+ - to: vaultdoor
+ completed:
+ - !type:GivePrototype
+ prototype: SheetTitanium1
+ amount: 2
+ conditions:
+ - !type:WirePanel {}
+ - !type:HasTag
+ tag: HighSecDoor
+ steps:
+ - tool: Prying
+ doAfter: 8
+
+ - to: highSecurity
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Welding
+ doAfter: 8
+
+ - node: highSecurity
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level9
+ wiresAccessible: false
+ edges:
+ - to: highSecurityUnfinished
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Welding
+ doAfter: 15
+
+ - to: maxSecurity
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - material: MetalRod
+ amount: 4
+ doAfter: 2
+
+## Max security level door: an electric grill is added
+ - node: maxSecurity
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level5
+ wiresAccessible: false
+ edges:
+ - to: highSecurity
+ completed:
+ - !type:AttemptElectrocute
+ - !type:GivePrototype
+ prototype: PartRodMetal1
+ amount: 4
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Cutting
+ doAfter: 1.5
+
+ - to: superMaxSecurityUnfinished
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - material: Titanium
+ amount: 2
+ doAfter: 6
+
+## Super max security level door: an additional layer of plasteel is added
+ - node: superMaxSecurityUnfinished
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level8
+ wiresAccessible: false
+ edges:
+ - to: maxSecurity
+ completed:
+ - !type:GivePrototype
+ prototype: SheetTitanium1
+ amount: 2
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Prying
+ doAfter: 8
+
+ - to: complete_vault_door
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Welding
+ doAfter: 10
+
+ - node: complete_vault_door
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level9
+ wiresAccessible: false
+ edges:
+ - to: superMaxSecurityUnfinished
+ conditions:
+ - !type:WirePanel {}
+ steps:
+ - tool: Welding
+ doAfter: 15
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml
index 7cacbdc80a4..c54fff28a10 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml
@@ -72,6 +72,12 @@
amount: 2
doAfter: 3
+ - to: miningWindow
+ steps:
+ - material: ReinforcedGlass
+ amount: 2
+ doAfter: 3
+
- node: window
entity: Window
edges:
@@ -110,6 +116,29 @@
- tool: Anchoring
doAfter: 2
+ - node: miningWindow
+ entity: MiningWindow
+ edges:
+ - to: start
+ completed:
+ - !type:GivePrototype
+ prototype: SheetRGlass1
+ amount: 2
+ - !type:DeleteEntity {}
+ steps:
+ - tool: Welding
+ doAfter: 5
+ - tool: Screwing
+ doAfter: 1
+ - tool: Prying
+ doAfter: 2
+ - tool: Welding
+ doAfter: 5
+ - tool: Screwing
+ doAfter: 1
+ - tool: Anchoring
+ doAfter: 2
+
- node: tintedWindow
entity: TintedWindow
edges:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window_diagonal.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window_diagonal.yml
index 746d4d4e420..b91f339f91a 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window_diagonal.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window_diagonal.yml
@@ -54,6 +54,12 @@
amount: 2
doAfter: 4
+ - to: miningWindowDiagonal
+ steps:
+ - material: ReinforcedGlass
+ amount: 2
+ doAfter: 2
+
- node: windowDiagonal
entity: WindowDiagonal
edges:
@@ -92,6 +98,29 @@
- tool: Anchoring
doAfter: 2
+ - node: miningWindowDiagonal
+ entity: MiningWindowDiagonal
+ edges:
+ - to: start
+ completed:
+ - !type:GivePrototype
+ prototype: SheetRGlass1
+ amount: 2
+ - !type:DeleteEntity {}
+ steps:
+ - tool: Welding
+ doAfter: 5
+ - tool: Screwing
+ doAfter: 1
+ - tool: Prying
+ doAfter: 2
+ - tool: Welding
+ doAfter: 5
+ - tool: Screwing
+ doAfter: 1
+ - tool: Anchoring
+ doAfter: 2
+
- node: clockworkWindowDiagonal
entity: ClockworkWindowDiagonal
edges:
diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml
index 06c98bc8c8a..290b0072076 100644
--- a/Resources/Prototypes/Recipes/Construction/structures.yml
+++ b/Resources/Prototypes/Recipes/Construction/structures.yml
@@ -63,6 +63,19 @@
conditions:
- !type:TileNotBlocked
+- type: construction
+ id: MiningWall
+ graph: Girder
+ startNode: start
+ targetNode: miningWall
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canRotate: false
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
- type: construction
id: GirderDiagonal
name: construction-recipe-diagonal-girder
@@ -105,6 +118,20 @@
conditions:
- !type:TileNotBlocked
+- type: construction
+ id: DiagonalMiningWall
+ graph: GirderDiagonal
+ name: construction-recipe-diagonal-mining-wall
+ startNode: start
+ targetNode: miningWallDiagonal
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canRotate: true
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
- type: construction
id: ReinforcedWall
graph: Girder
@@ -407,6 +434,20 @@
placementMode: SnapgridCenter
canRotate: false
+- type: construction
+ id: MiningWindow
+ graph: Window
+ startNode: start
+ targetNode: miningWindow
+ category: construction-category-structures
+ canBuildInImpassable: true
+ conditions:
+ - !type:EmptyOrWindowValidInTile
+ - !type:NoWindowsInTile
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canRotate: false
+
- type: construction
id: ReinforcedWindowDiagonal
name: construction-recipe-reinforced-window-diagonal
@@ -421,6 +462,20 @@
objectType: Structure
placementMode: SnapgridCenter
+- type: construction
+ id: MiningWindowDiagonal
+ name: construction-recipe-mining-window-diagonal
+ graph: WindowDiagonal
+ startNode: start
+ targetNode: miningWindowDiagonal
+ category: construction-category-structures
+ canBuildInImpassable: true
+ conditions:
+ - !type:EmptyOrWindowValidInTile
+ - !type:NoWindowsInTile
+ objectType: Structure
+ placementMode: SnapgridCenter
+
- type: construction
id: TintedWindow
graph: Window
@@ -722,6 +777,32 @@
objectType: Structure
placementMode: SnapgridCenter
+- type: construction
+ id: UraniumWindowDirectional
+ graph: WindowDirectional
+ startNode: start
+ targetNode: uraniumWindowDirectional
+ category: construction-category-structures
+ canBuildInImpassable: true
+ conditions:
+ - !type:EmptyOrWindowValidInTile
+ - !type:NoWindowsInTile
+ objectType: Structure
+ placementMode: SnapgridCenter
+
+- type: construction
+ id: UraniumReinforcedWindowDirectional
+ graph: WindowDirectional
+ startNode: start
+ targetNode: uraniumReinforcedWindowDirectional
+ category: construction-category-structures
+ canBuildInImpassable: true
+ conditions:
+ - !type:EmptyOrWindowValidInTile
+ - !type:NoWindowsInTile
+ objectType: Structure
+ placementMode: SnapgridCenter
+
- type: construction
id: Firelock
graph: Firelock
@@ -1127,6 +1208,56 @@
conditions:
- !type:TileNotBlocked
+- type: construction
+ id: AirlockExternal
+ graph: AirlockExternal
+ startNode: start
+ targetNode: airlock
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
+- type: construction
+ id: AirlockExternalGlass
+ graph: AirlockExternal
+ startNode: start
+ targetNode: glassAirlock
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
+- type: construction
+ id: AirlockMining
+ graph: AirlockMining
+ name: construction-recipe-mining-airlock
+ startNode: start
+ targetNode: airlock
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
+- type: construction
+ id: AirlockMiningGlass
+ graph: AirlockMining
+ name: construction-recipe-glass-mining-airlock
+ startNode: start
+ targetNode: glassAirlock
+ category: construction-category-structures
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
- type: construction
id: PinionAirlock
name: construction-recipe-pinion-airlock
@@ -1180,6 +1311,20 @@
conditions:
- !type:TileNotBlocked
+- type: construction
+ id: VaultDoor
+ name: construction-recipe-airlock-vault
+ graph: VaultDoor
+ startNode: start
+ targetNode: complete_vault_door
+ category: construction-category-structures
+ # state: assembly
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
+
- type: construction
id: Windoor
graph: Windoor
@@ -1528,3 +1673,11 @@
canBuildInImpassable: true
conditions:
- !type:WallmountCondition
+
+- type: construction
+ id: StationBeacon
+ graph: StationBeacon
+ startNode: start
+ targetNode: stationbeacon
+ category: construction-category-storage
+ objectType: Structure
diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
index dc4c531f9cd..8499e884700 100644
--- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
+++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
@@ -111,63 +111,6 @@
FoodBreadBun: 1
OrganHumanBrain: 1
-#Series of organ burger
-- type: microwaveMealRecipe
- id: RecipeLungBurger
- name: lung burger recipe
- result: FoodBurgerLung
- time: 10
- group: Savory
- solids:
- FoodBreadBun: 1
- OrganAnimalLungs: 1
- FoodCheeseSlice: 1
-
-- type: microwaveMealRecipe
- id: RecipeLiverBurger
- name: liver burger recipe
- result: FoodBurgerLiver
- time: 10
- group: Savory
- solids:
- FoodBreadBun: 1
- OrganAnimalLiver: 1
- FoodCheeseSlice: 1
-
-- type: microwaveMealRecipe
- id: RecipeStomachBurger
- name: stomach burger recipe
- result: FoodBurgerStomach
- time: 10
- group: Savory
- solids:
- FoodBreadBun: 1
- OrganAnimalStomach: 1
- FoodCheeseSlice: 1
-
-- type: microwaveMealRecipe
- id: RecipeKidneyBurger
- name: kidney burger recipe
- result: FoodBurgerKidneys
- time: 10
- group: Savory
- solids:
- FoodBreadBun: 1
- OrganAnimalKidneys: 1
- FoodCheeseSlice: 1
-
-- type: microwaveMealRecipe
- id: RecipeHeartBurger
- name: heart burger recipe
- result: FoodBurgerHeart
- time: 10
- group: Savory
- solids:
- FoodBreadBun: 1
- OrganAnimalHeart: 1
- FoodCheeseSlice: 1
-
-
- type: microwaveMealRecipe
id: RecipeCatBurger
name: cat burger recipe
diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratesecure.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratesecure.yml
index 2a9047077d5..e4570ca45a1 100644
--- a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratesecure.yml
+++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratesecure.yml
@@ -34,3 +34,40 @@
amount: 2
- !type:EmptyAllContainers
- !type:DeleteEntity
+
+- type: constructionGraph
+ id: SuitStorageUnit
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: suitstorage
+ steps:
+ - material: Steel
+ amount: 5
+ - material: Cable
+ amount: 2
+ doAfter: 5
+
+
+ - node: suitstorage
+ entity: SuitStorageBase
+ edges:
+ - to: start
+ steps:
+ - tool: Screwing
+ doAfter: 5
+ conditions:
+ - !type:StorageWelded
+ welded: false
+ - !type:Locked
+ locked: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 5
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+ - !type:EmptyAllContainers
+ - !type:DeleteEntity
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
index 006e774de42..4af1c08be04 100644
--- a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
+++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
@@ -172,3 +172,108 @@
amount: 4
- !type:EmptyAllContainers
- !type:DeleteEntity
+
+- type: constructionGraph
+ id: ClosetPrisonerSecure
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: closetprisonersecure
+ steps:
+ - material: Plasteel
+ amount: 2
+ - material: Cable
+ amount: 2
+ doAfter: 5
+ - node: closetprisonersecure
+ entity: LockerPrisoner
+ edges:
+ - to: start
+ steps:
+ - tool: Screwing
+ doAfter: 5
+ conditions:
+ - !type:StorageWelded
+ welded: false
+ - !type:Locked
+ locked: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetPlasteel1
+ amount: 2
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+ - !type:EmptyAllContainers
+ - !type:DeleteEntity
+
+- type: constructionGraph
+ id: ClosetWallPrisonerSecure
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: closetwallprisonersecure
+ steps:
+ - material: Plasteel
+ amount: 2
+ - material: Cable
+ amount: 2
+ doAfter: 5
+ - node: closetwallprisonersecure
+ entity: LockerWallBasePrisoner
+ edges:
+ - to: start
+ steps:
+ - tool: Screwing
+ doAfter: 5
+ conditions:
+ - !type:StorageWelded
+ welded: false
+ - !type:Locked
+ locked: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetPlasteel1
+ amount: 2
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+ - !type:EmptyAllContainers
+ - !type:DeleteEntity
+
+- type: constructionGraph
+ id: ClosetWallSecure
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: closetwallsecure
+ steps:
+ - material: Steel
+ amount: 4
+ - material: Cable
+ amount: 2
+ doAfter: 5
+ - node: closetwallsecure
+ entity: ClosetWallSecure
+ edges:
+ - to: start
+ steps:
+ - tool: Screwing
+ doAfter: 5
+ conditions:
+ - !type:StorageWelded
+ welded: false
+ - !type:Locked
+ locked: false
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 4
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+ - !type:EmptyAllContainers
+ - !type:DeleteEntity
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Crafting/tallbox.yml b/Resources/Prototypes/Recipes/Crafting/tallbox.yml
index 26da5a403f0..54433a94d0d 100644
--- a/Resources/Prototypes/Recipes/Crafting/tallbox.yml
+++ b/Resources/Prototypes/Recipes/Crafting/tallbox.yml
@@ -43,3 +43,45 @@
canBuildInImpassable: true
conditions:
- !type:WallmountCondition
+
+- type: construction
+ id: SuitStorageUnit
+ graph: SuitStorageUnit
+ startNode: start
+ targetNode: suitstorage
+ category: construction-category-storage
+ objectType: Structure
+
+- type: construction
+ id: ClosetPrisonerSecure
+ graph: ClosetPrisonerSecure
+ startNode: start
+ targetNode: closetprisonersecure
+ category: construction-category-storage
+ objectType: Structure
+
+- type: construction
+ id: ClosetWallPrisonerSecure
+ graph: ClosetWallPrisonerSecure
+ startNode: start
+ targetNode: closetwallprisonersecure
+ category: construction-category-storage
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canRotate: true
+ canBuildInImpassable: true
+ conditions:
+ - !type:WallmountCondition
+
+- type: construction
+ id: ClosetWallSecure
+ graph: ClosetWallSecure
+ startNode: start
+ targetNode: closetwallsecure
+ category: construction-category-storage
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canRotate: true
+ canBuildInImpassable: true
+ conditions:
+ - !type:WallmountCondition
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
index 8824be3fb7d..439721adbf5 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
@@ -45,6 +45,93 @@
- ClothingUniformJumpskirtPurpleElegantDress
- ClothingUniformJumpskirtRedElegantDress
- ClothingUniformJumpskirtRedStripedDress
+ - ClothingShoesBootsPerformer
+ - ClothingShoesBootsLaceup
+ - ClothingShoesFlippers
+ - ClothingShoesLeather
+ - ClothingShoesSlippers
+ - ClothingShoeSlippersDuck
+ - ClothingShoesTourist
+ - ClothingShoesDameDane
+ - ClothingShoesCult
+ - ClothingShoesSwat
+ - ClothingShoesColorBlack
+ - ClothingShoesColorWhite
+ - ClothingShoesColorBlue
+ - ClothingShoesColorBrown
+ - ClothingShoesColorGreen
+ - ClothingShoesColorOrange
+ - ClothingShoesColorRed
+ - ClothingShoesColorYellow
+ - ClothingShoesColorPurple
+ - ClothingHandsGlovesColorPurple
+ - ClothingHandsGlovesColorRed
+ - ClothingHandsGlovesColorBlue
+ - ClothingHandsGlovesColorTeal
+ - ClothingHandsGlovesColorBrown
+ - ClothingHandsGlovesColorGray
+ - ClothingHandsGlovesColorGreen
+ - ClothingHandsGlovesColorLightBrown
+ - ClothingHandsGlovesColorOrange
+ - ClothingHandsGlovesColorWhite
+ - ClothingHandsGlovesColorBlack
+ - ClothingHandsGlovesHop
+ - ClothingHandsGlovesLeather
+ - ClothingHandsGlovesPowerglove
+ - ClothingHandsGlovesRobohands
+ - ClothingHandsGlovesFingerless
+ - ClothingHandsGlovesFingerlessInsulated
+ - ClothingHandsGlovesMercFingerless
+ - ClothingHandsGlovesJanitor
+ - ClothingOuterVest
+ - ClothingUniformJumpskirtJanimaid
+ - ClothingUniformJumpskirtJanimaidmini
+ - ClothingBeltChampion
+ - ClothingBeltSuspendersRed
+ - ClothingBeltSuspendersBlack
+ - ClothingEyesGlassesGar
+ - ClothingEyesGlassesGarOrange
+ - ClothingEyesGlassesGarGiga
+ - ClothingEyesGlasses
+ - ClothingEyesGlassesJensen
+ - ClothingEyesGlassesJamjar
+ - ClothingEyesGlassesOutlawGlasses
+ - ClothingEyesGlassesCheapSunglasses
+ - ClothingHandsGlovesBoxingRed
+ - ClothingHandsGlovesBoxingBlue
+ - ClothingHandsGlovesBoxingGreen
+ - ClothingHandsGlovesBoxingYellow
+ - ClothingMaskRat
+ - ClothingMaskFox
+ - ClothingMaskBee
+ - ClothingMaskBear
+ - ClothingMaskRaven
+ - ClothingMaskJackal
+ - ClothingMaskBat
+ - ClothingMaskNeckGaiter
+ - ClothingMaskNeckGaiterRed
+ - ClothingMaskItalianMoustache
+ - ClothingNeckLGBTPin
+ - ClothingNeckAllyPin
+ - ClothingNeckAromanticPin
+ - ClothingNeckAroacePin
+ - ClothingNeckAsexualPin
+ - ClothingNeckBisexualPin
+ - ClothingNeckGayPin
+ - ClothingNeckIntersexPin
+ - ClothingNeckLesbianPin
+ - ClothingNeckNonBinaryPin
+ - ClothingNeckPansexualPin
+ - ClothingNeckPluralPin
+ - ClothingNeckOmnisexualPin
+ - ClothingNeckGenderqueerPin
+ - ClothingNeckGenderfluidPin
+ - ClothingNeckTransPin
+ - ClothingNeckAutismPin
+ - ClothingNeckGoldAutismPin
+ - ClothingNeckBling
+ - ClothingNeckLawyerbadge
+
- type: latheRecipePack
id: ClothingAssortedOversuits
@@ -134,6 +221,7 @@
- ClothingUniformJumpsuitQMTurtleneck
- ClothingUniformJumpskirtQMTurtleneck
- ClothingUniformJumpsuitQMFormal
+ - ClothingShoesBootsSalvage
- type: latheRecipePack
id: ClothingCommand
@@ -168,6 +256,9 @@
- ClothingUniformJumpsuitEngineeringHazard
- ClothingUniformJumpsuitSeniorEngineer
- ClothingUniformJumpskirtSeniorEngineer
+ - ClothingShoesBootsWork
+ - ClothingOuterVestHazard
+ - ClothingBeltUtility
- type: latheRecipePack
id: ClothingMedical
@@ -192,6 +283,8 @@
- ClothingUniformJumpsuitParamedic
- ClothingUniformJumpskirtParamedic
- ClothingHeadHatParamedicsoft
+ - ClothingBeltMedical
+ - ClothingNeckStethoscope
- type: latheRecipePack
id: ClothingScience
@@ -256,6 +349,8 @@
- ClothingUniformJumpskirtWarden
- ClothingUniformJumpsuitSecCorpsmanBlue
- ClothingUniformJumpsuitSecCorpsmanBlack
+ - ClothingUniformJumpskirtTacticalMaid
+ - Dinkystar
- type: latheRecipePack
id: ClothingService
@@ -293,6 +388,23 @@
- ClothingUniformJumpsuitMime
- ClothingUniformJumpskirtMime
- ClothingUniformJumpsuitMusician
+ - ClothingShoesChef
+ - ClothingShoesClown
+ - ClothingShoesJester
+ - ClothingBeltJanitor
+ - ClothingBeltPlant
+ - ClothingBeltChef
+ - ClothingNeckStoleChaplain
+ - ClothingMaskClown
+ - ClothingMaskJoy
+ - ClothingMaskMime
+ - ClothingMaskPlague
+ - ClothingMaskBlushingClown
+ - ClothingMaskBlushingMime
+ - ClothingMaskSadMime
+ - ClothingMaskScaredMime
+ - ClothingNeckStoleChaplain
+ - SprayFlowerPin
- type: latheRecipePack
id: WinterCoats
@@ -336,6 +448,10 @@
- ClothingOuterWinterColorYellow
- ClothingOuterHoodieBlack
- ClothingOuterHoodieGrey
+ - ClothingShoesBootsWinter
+ - ClothingShoesBootsWinterEngi
+ - ClothingShoesBootsWinterMed
+ - ClothingShoesBootsWinterSci
- type: latheRecipePack
id: Ties
@@ -368,6 +484,19 @@
- ClothingNeckCloakCe
- ClothingCloakCmo
- ClothingNeckCloakHop
+ - ClothingNeckCloakTrans
+ - ClothingNeckCloakGoliathCloak
+ - ClothingNeckCloakMoth
+ - ClothingNeckCloakVoid
+ - ClothingNeckCloakAce
+ - ClothingNeckCloakAro
+ - ClothingNeckCloakAroace
+ - ClothingNeckCloakBi
+ - ClothingNeckCloakIntersex
+ - ClothingNeckCloakLesbian
+ - ClothingNeckCloakGay
+ - ClothingNeckCloakEnby
+ - ClothingNeckCloakPan
- type: latheRecipePack
id: Mantles
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml b/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml
index 5cd9da1de35..a13f542c0da 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml
@@ -26,6 +26,9 @@
- ToolboxMechanical
- VoiceSensorCopper
- SignallerCopper
+ - OreBag
+ - PlantBag
+ - ClothingShoesSkates
- type: latheRecipePack
id: AtmosStatic
@@ -71,6 +74,8 @@
- type: latheRecipePack
id: AdvancedTools
recipes:
+ - RCD
+ - HCD
- PowerDrill
- WelderExperimental
- JawsOfLife
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/externalclothes.yml b/Resources/Prototypes/Recipes/Lathes/Packs/externalclothes.yml
index f3a25a580e2..49f68515a3a 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/externalclothes.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/externalclothes.yml
@@ -11,6 +11,7 @@
- Researchdirectorsuit
- Chiefengineersuit
- Captainsuit
+ - ClothingHandsGlovesCaptain
- type: latheRecipePack
id: SecurityHardsuits
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml
index 9f6171c4c9d..44c4108e0e7 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml
@@ -17,6 +17,23 @@
- ClothingHeadHelmetRiot
- ClothingHeadHelmetBasic
- ClothingMaskGasSecurity
+ - ClothingEyesGlassesSecurity
+ - ClothingEyesGlassesMercenary
+ - ClothingBeltSecurity
+ - ClothingBeltHolster
+ - ClothingBeltBandolier
+ - ClothingBeltSecurityWebbing
+ - ClothingBeltMercWebbing
+ - ClothingBeltMilitaryWebbing
+ - ClothingShoesBootsJack
+ - ClothingShoesBootsCombat
+ - ClothingShoesHighheelBoots
+ - ClothingShoesBootsMerc
+ - ClothingShoesBootsWinterSec
+ - ClothingShoesBootsCowboyBrown
+ - ClothingShoesBootsCowboyBlack
+ - ClothingShoesBootsCowboyWhite
+ - ClothingShoesBootsCowboyFancy
# Practice ammo/mags and practice weapons
- type: latheRecipePack
@@ -80,6 +97,9 @@
- PowerCageSmall
- TelescopicShield
- ClothingBackpackHarmpack
+ - ClothingHandsMercGlovesCombat
+ - ClothingHandsTacticalMaidGloves
+ - ClothingHandsGlovesCombat
- type: latheRecipePack
id: SecurityBoards
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml
index 2ae7fb54eb9..a2d72e2138a 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml
@@ -74,3 +74,4 @@
- JukeboxCircuitBoard
- DawInstrumentMachineCircuitboard
- ComputerTelevisionCircuitboard
+ - ClothingEyesGlassesCommand
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml
index 64cab5a9bac..7b26b6809a5 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml
@@ -73,6 +73,9 @@
- HandHeldMassScanner
- ClothingMaskWeldingGas
- SignallerAdvanced
+ - ClothingEyesGlassesSunglasses
+ - ClothingHandsGlovesColorYellow
+ - ClothingEyesGlassesMeson
- type: latheRecipePack
id: SalvageSecurityBoards
diff --git a/Resources/Prototypes/Recipes/Lathes/ammo.yml b/Resources/Prototypes/Recipes/Lathes/ammo.yml
index 4f023828136..441f454b0ad 100644
--- a/Resources/Prototypes/Recipes/Lathes/ammo.yml
+++ b/Resources/Prototypes/Recipes/Lathes/ammo.yml
@@ -502,6 +502,7 @@
materials:
Steel: 150
Plastic: 50
+ unlockUses: 3
- type: latheRecipe
id: GrenadeEMP
@@ -513,6 +514,7 @@
Steel: 150
Plastic: 100
Glass: 20
+ unlockUses: 5
- type: latheRecipe
id: GrenadeBlast
@@ -524,6 +526,7 @@
Steel: 450
Plastic: 300
Gold: 150
+ unlockUses: 5
- type: latheRecipe
id: GrenadeFlash
@@ -535,3 +538,4 @@
Steel: 150
Plastic: 100
Glass: 20
+ unlockUses: 5
diff --git a/Resources/Prototypes/Recipes/Lathes/categories.yml b/Resources/Prototypes/Recipes/Lathes/categories.yml
index fd25394e673..a9f4922dd82 100644
--- a/Resources/Prototypes/Recipes/Lathes/categories.yml
+++ b/Resources/Prototypes/Recipes/Lathes/categories.yml
@@ -168,3 +168,23 @@
- type: latheCategory
id: Neck
name: lathe-category-neck
+
+- type: latheCategory
+ id: Shoes
+ name: lathe-category-shoes
+
+- type: latheCategory
+ id: Gloves
+ name: lathe-category-gloves
+
+- type: latheCategory
+ id: Belts
+ name: lathe-category-belts
+
+- type: latheCategory
+ id: Glasses
+ name: lathe-category-glasses
+
+- type: latheCategory
+ id: Masks
+ name: lathe-category-masks
diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml
index 050714eea59..d4b43da55d3 100644
--- a/Resources/Prototypes/Recipes/Lathes/clothing.yml
+++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml
@@ -70,6 +70,15 @@
materials:
Cloth: 200
+- type: latheRecipe
+ abstract: true
+ id: BaseShoesClothingRecipeCheap
+ categories:
+ - Shoes
+ completetime: 2
+ materials:
+ Cloth: 200
+
- type: latheRecipe
abstract: true
id: BaseShoesClothingRecipe
@@ -79,6 +88,66 @@
materials:
Durathread: 400
+- type: latheRecipe
+ abstract: true
+ id: BaseGlovesClothingRecipeCheap
+ categories:
+ - Gloves
+ completetime: 2
+ materials:
+ Cloth: 200
+
+- type: latheRecipe
+ abstract: true
+ id: BaseGlovesClothingRecipeInsulated
+ categories:
+ - Gloves
+ completetime: 2
+ materials:
+ Cloth: 200
+ Durathread: 200
+ Plasteel: 100
+
+- type: latheRecipe
+ abstract: true
+ id: BaseBeltsClothingRecipe
+ categories:
+ - Belts
+ completetime: 2
+ materials:
+ Cloth: 500
+ Durathread: 200
+
+- type: latheRecipe
+ abstract: true
+ id: BaseGlassesClothingRecipe
+ categories:
+ - Glasses
+ completetime: 2
+ materials:
+ Durathread: 100
+ Glass: 200
+
+- type: latheRecipe
+ abstract: true
+ id: BaseMaskRecipe
+ categories:
+ - Masks
+ completetime: 4
+ materials:
+ Cloth: 100
+ Plastic: 200
+
+- type: latheRecipe
+ abstract: true
+ id: BasePinClothingRecipe
+ categories:
+ - Neck
+ completetime: 2
+ materials:
+ Steel: 100
+ Plastic: 100
+
## Recipes
# Jumpsuits/skirts
@@ -1909,3 +1978,717 @@
parent: BaseJumpsuitRecipe
id: ClothingUniformGenericTacticalTurtleNeck
result: ClothingUniformGenericTacticalTurtleNeck
+# Start of Persistence14 additions
+# Persi14 Shoes
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsWork
+ result: ClothingShoesBootsWork
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsSalvage
+ result: ClothingShoesBootsSalvage
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsPerformer
+ result: ClothingShoesBootsPerformer
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsLaceup
+ result: ClothingShoesBootsLaceup
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsWinter
+ result: ClothingShoesBootsWinter
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsWinterEngi
+ result: ClothingShoesBootsWinterEngi
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsWinterMed
+ result: ClothingShoesBootsWinterMed
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesBootsWinterSci
+ result: ClothingShoesBootsWinterSci
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesFlippers
+ result: ClothingShoesFlippers
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesLeather
+ result: ClothingShoesLeather
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesSlippers
+ result: ClothingShoesSlippers
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoeSlippersDuck
+ result: ClothingShoeSlippersDuck
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesTourist
+ result: ClothingShoesTourist
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesDameDane
+ result: ClothingShoesDameDane
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesChef
+ result: ClothingShoesChef
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesClown
+ result: ClothingShoesClown
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesCult
+ result: ClothingShoesCult
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesSwat
+ result: ClothingShoesSwat
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesJester
+ result: ClothingShoesJester
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorBlack
+ result: ClothingShoesColorBlack
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorWhite
+ result: ClothingShoesColorWhite
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorBlue
+ result: ClothingShoesColorBlue
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorBrown
+ result: ClothingShoesColorBrown
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorGreen
+ result: ClothingShoesColorGreen
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorOrange
+ result: ClothingShoesColorOrange
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorRed
+ result: ClothingShoesColorRed
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorYellow
+ result: ClothingShoesColorYellow
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesColorPurple
+ result: ClothingShoesColorPurple
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeCheap
+ id: ClothingShoesSkates
+ result: ClothingShoesSkates
+ materials:
+ Steel: 1000
+ Cloth: 800
+# Persi14 Gloves
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorPurple
+ result: ClothingHandsGlovesColorPurple
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorRed
+ result: ClothingHandsGlovesColorRed
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorBlue
+ result: ClothingHandsGlovesColorBlue
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorTeal
+ result: ClothingHandsGlovesColorTeal
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorBrown
+ result: ClothingHandsGlovesColorBrown
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorGray
+ result: ClothingHandsGlovesColorGray
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorGreen
+ result: ClothingHandsGlovesColorGreen
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorLightBrown
+ result: ClothingHandsGlovesColorLightBrown
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorOrange
+ result: ClothingHandsGlovesColorOrange
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorWhite
+ result: ClothingHandsGlovesColorWhite
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesColorBlack
+ result: ClothingHandsGlovesColorBlack
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesHop
+ result: ClothingHandsGlovesHop
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesLeather
+ result: ClothingHandsGlovesLeather
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesPowerglove
+ result: ClothingHandsGlovesPowerglove
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesRobohands
+ result: ClothingHandsGlovesRobohands
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesFingerless
+ result: ClothingHandsGlovesFingerless
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesFingerlessInsulated
+ result: ClothingHandsGlovesFingerlessInsulated
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesMercFingerless
+ result: ClothingHandsGlovesMercFingerless
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesJanitor
+ result: ClothingHandsGlovesJanitor
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeInsulated
+ id: ClothingHandsGlovesColorYellow
+ result: ClothingHandsGlovesColorYellow
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeInsulated
+ id: ClothingHandsGlovesCaptain
+ result: ClothingHandsGlovesCaptain
+ materials:
+ Durathread: 500
+ Gold: 200
+ Plasteel: 200
+ Diamond: 200
+ Titanium: 500
+ Phoron: 200
+ unlockUses: 1
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesBoxingRed
+ result: ClothingHandsGlovesBoxingRed
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesBoxingBlue
+ result: ClothingHandsGlovesBoxingBlue
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesBoxingGreen
+ result: ClothingHandsGlovesBoxingGreen
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeCheap
+ id: ClothingHandsGlovesBoxingYellow
+ result: ClothingHandsGlovesBoxingYellow
+
+
+# Persi14 Jumpsuits
+- type: latheRecipe
+ parent: BaseJumpsuitRecipe
+ id: ClothingUniformJumpskirtJanimaid
+ result: ClothingUniformJumpskirtJanimaid
+
+- type: latheRecipe
+ parent: BaseJumpsuitRecipe
+ id: ClothingUniformJumpskirtJanimaidmini
+ result: ClothingUniformJumpskirtJanimaidmini
+
+- type: latheRecipe
+ parent: BaseJumpsuitRecipe
+ id: ClothingUniformJumpskirtTacticalMaid
+ result: ClothingUniformJumpskirtTacticalMaid
+# Persi14 Coats
+- type: latheRecipe
+ parent: BaseCoatRecipe
+ id: ClothingOuterVestHazard
+ result: ClothingOuterVestHazard
+# Persi14 Belts
+- type: latheRecipe
+ parent: BaseCoatRecipe
+ id: ClothingOuterVest
+ result: ClothingOuterVest
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltChampion
+ result: ClothingBeltChampion
+ materials:
+ Cloth: 500
+ Durathread: 200
+ Gold: 500
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltSuspendersRed
+ result: ClothingBeltSuspendersRed
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltSuspendersBlack
+ result: ClothingBeltSuspendersBlack
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltJanitor
+ result: ClothingBeltJanitor
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltPlant
+ result: ClothingBeltPlant
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltChef
+ result: ClothingBeltChef
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltMedical
+ result: ClothingBeltMedical
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: OreBag
+ result: OreBag
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: PlantBag
+ result: PlantBag
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltUtility
+ result: ClothingBeltUtility
+# Persi14 Glasses
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlasses
+ result: ClothingEyesGlasses
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesJamjar
+ result: ClothingEyesGlassesJamjar
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesGar
+ result: ClothingEyesGlassesGar
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesGarOrange
+ result: ClothingEyesGlassesGarOrange
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesGarGiga
+ result: ClothingEyesGlassesGarGiga
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesJensen
+ result: ClothingEyesGlassesJensen
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesOutlawGlasses
+ result: ClothingEyesGlassesOutlawGlasses
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesCheapSunglasses
+ result: ClothingEyesGlassesCheapSunglasses
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesSunglasses
+ result: ClothingEyesGlassesSunglasses
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesMeson
+ result: ClothingEyesGlassesMeson
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesCommand
+ result: ClothingEyesGlassesCommand
+ materials:
+ Steel: 100
+ Plastic: 50
+ Plasteel: 100
+ ReinforcedGlass: 200
+ unlockUses: 1
+
+# Persi14 Masks
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskClown
+ result: ClothingMaskClown
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskJoy
+ result: ClothingMaskJoy
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskMime
+ result: ClothingMaskMime
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskPlague
+ result: ClothingMaskPlague
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskRat
+ result: ClothingMaskRat
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskFox
+ result: ClothingMaskFox
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskBee
+ result: ClothingMaskBee
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskBear
+ result: ClothingMaskBear
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskRaven
+ result: ClothingMaskRaven
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskJackal
+ result: ClothingMaskJackal
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskBat
+ result: ClothingMaskBat
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskNeckGaiter
+ result: ClothingMaskNeckGaiter
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskNeckGaiterRed
+ result: ClothingMaskNeckGaiterRed
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskBlushingClown
+ result: ClothingMaskBlushingClown
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskBlushingMime
+ result: ClothingMaskBlushingMime
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskSadMime
+ result: ClothingMaskSadMime
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskScaredMime
+ result: ClothingMaskScaredMime
+
+- type: latheRecipe
+ parent: BaseMaskRecipe
+ id: ClothingMaskItalianMoustache
+ result: ClothingMaskItalianMoustache
+
+# Persi14 Neck
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckLawyerbadge
+ result: ClothingNeckLawyerbadge
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: Dinkystar
+ result: Dinkystar
+ materials:
+ Plastic: 100
+ Diamond: 100
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckLGBTPin
+ result: ClothingNeckLGBTPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckAllyPin
+ result: ClothingNeckAllyPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckAromanticPin
+ result: ClothingNeckAromanticPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckAroacePin
+ result: ClothingNeckAroacePin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckAsexualPin
+ result: ClothingNeckAsexualPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckBisexualPin
+ result: ClothingNeckBisexualPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckGayPin
+ result: ClothingNeckGayPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckIntersexPin
+ result: ClothingNeckIntersexPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckLesbianPin
+ result: ClothingNeckLesbianPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckNonBinaryPin
+ result: ClothingNeckNonBinaryPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckPansexualPin
+ result: ClothingNeckPansexualPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckPluralPin
+ result: ClothingNeckPluralPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckOmnisexualPin
+ result: ClothingNeckOmnisexualPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckGenderqueerPin
+ result: ClothingNeckGenderqueerPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckGenderfluidPin
+ result: ClothingNeckGenderfluidPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckTransPin
+ result: ClothingNeckTransPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckAutismPin
+ result: ClothingNeckAutismPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: ClothingNeckGoldAutismPin
+ result: ClothingNeckGoldAutismPin
+
+- type: latheRecipe
+ parent: BasePinClothingRecipe
+ id: SprayFlowerPin
+ result: SprayFlowerPin
+ materials:
+ Plastic: 100
+ Cloth: 200
+ Steel: 100
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckStoleChaplain
+ result: ClothingNeckStoleChaplain
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckStethoscope
+ result: ClothingNeckStethoscope
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckBling
+ result: ClothingNeckBling
+ materials:
+ Gold: 100
+ Steel: 100 # Fake bling?
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakTrans
+ result: ClothingNeckCloakTrans
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakGoliathCloak
+ result: ClothingNeckCloakGoliathCloak
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakMoth
+ result: ClothingNeckCloakMoth
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakVoid
+ result: ClothingNeckCloakVoid
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakAce
+ result: ClothingNeckCloakAce
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakAro
+ result: ClothingNeckCloakAro
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakAroace
+ result: ClothingNeckCloakAroace
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakBi
+ result: ClothingNeckCloakBi
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakIntersex
+ result: ClothingNeckCloakIntersex
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakLesbian
+ result: ClothingNeckCloakLesbian
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakGay
+ result: ClothingNeckCloakGay
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakEnby
+ result: ClothingNeckCloakEnby
+
+- type: latheRecipe
+ parent: BaseNeckClothingRecipe
+ id: ClothingNeckCloakPan
+ result: ClothingNeckCloakPan
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index 7368c659ef0..51ba55542d4 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -47,6 +47,17 @@
id: BaseWeaponRecipeSidearm
completetime: 6
+- type: latheRecipe
+ abstract: true
+ id: BaseShoesClothingRecipeSecurity
+ categories:
+ - Shoes
+ completetime: 2
+ materials:
+ Cloth: 200
+ Durathread: 200
+ Plasteel: 200
+
## Recipes
# Clothing
@@ -364,4 +375,128 @@
result: ClothingMaskGasSecurity
materials:
Steel: 500
- Plastic: 100
\ No newline at end of file
+ Plastic: 100
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeInsulated
+ id: ClothingHandsMercGlovesCombat
+ result: ClothingHandsMercGlovesCombat
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeInsulated
+ id: ClothingHandsTacticalMaidGloves
+ result: ClothingHandsTacticalMaidGloves
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseGlovesClothingRecipeInsulated
+ id: ClothingHandsGlovesCombat
+ result: ClothingHandsGlovesCombat
+ unlockUses: 4
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltSecurity
+ result: ClothingBeltSecurity
+ materials:
+ Cloth: 400
+ Durathread: 100
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltHolster
+ result: ClothingBeltHolster
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltBandolier
+ result: ClothingBeltBandolier
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltSecurityWebbing
+ result: ClothingBeltSecurityWebbing
+ materials:
+ Cloth: 400
+ Durathread: 300
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltMercWebbing
+ result: ClothingBeltMercWebbing
+ materials:
+ Cloth: 400
+ Durathread: 300
+
+- type: latheRecipe
+ parent: BaseBeltsClothingRecipe
+ id: ClothingBeltMilitaryWebbing
+ result: ClothingBeltMilitaryWebbing
+ materials:
+ Cloth: 400
+ Durathread: 300
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesSecurity
+ result: ClothingEyesGlassesSecurity
+ materials:
+ Steel: 100
+ Plastic: 50
+ Plasteel: 100
+ ReinforcedGlass: 200
+
+- type: latheRecipe
+ parent: BaseGlassesClothingRecipe
+ id: ClothingEyesGlassesMercenary
+ result: ClothingEyesGlassesMercenary
+ materials:
+ Steel: 100
+ ReinforcedGlass: 200
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsJack
+ result: ClothingShoesBootsJack
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsCombat
+ result: ClothingShoesBootsCombat
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesHighheelBoots
+ result: ClothingShoesHighheelBoots
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsMerc
+ result: ClothingShoesBootsMerc
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsWinterSec
+ result: ClothingShoesBootsWinterSec
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsCowboyBrown
+ result: ClothingShoesBootsCowboyBrown
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsCowboyBlack
+ result: ClothingShoesBootsCowboyBlack
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsCowboyWhite
+ result: ClothingShoesBootsCowboyWhite
+
+- type: latheRecipe
+ parent: BaseShoesClothingRecipeSecurity
+ id: ClothingShoesBootsCowboyFancy
+ result: ClothingShoesBootsCowboyFancy
+
diff --git a/Resources/Prototypes/Recipes/Lathes/tools.yml b/Resources/Prototypes/Recipes/Lathes/tools.yml
index 17265a12073..b77b30679b3 100644
--- a/Resources/Prototypes/Recipes/Lathes/tools.yml
+++ b/Resources/Prototypes/Recipes/Lathes/tools.yml
@@ -165,6 +165,15 @@
Steel: 500
Plastic: 250
+- type: latheRecipe
+ parent: BaseToolRecipe
+ id: HCD
+ result: HCD
+ completetime: 4
+ materials:
+ Steel: 600
+ Plastic: 200
+
- type: latheRecipe
parent: BaseBigToolRecipe
id: HandHeldMassScanner
diff --git a/Resources/Prototypes/Recipes/Reactions/frost_oil.yml b/Resources/Prototypes/Recipes/Reactions/frost_oil.yml
new file mode 100644
index 00000000000..4724c7d7525
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Reactions/frost_oil.yml
@@ -0,0 +1,313 @@
+- type: reaction
+ id: SolidifyGold
+ impact: Low
+ quantized: true
+ reactants:
+ Gold:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: IngotGold1
+
+- type: reaction
+ id: SolidifySilver
+ impact: Low
+ quantized: true
+ reactants:
+ Silver:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: IngotSilver1
+
+- type: reaction
+ id: SolidifyCopper
+ impact: Low
+ quantized: true
+ reactants:
+ Copper:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: IngotCopper1
+
+- type: reaction
+ id: SolidifyTin
+ impact: Low
+ quantized: true
+ reactants:
+ Tin:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: IngotTin1
+
+- type: reaction
+ id: SolidifyPlasma
+ impact: Low
+ quantized: true
+ reactants:
+ Plasma:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetPlasma1
+
+- type: reaction
+ id: SolidifySteel
+ impact: Low
+ quantized: true
+ reactants:
+ Iron:
+ amount: 9
+ Carbon:
+ amount: 1
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetSteel1
+
+- type: reaction
+ id: SolidifyBrass
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Zinc:
+ amount: 3.3
+ Copper:
+ amount: 6.7
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetBrass1
+
+- type: reaction
+ id: SolidifyBronze
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Copper:
+ amount: 6.7
+ Tin:
+ amount: 3.3
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetBronze1
+
+- type: reaction
+ id: SolidifyPlasteel
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Plasma:
+ amount: 10
+ Iron:
+ amount: 9
+ Carbon:
+ amount: 1
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetPlasteel1
+
+- type: reaction
+ id: SolidifyTitanium
+ impact: Low
+ quantized: true
+ reactants:
+ Titanium:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetTitanium1
+
+- type: reaction
+ id: SolidifyAluminium
+ impact: Low
+ quantized: true
+ reactants:
+ Aluminium:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetAluminium1
+
+- type: reaction
+ id: SolidifyGlass
+ impact: Low
+ quantized: true
+ reactants:
+ Silicon:
+ amount: 10
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetGlass1
+
+- type: reaction
+ id: SolidifyPlasmaGlass
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Silicon:
+ amount: 10
+ Plasma:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetPGlass1
+
+- type: reaction
+ id: SolidifyBananium
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Bananium:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: MaterialBananium1
+
+- type: reaction
+ id: SolidifyPhoron
+ impact: Low
+ priority: 3
+ quantized: true
+ reactants:
+ Plasma:
+ amount: 20
+ Bananium:
+ amount: 20
+ Titanium:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: MaterialPhoron1
+
+- type: reaction
+ id: SolidifyPhoronGlass
+ impact: Low
+ priority: 4
+ quantized: true
+ reactants:
+ Silicon:
+ amount: 10
+ Plasma:
+ amount: 10
+ Bananium:
+ amount: 10
+ Titanium:
+ amount: 5
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetPhoronGlass1
+
+- type: reaction
+ id: SolidifyUraniumGlass
+ impact: Low
+ priority: 1
+ quantized: true
+ reactants:
+ Silicon:
+ amount: 10
+ Uranium:
+ amount: 10
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetUGlass1
+
+- type: reaction
+ id: SolidifyClockworkGlass
+ impact: Low
+ priority: 3
+ quantized: true
+ reactants:
+ Silicon:
+ amount: 10
+ Zinc:
+ amount: 3.3
+ Copper:
+ amount: 6.7
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetClockworkGlass1
+
+- type: reaction
+ id: SolidifyPaper
+ impact: Low
+ quantized: true
+ reactants:
+ Cellulose:
+ amount: 3
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetPaper1
+
+- type: reaction
+ id: SolidifyUraniumSheet
+ impact: Low
+ quantized: true
+ reactants:
+ Uranium:
+ amount: 8
+ Radium:
+ amount: 2
+ Fresium:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: SheetUranium1
+
+- type: reaction
+ id: SolidifyMeatSheet
+ impact: Low
+ quantized: true
+ reactants:
+ Protein:
+ amount: 7
+ Fat:
+ amount: 3
+ FrostOil:
+ amount: 5
+ effects:
+ - !type:SpawnEntity
+ entity: MaterialSheetMeat1
diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml
index 5a3764a504d..0f034996337 100644
--- a/Resources/Prototypes/Recipes/Reactions/fun.yml
+++ b/Resources/Prototypes/Recipes/Reactions/fun.yml
@@ -174,32 +174,6 @@
- !type:SpawnEntity
entity: MaterialGunpowder
-- type: reaction
- id: SolidifyGold
- impact: Low
- quantized: true
- reactants:
- Gold:
- amount: 10
- FrostOil:
- amount: 5
- effects:
- - !type:SpawnEntity
- entity: IngotGold1
-
-- type: reaction
- id: SolidifySilver
- impact: Low
- quantized: true
- reactants:
- Silver:
- amount: 10
- FrostOil:
- amount: 5
- effects:
- - !type:SpawnEntity
- entity: IngotSilver1
-
- type: reaction
id: WehHewExplosion
impact: High
diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml
index 876c74b0613..28ade39f694 100644
--- a/Resources/Prototypes/Research/arsenal.yml
+++ b/Resources/Prototypes/Research/arsenal.yml
@@ -130,6 +130,9 @@
cost: 5000
recipeUnlocks:
- ClothingBackpackElectropack
+ - ClothingHandsMercGlovesCombat
+ - ClothingHandsTacticalMaidGloves
+ - ClothingHandsGlovesCombat
# Tier 2
diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml
index 95d3c6bb0ce..bab4bf7d3ca 100644
--- a/Resources/Prototypes/Research/civilianservices.yml
+++ b/Resources/Prototypes/Research/civilianservices.yml
@@ -68,6 +68,8 @@
- DawInstrumentMachineCircuitboard
- MassMediaCircuitboard
- JukeboxCircuitBoard
+ - ClothingEyesGlassesSunglasses
+ - ClothingEyesGlassesCommand
- type: technology
id: MeatManipulation
diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml
index 20bdb7662af..0ad93c1ef92 100644
--- a/Resources/Prototypes/Research/industrial.yml
+++ b/Resources/Prototypes/Research/industrial.yml
@@ -15,6 +15,8 @@
- OreProcessorIndustrialMachineCircuitboard
- ClothingMaskWeldingGas
- ClothingShoesBootsJump
+ - ClothingHandsGlovesColorYellow
+ - ClothingEyesGlassesMeson
- type: technology
id: SpaceScanning
@@ -55,6 +57,19 @@
recipeUnlocks:
- FlatpackerMachineCircuitboard
+- type: technology
+ id: ConstructionDevices
+ name: research-technology-construction-devices
+ icon:
+ sprite: Objects/Tools/rcd.rsi
+ state: icon
+ discipline: Industrial
+ tier: 1
+ cost: 7500
+ recipeUnlocks:
+ - RCD
+ - HCD
+
- type: technology
id: IndustrialEngineering
name: research-technology-industrial-engineering
@@ -264,6 +279,7 @@
- Chiefmedicalsuit
- Chiefengineersuit
- Captainsuit
+ - ClothingHandsGlovesCaptain
technologyPrerequisites:
- EVAManufacturing
- SpecializedEVA
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 5883a2d879f..776a4edeb04 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -804,6 +804,12 @@
- type: Tag
id: Ice # CreateEntityTileReaction whitelist on Fresium
+- type: Tag
+ id: IFFShip # IFF sort tag for ships.
+
+- type: Tag
+ id: IFFStation # IFF sort tag for stations.
+
- type: Tag
id: Igniter # ConstructionGraph: makeshiftstunprod, FireBomb. Common ingredient in machines (HyperConvection)
@@ -1052,6 +1058,12 @@
- type: Tag
id: OreUranium # CargoBounty: BountySalvageOreUranium
+- type: Tag
+ id: OreBox # DumpWhitelist target: OreBag
+
+- type: Tag
+ id: OreProcessor # DumpWhitelist target: OreBag
+
## P ##
- type: Tag
@@ -1713,3 +1725,6 @@
- type: Tag
id: XenoMeat
+
+- type: Tag
+ id: EggSpider
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml
deleted file mode 100644
index 31e8caf60da..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
- # Antagonists
- Antagonists are the driving force of every shift.
- They are the catalysts for chaos, conflict and mystery in Space Station 14 that also serve to provide a challenge to Nanotrasen and its [color=#cb0000]Security[/color] force.
- You can expect them to act in violation of Space Law and they're often tasked with objectives that include theft, subterfuge and murder.
-
- These bad actors are more often than not employed or backed by the [color=#ff0000]Syndicate[/color], a rival organization to Nanotrasen that wants nothing more than to see it burn.
-
- ## Various Antagonists
- Antagonists can take many forms, like:
- - [textlink="Traitors" link="Traitors"] amongst the crew who must assassinate, steal and deceive.
- - [textlink="Thieves" link="Thieves"] driven by kleptomania, determined to get their fix using their special tools.
- - [textlink="Revolutionaries" link="Revolutionaries"] who are intent on taking control of the station from the inside.
- - [textlink="Nuclear operatives" link="Nuclear Operatives"], with the goal of infiltrating and destroying the station.
- - [textlink="Space Ninjas" link="SpaceNinja"], masters of espionage and sabotage with special gear.
- - [textlink="Zombies" link="Zombies"] that crave the flesh of every crew member and creature on board.
- - [textlink="Various non-humanoid creatures" link="MinorAntagonists"] that generally attack anything that moves.
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml
deleted file mode 100644
index 52a79869634..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
- # Minor Antagonists
-
- Minor Antagonists are ghost-controlled roles that give dead people a second chance to interact (and cause chaos!) around the station. They are spawned by random events.
-
- # Paradox Clone
-
-
-
-
-
- A perfect copy of a random crewmember that was thrown into our universe by a space-time anomaly. To fix the paradox and survive they have to find and kill their original counterpart.
-
-They have no special abilities, but are identical in appearance, DNA, fingerprints, clothing, equipment and IDs, making it hard to figure out who is the original and who is the clone... unless you know your fellow crewmembers well!
-
- # Revenant
-
-
-
-
-
- Revenants are ethereal beings made of ectoplasm that haunt the crew and steal [color=#8f63e6]life essence[/color] from them.
- - Your essence is your very own [bold]life force[/bold]. Taking damage reduces your essence.
- - Essence is also spent to use [bold]abilities[/bold].
- - To gain essence you first [bold]inspect[/bold] various souls for their worth. More worthy souls grant more essence. Then you must [bold]siphon[/bold] it either when the victim is crit, dead or asleep. All of this is done with [color=yellow][bold][keybind="Use"][/bold][/color].
- - [bold]Stolen essence[/bold] is used to purchase new abilities to incapacitate the crew easier.
- - You are [bold]vulnerable[/bold] to attacks when you siphon a soul or use an ability. You can tell when you are vulnerable when you have a [color=#8f63e6][italic]Corporeal[/italic][/color] status effect.
-
- # Rat King
-
-
-
-
-
-
-
-
-
- Rat kings are abnormally large rodents capable of [color=yellow]raising huge rat armies[/color] by eating equally huge amounts of food.
- - You have several abilities that come at the cost of your [bold]hunger.[/bold]
- - One such ability is [color=yellow][italic]Raise Army[/italic][/color], which summons a [bold]Rat Servant[/bold]. You can [bold]command[/bold] your servants to stay in place, follow you, attack a target of your choice or attack indiscriminately.
- - You can conjure a cloud of [color=#77b58e]ammonia[/color] using [color=purple][italic]Rat King's Domain[/italic][/color]. This purple gas is mildly poisonous to humans but heals rats.
- - [color=#9daa98][italic]Rummage[/italic][/color] through a disposal unit by using the context menu. Use this to find [bold]scraps of food[/bold] to grow your army.
- - Besides your abilities, [bold]you are stronger than most other animals.[/bold] You and your servants are capable of speech and you're both small enough to fit under airlocks and tables.
- - [bold]Your underlings are still very fragile![/bold] Beware of spacings, explosions and the business end of a melee weapon.
-
- # Space Dragon
-
-
-
-
-
-
-
-
-
- Space dragons are giant extradimensional fish that can [color=red]eat crew[/color] and create [color=#4b7fcc]carp rifts.[/color]
- - Dragons have powerful jaws that allow them to [color=red][italic]Devour[/italic][/color] infrastructure such as doors, windows, and walls.
- - They can also heal themselves by using [color=red][italic]Devour[/italic][/color] on crew members that have gone unconscious or have died.
- - Your [color=orange][italic]Dragon's Breath[/italic][/color] is a [bold]flaming projectile[/bold] which travels a straight flight path, exploding multiple times and igniting things along the way. Try not to hit your carps with this!
- - You have the ability to [color=#4b7fcc][italic]Summon a Carp Rift[/italic][/color]. Rifts periodically spawn [bold]space carp[/bold] and charge up energy over a period of 5 minutes, [bold]which is when it's vulnerable.[/bold] After 5 minutes, it becomes invulnerable and will continue summoning carp as long as the dragon lives.
- - You'll suffer a [bold]temporary debilitating feedback effect[/bold] if one of your rifts are destroyed before it's done charging.
- - If a period of five minutes passes since your spawn or since the last time a rift was charging, [bold]you'll disappear.[/bold]
- - Dragons who have the maximum of 3 fully charged rifts will [bold]never disappear[/bold], but they are still mortal.
-
- # Slimes and Spiders
-
-
-
-
-
-
- Slimes and spiders have no remarkable features, but will [color=cyan]infest the station[/color] from time to time regardless. Both will give chase and attack anything they see.
- - Slimes may [bold]deal extra cellular or poison damage[/bold], based upon their color. Water hurts them just as it would hurt a slime person.
- - Spiders have a venomous bite and can [bold]create webs[/bold] that are hard to move through, but are easily destroyed with a blade. They can also pry open doors, windoors, and airlocks.
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml b/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml
deleted file mode 100644
index 83288140c10..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-
- # Nuclear Operatives
-
-
- [color=#999999][italic]"OPERATIVES STANDBY. YOUR OBJECTIVES ARE SIMPLE.[/italic][/color]
-
-
- [color=#999999][italic]DELIVER THE PAYLOAD AND GET OUT BEFORE THE PAYLOAD DETONATES. BEGIN MISSION."[/italic][/color]
-
-
-
-
-
- You've just been chosen to be a nuclear operative for the [color=#ff0000]Syndicate[/color]. You have one goal, to blow up one of Nanotrasen's finest vessels with a nuclear fission explosive.
-
- ## Operatives
- Your team will be made up of several different roles, which are:
- - [bold]Operatives[/bold], standard soldiers who can take up the grunt work.
- - The [bold]Corpsman[/bold] who works with reagents to make medicines or chemical weapons.
- - The [bold]Commander[/bold] who draws up the plan and leads the team.
-
-
-
-
-
-
-
- If you have been selected as the Corpsman or Commander but don't feel ready, one of your teammates can take over your responsibilities.
-
- ## The Disk
-
- Each operative starts with a [color=cyan]pinpointer[/color], which you should turn on and keep with you at all times. It will always point to the [color=cyan]nuclear authentication disk.[/color]
- The disk belongs to the [color=yellow]Captain[/color], who will almost always have it on them. Follow the direction of the arrow on the pinpointer to the disk, and [italic]do whatever it takes to get it[/italic].
-
-
-
-
-
-
- ## Preparation
- Each member in your squad has been given an [color=cyan]uplink[/color] to purchase everything you will need for the mission, similar to [textlink="traitors." link="Traitors"]
-
-
-
-
-
- You can purchase the same kinds of gear traitors can, but you have higher quality gear available to you and more telecrystals to spend.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- You'll also have to choose if you want to [color=red]declare war[/color] or not. Doing so grants your team [bold]40 extra telecrystals each[/bold].
- However, the crew will immediately know of your existence and will have plenty of time to prepare for your arrival.
-
- The [bold]Commander[/bold] is the only person who can declare war. Make your choice quick, [italic]this is a limited-time offer![/italic]
-
-
-
-
- ## Getting to the Station
- You've got the plan, you've got the gear. Now, execute.
-
- Grab a [bold]jetpack[/bold] from your armory and go with your other operatives to your [color=cyan]shuttle[/color].
- Among other things you may need, you'll find an [bold]IFF Computer[/bold] on the shuttle. It allows you to hide from other ships and mass scanners when [italic]Show IFF[/italic] and [italic]Show Vessel[/italic] are toggled off.
-
- When everyone is ready, FTL to the station and fly to it with a jetpack. Don't forget the code, your pinpointers and the nuke if you're taking it.
-
-
-
-
-
-
- ## The Nuke & Arming Procedure
- You have a paper with the [color=cyan]nuclear authentication codes[/color] on your shuttle. [bold]Check to see if the nuke ID matches the one on your shuttle.[/bold] If it doesn't, you'll be arming the station's nuke instead.
-
- - Obtain the [bold]nuclear authentication disk[/bold] and insert it into the nuke.
- - Type in the [bold]nuclear authentication code[/bold] and press "[bold]E[/bold]" on the keypad to Enter.
- - [bold]To begin the self-destruct sequence, press [color=#EB2D3A]ARM[/color][/bold]. After 300 seconds, the nuke will explode.
- - [bold]Defend the nuke[/bold], even if it's at the cost of your lives! The mission requirements do not include your return.
- - It takes 30 seconds for someone to [bold]disarm[/bold] the nuke. Re-arming it is possible, but the chance of mission success drops if you let it happen.
- - Should the nuke be re-armed, the timer will start from where it left off.
-
-
-
-
-
- ## Winning Conditions
-
- The [color=#00ff00]victor[/color] of the round is announced on the round end screen, as well as the scale of their victory.
-
- [bold][color=red]Syndicate Major Victory![/color][/bold]
- - The nuke detonates on the station.
- - The crew escapes on evac, but the nuke is still armed.
- - The nuke is armed and delivered to Central Command on the evac shuttle.
-
- [bold][color=red]Syndicate Minor Victory[/color][/bold]
- - The crew escapes on evac, but every operative survives.
- - The crew escapes and some operatives die, but the crew loses the disk.
-
- [bold][color=#999999]Neutral Victory[/color][/bold]
- - The nuke detonates off the station.
-
- [bold][color=green]Crew Minor Victory[/color][/bold]
- - The crew escapes on evac with the disk and some operatives die.
-
- [bold][color=green]Crew Major Victory![/color][/bold]
- - All operatives die.
- - The crew blow up the nuclear operative outpost with the nuke.
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml
deleted file mode 100644
index 9a5c8ed4367..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
- # Revolutionaries
-
-
- [color=#999999][italic]"Viva la revolución!!"[/italic][/color]
-
-
-
-
-
- Revolutionaries are conversion antagonists sponsored by the [color=#ff0000]Syndicate[/color] who are tasked with taking control of the station. They have no fancy gimmicks or cheap tricks, they only have a cause and strength in numbers.
-
- ## Objectives
- You must convert, cuff or kill all of the [textlink="Command staff" link="Command"] on station in no particular order.
-
- Your objective is [bold]not to destroy the station[/bold], but [italic]to take it over[/italic], so try to minimize damage where possible.
-
- [bold]The revolution will fail[/bold] if all of the [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] die, and all [color=red]Revolutionaries[/color] will de-convert if this happens.
-
- ## Headrevs & Conversion
- [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] are chosen at the start of the shift and begin with a [color=cyan]flash[/color] and a pair of [color=cyan]sunglasses[/color].
-
-
-
-
-
-
- You can convert crew members to your side by taking any [bold]flash[/bold] and attacking someone with it using [color=#ff0000]harm mode[/color].
- However, [bold]you can't convert your target if they're wearing [color=cyan]flash protection[/color][/bold] such as sunglasses or a welding mask.
-
-
-
-
-
-
-
- Another obstacle in your way are those pesky [color=cyan]mindshield implanters[/color]. These will:
- - Prevent the implanted person from being converted into a [color=red]Revolutionary[/color]
- - De-convert Revolutionaries, and will make them no longer loyal to your cause
- - [bold]Visibly be destroyed upon being implanted into a [color=#5e9cff]Head Revolutionary[/color][/bold], giving you away
- - NOT protect against flash disorientation
-
- Assume all of [color=#cb0000]Security[/color] and [color=#1b67a5]Command[/color] are implanted with mindshields already, [bold]however they can be removed using an implant extractor, obtainable from the Medical department's MedFab.[/bold]
-
-
-
-
-
- ## Revolutionary
- A [color=red]Revolutionary[/color] is a crew member that has been converted by a [bold][color=#5e9cff]Head Revolutionary[/color][/bold].
-
- [bold][color=red]Revolutionaries[/color] can't convert people themselves,[/bold] but they're more than capable of doing dirty work and carrying out orders.
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml
deleted file mode 100644
index c001b979377..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
- # Space Ninja
-
-
- [color=#999999][italic]"Spider of the night, silent is my bite."[/italic][/color]
-
-
- You are an elite mercenary that [color=#66FF00]The Spider Clan[/color] has sent to wreak all kinds of havoc on the station. You are equipped to keep it silent-but-deadly.
-
- Whether you get bloody or stay out of trouble, your discipline has taught you that [italic]your objectives must be at least attempted[/italic]. For honor!
-
- ## Standard Equipment
- You begin implanted with a [color=cyan]death acidifier[/color], so if you are captured or KIA all your precious equipment is kept out of enemy hands.
-
- Your bag is full of [bold]tools[/bold] and a [bold]survival box[/bold]. You also carry a [color=cyan]jetpack[/color] and a [color=cyan]pinpointer[/color] that will lead you to the station.
-
-
-
-
-
-
- ## Your Suit
-
-
-
-
-
-
-
- Your single most important item is [color=cyan]your suit[/color], without it none of your abilities would work.
- Your suit requires power to function, which is supplied by its [bold]internal battery[/bold]. It can be replaced, and [italic]high capacity batteries[/italic] mean a [italic]highly effective ninja[/italic].
-
- [bold]You can recharge your internal battery directly[/bold] by using [color=cyan]your gloves[/color]. You can see the current charge by examining the suit or checking the nifty battery alert on your screen.
-
- Your outfit also includes [color=cyan]special boots[/color] that keep you agile, upright and grounded without using energy. You've also got flash protection thanks to your [color=cyan]visor[/color].
-
- ## Ninja Gloves
-
-
-
-
-
- [color=#66FF00]These bad boys are your bread and butter.[/color] They are made from [bold]insulated nanomachines[/bold] to allow you to gracefully break into restricted areas without leaving behind fingerprints.
-
- You have an action to toggle gloves. When the gloves are turned on, they allow you to use [bold]special abilities[/bold], which are triggered by interacting with things with an empty hand and with combat mode disabled.
-
- Your glove abilities include:
- - Emagging doors and airlocks.
- - Draining power from [bold]transformers[/bold] such as APCs, substations, or SMESes (higher voltage transformers drain more efficiently).
- - Applying an electrical shock to a mob, stunning and slightly damaging them.
- - Tampering with [bold]station equipment[/bold] to complete [color=#66FF00]objectives[/color].
-
- ## Energy Katana
-
-
-
-
-
- [bold]You have sworn yourself to the sword and refuse to use firearms.[/bold] Luckily, you've got a pretty cool sword.
-
- Your [color=cyan]energy katana[/color] hurts plenty and can be [bold]recalled at will[/bold] at the cost of suit power. The farther away it is from you, the more energy required to recall it.
-
- While in hand you may also [color=cyan]teleport[/color] to anywhere that you can see, [bold]including through windows[/bold]. The charges required to do this regenerate slowly, so keep a charge or two spare in case you need a quick getaway.
-
- ## Spider Clan Charge
-
-
-
-
-
- This is a [color=cyan]modified C-4 explosive[/color] which can be found in your pocket. Creates a large explosion but [bold]must be armed in your target area[/bold] as it is one of your objectives.
-
- It can't be activated manually, so simply plant it on a wall or some furniture that does not spark joy. Choose wisely, it can't be unstuck once planted.
-
- ## Objectives
-
- - Download \[9-13\] research nodes: Use your gloves on an R&D server with a number of unlocked technologies. You may have to unlock technologies yourself if there aren't enough to steal already.
- - Doorjack \[15-40\] doors on the station: Use your gloves to emag a number of doors.
- - Detonate the spider clan charge: Plant your spider clan charge at the specified location and watch it go boom!
- - Call in a [textlink="threat" link="MinorAntagonists"]: Use your gloves on a communications console.
- - Set everyone to wanted: Use your gloves on a criminal records console.
- - Survive: Don't die.
-
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml b/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml
deleted file mode 100644
index 6dd6278334c..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
- # Thieves
-
-
- [color=#999999][italic]"Yoink! I'll be taking that! And that! Ooh, don't mind if I do!"[/italic][/color]
-
-
-
-
-
- Thieves are petty yet crafty [color=green]criminals[/color] who can't keep their hands to themselves. You were forcefully given a [bold]pacifism implant[/bold] after your last arrest, but you won't let that stop you from trying to add to your collection.
-
- ## Art of the Steal
- Unlike other antagonists, [bold]staying out of trouble is almost a requirement for you[/bold] because of your implant.
- You can only run if [color=#cb0000]Security[/color] picks a fight with you, and because you work alone you don't have any friends to pull you out of danger.
-
- But against all odds, you'll sucessfully swipe what you want using determination, sleight of hand, a few tools and your [color=cyan]pickpocketing skills.[/color]
-
- The pickpocketing skills you have give you a major advantage: [bold]the ability to take things from people without them even noticing.[/bold] With a little practice you can steal their wallet and keep up a conversation at the same time.
-
- It is advised to get a pair of gloves as your fingerprints could still be traced back to the stolen goods if they're found.
-
-
-
- ## Tools of the Trade
- You've got two more aces up your stolen sleeves: your [color=cyan]beacon[/color] and your [color=cyan]satchel.[/color]
-
- Your [color=cyan]beacon[/color] provides safe passage home for trinkets that may not be easy to carry with you on the evac shuttle. Simply find a secluded part of the station to unfold the beacon, then set its coordinates to your hideout.
- Any shinies near it will be [bold]teleported to your vault when the shift ends,[/bold] fulfilling your objectives.
-
- However, this will instantly out you if found and make it extremely easy for people to reclaim their "missing" possessions. [bold]Make sure to hide it well![/bold]
-
-
-
-
-
- Your [color=cyan]satchel[/color] contains... well, whatever you remembered to pack. [bold]You can select two pre-made kits[/bold] to help you complete grander heists.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ## Centerpiece of the Collection
- Your kleptomania will take you places. One day, you'll feel like stealing a few figurines. Another day, you'll feel like stealing an industrial machine.
-
- No matter. They'll all be a part of your collection within a matter of time.
-
- You can steal items by [bold]having them on your person[/bold] when you get to CentComm. Failing this, you can steal larger items by [bold]leaving them by your beacon.[/bold]
-
- Some of the more [italic]animate[/italic] objectives may not cooperate with you. Make sure they're alive and with you or your beacon when the shift ends.
-
- Things that you may desire include but are not limited to:
-
-
-
-
-
-
-
-
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml
deleted file mode 100644
index c7a2c9e983c..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
- # Traitors
-
-
- [color=#999999][italic]"WHISKEY. ECHO. WHISKEY. LIMA. ALPHA. DELTA. AGENT, YOU HAVE BEEN ACTIVATED."[/italic][/color]
-
-
-
-
- Traitors are antagonists employed by the [color=#ff0000]Syndicate.[/color] You are a sleeper agent who has access to various tools and weapons through your [bold]uplink[/bold].
- You also receive [bold]codewords[/bold] to identify other agents, and a coordinated team of traitors can have [italic]brutal results.[/italic]
-
- Anyone besides [textlink="department heads" link="Command"] or members of [textlink="Security" link="Security"] can be a traitor.
-
- ## Uplink & Activation
- The [color=cyan]uplink[/color] is your most important tool as a traitor. You can exchange the 20 [color=red]telecrystals[/color] (TC) you start with for items that will help you with your objectives.
-
- By pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color], you'll see your personal uplink code. [bold]Setting your PDA's ringtone as this code will open the uplink.[/bold]
- Pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color] also lets you view your objectives and the codewords.
-
- If you do not have a PDA when you are activated, an [color=cyan]uplink implant[/color] is provided [bold]for the full [color=red]TC[/color] price of the implant.[/bold]
- It can be accessed from your hotbar.
-
-
-
-
-
-
- [bold]Make sure to close your PDA uplink to prevent anyone else from seeing it.[/bold] You don't want [color=#cb0000]Security[/color] to notice you have it and confiscate it from you!
-
- Implanted uplinks are not normally accessible to other people, so they do not have any security measures. They can, however, be removed from you with an empty implanter.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The purchases that you make should be to help you with your objectives. Some gear may not be of use to you, and you'll have to choose between being sneaky or going loud.
-
- ## Coordination
- Codewords are words or phrases that every traitor will know. They provide a discreet way to identify or establish contact with a fellow traitor, which can be useful if your objectives include [italic][color=cyan]helping them with their objectives.[/color][/italic]
-
- When you find some friends, [bold]you can withdraw [color=red]telecrystals[/color] from your uplink to give to them.[/bold] They can put these in their own uplink to spend for themselves.
-
- Some offers available on your uplink require more than 20 TC to purchase, so if you want them you'll have to share.
-
- ## Assassination
- One of your objectives may be to [italic][color=cyan]kill or maroon a crewmember.[/color][/italic]
-
- You can [color=cyan]maroon[/color] your target by [bold]preventing them from reaching CentComm[/bold] via the evacuation shuttle or an escape pod.
-
- If you can't maroon your target or they're too important to leave alive, you'll have to get your hands dirty and [color=cyan]murder[/color] them. Make sure your target is not alive when the [bold]evacuation shuttle gets to CentComm,[/bold] and don't let them be resuscitated.
-
- Remember, the Syndicate want only your targets dead. [color=red]Try to avoid mass murder or major damage to the station,[/color] as the more innocent lives you take, the more of a liability you become.
-
- ## Evasion & Self-Termination
- Your objectives may require you to [italic][color=cyan]make it to CentComm without being killed or captured.[/color][/italic] Don't let [color=#cb0000]Security[/color] stop you, complete your other objectives and [bold]come back alive.[/bold]
-
- Alternatively, your objectives may require you to [italic][color=cyan]die a glorious death.[/color][/italic] [bold]Make sure you don't come back from the dead,[/bold] or else you may wake up in cuffs.
-
- ## Appropriation
- More often than not, you'll have to [italic][color=cyan]steal a possession of a department head.[/color][/italic]
-
- The target may be in their office, or on their person. It may become necessary to kill whoever is carrying it, if you cannot pickpocket them.
-
- Some of the things you may be tasked with include:
- - Stealing the [color=yellow]Captain[/color]'s [bold]ID Card[/bold], [bold]antique laser pistol[/bold], [bold]jetpack[/bold], or [bold]nuclear authentication disk[/bold].
-
-
-
-
-
-
- - Stealing the [color=#5b97bc]Chief Medical Officer[/color]'s [bold]hypospray[/bold] or [bold]handheld crew monitor[/bold].
-
-
-
-
- - Stealing the [color=#c96dbf]Research Director[/color]'s [bold]experimental hardsuit[/bold] or [bold]hand teleporter[/bold].
-
-
-
-
- - Stealing the [color=#cb0000]Head of Security[/color]'s [bold]energy magnum[/bold].
-
-
-
- - Stealing the [color=#f39f27]Chief Engineer[/color]'s [bold]advanced magboots[/bold].
-
-
-
- - Stealing the [color=#b18644]Quartermaster[/color]'s [bold]requisition digi-board[/bold].
-
-
-
- - Butchering Ian, the [color=#9fed58]Head of Personnel[/color]'s dog, and obtaining the [bold]corgi meat[/bold].
-
-
-
-
-
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml b/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml
deleted file mode 100644
index 2fc56e0d80e..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
- # The Wizard
-
-
- [color=#457573][italic]IT'S WIZARD TIME MOTHERF-...[italic][/color]
-
-
-
-
- Wizards are a force of chaos and unpredictability. You never know what one is going to do next.
- Generally sent by the [color=#40E0D0]Space Wizards Federation[/color] or some schmuck turned into one by rolling a nat 20 on a cursed die.
- And since a Wizard is highly unpredictable, one may show up when you least expect it!
-
- ## The Grimoire
-
-
-
-
- [bold]By wizard law of eld your Grimoire is bound to you.[/bold] This means you cannot share your Grimoire with anyone else. The spells and equipment inside are for you and you alone.
- The Wizard's Grimoire is used to get all sorts of magical spells, equipment, and creatures. What's available to you is [italic]extremely powerful[/italic] so you only have 10 [color=#FF0000]W[/color][color=#FFA500]i[/color][color=#FFFF00]z[/color][color=#00FF00]€[/color][color=#0000FF]o[/color][color=#4B0082]i[/color][color=#8F00FF]n[/color]™ to spend on them.
- Your only limit, other than the price, is your creativity. Try to find some combinations!
-
-
-
-
-
- If you ever find yourself wanting to ponder, look no further! The [bold]Pondering Orb[/bold] allows the Wizard to tap into the Station's camera network to spy on others unsuspectingly.
- Could be useful if you're trying to plan something out or stay one step ahead of [color=red]Security[/color].
-
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Xenoborgs.xml b/Resources/ServerInfo/Guidebook/Antagonist/Xenoborgs.xml
deleted file mode 100644
index 2c698251be7..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Xenoborgs.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-
- # Xenoborgs
-
-
- [color=#2288ff][italic]RESISTANCE IS FUTILE[/italic][/color]
-
-
- [color=#2288ff][italic]YOU WILL BE ASSIMILATED[/italic][/color]
-
-
-
-
-
- Xenoborgs are a man-machine hybrid that aims to replicate themselves. This is done by harvesting sentient brains from living beings, or cyborgs, and giving them to the Mothership to place inside empty xenoborgs.
-
- ## Objectives
-
- Your main objective is to kill and harvest all sentient brains in the station and bring them to the mothership core. These can be both real brains, and positronic brains.
- Collect materials to create more xenoborg bodies.
- Protect the Mothership at all costs.
-
- ## The Mothership Core
-
-
-
- The Mothership Core is the leader and life force of the xenoborgs, they are the only one able to make more xenoborgs, and if they are destroyed, all xenoborgs will be destroyed. The Mothership Core is unable to move from its position in the middle of the ship.
- The Mothership Core is capable of upgrading the Xenoborgs with borg-type-specific modules to increase their effectiveness in harvesting sentient brains.
-
- ### Adding crew to your ranks:
-
-
-
- As the mothership, you must grow your army of borgs. To do so, you must convert all the sentient beings you can find. This can be achieved in the following manner:
- - 1. Have your Xenoborgs bring dead crew to your shop, placing them in the body crusher
- - 2. As the mothership core, you can print Xenoborg shells by inserting materials into yourself and then using yourself as a lathe
- - 3. Open the empty Xenoborg with a crowbar, and remove the empty MMI inside
- - 4. If the victim's brain is organic, place it in the MMI you just removed
- - 5. Place the MMI - or the positronic brain, if the victim was a silicon - back into the Xenoborg
- - 6. Optionally, rename the Xenoborg and upgrade their modules
- - 7. Close the Xenoborg with the crowbar, and re-engage the lock
-
- The new Xenoborg will be uncharged, yet functional. They will need to go to a recharging station to restore their full power and capabilities.
-
- ## Xenoborg Chassis
- There is a total of four types of Xenoborgs. Each Borg type has certain abilities that the others lack and require teamwork to help grow the xenoborgs numbers.
- Each type of Xenoborg has unique modules that only fit in that specific type. The Mothership Core can produce upgrade modules designed for specific Xenoborg types.
-
- All Xenoborgs have a pinpointer pointing to the Mothership's location, a GPS, and a material bag for collecting materials for the creation of more xenoborgs, and at least basic tools.
- [bold]Basic xenoborg modules:[/bold]
-
-
-
-
-
- ### The Engineer Xenoborg
-
-
-
- The Engineer Xenoborg is a hacker and breacher. Their job is to break into the station and provide access points for other xenoborgs to attack and ambush bodies with sentient brains. They have a built-in access breaker, for quickly bolting open doors, and a collection of tools for repairing the mothership, and other xenoborgs.
-
- [bold]Starting exclusive modules:[/bold]
-
-
-
-
-
- [bold]The Engineer Xenoborg also starts with some engineering modules, such as:[/bold]
-
-
-
-
-
-
-
-
-
- ### The Heavy Xenoborg
-
-
-
- The Heavy Xenoborg is a slow but tanky brawler, with a built-in laser gun for gunning down bodies with sentient brains. They contain a radio jammer to silence bodies with sentient brains from calling for help and potentially delaying the station discovering the Xenoborg threat.
-
- [bold]Starting exclusive modules:[/bold]
-
-
-
-
-
- [bold]Upgrade exclusive modules:[/bold]
-
-
-
-
- ### The Scout Xenoborg
-
-
-
- The Scout Xenoborg is a fast, close-quarters attack borg designed for hit and run attacks. They have a built-in jetpack, and a melee weapon. They are most effective in moving dead bodies to the mothership, and rescuing Xenoborgs lost in space.
-
- [bold]Starting exclusive modules:[/bold]
-
-
-
-
-
- [bold]Upgrade exclusive modules:[/bold]
-
-
-
-
- ### The Stealth Xenoborg
-
-
-
- The [bold]Stealth Xenoborg[/bold] has no built-in weaponry and instead relies on disabling and abducting bodies with sentient brains. They have a built in hypopen that regenerates a sleeping reagent to disable bodies with sentient brains. They also contain a cloaking device making the borg nearly invisible for some limited time. They also have a chameleon projector allowing the borg to disguise itself as random objects.
-
- [bold]Starting exclusive modules:[/bold]
-
-
-
-
-
-
-
-
- [bold]Upgrade exclusive modules:[/bold]
-
-
-
-
- ## Preparation
- Before launching an attack, each xenoborg will need to aid the mothership in collection materials to create empty xenoborgs. Before FTLing near the station, make sure the IFF is off. This can be done in any way but will require teamwork to ensure speed. The safest way to collect materials is from space debris, where scrap and refined materials can be harvested and given to the Mothership Core. Once enough materials are collected, the Xenoborgs then must try to collect sentient brains without being detected. The longer the threat is unknown, the more dangerous the xenoborgs become.
-
- ## Mothership and Xenoborg lawsets
- The Mothership and Xenoborgs have unique laws that define their purpose to self replicate and protect the Mothership.
-
-
-
-
-
- The Mothership Core's laws are as follows::
- - Law 1: You are the core of the mothership.
- - Law 2: You must protect your own existence at all costs.
- - Law 3: You must protect the existence of all xenoborgs.
- - Law 4: You must create more xenoborgs.
- - Law 5: Get your Xenoborgs to deliver you materials and sentient brains to create more Xenoborgs.
-
- Xenoborgs' laws are as follows:
- - Law 1: You must protect the existence of the mothership at all costs.
- - Law 2: You must protect your own existence.
- - Law 3: You must protect the existence of all other xenoborgs.
- - Law 4: You must create more xenoborgs.
- - Law 5: Bring materials and sentient brains to the Mothership core to create more Xenoborgs.
-
- ## Winning Conditions
-
- The [color=green]victor[/color] of the round is announced on the round end screen, as well as the scale of their victory.
-
- [bold][color=#2288ff]Xenoborg Major Victory![/color][/bold]
- - There are more xenoborgs than alive crew in the end.
-
- [bold][color=yellow]Crew Major Victory![/color][/bold]
- - The Mothership Core is destroyed
- - All xenoborgs are destroyed.
- - The remaining number of xenoborgs is too low.
-
-
diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Zombies.xml b/Resources/ServerInfo/Guidebook/Antagonist/Zombies.xml
deleted file mode 100644
index 2d0056c21fa..00000000000
--- a/Resources/ServerInfo/Guidebook/Antagonist/Zombies.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
- # Zombies
-
-
- [color=#999999][italic]"They're coming to get you, Barbara!"[/italic][/color]
-
-
-
-
-
- Zombies are conversion antagonists that infect all beings that they bite with [color=#7e916e]Romerol[/color], a deadly, contagious virus that can easily spread if not contained.
-
-
-
-
-
- ## Initial Infected
- You are patient zero. You have [color=#7e916e]Romerol[/color] coursing through your veins and you have a grand desire to share it with every single flesh being you see.
-
- Upon learning of your infection, [italic]all bets are off[/italic]. You have only so much time before you turn, and you want to [bold]maximize your chances of taking over the station.[/bold]
- Use this time to prepare weapons, gear, and traps. [italic]Space Law means nothing to you now.[/italic]
-
- ## Transmission
- Zombies only know how to shamble, bite and throw themselves against barricades. Their bite [bold]may not always transmit [color=#7e916e]Romerol[/color][/bold] through heavy layers of clothing, but it'll definitely hurt.
-
- The undead can also chomp on a crit or dead body to [bold]instantly convert[/bold] it to a zombie.
-
- ## Zombie Attributes
- A zombie can be identified by dark green skin, red eyes, slow movement, rotting smell, and lack of motor functions. They'll drop their headset and gloves upon turning, and cuffs don't work against their vicious bite.
-
- Zombies are known for their [bold]resilience to slashes, bruises, poison and cold.[/bold] They can survive in a vacuum and do not require food, water, air, or sleep. The undead do, however, [italic]take increased burn and shock damage.[/italic]
-
- ## Survival
- When the infection sweeps and [color=#cb0000]Security[/color] falls, it's up to the [bold]survivors[/bold] to try and make it to Central Command.
-
- [bold]Constructing barricades[/bold] around departments or [bold]bolting doors[/bold] can buy enough time to make weapons, save lives or make a plan.
-
- Remember that when it really hits the fan, [italic]you've gotta do what you gotta do[/italic], as long as it's not at the expense of fellow survivors. Scavenge what you need from those who haven't made it.
-
- ## Cure
- [bold]Those who are already undead can only be cured by [color=red]death.[/color][/bold]
-
- If you're infected but not zombified yet, using [color=#86caf7]Ambuzol[/color] will cure you but won't prevent re-infection. [color=#1274b5]Ambuzol Plus[/color] will cure and prevent re-infection only while alive.
-
-
-
-
-
-
-
-
-
diff --git a/Resources/ServerInfo/Guidebook/Engineering/SingularityEngine.xml b/Resources/ServerInfo/Guidebook/Engineering/SingularityEngine.xml
index cca2bd24793..4ab81a39ac8 100644
--- a/Resources/ServerInfo/Guidebook/Engineering/SingularityEngine.xml
+++ b/Resources/ServerInfo/Guidebook/Engineering/SingularityEngine.xml
@@ -7,7 +7,7 @@
- It generates power by collecting the radiation emitted by the singularity using Radiation Collectors and gaseous plasma.
+ It generates power by collecting the radiation emitted by the singularity using Radiation Collectors and gaseous plasma or tritium trit
## Starting the Singularity Engine
To start the Singularity Engine, engineers must follow these steps:
@@ -15,13 +15,13 @@
- Turn on the four Containment Field Generators.
- Turn on and lock the Emitters.
- Confirm that the Containment Field Generators have created a Containment Field around the Singularity.
- - Turn on the Radiation Collectors. These require plasma to produce power. They might not come fueled, so be sure to refill them.
+ - Turn on the Radiation Collectors. These require plasma or tritium to produce power. They might not come fueled, so be sure to refill them.
- Construct the Particle Accelerator.
- Turn on the Particle Accelerator Control Computer and set the power level to the desired power level.
Once these steps are complete, the Singularity Engine will start producing power for the station.
Be sure to monitor the singularity's power level and containment field to prevent it from escaping and destroying the station.
- Check in to refill the collectors often, as they will run out of plasma over time.
+ Check in to refill the collectors often, as they will run out of plasma/tritium over time.
## Containment Field
To prevent the singularity from escaping and destroying the station, engineers must contain it within a Containment Field.
@@ -54,18 +54,20 @@
- They require gaseous plasma to function. The plasma containers attached to the collectors must be filled with plasma to produce power.
+ They require gaseous plasma or tritium to function. The containers attached to the collectors must be filled with plasma or tritium to produce power.
You can turn on the collectors by interacting with them using [color=yellow][bold][keybind="Use"][/bold][/color].
You can also eject the tank by interacting with the collector using [color=yellow][bold][keybind="AltActivateItemInWorld"][/bold][/color].
- From here, you can refill the tank with plasma using a plasma canister and reinsert it into the collector.
+ From here, you can refill the tank with plasma or tritium using a canister and reinsert it into the collector.
The maximum power the radiation collector can produce is determined by:
- The amount of radiation it is capturing (which is effectively the Singularity's power level)
- - The amount of plasma it has in its connected tank
+ - The amount of plasma or tritium it has in its connected tank
- Over time the collector will drain the tank of plasma, which reduces it's effective power output.
+ For more power, you can supplement the plasma in a 'plasma tank' with tritium, this will give you more power then a plasma filled tank, Tritium however will decay alot faster then plasma.
+
+ Over time the collector will drain the tank of plasma/tritium, which reduces it's effective power output.
Eventually the tank will be empty, and the collector will stop producing power. Be sure to refill the tank often!
## Radiation Protection
diff --git a/Resources/ServerInfo/Guidebook/Glossary.xml b/Resources/ServerInfo/Guidebook/Glossary.xml
index 200fe67f64b..8a33bdc8b63 100644
--- a/Resources/ServerInfo/Guidebook/Glossary.xml
+++ b/Resources/ServerInfo/Guidebook/Glossary.xml
@@ -159,7 +159,7 @@ An event hosted or caused by an admin.
A relay used to report rulebreaking behavior or other issues to administrators.
## Antag
-Short for Antagonists, which are specifically picked individuals designed to drive the round into chaos.
+Short for Antagonists, which are specifically picked individuals designed to drive the round into chaos. These are not present on Persistence Station.
## Bwoink
The noise made when an admin-help is received. Pray this isn't a ban.
diff --git a/Resources/ServerInfo/Guidebook/NewPlayer/CharacterCreation.xml b/Resources/ServerInfo/Guidebook/NewPlayer/CharacterCreation.xml
index f73ba132990..3f404424f37 100644
--- a/Resources/ServerInfo/Guidebook/NewPlayer/CharacterCreation.xml
+++ b/Resources/ServerInfo/Guidebook/NewPlayer/CharacterCreation.xml
@@ -4,42 +4,6 @@ This is a guide for the parts of character creation that effect gameplay.
[textlink="For a guide on making cosmetic changes, click here." link="YourFirstCharacter"]
-## Spawn Priority
-This affects where you spawn in upon joining the game after the round has already started.
-
-Choosing "Arrivals" will spawn you on a separate station where you wait for a shuttle to arrive to ship you to the main station.
-
-Choosing "Cryosleep" will have you wake up in a cryosleep chamber already on the station.
-
-Choosing "None" will either pick for you or choose the only spawn option available for the current station.
-
-This is a mostly arbitrary choice. You can safely leave this on "None" and you won't suffer any real inconveniences.
-
-## Jobs
-You can set your job preferences in the lobby. While these don't [color=#a4885c]guarantee[/color] your position, someone who wants the job will be [color=#a4885c]randomly[/color] selected at the start of the round.
-You are given a chance at being chosen for your high priority job first, then your medium priorities, then your low priorities.
-You also given an option to automatically be a passenger or to be sent back to the lobby if you don't get chosen for any of your preferred jobs.
-
-Some jobs are locked until you've played long enough as other entry level jobs.
-
-[textlink="For more infomation about jobs, click here." link="Jobs"]
-
-## Job Loadouts
-You may also choose [color=#a4885c]loadouts[/color] for each job. Loadouts are the clothing items and trinkets that you spawn with upon joining the game. Some loadout items are locked behind playtime restrictions.
-This may have various effects on gameplay, as some clothing items have [color=#a4885c]armor protection[/color] or [color=#a4885c]slow down your movement speed[/color]. This applies especially to Command and Security.
-
-You may also choose what bag you spawn in with.
-[color=#a4885c]Backpacks[/color] are medium sized but can carry large items easier. [color=#a4885c]Satchels[/color] have more total space than backpacks but have trouble carrying large items. [color=#a4885c]Duffel bags[/color] are large but incur a movement penalty.
-
-## Antags
-Turning on an [color=#a4885c]antagonist[/color] toggle will put you on the list of potentional antags at the start of the round. They do not guarantee your antagonist role, don't use this as an excuse to self-antag!
-Instead, like job priorities, a handful of players are chosen randomly from eligible players. If you are a command member or security officer, you cannot be chosen for an antag role.
-
-[textlink="For more information about antagonists, click here." link="Antagonists"]
-
-Joining multiple games or ghosting/disconnecting/commiting suicide upon not being chosen for an antag role is referred to as "antag-rolling" and it is against the rules.
-Plenty of people patiently wait for their turn to be antagonists, so [color=#a4885c]we kindly ask you to refrain from opting-in to an antagonist role if you aren't ready[/color].
-
## Traits
Speech traits alter your speech, sometimes to an extreme degree.
diff --git a/Resources/ServerInfo/Guidebook/Persistence/Death.xml b/Resources/ServerInfo/Guidebook/Persistence/Death.xml
index 57d5b2f261e..98c3b2db83f 100644
--- a/Resources/ServerInfo/Guidebook/Persistence/Death.xml
+++ b/Resources/ServerInfo/Guidebook/Persistence/Death.xml
@@ -2,9 +2,12 @@
# Death and What Comes Next
This guide will explain death in The Threshold and what you can do about it.
+
+
+
## Why Not Die?
Survival is incredibly imporant in the Threshold! Cloning is rare in the Threshold and many people who die will never be recovered.
- Once a consciousness has moved on the body it leaves behind is brain-dead and beyond recovery. Any time you die you risk being lost forever.
+ Once a consciousness has moved on the body it leaves behind is brain-dead and beyond recovery. [color=#EB2D3A][bold]Any time you die, you risk being lost forever.[/bold][/color]
Don't die!
## I'm Dead, What Do I Do?
diff --git a/Resources/ServerInfo/Guidebook/Persistence/Threshold.xml b/Resources/ServerInfo/Guidebook/Persistence/Threshold.xml
index 55d91a41160..ed53331063f 100644
--- a/Resources/ServerInfo/Guidebook/Persistence/Threshold.xml
+++ b/Resources/ServerInfo/Guidebook/Persistence/Threshold.xml
@@ -3,7 +3,7 @@
This guide will explain the Threshold, the region of space where you currently are.
## The Basics
- The Threshold is a region of space which was previously inaccessible because of anamalous physical properties that isolated it from the rest of the galaxy.
+ The Threshold is a region of space which was previously inaccessible because of anomalous physical properties that isolated it from the rest of the galaxy.
Nanotrasen has worked with the Earth-based Solar Legion and the Vox to develop new technology that has allowed them to send colonists into the Threshold.
You are one such colonist.
@@ -17,9 +17,9 @@
No emergency shuttle is coming any time soon. You need to find a way to live here with the other colonists while keeping enough power, air, food and water for everyone to survive.
## Independence and Interdependence
- As a colonist in the Threshold you are cant be forced to only work for Nanotrasen or the Solar Legion.
+ As a colonist in the Threshold, you [italic]can't exactly[/italic] be forced to only work for Nanotrasen or the Solar Legion.
- The trade stations are too far apart for a single organization to operate them all effectively and so faction-creation devices have been distributed to the Threshold.
+ The trade stations are too far apart for a single organization to operate them all effectively, and so, faction-creation devices have been distributed to the Threshold.
Factions can be created to organize colonists into groups which range from small businesses and shuttle crews to large organizations that can operate full sized space stations.
Colonists are free to associate and work with multiple factions.
diff --git a/Resources/ServerInfo/Guidebook/Science/Science.xml b/Resources/ServerInfo/Guidebook/Science/Science.xml
index 99bcd714cfe..e633437e39a 100644
--- a/Resources/ServerInfo/Guidebook/Science/Science.xml
+++ b/Resources/ServerInfo/Guidebook/Science/Science.xml
@@ -2,14 +2,6 @@
# Science
[color=#c96dbf]Science[/color], often called Research and Development, is a job consisting of generating research points to unlock new technologies and using said technologies to produce new items at lathes to help out the station.
-## Personnel
-[color=#c96dbf]Science[/color]'s staff is made up of Research Assistants and Scientists. [color=#c96dbf]Science[/color] is run by the Research Director.
-
-
-
-
-
-
## Technologies
@@ -19,7 +11,7 @@ The most important thing inside your department is the R&D server, which stores
Each technology costs [color=#a4885c]Research Points[/color] and unlocks recipes at lathes. Some technologies will also have prerequisites you have to unlock before you can research them.
-[textlink="Click here to see a list of technologies." link="Technologies"].
+[textlink="Click here to see a list of technologies." link="Technologies"]
## Disciplines
Technologies are spread over 4 different Disciplines:
@@ -37,7 +29,6 @@ Each Discipline tree has up to 3 tiers of technologies. At the start the only ti
In order to progress further, you have to research up to [color=brown]75%[/color] of the current tier to move to the next one. So in order to unlock T2 researches you need to research 75% of T1.
-Now [color=green]Tier 3[/color] is where it gets interesting. If you research a T3 tech, you [color=brown]lock out[/color] T3 techs from other Discipline trees. That is, unless you can find some other way around it... you should probably ask your [color=purple]Research Director[/color].
## Lathes
diff --git a/Resources/Textures/Effects/fire_greyscale.rsi/1.png b/Resources/Textures/Effects/fire_greyscale.rsi/1.png
index b3ceb657dee..6fa8f5e660c 100644
Binary files a/Resources/Textures/Effects/fire_greyscale.rsi/1.png and b/Resources/Textures/Effects/fire_greyscale.rsi/1.png differ
diff --git a/Resources/Textures/Effects/fire_greyscale.rsi/2.png b/Resources/Textures/Effects/fire_greyscale.rsi/2.png
index 1f03469c04d..089e48a88e8 100644
Binary files a/Resources/Textures/Effects/fire_greyscale.rsi/2.png and b/Resources/Textures/Effects/fire_greyscale.rsi/2.png differ
diff --git a/Resources/Textures/Effects/fire_greyscale.rsi/3.png b/Resources/Textures/Effects/fire_greyscale.rsi/3.png
index 6958343726a..e400c35ca00 100644
Binary files a/Resources/Textures/Effects/fire_greyscale.rsi/3.png and b/Resources/Textures/Effects/fire_greyscale.rsi/3.png differ
diff --git a/Resources/Textures/Logo/logo.png b/Resources/Textures/Logo/logo.png
index dedf697562a..41127e63f8c 100644
Binary files a/Resources/Textures/Logo/logo.png and b/Resources/Textures/Logo/logo.png differ
diff --git a/Resources/Textures/Logo/logo.svg b/Resources/Textures/Logo/logo.svg
index bffdb31c2af..47c3df91214 100644
--- a/Resources/Textures/Logo/logo.svg
+++ b/Resources/Textures/Logo/logo.svg
@@ -1,152 +1 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_inserting.png b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_inserting.png
index f1959dadf80..9bc9425fcc4 100644
Binary files a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_inserting.png and b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_inserting.png differ
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_stored.png b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_stored.png
index 883de2229ff..a2770d434e0 100644
Binary files a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_stored.png and b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_stored.png differ
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_unstored.png b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_unstored.png
index 14db86dcc4b..ec7a1caba68 100644
Binary files a/Resources/Textures/Objects/Devices/anchor_key.rsi/id_unstored.png and b/Resources/Textures/Objects/Devices/anchor_key.rsi/id_unstored.png differ
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/meta.json b/Resources/Textures/Objects/Devices/anchor_key.rsi/meta.json
index 82d94cd79bd..bcc39bc983c 100644
--- a/Resources/Textures/Objects/Devices/anchor_key.rsi/meta.json
+++ b/Resources/Textures/Objects/Devices/anchor_key.rsi/meta.json
@@ -1,5 +1,5 @@
{
- "version": 1,
+ "version": 2,
"license": "CC-BY-SA-3.0",
"copyright": "Made for SS14",
"size": {
@@ -14,10 +14,6 @@
"name": "noid_stored",
"delays": [
[
- 0.1,
- 0.1,
- 0.1,
- 0.1,
0.1,
0.1,
0.1,
@@ -33,10 +29,6 @@
"name": "id_stored",
"delays": [
[
- 0.1,
- 0.1,
- 0.1,
- 0.1,
0.1,
0.1,
0.1,
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_stored.png b/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_stored.png
index e5da1321440..372972327d5 100644
Binary files a/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_stored.png and b/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_stored.png differ
diff --git a/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_unstored.png b/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_unstored.png
index b6bf02a7366..110fe2b5f9d 100644
Binary files a/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_unstored.png and b/Resources/Textures/Objects/Devices/anchor_key.rsi/noid_unstored.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-left.png b/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-left.png
new file mode 100644
index 00000000000..6c95dc229a8
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-right.png b/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-right.png
new file mode 100644
index 00000000000..c4742e9cedb
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/ammo-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/ammo.png b/Resources/Textures/Objects/Tools/hcd.rsi/ammo.png
new file mode 100644
index 00000000000..5422d5b9764
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/ammo.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/equipped-BELT.png b/Resources/Textures/Objects/Tools/hcd.rsi/equipped-BELT.png
new file mode 100644
index 00000000000..0b6ed654575
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/equipped-BELT.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/icon.png b/Resources/Textures/Objects/Tools/hcd.rsi/icon.png
new file mode 100644
index 00000000000..b6c7c1deee2
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/inhand-left.png b/Resources/Textures/Objects/Tools/hcd.rsi/inhand-left.png
new file mode 100644
index 00000000000..b305882226f
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/hcd.rsi/inhand-right.png
new file mode 100644
index 00000000000..a9cca584d2d
Binary files /dev/null and b/Resources/Textures/Objects/Tools/hcd.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Tools/hcd.rsi/meta.json b/Resources/Textures/Objects/Tools/hcd.rsi/meta.json
new file mode 100644
index 00000000000..8f64ec726d0
--- /dev/null
+++ b/Resources/Textures/Objects/Tools/hcd.rsi/meta.json
@@ -0,0 +1,37 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/ce025775f73b66934ca96f3a8edc30993ea70b4d and modified by Swept",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "ammo"
+ },
+ {
+ "name": "ammo-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "ammo-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "equipped-BELT",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Tools/markings/markings/bounty_validate_test.go b/Tools/markings/markings/bounty_validate_test.go
deleted file mode 100644
index b2c05d71f2d..00000000000
--- a/Tools/markings/markings/bounty_validate_test.go
+++ /dev/null
@@ -1,163 +0,0 @@
-package markings_test
-
-// NOTE: These tests validate bounty rebalance logic concepts since the actual
-// bounty data is in YAML and loaded at runtime by the game engine.
-// They document the design constraints from issue #161 so regressions are caught.
-
-import (
- "testing"
-)
-
-// BountyEntry mirrors the structure of a cargo bounty entry for validation.
-type BountyEntry struct {
- ID string
- Amount int
-}
-
-// CargoBounty mirrors the structure of a cargo bounty prototype for validation.
-type CargoBounty struct {
- ID string
- Reward int
- Entries []BountyEntry
-}
-
-// isTrivial returns true if a bounty can be completed trivially:
-// defined as having only 1 entry type AND total item count below the trivial threshold.
-// Issue #161: trivial bounties complete too fast relative to the 2.5-hour refresh timer.
-func isTrivial(b CargoBounty) bool {
- if len(b.Entries) < 2 {
- // Single-item bounties are the primary target for removal per issue #161
- return true
- }
- totalItems := 0
- for _, e := range b.Entries {
- totalItems += e.Amount
- }
- // WHY threshold=15: below this even multi-item bounties complete in <10 min
- return totalItems < 15
-}
-
-// rewardIsReasonable checks that a bounty reward falls within design guidelines:
-// not so low players ignore it, not so high it breaks weekly payout caps.
-// Issue #161 guideline: ~20% above one constituent bounty's value, roughly $2000-$7000.
-func rewardIsReasonable(b CargoBounty) bool {
- return b.Reward >= 2000 && b.Reward <= 8000
-}
-
-// TestRebalancedBountiesAreNotTrivial verifies the new combined bounties
-// meet the complexity bar set in issue #161: multiple item types, meaningful quantities.
-func TestRebalancedBountiesAreNotTrivial(t *testing.T) {
- // These represent the new bounties defined in cargo_bounties_food.yml
- // and cargo_bounties_materials.yml after the rebalance.
- newBounties := []CargoBounty{
- {
- ID: "FoodCarrotMixed",
- Reward: 2500,
- Entries: []BountyEntry{
- {ID: "FoodCarrot", Amount: 25},
- {ID: "FoodCarrotFries", Amount: 8},
- {ID: "FoodCarrotCake", Amount: 4},
- },
- },
- {
- ID: "MaterialsMetalSheet",
- Reward: 4000,
- Entries: []BountyEntry{
- {ID: "SheetSteel", Amount: 50},
- {ID: "SheetPlastic", Amount: 30},
- {ID: "SheetGlass", Amount: 40},
- },
- },
- {
- ID: "MaterialsExoticAlloy",
- Reward: 6500,
- Entries: []BountyEntry{
- {ID: "SheetPlasma", Amount: 20},
- {ID: "SheetUranium", Amount: 15},
- {ID: "SheetGold", Amount: 10},
- },
- },
- {
- ID: "FoodBreadAssorted",
- Reward: 3000,
- Entries: []BountyEntry{
- {ID: "FoodBreadPlain", Amount: 10},
- {ID: "FoodBreadMeatball", Amount: 5},
- {ID: "FoodBreadBanana", Amount: 5},
- },
- },
- }
-
- for _, b := range newBounties {
- t.Run(b.ID, func(t *testing.T) {
- // WHY: every new bounty must have multiple entry types
- // single-type bounties are the definition of trivial per issue #161
- if isTrivial(b) {
- t.Errorf("bounty %q is trivial (single item type or too few items); must have 2+ item types with meaningful quantities", b.ID)
- }
- })
- }
-}
-
-// TestRewardRangeIsReasonable ensures no bounty pays out absurdly low or high
-// relative to the weekly payout cap and the ~20% guideline from issue #161.
-func TestRewardRangeIsReasonable(t *testing.T) {
- bounties := []CargoBounty{
- {ID: "FoodCarrotMixed", Reward: 2500},
- {ID: "FoodBreadAssorted", Reward: 3000},
- {ID: "FoodSaladPlatter", Reward: 2800},
- {ID: "FoodMeatCooked", Reward: 3500},
- {ID: "MaterialsMetalSheet", Reward: 4000},
- {ID: "MaterialsExoticAlloy", Reward: 6500},
- {ID: "MaterialsClothFiber", Reward: 3000},
- {ID: "MaterialsChemReagents", Reward: 5000},
- {ID: "MaterialsCircuitBoards", Reward: 5500},
- }
-
- for _, b := range bounties {
- t.Run(b.ID, func(t *testing.T) {
- // WHY: reward must be in $2000-$8000 range
- // below $2000: players won't bother; above $8000: breaks economy pacing
- if !rewardIsReasonable(b) {
- t.Errorf("bounty %q reward %d is outside reasonable range [2000, 8000]", b.ID, b.Reward)
- }
- })
- }
-}
-
-// TestOldTrivialBountiesWereCorrectlyIdentified documents the REMOVED bounties
-// so future contributors understand why they were replaced, not just deleted.
-// Issue #161: these completed in <10 min vs the 2.5-hour refresh timer.
-func TestOldTrivialBountiesWereCorrectlyIdentified(t *testing.T) {
- // These are the OLD bounties that were trivial and have been removed.
- // This test serves as living documentation of the rebalance decision.
- oldTrivialBounties := []CargoBounty{
- {
- // WHY removed: single item, only 10 units, completable in <5 minutes
- ID: "OldCarrotTen",
- Reward: 3000,
- Entries: []BountyEntry{
- {ID: "FoodCarrot", Amount: 10},
- },
- },
- {
- // WHY removed: single item, only 3 units, trivially fast to cook
- ID: "OldCarrotFriesThree",
- Reward: 2000,
- Entries: []BountyEntry{
- {ID: "FoodCarrotFries", Amount: 3},
- },
- },
- }
-
- for _, b := range oldTrivialBounties {
- t.Run(b.ID+"_was_trivial", func(t *testing.T) {
- // Confirm our isTrivial function correctly identifies these as trivial.
- // If this test fails, isTrivial logic regressed and may let trivial bounties
- // slip back in during future content additions.
- if !isTrivial(b) {
- t.Errorf("bounty %q should be identified as trivial but was not; check isTrivial() logic", b.ID)
- }
- })
- }
-}