diff --git a/Content.Client/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs b/Content.Client/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs
index af7b6055c80..f2eb8363411 100644
--- a/Content.Client/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs
+++ b/Content.Client/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs
@@ -7,7 +7,7 @@
namespace Content.Client.Shuttles.BUI;
[UsedImplicitly]
-public sealed class ShuttleConsoleBoundUserInterface : BoundUserInterface
+public sealed partial class ShuttleConsoleBoundUserInterface : BoundUserInterface // Frontier: added partial
{
[ViewVariables]
private ShuttleConsoleWindow? _window;
@@ -27,6 +27,7 @@ protected override void Open()
_window.RequestBeaconFTL += OnFTLBeaconRequest;
_window.DockRequest += OnDockRequest;
_window.UndockRequest += OnUndockRequest;
+ NfOpen(); // Frontier
}
private void OnUndockRequest(NetEntity entity)
diff --git a/Content.Client/Shuttles/UI/NavScreen.xaml b/Content.Client/Shuttles/UI/NavScreen.xaml
index 1a1d5747335..28b316d02b0 100644
--- a/Content.Client/Shuttles/UI/NavScreen.xaml
+++ b/Content.Client/Shuttles/UI/NavScreen.xaml
@@ -74,22 +74,48 @@
Text="{controls:Loc 'shuttle-console-dock-toggle'}"
TextAlign="Center"
ToggleMode="True"/>
-
+
+
+
+
+
+
+
-
-
+
+
-
+
+
+ Access="Public"
+ MinValue="0"
+ MaxValue="3000"
+ Value="3000"
+ HorizontalExpand="True"/>
+
+
-
diff --git a/Content.Client/Shuttles/UI/NavScreen.xaml.cs b/Content.Client/Shuttles/UI/NavScreen.xaml.cs
index 2fa34bfcc9b..590d0d196f4 100644
--- a/Content.Client/Shuttles/UI/NavScreen.xaml.cs
+++ b/Content.Client/Shuttles/UI/NavScreen.xaml.cs
@@ -33,12 +33,7 @@ public NavScreen()
DockToggle.OnToggled += OnDockTogglePressed;
DockToggle.Pressed = NavRadar.ShowDocks;
- // Frontier - IFF search
- IffSearchCriteria.OnTextChanged += args => OnIffSearchChanged(args.Text);
-
- // Frontier - Maximum IFF Distance
- MaximumIFFDistanceValue.GetChild(0).GetChild(1).Margin = new Thickness(8,0,0,0);
- MaximumIFFDistanceValue.OnValueChanged += args => OnRangeFilterChanged(args);
+ NfInitialize(); // Frontier Initialization for the NavScreen
}
// Frontier - IFF search
@@ -55,30 +50,11 @@ private void OnIffSearchChanged(string text)
};
}
- // Frontier - Maximum IFF Distance
- private void OnRangeFilterChanged(int value)
- {
- NavRadar.MaximumIFFDistance = (float) value;
- }
-
public void SetShuttle(EntityUid? shuttle)
{
_shuttleEntity = shuttle;
- // Frontier - PR #1284 Add Shuttle Designation
- if (_entManager.TryGetComponent(shuttle, out var metadata))
- {
- var shipNameParts = metadata.EntityName.Split(' ');
- var designation = shipNameParts[^1];
- if (designation.Length > 2 && designation[2] == '-')
- {
- NavDisplayLabel.Text = string.Join(' ', shipNameParts[..^1]);
- ShuttleDesignation.Text = designation;
- }
- else
- NavDisplayLabel.Text = metadata.EntityName;
- }
- // End Frontier - PR #1284
+ NfAddShuttleDesignation(shuttle); // Frontier - PR #1284 Add Shuttle Designation
}
private void OnIFFTogglePressed(BaseButton.ButtonEventArgs args)
@@ -102,6 +78,7 @@ private void OnDockTogglePressed(BaseButton.ButtonEventArgs args)
public void UpdateState(NavInterfaceState scc)
{
NavRadar.UpdateState(scc);
+ NfUpdateState(); // Frontier Update State
}
public void SetMatrix(EntityCoordinates? coordinates, Angle? angle)
diff --git a/Content.Client/Shuttles/UI/ShuttleConsoleWindow.xaml.cs b/Content.Client/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
index a4b42fb672c..8df3eb4d93e 100644
--- a/Content.Client/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
+++ b/Content.Client/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
@@ -62,6 +62,8 @@ public ShuttleConsoleWindow()
{
UndockRequest?.Invoke(entity);
};
+
+ NfInitialize(); // Frontier Initialization for the ShuttleConsoleWindow
}
private void ClearModes(ShuttleConsoleMode mode)
diff --git a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
index 19946875fb2..8e5545d29c0 100644
--- a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
+++ b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
@@ -1,4 +1,5 @@
using System.Numerics;
+using Content.Client.Station; // Frontier
using Content.Shared.Shuttles.BUIStates;
using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
@@ -7,13 +8,11 @@
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Collections;
using Robust.Shared.Input;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
-using Robust.Shared.Utility;
namespace Content.Client.Shuttles.UI;
@@ -22,6 +21,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
{
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IUserInterfaceManager _uiManager = default!;
+ private readonly StationSystem _station; // Frontier
private readonly SharedShuttleSystem _shuttles;
private readonly SharedTransformSystem _transform;
@@ -57,6 +57,7 @@ public ShuttleNavControl() : base(64f, 256f, 256f)
RobustXamlLoader.Load(this);
_shuttles = EntManager.System();
_transform = EntManager.System();
+ _station = EntManager.System(); // Frontier
}
public void SetMatrix(EntityCoordinates? coordinates, Angle? angle)
@@ -117,6 +118,8 @@ public void UpdateState(NavInterfaceState state)
ActualRadarRange = Math.Clamp(ActualRadarRange, WorldMinRange, WorldMaxRange);
_docks = state.Docks;
+
+ NfUpdateState(state); // Frontier Update State
}
protected override void Draw(DrawingHandleScreen handle)
@@ -226,19 +229,7 @@ protected override void Draw(DrawingHandleScreen handle)
shouldDrawIFF &= ShowIFFShuttles;
}
- // New Frontiers - Maximum IFF Distance - checks distance to object, draws if closer than max range
- // This code is licensed under AGPLv3. See AGPLv3.txt
- if (shouldDrawIFF && MaximumIFFDistance >= 0.0f)
- {
- var gridCentre = Vector2.Transform(gridBody.LocalCenter, matty);
- var distance = gridCentre.Length();
-
- if (distance > MaximumIFFDistance)
- {
- shouldDrawIFF = false;
- }
- }
- // End of modified code
+ shouldDrawIFF = NfCheckShouldDrawIffRangeCondition(shouldDrawIFF, gridBody, matty); // Frontier code
if (shouldDrawIFF)
{
@@ -298,17 +289,11 @@ protected override void Draw(DrawingHandleScreen handle)
handle.DrawString(Font, (uiPosition + labelOffset) * UIScale, labelText, UIScale, color);
}
- blipDataList.Add(new BlipData
- {
- IsOutsideRadarCircle = isOutsideRadarCircle,
- UiPosition = uiPosition,
- VectorToPosition = uiPosition - new Vector2(uiXCentre, uiYCentre),
- Color = color
- });
+ NfAddBlipToList(blipDataList, isOutsideRadarCircle, uiPosition, uiXCentre, uiYCentre, color); // Frontier code
}
- // Don't skip drawing blips if they're out of range.
- DrawBlips(handle, blipDataList);
+ // Frontier Don't skip drawing blips if they're out of range.
+ NfDrawBlips(handle, blipDataList);
// Detailed view
var gridAABB = gridMatrix.TransformBox(grid.Comp.LocalAABB);
@@ -379,78 +364,4 @@ public class BlipData
private const int RadarBlipSize = 15;
private const int RadarFontSize = 10;
- /**
- * Frontier - Adds blip style triangles that are on ships or pointing towards ships on the edges of the radar.
- * Draws blips at the BlipData's uiPosition and uses VectorToPosition to rotate to point towards ships.
- */
- private void DrawBlips(
- DrawingHandleBase handle,
- List blipDataList
- )
- {
- var blipValueList = new Dictionary>();
-
- foreach (var blipData in blipDataList)
- {
- var triangleShapeVectorPoints = new[]
- {
- new Vector2(0, 0),
- new Vector2(RadarBlipSize, 0),
- new Vector2(RadarBlipSize * 0.5f, RadarBlipSize)
- };
-
- if (blipData.IsOutsideRadarCircle)
- {
- // Calculate the angle of rotation
- var angle = (float) Math.Atan2(blipData.VectorToPosition.Y, blipData.VectorToPosition.X) + -1.6f;
-
- // Manually create a rotation matrix
- var cos = (float) Math.Cos(angle);
- var sin = (float) Math.Sin(angle);
- float[,] rotationMatrix = { { cos, -sin }, { sin, cos } };
-
- // Rotate each vertex
- for (var i = 0; i < triangleShapeVectorPoints.Length; i++)
- {
- var vertex = triangleShapeVectorPoints[i];
- var x = vertex.X * rotationMatrix[0, 0] + vertex.Y * rotationMatrix[0, 1];
- var y = vertex.X * rotationMatrix[1, 0] + vertex.Y * rotationMatrix[1, 1];
- triangleShapeVectorPoints[i] = new Vector2(x, y);
- }
- }
-
- var triangleCenterVector =
- (triangleShapeVectorPoints[0] + triangleShapeVectorPoints[1] + triangleShapeVectorPoints[2]) / 3;
-
- // Calculate the vectors from the center to each vertex
- var vectorsFromCenter = new Vector2[3];
- for (int i = 0; i < 3; i++)
- {
- vectorsFromCenter[i] = (triangleShapeVectorPoints[i] - triangleCenterVector) * UIScale;
- }
-
- // Calculate the vertices of the new triangle
- var newVerts = new Vector2[3];
- for (var i = 0; i < 3; i++)
- {
- newVerts[i] = (blipData.UiPosition * UIScale) + vectorsFromCenter[i];
- }
-
- if (!blipValueList.TryGetValue(blipData.Color, out var valueList))
- {
- valueList = new ValueList();
-
- }
- valueList.Add(newVerts[0]);
- valueList.Add(newVerts[1]);
- valueList.Add(newVerts[2]);
- blipValueList[blipData.Color] = valueList;
- }
-
- // One draw call for every color we have
- foreach (var color in blipValueList)
- {
- handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, color.Value.Span, color.Key);
- }
- }
}
diff --git a/Content.Client/_NF/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs b/Content.Client/_NF/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs
new file mode 100644
index 00000000000..715c67f888f
--- /dev/null
+++ b/Content.Client/_NF/Shuttles/BUI/ShuttleConsoleBoundUserInterface.cs
@@ -0,0 +1,26 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Content.Client.Shuttles.UI;
+using Content.Shared._NF.Shuttles.Events;
+
+namespace Content.Client.Shuttles.BUI
+{
+ public sealed partial class ShuttleConsoleBoundUserInterface
+ {
+ private void NfOpen()
+ {
+ _window ??= new ShuttleConsoleWindow();
+ _window.OnInertiaDampeningModeChanged += OnInertiaDampeningModeChanged;
+ }
+ private void OnInertiaDampeningModeChanged(NetEntity? entityUid, InertiaDampeningMode mode)
+ {
+ SendMessage(new SetInertiaDampeningRequest
+ {
+ ShuttleEntityUid = entityUid,
+ Mode = mode,
+ });
+ }
+
+ }
+}
diff --git a/Content.Client/_NF/Shuttles/UI/NavScreen.xaml.cs b/Content.Client/_NF/Shuttles/UI/NavScreen.xaml.cs
new file mode 100644
index 00000000000..25369baddf6
--- /dev/null
+++ b/Content.Client/_NF/Shuttles/UI/NavScreen.xaml.cs
@@ -0,0 +1,83 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Content.Shared._NF.Shuttles.Events;
+using Robust.Client.UserInterface.Controls;
+
+namespace Content.Client.Shuttles.UI
+{
+ public sealed partial class NavScreen
+ {
+ private readonly ButtonGroup _buttonGroup = new();
+ public event Action? OnInertiaDampeningModeChanged;
+
+ private void NfInitialize()
+ {
+ // Frontier - IFF search
+ IffSearchCriteria.OnTextChanged += args => OnIffSearchChanged(args.Text);
+
+ // Frontier - Maximum IFF Distance
+ MaximumIFFDistanceValue.GetChild(0).GetChild(1).Margin = new Thickness(8, 0, 0, 0);
+ MaximumIFFDistanceValue.OnValueChanged += args => OnRangeFilterChanged(args);
+
+ DampenerOff.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Off);
+ DampenerOn.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Dampen);
+ AnchorOn.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Anchor);
+
+ DampenerOff.Group = _buttonGroup;
+ DampenerOn.Group = _buttonGroup;
+ AnchorOn.Group = _buttonGroup;
+
+ // Send off a request to get the current dampening mode.
+ _entManager.TryGetNetEntity(_shuttleEntity, out var shuttle);
+ OnInertiaDampeningModeChanged?.Invoke(shuttle, InertiaDampeningMode.Query);
+ }
+
+ private void SetDampenerMode(InertiaDampeningMode mode)
+ {
+ NavRadar.DampeningMode = mode;
+ _entManager.TryGetNetEntity(_shuttleEntity, out var shuttle);
+ OnInertiaDampeningModeChanged?.Invoke(shuttle, mode);
+ }
+
+ private void NfUpdateState()
+ {
+ if (NavRadar.DampeningMode == InertiaDampeningMode.Station)
+ {
+ DampenerModeButtons.Visible = false;
+ }
+ else
+ {
+ DampenerModeButtons.Visible = true;
+ DampenerOff.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Off;
+ DampenerOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Dampen;
+ AnchorOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Anchor;
+ }
+ }
+
+ // Frontier - Maximum IFF Distance
+ private void OnRangeFilterChanged(int value)
+ {
+ NavRadar.MaximumIFFDistance = (float) value;
+ }
+
+ private void NfAddShuttleDesignation(EntityUid? shuttle)
+ {
+ // Frontier - PR #1284 Add Shuttle Designation
+ if (_entManager.TryGetComponent(shuttle, out var metadata))
+ {
+ var shipNameParts = metadata.EntityName.Split(' ');
+ var designation = shipNameParts[^1];
+ if (designation.Length > 2 && designation[2] == '-')
+ {
+ NavDisplayLabel.Text = string.Join(' ', shipNameParts[..^1]);
+ ShuttleDesignation.Text = designation;
+ }
+ else
+ NavDisplayLabel.Text = metadata.EntityName;
+ }
+ // End Frontier - PR #1284
+ }
+
+ }
+}
diff --git a/Content.Client/_NF/Shuttles/UI/ShuttleConsoleWindow.xaml.cs b/Content.Client/_NF/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
new file mode 100644
index 00000000000..7ba3f952b46
--- /dev/null
+++ b/Content.Client/_NF/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
@@ -0,0 +1,21 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Content.Shared._NF.Shuttles.Events;
+
+namespace Content.Client.Shuttles.UI
+{
+ public sealed partial class ShuttleConsoleWindow
+ {
+ public event Action? OnInertiaDampeningModeChanged;
+
+ private void NfInitialize()
+ {
+ NavContainer.OnInertiaDampeningModeChanged += (entity, mode) =>
+ {
+ OnInertiaDampeningModeChanged?.Invoke(entity, mode);
+ };
+ }
+
+ }
+}
diff --git a/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs
new file mode 100644
index 00000000000..3520967548e
--- /dev/null
+++ b/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs
@@ -0,0 +1,131 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Content.Shared._NF.Shuttles.Events;
+using Content.Shared.Shuttles.BUIStates;
+using Robust.Shared.Physics.Components;
+using System.Numerics;
+using Robust.Client.Graphics;
+using Robust.Shared.Collections;
+
+namespace Content.Client.Shuttles.UI
+{
+ public sealed partial class ShuttleNavControl
+ {
+ public InertiaDampeningMode DampeningMode { get; set; }
+
+ private void NfUpdateState(NavInterfaceState state)
+ {
+
+ if (!EntManager.GetCoordinates(state.Coordinates).HasValue ||
+ !EntManager.TryGetComponent(EntManager.GetCoordinates(state.Coordinates).GetValueOrDefault().EntityId,out TransformComponent? transform) ||
+ !EntManager.TryGetComponent(transform.GridUid, out PhysicsComponent? physicsComponent))
+ {
+ return;
+ }
+
+ DampeningMode = state.DampeningMode;
+ }
+
+ // New Frontiers - Maximum IFF Distance - checks distance to object, draws if closer than max range
+ // This code is licensed under AGPLv3. See AGPLv3.txt
+ private bool NfCheckShouldDrawIffRangeCondition(bool shouldDrawIff, PhysicsComponent gridBody, Matrix3x2 matty)
+ {
+ if (shouldDrawIff && MaximumIFFDistance >= 0.0f)
+ {
+ var gridCentre = Vector2.Transform(gridBody.LocalCenter, matty);
+ var distance = gridCentre.Length();
+
+ if (distance > MaximumIFFDistance)
+ {
+ shouldDrawIff = false;
+ }
+ }
+
+ return shouldDrawIff;
+ }
+
+ private static void NfAddBlipToList(List blipDataList, bool isOutsideRadarCircle, Vector2 uiPosition, int uiXCentre, int uiYCentre, Color color)
+ {
+ blipDataList.Add(new BlipData
+ {
+ IsOutsideRadarCircle = isOutsideRadarCircle,
+ UiPosition = uiPosition,
+ VectorToPosition = uiPosition - new Vector2(uiXCentre, uiYCentre),
+ Color = color
+ });
+ }
+
+ /**
+ * Frontier - Adds blip style triangles that are on ships or pointing towards ships on the edges of the radar.
+ * Draws blips at the BlipData's uiPosition and uses VectorToPosition to rotate to point towards ships.
+ */
+ private void NfDrawBlips(DrawingHandleBase handle, List blipDataList)
+ {
+ var blipValueList = new Dictionary>();
+
+ foreach (var blipData in blipDataList)
+ {
+ var triangleShapeVectorPoints = new[]
+ {
+ new Vector2(0, 0),
+ new Vector2(RadarBlipSize, 0),
+ new Vector2(RadarBlipSize * 0.5f, RadarBlipSize)
+ };
+
+ if (blipData.IsOutsideRadarCircle)
+ {
+ // Calculate the angle of rotation
+ var angle = (float) Math.Atan2(blipData.VectorToPosition.Y, blipData.VectorToPosition.X) + -1.6f;
+
+ // Manually create a rotation matrix
+ var cos = (float) Math.Cos(angle);
+ var sin = (float) Math.Sin(angle);
+ float[,] rotationMatrix = { { cos, -sin }, { sin, cos } };
+
+ // Rotate each vertex
+ for (var i = 0; i < triangleShapeVectorPoints.Length; i++)
+ {
+ var vertex = triangleShapeVectorPoints[i];
+ var x = vertex.X * rotationMatrix[0, 0] + vertex.Y * rotationMatrix[0, 1];
+ var y = vertex.X * rotationMatrix[1, 0] + vertex.Y * rotationMatrix[1, 1];
+ triangleShapeVectorPoints[i] = new Vector2(x, y);
+ }
+ }
+
+ var triangleCenterVector =
+ (triangleShapeVectorPoints[0] + triangleShapeVectorPoints[1] + triangleShapeVectorPoints[2]) / 3;
+
+ // Calculate the vectors from the center to each vertex
+ var vectorsFromCenter = new Vector2[3];
+ for (int i = 0; i < 3; i++)
+ {
+ vectorsFromCenter[i] = (triangleShapeVectorPoints[i] - triangleCenterVector) * UIScale;
+ }
+
+ // Calculate the vertices of the new triangle
+ var newVerts = new Vector2[3];
+ for (var i = 0; i < 3; i++)
+ {
+ newVerts[i] = (blipData.UiPosition * UIScale) + vectorsFromCenter[i];
+ }
+
+ if (!blipValueList.TryGetValue(blipData.Color, out var valueList))
+ {
+ valueList = new ValueList();
+
+ }
+ valueList.Add(newVerts[0]);
+ valueList.Add(newVerts[1]);
+ valueList.Add(newVerts[2]);
+ blipValueList[blipData.Color] = valueList;
+ }
+
+ // One draw call for every color we have
+ foreach (var color in blipValueList)
+ {
+ handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, color.Value.Span, color.Key);
+ }
+ }
+ }
+}
diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs
index 640cb2b52b1..4456bcda03f 100644
--- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs
+++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs
@@ -3,6 +3,7 @@
using Content.Server.Shuttles.Components;
using Content.Server.Shuttles.Events;
using Content.Server.Station.Systems;
+using Content.Shared._NF.Shuttles.Events; // Frontier
using Content.Shared.ActionBlocker;
using Content.Shared.Alert;
using Content.Shared.Popups;
@@ -256,7 +257,7 @@ private void UpdateState(EntityUid consoleUid, ref DockingInterfaceState? dockSt
}
else
{
- navState = new NavInterfaceState(0f, null, null, new Dictionary>());
+ navState = new NavInterfaceState(0f, null, null, new Dictionary>(), InertiaDampeningMode.Dampen); // Frontier: inertia dampening);
mapState = new ShuttleMapInterfaceState(
FTLState.Invalid,
default,
@@ -371,7 +372,7 @@ public void ClearPilots(ShuttleConsoleComponent component)
public NavInterfaceState GetNavState(Entity entity, Dictionary> docks)
{
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2))
- return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, null, null, docks);
+ return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, null, null, docks, Shared._NF.Shuttles.Events.InertiaDampeningMode.Dampen); // Frontier: add inertia dampening
return GetNavState(
entity,
@@ -387,13 +388,14 @@ public NavInterfaceState GetNavState(
Angle angle)
{
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2))
- return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, GetNetCoordinates(coordinates), angle, docks);
+ return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, GetNetCoordinates(coordinates), angle, docks, InertiaDampeningMode.Dampen); // Frontier: add inertial dampening
return new NavInterfaceState(
entity.Comp1.MaxRange,
GetNetCoordinates(coordinates),
angle,
- docks);
+ docks,
+ _shuttle.NfGetInertiaDampeningMode(entity)); // Frontier: inertia dampening
}
///
diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs
index 843e3e82676..4e058fd0f96 100644
--- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs
+++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs
@@ -76,6 +76,9 @@ public override void Initialize()
SubscribeLocalEvent(OnGridInit);
SubscribeLocalEvent(OnGridFixtureChange);
+
+ NfInitialize(); // Frontier Initialization for the ShuttleSystem
+
}
public override void Update(float frameTime)
diff --git a/Content.Server/_NF/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/_NF/Shuttles/Systems/ShuttleSystem.cs
new file mode 100644
index 00000000000..f027d3cce44
--- /dev/null
+++ b/Content.Server/_NF/Shuttles/Systems/ShuttleSystem.cs
@@ -0,0 +1,86 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Content.Server._NF.Station.Components;
+using Content.Server.Shuttles.Components;
+using Content.Shared._NF.Shuttles.Events;
+using Content.Shared.Shipyard.Components;
+using Robust.Shared.Physics.Components;
+
+namespace Content.Server.Shuttles.Systems;
+
+public sealed partial class ShuttleSystem
+{
+ private const float SpaceFrictionStrength = 0.0015f;
+ private const float AnchorDampeningStrength = 0.5f;
+ private void NfInitialize()
+ {
+ SubscribeLocalEvent(OnSetInertiaDampening);
+ }
+
+ private void OnSetInertiaDampening(EntityUid uid, ShuttleConsoleComponent component, SetInertiaDampeningRequest args)
+ {
+ // Ensure that the entity requested is a valid shuttle (stations should not be togglable)
+ if (!EntityManager.TryGetComponent(uid, out TransformComponent? transform) ||
+ !transform.GridUid.HasValue ||
+ !EntityManager.TryGetComponent(transform.GridUid, out PhysicsComponent? physicsComponent) ||
+ !EntityManager.TryGetComponent(transform.GridUid, out ShuttleComponent? shuttleComponent))
+ {
+ return;
+ }
+
+ if (args.Mode == InertiaDampeningMode.Query)
+ {
+ _console.RefreshShuttleConsoles(transform.GridUid.Value);
+ return;
+ }
+
+ if (!EntityManager.HasComponent(transform.GridUid) ||
+ EntityManager.HasComponent(_station.GetOwningStation(transform.GridUid)))
+ {
+ return;
+ }
+
+ var linearDampeningStrength = args.Mode switch
+ {
+ InertiaDampeningMode.Off => SpaceFrictionStrength,
+ InertiaDampeningMode.Dampen => shuttleComponent.LinearDamping,
+ InertiaDampeningMode.Anchor => AnchorDampeningStrength,
+ _ => shuttleComponent.LinearDamping, // other values: default to some sane behaviour (assume normal dampening)
+ };
+
+ var angularDampeningStrength = args.Mode switch
+ {
+ InertiaDampeningMode.Off => SpaceFrictionStrength,
+ InertiaDampeningMode.Dampen => shuttleComponent.AngularDamping,
+ InertiaDampeningMode.Anchor => AnchorDampeningStrength,
+ _ => shuttleComponent.AngularDamping, // other values: default to some sane behaviour (assume normal dampening)
+ };
+
+ _physics.SetLinearDamping(transform.GridUid.Value, physicsComponent, linearDampeningStrength);
+ _physics.SetAngularDamping(transform.GridUid.Value, physicsComponent, angularDampeningStrength);
+ _console.RefreshShuttleConsoles(transform.GridUid.Value);
+ }
+
+ public InertiaDampeningMode NfGetInertiaDampeningMode(EntityUid entity)
+ {
+ if (!EntityManager.TryGetComponent(entity, out var xform))
+ return InertiaDampeningMode.Dampen;
+
+ // Not a shuttle, shouldn't be togglable
+ if (!EntityManager.HasComponent(xform.GridUid) ||
+ EntityManager.HasComponent(_station.GetOwningStation(xform.GridUid)))
+ return InertiaDampeningMode.Station;
+
+ if (!EntityManager.TryGetComponent(xform.GridUid, out PhysicsComponent? physicsComponent))
+ return InertiaDampeningMode.Dampen;
+
+ if (physicsComponent.LinearDamping >= AnchorDampeningStrength)
+ return InertiaDampeningMode.Anchor;
+ else if (physicsComponent.LinearDamping <= SpaceFrictionStrength)
+ return InertiaDampeningMode.Off;
+ else
+ return InertiaDampeningMode.Dampen;
+ }
+
+}
diff --git a/Content.Server/_NF/Station/Components/StationDampeningComponent.cs b/Content.Server/_NF/Station/Components/StationDampeningComponent.cs
new file mode 100644
index 00000000000..f6e184077a9
--- /dev/null
+++ b/Content.Server/_NF/Station/Components/StationDampeningComponent.cs
@@ -0,0 +1,10 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+
+namespace Content.Server._NF.Station.Components;
+
+[RegisterComponent]
+public sealed partial class StationDampeningComponent : Component
+{
+}
diff --git a/Content.Shared/Shuttles/BUIStates/NavInterfaceState.cs b/Content.Shared/Shuttles/BUIStates/NavInterfaceState.cs
index a6f4c01657d..70716742dd2 100644
--- a/Content.Shared/Shuttles/BUIStates/NavInterfaceState.cs
+++ b/Content.Shared/Shuttles/BUIStates/NavInterfaceState.cs
@@ -1,5 +1,6 @@
using Robust.Shared.Map;
using Robust.Shared.Serialization;
+using Content.Shared._NF.Shuttles.Events; // Frontier - InertiaDampeningMode access
namespace Content.Shared.Shuttles.BUIStates;
@@ -20,16 +21,23 @@ public sealed class NavInterfaceState
public Dictionary> Docks;
+ ///
+ /// Frontier - the state of the shuttle's inertial dampeners
+ ///
+ public InertiaDampeningMode DampeningMode;
+
public NavInterfaceState(
float maxRange,
NetCoordinates? coordinates,
Angle? angle,
- Dictionary> docks)
+ Dictionary> docks,
+ InertiaDampeningMode dampeningMode) // Frontier: add dampeningMode
{
MaxRange = maxRange;
Coordinates = coordinates;
Angle = angle;
Docks = docks;
+ DampeningMode = dampeningMode; // Frontier
}
}
diff --git a/Content.Shared/_NF/Shuttles/Events/SetInertiaDampeningRequest.cs b/Content.Shared/_NF/Shuttles/Events/SetInertiaDampeningRequest.cs
new file mode 100644
index 00000000000..70d7dddabb5
--- /dev/null
+++ b/Content.Shared/_NF/Shuttles/Events/SetInertiaDampeningRequest.cs
@@ -0,0 +1,27 @@
+// New Frontiers - This file is licensed under AGPLv3
+// Copyright (c) 2024 New Frontiers Contributors
+// See AGPLv3.txt for details.
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._NF.Shuttles.Events
+{
+ ///
+ /// Raised on the client when it wishes to change the inertial dampening of a ship.
+ ///
+ [Serializable, NetSerializable]
+ public sealed class SetInertiaDampeningRequest : BoundUserInterfaceMessage
+ {
+ public NetEntity? ShuttleEntityUid { get; set; }
+ public InertiaDampeningMode Mode { get; set; }
+ }
+
+ [Serializable, NetSerializable]
+ public enum InertiaDampeningMode : byte
+ {
+ Off = 0,
+ Dampen = 1,
+ Anchor = 2,
+ Station = 3, // Reserved for station status, should not be used in requests.
+ Query = 255 // Reserved for requests - does not set the mode, only returns its state.
+ }
+}
diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml
index b352d02cace..ce65edb19f0 100644
--- a/Resources/Changelog/Changelog.yml
+++ b/Resources/Changelog/Changelog.yml
@@ -6115,3 +6115,13 @@ Entries:
message: McCargo now comes with the McDrive Thru for food on the go.
id: 5177
time: '2024-08-07T07:20:01.0000000+00:00'
+- author: neuPanda
+ changes:
+ - type: Add
+ message: Cruise Control
+ - type: Add
+ message: Parking Breaks
+ - type: Fix
+ message: Fixed fun! (your Prada be driftin')
+ id: 5178
+ time: '2024-08-07T12:44:58.0000000+00:00'
diff --git a/Resources/Locale/en-US/_NF/shuttles/console.ftl b/Resources/Locale/en-US/_NF/shuttles/console.ftl
index c2d3c07bf8a..74fb9cc4e1d 100644
--- a/Resources/Locale/en-US/_NF/shuttles/console.ftl
+++ b/Resources/Locale/en-US/_NF/shuttles/console.ftl
@@ -1,3 +1,8 @@
shuttle-console-designation = Designation:
shuttle-console-designation-unknown = Unknown
shuttle-console-maximum-iff-distance = Maximum IFF Distance
+
+shuttle-console-iff-search = Search IFF
+shuttle-console-inertia-dampener-off = Cruise
+shuttle-console-inertia-dampener-dampen = Drive
+shuttle-console-inertia-dampener-anchor = Park
diff --git a/Resources/Locale/en-US/shuttles/console.ftl b/Resources/Locale/en-US/shuttles/console.ftl
index bdc3ef55659..ff14832149c 100644
--- a/Resources/Locale/en-US/shuttles/console.ftl
+++ b/Resources/Locale/en-US/shuttles/console.ftl
@@ -18,8 +18,6 @@ shuttle-console-unknown = Unknown
shuttle-console-iff-label = {$name} ({$distance}m)
shuttle-console-exclusion = Exclusion area
-shuttle-console-iff-search = Search IFF
-
# Buttons
shuttle-console-strafing = Strafing mode
shuttle-console-nav-settings = Settings
diff --git a/Resources/Locale/ru-RU/_NF/cargo/pirate-bounties.ftl b/Resources/Locale/ru-RU/_NF/cargo/pirate-bounties.ftl
index ff33a961939..77aafffd08e 100644
--- a/Resources/Locale/ru-RU/_NF/cargo/pirate-bounties.ftl
+++ b/Resources/Locale/ru-RU/_NF/cargo/pirate-bounties.ftl
@@ -13,7 +13,7 @@ pirate-bounty-item-vendingmachine = Торговый автомат (любой)
pirate-bounty-item-mercSuit = Бронированный костюм наёмника
pirate-bounty-item-cappy = Шляпа капитана
pirate-bounty-item-cultistNeck = Ожерелье культиста
-pirate-bounty-item-nfsdCampaign = Шляпа NFSD (любая)
+pirate-bounty-item-nfsdCampaign = Шляпа ДСБФ (любая)
pirate-bounty-item-scafsuit = Скуфандр
pirate-bounty-item-rtg = РИТЭГ
pirate-bounty-item-mercgas = Противогаз наёмника
diff --git a/Resources/Locale/ru-RU/_NF/cargo/pirate-bounty-console.ftl b/Resources/Locale/ru-RU/_NF/cargo/pirate-bounty-console.ftl
index 8146dc93168..a3230c94171 100644
--- a/Resources/Locale/ru-RU/_NF/cargo/pirate-bounty-console.ftl
+++ b/Resources/Locale/ru-RU/_NF/cargo/pirate-bounty-console.ftl
@@ -10,7 +10,7 @@ pirate-bounty-console-manifest-entry = { $amount ->
[1] { $item }
*[other] { $item } x{ $amount }
}
-pirate-bounty-console-manifest-reward = Награда: { $reward } кредов
+pirate-bounty-console-manifest-reward = Награда: { $reward } дублонов
pirate-bounty-console-description-label = [color=gray]{ $description }[/color]
pirate-bounty-console-id-label = { $id }
pirate-bounty-console-flavor-left = Вперёд, на добычу, морские волки! Долой NT!
diff --git a/Resources/Locale/ru-RU/_NF/market/market-console-component.ftl b/Resources/Locale/ru-RU/_NF/market/market-console-component.ftl
index 85efd8b9e63..5ebf0b76c90 100644
--- a/Resources/Locale/ru-RU/_NF/market/market-console-component.ftl
+++ b/Resources/Locale/ru-RU/_NF/market/market-console-component.ftl
@@ -15,3 +15,4 @@ market-return-button = Удалить
market-search = Поиск товаров:
market-no-crate-machine-available = Нет доступных устройств для упаковки
market-insufficient-funds = Недостаточно средств
+market-no-cart-found = Отсутствует упаковочная машина
diff --git a/Resources/Locale/ru-RU/_NF/shuttles/console.ftl b/Resources/Locale/ru-RU/_NF/shuttles/console.ftl
index 1a5351babbf..6740eee75b3 100644
--- a/Resources/Locale/ru-RU/_NF/shuttles/console.ftl
+++ b/Resources/Locale/ru-RU/_NF/shuttles/console.ftl
@@ -1,3 +1,7 @@
shuttle-console-designation = Назначение:
shuttle-console-designation-unknown = Неизвестно
shuttle-console-maximum-iff-distance = Максимальная дистанция
+shuttle-console-iff-search = Поиск IFF
+shuttle-console-inertia-dampener-off = Дрейф
+shuttle-console-inertia-dampener-dampen = Ход
+shuttle-console-inertia-dampener-anchor = Стоп
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/shuttles/console.ftl b/Resources/Locale/ru-RU/shuttles/console.ftl
index 0fd0e43bbd1..52bab2148ca 100644
--- a/Resources/Locale/ru-RU/shuttles/console.ftl
+++ b/Resources/Locale/ru-RU/shuttles/console.ftl
@@ -14,7 +14,6 @@ shuttle-console-angular-velocity = Угловая скорость:
shuttle-console-unknown = Неизвестно
shuttle-console-iff-label = { $name } ({ $distance } м)
shuttle-console-exclusion = Зона отчуждения
-shuttle-console-iff-search = Поиск IFF
# Buttons
shuttle-console-strafing = Режим стрейфа
shuttle-console-nav-settings = Настройки
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/security.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/security.ftl
index c8ce534fc03..e4323ee78b8 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/security.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/security.ftl
@@ -4,9 +4,9 @@ ent-LockerMercenaryFilled = { ent-LockerMercenary }
ent-LockerNfsdSilverDetectiveFilled = { ent-LockerDetectiveFilled }
.suffix = Заполненный
.desc = { ent-LockerDetectiveFilled.desc }
-ent-GunSafeTurrets = turret safe
+ent-GunSafeTurrets = сейф с турелью
.suffix = ДСБФ, Заполненный
.desc = { ent-GunSafe.desc }
-ent-GunSafeTurretsCdet = turret safe
+ent-GunSafeTurretsCdet = сейф с турелью
.suffix = АКЭТ, Заполненный
.desc = { ent-GunSafe.desc }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/suit_storage_wallmount.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/suit_storage_wallmount.ftl
index 89c66e5e21d..10535e3489d 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/suit_storage_wallmount.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/catalog/fills/lockers/suit_storage_wallmount.ftl
@@ -1,78 +1,117 @@
ent-SuitStorageWallmountParamedic = { ent-SuitStorageParamedic }
.desc = { ent-SuitStorageParamedic.desc }
+ .suffix = Парамедик
ent-SuitStorageWallmountHydro = { ent-SuitStorageHydro }
.desc = { ent-SuitStorageHydro.desc }
+ .suffix = Ботаник
ent-SuitStorageWallmountQuartermaster = { ent-SuitStorageQuartermaster }
.desc = { ent-SuitStorageQuartermaster.desc }
+ .suffix = Квартирмейстер
ent-SuitStorageWallmountGoblin = { ent-SuitStorageGoblin }
- .desc = { ent-SuitStorageGoblin.desc }
+ .desc = { ent-SuitStorageGoblin.desc }
+ .suffix = Гоблин
ent-SuitStorageWallmountMining = { ent-SuitStorageMining }
.desc = { ent-SuitStorageMining.desc }
+ .suffix = Шахтёр
ent-SuitStorageWallmountMercenary = { ent-SuitStorageMercenary }
.desc = { ent-SuitStorageMercenary.desc }
+ .suffix = Наёмник
ent-SuitStorageWallmountScaf = { ent-SuitStorageScaf }
.desc = { ent-SuitStorageScaf.desc }
+ .suffix = Скуфандр
ent-SuitStorageWallmountPilot = { ent-SuitStoragePilot }
.desc = { ent-SuitStoragePilot.desc }
+ .suffix = Пилот
ent-SuitStorageWallmountEVA = { ent-SuitStorageEVA }
.desc = { ent-SuitStorageEVA.desc }
+ .suffix = Базовый
ent-SuitStorageWallmountEVAAlternate = { ent-SuitStorageEVAAlternate }
.desc = { ent-SuitStorageEVAAlternate.desc }
+ .suffix = Базовый
ent-SuitStorageWallmountEVAEmergency = { ent-SuitStorageEVAEmergency }
.desc = { ent-SuitStorageEVAEmergency.desc }
+ .suffix = Экстренный
ent-SuitStorageWallmountEVAPrisoner = { ent-SuitStorageEVAPrisoner }
.desc = { ent-SuitStorageEVAPrisoner.desc }
+ .suffix = Заключённый
ent-SuitStorageWallmountEVASyndicate = { ent-SuitStorageEVASyndicate }
.desc = { ent-SuitStorageEVASyndicate.desc }
+ .suffix = Синдикат
ent-SuitStorageWallmountEVAPirate = { ent-SuitStorageEVAPirate }
.desc = { ent-SuitStorageEVAPirate.desc }
+ .suffix = Пират
ent-SuitStorageWallmountNTSRA = { ent-SuitStorageNTSRA }
.desc = { ent-SuitStorageNTSRA.desc }
+ .suffix = Пустотный
ent-SuitStorageWallmountBasic = { ent-SuitStorageBasic }
.desc = { ent-SuitStorageBasic.desc }
+ .suffix = Базовый
ent-SuitStorageWallmountEngi = { ent-SuitStorageEngi }
.desc = { ent-SuitStorageEngi.desc }
+ .suffix = Инженер
ent-SuitStorageWallmountAtmos = { ent-SuitStorageAtmos }
.desc = { ent-SuitStorageAtmos.desc }
+ .suffix = Атмос
ent-SuitStorageWallmountSec = { ent-SuitStorageSec }
.desc = { ent-SuitStorageSec.desc }
+ .suffix = Служба Безопасности
ent-SuitStorageWallmountCE = { ent-SuitStorageCE }
.desc = { ent-SuitStorageCE.desc }
+ .suffix = Старший Инженер
ent-SuitStorageWallmountCMO = { ent-SuitStorageCMO }
.desc = { ent-SuitStorageCMO.desc }
+ .suffix = Старший Врач
ent-SuitStorageWallmountRD = { ent-SuitStorageRD }
.desc = { ent-SuitStorageRD.desc }
+ .suffix = Научный Руководитель
ent-SuitStorageWallmountHOS = { ent-SuitStorageHOS }
.desc = { ent-SuitStorageHOS.desc }
+ .suffix = ГСБ
ent-SuitStorageWallmountWarden = { ent-SuitStorageWarden }
.desc = { ent-SuitStorageWarden.desc }
+ .suffix = Смотритель
ent-SuitStorageWallmountCaptain = { ent-SuitStorageCaptain }
.desc = { ent-SuitStorageCaptain.desc }
+ .suffix = Капитан
ent-SuitStorageWallmountSalv = { ent-SuitStorageSalv }
.desc = { ent-SuitStorageSalv.desc }
+ .suffix = Утилизатор
ent-SuitStorageWallmountSyndie = { ent-SuitStorageSyndie }
.desc = { ent-SuitStorageSyndie.desc }
+ .suffix = Синдикат
ent-SuitStorageWallmountPirateCap = { ent-SuitStoragePirateCap }
.desc = { ent-SuitStoragePirateCap.desc }
+ .suffix = Пиратский капитан
ent-SuitStorageWallmountWizard = { ent-SuitStorageWizard }
+ .suffix = Волшебник
.desc = { ent-SuitStorageWizard.desc }
ent-SuitStorageWallmountClown = { ent-SuitStorageClown }
.desc = { ent-SuitStorageClown.desc }
+ .suffix = Клоун
ent-SuitStorageWallmountCadet = { ent-SuitStorageCadet }
.desc = { ent-SuitStorageCadet.desc }
+ .suffix = Кадет
ent-SuitStorageWallmountDeputy = { ent-SuitStorageDeputy }
.desc = { ent-SuitStorageDeputy.desc }
+ .suffix = Сержант
ent-SuitStorageWallmountBrigmedic = { ent-SuitStorageBrigmedic }
.desc = { ent-SuitStorageBrigmedic.desc }
+ .suffix = Коронер
ent-SuitStorageWallmountSergeant = { ent-SuitStorageSergeant }
.desc = { ent-SuitStorageSergeant.desc }
+ .suffix = Сержант
ent-SuitStorageWallmountBailiff = { ent-SuitStorageBailiff }
.desc = { ent-SuitStorageBailiff.desc }
+ .suffix = Бейлиф
ent-SuitStorageWallmountSheriff = { ent-SuitStorageSheriff }
.desc = { ent-SuitStorageSheriff.desc }
+ .suffix = Шериф
ent-SuitStorageWallmountNfsdCombat = { ent-SuitStorageNfsdCombat }
.desc = { ent-SuitStorageNfsdCombat.desc }
+ .suffix = Боевой
ent-SuitStorageWallmountNfsdCommand = { ent-SuitStorageNfsdCommand }
.desc = { ent-SuitStorageNfsdCommand.desc }
+ .suffix = Командный
ent-SuitStorageWallmountMailCarrier = { ent-SuitStorageMailCarrier }
.desc = { ent-SuitStorageMailCarrier.desc }
+ .suffix = Почтальон
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/objects/devices/flatpacks.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/objects/devices/flatpacks.ftl
index fa40a351f2d..19b60fbb9ef 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/objects/devices/flatpacks.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/objects/devices/flatpacks.ftl
@@ -144,7 +144,7 @@ ent-DawInstrumentFlatpack = упакованная цифровая звуков
.desc = Упаковка, содержащая цифровую звуковую рабочую станцию.
ent-NfsdTechFabFlatpack = упакованный техфаб ДСБФ
.desc = Упаковка, содержащая техфаб ДСБФ.
-ent-JukeboxFlatpack = упакованныемузыкальный аппарат
+ent-JukeboxFlatpack = упакованный музыкальный аппарат
.desc = Упаковка, при помощи которой можно создать музыкальный аппарат.
ent-HoverbikeFlatpack = упакованный ховербайк
.desc = Упаковка, содержащая ховербайк. Ключи в комплекте.
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/atm.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/atm.ftl
index cce1b2a681b..bd5e9655d93 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/atm.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/atm.ftl
@@ -11,7 +11,7 @@ ent-ComputerWithdrawBankATM = { ent-ComputerBankATMWithdraw }
ent-ComputerWallmountBankATM = { ent-ComputerBankATMDeposit }
.suffix = Настенный
.desc = { ent-ComputerBankATMDeposit.desc }
-ent-ComputerWallmountWithdrawBankATM = { ent-ComputerBankATMBase }
+ent-ComputerWallmountWithdrawBankATM = банкомат
.suffix = Настенный
.desc = { ent-ComputerBankATMWithdraw.desc }
ent-ComputerBlackMarketBankATM = { ent-ComputerBankATMDeposit }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_nfsd.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_nfsd.ftl
index 3151ff07fb1..536f9e12844 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_nfsd.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_nfsd.ftl
@@ -10,6 +10,6 @@ ent-GyroscopeNfsd = { ent-GyroscopeSecurity }
ent-DebugGyroscopeNfsd = { ent-DebugGyroscopeSecurity }
.suffix = ДЕБАГ, ДСБФ
.desc = { ent-DebugGyroscopeSecurity.desc }
-ent-SmallGyroscopeNfsd = small gyroscope
+ent-SmallGyroscopeNfsd = малый гироскоп
.suffix = ДСБФ
.desc = { ent-SmallGyroscopeSecurity.desc }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_security.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_security.ftl
index 0d9ba6818de..7dfc65554e0 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_security.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/shuttles/thrusters_security.ftl
@@ -1,15 +1,15 @@
-ent-ThrusterSecurity = thruster
+ent-ThrusterSecurity = двигатель
.suffix = Охрана
.desc = { ent-Thruster.desc }
-ent-DebugThrusterSecurity = thruster
+ent-DebugThrusterSecurity = двигатель
.suffix = ДЕБАГ, Охрана
.desc = { ent-DebugThruster.desc }
ent-GyroscopeSecurity = { ent-Gyroscope }
.suffix = Охрана
.desc = { ent-Gyroscope.desc }
-ent-DebugGyroscopeSecurity = gyroscope
+ent-DebugGyroscopeSecurity = гироскоп
.suffix = ДЕБАГ, Охрана
.desc = { ent-DebugGyroscope.desc }
-ent-SmallGyroscopeSecurity = small gyroscope
+ent-SmallGyroscopeSecurity = малый гироскоп
.suffix = Охрана
.desc = { ent-GyroscopeSecurity.desc }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/specific/dinosaurs.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/specific/dinosaurs.ftl
index d77cec75b5a..7cd257a2798 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/specific/dinosaurs.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_nf/entities/structures/specific/dinosaurs.ftl
@@ -1,2 +1,2 @@
-ent-DinosaurEgg = яйцо динозаврв
+ent-DinosaurEgg = яйцо динозавра
.desc = Больше похоже на окаменелость, чем на яйцо.
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/vending.yml b/Resources/Prototypes/Catalog/Fills/Crates/vending.yml
index 49719a8f079..f24c547366f 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/vending.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/vending.yml
@@ -45,7 +45,7 @@
- type: entity
id: CrateVendingMachineRestockCondimentStationFilled
parent: CratePlasticBiodegradable # Frontier
- name: condiment station restock crate
+ name: ящик пополнения Островок соусов
description: Contains a restock box for the condiment station.
components:
- type: StorageFill
diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/signs.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/signs.yml
index 42023ab7108..243cd1a22fc 100644
--- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/signs.yml
+++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/signs.yml
@@ -28,7 +28,6 @@
- type: Sprite
sprite: Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi
state: icon
- offset: "0.5,0"
- type: entity
parent: BaseSign
diff --git a/Resources/Prototypes/_NF/Shipyard/base.yml b/Resources/Prototypes/_NF/Shipyard/base.yml
index 88f4afbe9a1..20561f5155f 100644
--- a/Resources/Prototypes/_NF/Shipyard/base.yml
+++ b/Resources/Prototypes/_NF/Shipyard/base.yml
@@ -11,6 +11,7 @@
- BaseStationEmpImmune
- BaseStationSectorNews
- BaseStationSectorServices # Hosts all sector-wide services
+ - BaseStationDampening
noSpawn: true
components:
- type: Transform
@@ -22,6 +23,7 @@
- BaseStationJobsSpawning
- BaseStationCargo
- BaseStationSiliconLawFrontierShips
+ - BaseStationDampening
noSpawn: true
components:
- type: Transform
@@ -36,6 +38,7 @@
- BaseStationShuttles # Can spawn shuttles via shipyard consoles
- BaseStationAlertLevels # Has a comms console
- BaseStationSiliconLawFrontierStation # No funny borg laws
+ - BaseStationDampening
noSpawn: true
components:
- type: Transform
@@ -48,6 +51,7 @@
- BaseStationCargo
- BaseStationSiliconLawFrontierShips # TODO: change this with pirate borgs?
- BaseStationRecords
+ - BaseStationDampening
noSpawn: true
components:
- type: Transform
@@ -160,3 +164,9 @@
abstract: true
components:
- type: StationSectorServiceHost
+
+- type: entity
+ id: BaseStationDampening
+ abstract: true
+ components:
+ - type: StationDampening
diff --git a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json
index b612633d44f..98548692d45 100644
--- a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json
+++ b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json
@@ -13,6 +13,10 @@
{
"name": "equipped-EARS",
"directions": 4
+ },
+ {
+ "name": "equipped-EARS-cat",
+ "directions": 4
}
]
}
diff --git a/Resources/Textures/Clothing/Head/Hardsuits/brigmedic.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/brigmedic.rsi/meta.json
index e4a3096a67f..7f118a00371 100644
--- a/Resources/Textures/Clothing/Head/Hardsuits/brigmedic.rsi/meta.json
+++ b/Resources/Textures/Clothing/Head/Hardsuits/brigmedic.rsi/meta.json
@@ -17,6 +17,10 @@
"name": "off-equipped-HELMET",
"directions": 4
},
+ {
+ "name": "off-equipped-HELMET-vulpkanin",
+ "directions": 4
+ },
{
"name": "off-inhand-left",
"directions": 4
@@ -29,6 +33,10 @@
"name": "on-equipped-HELMET",
"directions": 4
},
+ {
+ "name": "on-equipped-HELMET-vulpkanin",
+ "directions": 4
+ },
{
"name": "on-inhand-left",
"directions": 4
diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET-vox.png
deleted file mode 100644
index f02e33c6584..00000000000
Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET-vox.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET.png
deleted file mode 100644
index 656bd2f3c8f..00000000000
Binary files a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/equipped-HELMET.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/chefhat.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/chefhat.rsi/meta.json
index ade65863af2..3ba9d51d7ad 100644
--- a/Resources/Textures/Clothing/Head/Hats/chefhat.rsi/meta.json
+++ b/Resources/Textures/Clothing/Head/Hats/chefhat.rsi/meta.json
@@ -14,6 +14,10 @@
"name": "equipped-HELMET",
"directions": 4
},
+ {
+ "name": "equipped-HELMET-cat",
+ "directions": 4
+ },
{
"name": "equipped-HELMET-hamster",
"directions": 4
diff --git a/Resources/Textures/Clothing/Head/Hats/pirate.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/pirate.rsi/meta.json
index a470e009443..8d9423a507c 100644
--- a/Resources/Textures/Clothing/Head/Hats/pirate.rsi/meta.json
+++ b/Resources/Textures/Clothing/Head/Hats/pirate.rsi/meta.json
@@ -14,6 +14,10 @@
"name": "equipped-HELMET",
"directions": 4
},
+ {
+ "name": "equipped-HELMET-cat",
+ "directions": 4
+ },
{
"name": "inhand-left",
"directions": 4
diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/detective.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Coats/detective.rsi/meta.json
index ffd6c2a5d41..d70e3dcb229 100644
--- a/Resources/Textures/Clothing/OuterClothing/Coats/detective.rsi/meta.json
+++ b/Resources/Textures/Clothing/OuterClothing/Coats/detective.rsi/meta.json
@@ -14,6 +14,10 @@
"name": "equipped-OUTERCLOTHING",
"directions": 4
},
+ {
+ "name": "equipped-OUTERCLOTHING-vox",
+ "directions": 4
+ },
{
"name": "inhand-left",
"directions": 4
diff --git a/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/icon.png b/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/icon.png
index 1432ae6e8ac..bcf5aad17b8 100644
Binary files a/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/icon.png differ
diff --git a/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/meta.json b/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/meta.json
index 53c59f9feb8..28a68592b7a 100644
--- a/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/meta.json
+++ b/Resources/Textures/Nyanotrasen/Structures/Wallmounts/conspiracy_board.rsi/meta.json
@@ -1,9 +1,9 @@
{
"version": 1,
"license": "CC-BY-SA-4.0",
- "copyright": "Huvy",
+ "copyright": "Resprite created by sonicdc",
"size": {
- "x": 64,
+ "x": 32,
"y": 32
},
"states": [
diff --git a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/assembly.png b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/assembly.png
index 3556cb67049..e3268827614 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/assembly.png and b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/assembly.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closed.png b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closed.png
index 24b76c669b1..544060f5548 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closed.png and b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closed.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closing.png b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closing.png
index fd245abf716..4d72ea459d2 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closing.png and b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/closing.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/open.png b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/open.png
index ceb3e709bad..2711f9b1868 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/open.png and b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/open.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/opening.png b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/opening.png
index a5761fe2588..c730ea00648 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/opening.png and b/Resources/Textures/Structures/Doors/Windoors/plasma.rsi/opening.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/assembly.png b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/assembly.png
index e9a71136626..d6d6554c2c2 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/assembly.png and b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/assembly.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closed.png b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closed.png
index d8ee0cc068d..e299f9d63df 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closed.png and b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closed.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closing.png b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closing.png
index bc90e8fb234..600b8afc29b 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closing.png and b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/closing.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/open.png b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/open.png
index 7d3efaaa73a..7b6ad9a783e 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/open.png and b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/open.png differ
diff --git a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/opening.png b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/opening.png
index b06847f1c22..b679e55002d 100644
Binary files a/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/opening.png and b/Resources/Textures/Structures/Doors/Windoors/uranium.rsi/opening.png differ
diff --git a/Resources/Textures/Structures/Storage/closet.rsi/representative_door.png b/Resources/Textures/Structures/Storage/closet.rsi/representative_door.png
index 474cf1ba272..ec7a67746ca 100644
Binary files a/Resources/Textures/Structures/Storage/closet.rsi/representative_door.png and b/Resources/Textures/Structures/Storage/closet.rsi/representative_door.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/barsign.rsi/corvax_alcoholic.png b/Resources/Textures/Structures/Wallmounts/barsign.rsi/corvax_alcoholic.png
deleted file mode 100644
index 7ad385b8fa9..00000000000
Binary files a/Resources/Textures/Structures/Wallmounts/barsign.rsi/corvax_alcoholic.png and /dev/null differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/assembly.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/assembly.png
index ea1b5e674cf..37c7af6a5c6 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/assembly.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/assembly.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_open_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_open_unlit.png
new file mode 100644
index 00000000000..f69f2a124e9
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_open_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_unlit.png
index 82f56d9ee10..9a57e2c1b2f 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/bolted_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed.png
index 5d7b12722fb..a5237bf5ed7 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed_unlit.png
index b9b3624c92a..a1168e19653 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closed_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing.png
index 48cb579967d..1148433a56a 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing_unlit.png
index 558523ab816..4c6edcfdbe6 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/closing_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/deny_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/deny_unlit.png
index e3024f67623..741589c6961 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/deny_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/deny_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_open_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_open_unlit.png
new file mode 100644
index 00000000000..0b3ace14108
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_open_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_unlit.png
index e5887f0be2e..36daac76c4a 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/emergency_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/meta.json b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/meta.json
index f260f496e20..0475b8542e1 100644
--- a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/meta.json
+++ b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/master/icons/obj/doors/airlocks/cult/runed/cult.dmi and adapted for New Frontier by erhardsteinhauer (discord/github)",
+ "copyright": "Resprite created by karmen4ik",
"size": {
"x": 32,
"y": 32
@@ -13,12 +13,18 @@
{
"name": "bolted_unlit"
},
+ {
+ "name": "bolted_open_unlit"
+ },
{
"name": "closed"
},
{
"name": "closed_unlit"
},
+ {
+ "name": "open_unlit"
+ },
{
"name": "closing",
"delays": [
@@ -53,18 +59,12 @@
0.1,
0.1,
0.1,
- 0.1,
0.1
]
]
},
{
- "name": "open",
- "delays": [
- [
- 1
- ]
- ]
+ "name": "open"
},
{
"name": "opening",
@@ -106,12 +106,7 @@
]
},
{
- "name": "panel_open",
- "delays": [
- [
- 1
- ]
- ]
+ "name": "panel_closed"
},
{
"name": "panel_opening",
@@ -126,6 +121,10 @@
]
]
},
+
+ {
+ "name": "panel_open"
+ },
{
"name": "sparks",
"delays": [
@@ -148,7 +147,8 @@
0.1,
0.1,
0.1,
- 0.1
+ 0.1,
+ 1.7
]
]
},
@@ -161,8 +161,7 @@
0.1,
0.1,
0.1,
- 0.1,
- 1.7
+ 0.1
]
]
},
@@ -186,10 +185,13 @@
"name": "emergency_unlit",
"delays": [
[
- 0.4,
- 0.4
+ 1.2,
+ 1.2
]
]
+ },
+ {
+ "name": "emergency_open_unlit"
}
]
}
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open.png
index 92c2f27a09a..b98cf53f9f8 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open_unlit.png
new file mode 100644
index 00000000000..810a46ad208
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/open_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening.png
index 1a831cd3424..9ff61cde7f7 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening_unlit.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening_unlit.png
index c55f72942b0..787e869bda6 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening_unlit.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/opening_unlit.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closed.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closed.png
new file mode 100644
index 00000000000..4c59d3a28cc
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closed.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closing.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closing.png
index db7be0bc4a0..140be67d320 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closing.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_closing.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_open.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_open.png
index 24eb2aedc22..c41e1484ee8 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_open.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_open.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_opening.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_opening.png
index fc90acd637a..c25bc776c68 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_opening.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/panel_opening.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks.png
index 73a36c22dad..186d38f0d1f 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_broken.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_broken.png
index fb5d774588a..4b58c64673e 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_broken.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_broken.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_damaged.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_damaged.png
index f16a028dee5..9b919ed4042 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_damaged.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_damaged.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_open.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_open.png
index 630eabb976e..deabe407f15 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_open.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/sparks_open.png differ
diff --git a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/welded.png b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/welded.png
index a0040dfdc73..85f179f2e08 100644
Binary files a/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/welded.png and b/Resources/Textures/_NF/Structures/Specific/BloodCult/airlock.rsi/welded.png differ
diff --git a/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor.png b/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor.png
index 1cacc7b127c..0d910f1c1d4 100644
Binary files a/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor.png and b/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor.png differ
diff --git a/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor_door.png b/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor_door.png
index 575b90fd359..26abde737db 100644
Binary files a/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor_door.png and b/Resources/Textures/_NF/Structures/Storage/closet.rsi/janitor_door.png differ
diff --git a/Resources/Textures/_NF/Structures/Storage/closet.rsi/mercenary_door.png b/Resources/Textures/_NF/Structures/Storage/closet.rsi/mercenary_door.png
index 14a70c1aa6a..b35dfda56bc 100644
Binary files a/Resources/Textures/_NF/Structures/Storage/closet.rsi/mercenary_door.png and b/Resources/Textures/_NF/Structures/Storage/closet.rsi/mercenary_door.png differ
diff --git a/Resources/Textures/_NF/Structures/Storage/closet.rsi/pilot_door.png b/Resources/Textures/_NF/Structures/Storage/closet.rsi/pilot_door.png
index 3430dbe59a6..3ce791ce925 100644
Binary files a/Resources/Textures/_NF/Structures/Storage/closet.rsi/pilot_door.png and b/Resources/Textures/_NF/Structures/Storage/closet.rsi/pilot_door.png differ