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