From 2d1ceaf95d9006bc771fc412093c0229735f9bc6 Mon Sep 17 00:00:00 2001 From: v6st Date: Tue, 13 Jan 2026 12:37:06 +0300 Subject: [PATCH 01/12] radarBlipBlipBlip --- .../Shuttles/UI/ShuttleNavControl.xaml.cs | 71 +++++++++++-------- .../FireControl/UI/FireControlNavControl.cs | 3 +- Content.Client/_NF/Radar/RadarBlipSystem.cs | 33 ++++----- .../_NF/Shuttles/UI/ShuttleNavControl.xaml.cs | 48 +++++++++++++ Content.Server/_NF/Radar/RadarBlipSystem.cs | 30 ++++++-- Content.Shared/_NF/Radar/RadarMessages.cs | 8 +-- .../Machines/Computers/computers.yml | 10 +-- .../SpaceArtillery/Ballistic/projectiles.yml | 7 ++ .../SpaceArtillery/Energy/projectiles.yml | 9 +++ .../SpaceArtillery/Kinetic/projectiles.yml | 11 +++ .../SpaceArtillery/Missile/mpssm.yml | 2 + .../SpaceArtillery/Missile/projectiles.yml | 5 ++ .../Machines/FireControl/gunnery.yml | 4 +- 13 files changed, 177 insertions(+), 64 deletions(-) diff --git a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs index ed38e6dcacd3..2e0886572445 100644 --- a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs +++ b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs @@ -56,7 +56,8 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl private List> _grids = new(); - public ShuttleNavControl() : base(64f, 256f, 256f) + // Forge-change: up distance for ship fights + public ShuttleNavControl() : base(64f, 512f, 512f) { RobustXamlLoader.Load(this); _shuttles = EntManager.System(); @@ -444,6 +445,7 @@ protected override void Draw(DrawingHandleScreen handle) // Draw all blips on the map at this point. NFDrawBlips(handle, blipDataList); // End Frontier: draw target + DrawShields(handle, xform, worldToShuttle); // Forge-change // If we've set the controlling console, and it's on a different grid // to the shuttle itself, then draw an additional marker to help the @@ -468,44 +470,55 @@ protected override void Draw(DrawingHandleScreen handle) handle.DrawLine(origin, origin + angle.ToVec() * ScaledMinimapRadius * 1.42f, Color.Red.WithAlpha(0.1f)); // Get raw blips with grid information - var rawBlips = _blips.GetRawBlips(); + var rawBlips = _blips.GetCurrentBlips(); // Forge-change // Prepare view bounds for culling var blipViewBounds = new Box2(-3f, -3f, Size.X + 3f, Size.Y + 3f); // Draw blips using the same grid-relative transformation approach as docks - foreach (var blip in rawBlips) - { - Vector2 blipPosInView; - - // Handle differently based on if there's a grid - if (blip.Grid == null) - { - // For world-space blips without a grid, use standard world transformation - blipPosInView = Vector2.Transform(blip.Position, worldToShuttle * shuttleToView); - } - else if (EntManager.TryGetEntity(blip.Grid, out var gridEntity)) - { - // For grid-relative blips, transform using the grid's transform - var gridToWorld = _transform.GetWorldMatrix(gridEntity.Value); - var gridToView = gridToWorld * worldToShuttle * shuttleToView; - - // Transform the grid-local position - blipPosInView = Vector2.Transform(blip.Position, gridToView); - } - else - { - // Skip blips with invalid grid references - continue; - } + // foreach (var blip in rawBlips) + // { + // Vector2 blipPosInView; + + // // Handle differently based on if there's a grid + // if (blip.Grid == null) + // { + // // For world-space blips without a grid, use standard world transformation + // blipPosInView = Vector2.Transform(blip.Position, worldToShuttle * shuttleToView); + // } + // else if (EntManager.TryGetEntity(blip.Grid, out var gridEntity)) + // { + // // For grid-relative blips, transform using the grid's transform + // var gridToWorld = _transform.GetWorldMatrix(gridEntity.Value); + // var gridToView = gridToWorld * worldToShuttle * shuttleToView; + + // // Transform the grid-local position + // blipPosInView = Vector2.Transform(blip.Position, gridToView); + // } + // else + // { + // // Skip blips with invalid grid references + // continue; + // } + + // // Check if this blip is within view bounds before drawing + // if (blipViewBounds.Contains(blipPosInView)) + // { + // DrawBlipShape(handle, blipPosInView, blip.Scale * 3f, blip.Color.WithAlpha(0.8f), blip.Shape); + // } + // } + // End Frontier - // Check if this blip is within view bounds before drawing + // Forge-change + foreach (var (position, scale, color, shape) in rawBlips) + { + var blipPosInView = Vector2.Transform(position, worldToShuttle * shuttleToView); if (blipViewBounds.Contains(blipPosInView)) { - DrawBlipShape(handle, blipPosInView, blip.Scale * 3f, blip.Color.WithAlpha(0.8f), blip.Shape); + DrawBlipShape(handle, blipPosInView, scale * 3f, color.WithAlpha(0.8f), shape); } } - // End Frontier + // Forge-change end } private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3x2 gridToView) diff --git a/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs b/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs index a445e5251e3c..c18c9ffca8b0 100644 --- a/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs +++ b/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs @@ -67,7 +67,8 @@ public sealed class FireControlNavControl : BaseShuttleControl private float _lastCursorUpdateTime = 0f; private const float CursorUpdateInterval = 0.1f; // 10 updates per second - public FireControlNavControl() : base(64f, 768f, 768f) + // Forge-change: 512>768 + public FireControlNavControl() : base(64f, 512f, 512f) { IoCManager.InjectDependencies(this); _shuttles = EntManager.System(); diff --git a/Content.Client/_NF/Radar/RadarBlipSystem.cs b/Content.Client/_NF/Radar/RadarBlipSystem.cs index c033cd86b648..2327e166dd07 100644 --- a/Content.Client/_NF/Radar/RadarBlipSystem.cs +++ b/Content.Client/_NF/Radar/RadarBlipSystem.cs @@ -15,7 +15,7 @@ public sealed partial class RadarBlipSystem : EntitySystem { private const double BlipStaleSeconds = 3.0; private static readonly List<(Vector2, float, Color, RadarBlipShape)> EmptyBlipList = new(); - private static readonly List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> EmptyRawBlipList = new(); + private static readonly List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> EmptyRawBlipList = new(); private static readonly List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> EmptyHitscanList = new(); private TimeSpan _lastRequestTime = TimeSpan.Zero; private static readonly TimeSpan RequestThrottle = TimeSpan.FromMilliseconds(250); @@ -27,7 +27,7 @@ public sealed partial class RadarBlipSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _xform = default!; private TimeSpan _lastUpdatedTime; - private List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> _blips = new(); + private List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> _blips = new(); private List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> _hitscans = new(); private Vector2 _radarWorldPosition; @@ -106,17 +106,8 @@ public void RequestBlips(EntityUid console) if (blip.Grid == null) { worldPosition = blip.Position; - - // Distance culling for world position blips - if (Vector2.DistanceSquared(worldPosition, _radarWorldPosition) > MaxBlipRenderDistance * MaxBlipRenderDistance) - continue; - - result.Add((worldPosition, blip.Scale, blip.Color, blip.Shape)); - continue; } - - // If grid exists, transform from grid-local to world coordinates - if (TryGetEntity(blip.Grid, out var gridEntity)) + else if (TryGetEntity(blip.Grid, out var gridEntity)) { // Transform the grid-local position to world position var worldPos = _xform.GetWorldPosition(gridEntity.Value); @@ -125,13 +116,17 @@ public void RequestBlips(EntityUid console) // Rotate the local position by grid rotation and add grid position var rotatedLocalPos = gridRot.RotateVec(blip.Position); worldPosition = worldPos + rotatedLocalPos; + } + else + { + continue; + } - // Distance culling for grid position blips - if (Vector2.DistanceSquared(worldPosition, _radarWorldPosition) > MaxBlipRenderDistance * MaxBlipRenderDistance) - continue; + worldPosition += blip.Velocity * (float)(_timing.CurTime - _lastUpdatedTime).TotalSeconds; - result.Add((worldPosition, blip.Scale, blip.Color, blip.Shape)); - } + if (Vector2.DistanceSquared(worldPosition, _radarWorldPosition) > MaxBlipRenderDistance * MaxBlipRenderDistance) + continue; + result.Add((worldPosition, blip.Scale, blip.Color, blip.Shape)); } return result; } @@ -139,7 +134,7 @@ public void RequestBlips(EntityUid console) /// /// Gets the raw blips data which includes grid information for more accurate rendering. /// - public List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> GetRawBlips() + public List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> GetRawBlips() { if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) return EmptyRawBlipList; @@ -148,7 +143,7 @@ public void RequestBlips(EntityUid console) if (_blips.Count == 0) return _blips; - var filteredBlips = new List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)>(_blips.Count); + var filteredBlips = new List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)>(_blips.Count); foreach (var blip in _blips) { diff --git a/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs index 6a15e0305ab1..da74a14f557b 100644 --- a/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs +++ b/Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs @@ -11,6 +11,9 @@ using Content.Shared._NF.Radar; using Content.Client.Station; using Content.Client._NF.Radar; +using Robust.Shared.Physics.Collision.Shapes; // Forge-change +using Content.Shared._Crescent.ShipShields; // Forge-change: we need to shield visuals +using Robust.Shared.Physics; // Forge-change // Purposefully colliding with base namespace. namespace Content.Client.Shuttles.UI; @@ -331,4 +334,49 @@ private void DrawArrow(DrawingHandleScreen handle, Vector2 position, float size, handle.DrawPrimitives(DrawPrimitiveTopology.TriangleFan, vertices, color); } + // Forge-change start + private void DrawShields(DrawingHandleScreen handle, TransformComponent consoleXform, Matrix3x2 matrix) + { + var shields = EntManager.AllEntityQueryEnumerator(); + while (shields.MoveNext(out var uid, out var visuals, out var fixtures, out var xform)) + { + if (!EntManager.TryGetComponent(xform.GridUid, out var parentXform)) + continue; + + if (xform.MapID != consoleXform.MapID) + continue; + + // Don't draw shields when in FTL + if (EntManager.HasComponent(parentXform.Owner)) + continue; + + var shieldFixture = fixtures.Fixtures.TryGetValue("shield", out var fixture) ? fixture : null; + + if (shieldFixture == null || shieldFixture.Shape is not ChainShape) + continue; + + ChainShape chain = (ChainShape) shieldFixture.Shape; + + var count = chain.Count; + var verticies = chain.Vertices; + + var center = xform.LocalPosition; + + for (int i = 1; i < count; i++) + { + var v1 = Vector2.Add(center, verticies[i - 1]); + v1 = Vector2.Transform(v1, parentXform.WorldMatrix); // transform to world matrix + v1 = Vector2.Transform(v1, matrix); // get back to local matrix for drawing + v1.Y = -v1.Y; + v1 = ScalePosition(v1); + var v2 = Vector2.Add(center, verticies[i]); + v2 = Vector2.Transform(v2, parentXform.WorldMatrix); + v2 = Vector2.Transform(v2, matrix); + v2.Y = -v2.Y; + v2 = ScalePosition(v2); + handle.DrawLine(v1, v2, visuals.ShieldColor); + } + } + } + // Forge-change end } diff --git a/Content.Server/_NF/Radar/RadarBlipSystem.cs b/Content.Server/_NF/Radar/RadarBlipSystem.cs index 05d06fbe4d31..c81a7d9d1b44 100644 --- a/Content.Server/_NF/Radar/RadarBlipSystem.cs +++ b/Content.Server/_NF/Radar/RadarBlipSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Shuttles.Components; using Robust.Shared.Network; using Robust.Shared.Timing; +using Robust.Shared.Physics.Components; // Forge-change namespace Content.Server._NF.Radar; @@ -23,7 +24,7 @@ public sealed partial class RadarBlipSystem : SharedRadarBlipSystem private Dictionary _nextBlipRequestPerUser = new(); // The minimum amount of time between handled blip requests. - private static readonly TimeSpan MinRequestPeriod = TimeSpan.FromSeconds(1); + private static readonly TimeSpan MinRequestPeriod = TimeSpan.FromMilliseconds(250); // Forge-change // Maximum distance for blips to be considered visible private const float MaxBlipRenderDistance = 300f; @@ -68,9 +69,9 @@ public void OnRoundRestart(RoundRestartCleanupEvent ev) /// /// Assembles a list of radar blips visible to the given radar console. /// - private List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> AssembleBlipsReport(Entity ent) + private List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> AssembleBlipsReport(Entity ent) // Forge-change: add Velocity { - var blips = new List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)>(); + var blips = new List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)>(); // Forge-change: add Velocity if (!TryComp(ent, out TransformComponent? radarXform)) return blips; @@ -122,13 +123,32 @@ public void OnRoundRestart(RoundRestartCleanupEvent ev) } // Convert blip position to grid coords if needed. + // NetEntity? blipNetGrid = null; + // if (blipGrid != null) + // { + // blipNetGrid = GetNetEntity(blipGrid.Value); + // blipPosition = Vector2.Transform(blipPosition, _xform.GetInvWorldMatrix(blipGrid.Value)); + // } + NetEntity? blipNetGrid = null; - if (blipGrid != null) + // Forge-change start + Vector2 velocity = Vector2.Zero; + if (TryComp(blipUid, out var physics)) + { + velocity = physics.LinearVelocity; + } + + if (velocity != Vector2.Zero) + { + blipNetGrid = null; + } + else if (blipGrid != null) + // Forge-change end { blipNetGrid = GetNetEntity(blipGrid.Value); blipPosition = Vector2.Transform(blipPosition, _xform.GetInvWorldMatrix(blipGrid.Value)); } - blips.Add((blipNetGrid, blipPosition, blip.Scale, blip.RadarColor, blip.Shape)); + blips.Add((blipNetGrid, blipPosition, velocity, blip.Scale, blip.RadarColor, blip.Shape)); // Forge-change: add Velocity } return blips; } diff --git a/Content.Shared/_NF/Radar/RadarMessages.cs b/Content.Shared/_NF/Radar/RadarMessages.cs index e7c67b768b5e..ea0f4aba274e 100644 --- a/Content.Shared/_NF/Radar/RadarMessages.cs +++ b/Content.Shared/_NF/Radar/RadarMessages.cs @@ -39,7 +39,7 @@ public sealed class GiveBlipsEvent : EntityEventArgs /// If grid entity is null, position is in world coordinates. /// If grid entity is not null, position is in grid-local coordinates. /// - public readonly List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> Blips; + public readonly List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> Blips; // Forge-change: add Velocity /// /// Hitscan lines to display on the radar as (grid entity, start position, end position, thickness, color). @@ -54,7 +54,7 @@ public sealed class GiveBlipsEvent : EntityEventArgs /// List of blips as (position, scale, color). public GiveBlipsEvent(List<(Vector2, float, Color)> blips) { - Blips = blips.Select(b => ((NetEntity?)null, b.Item1, b.Item2, b.Item3, RadarBlipShape.Circle)).ToList(); + Blips = blips.Select(b => ((NetEntity?)null, Vector2.Zero, b.Item1, b.Item2, b.Item3, RadarBlipShape.Circle)).ToList(); // Forge-change HitscanLines = new(); } @@ -62,7 +62,7 @@ public GiveBlipsEvent(List<(Vector2, float, Color)> blips) /// Constructor for the full blip format. /// /// List of blips as (grid, position, scale, color, shape). - public GiveBlipsEvent(List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> blips) + public GiveBlipsEvent(List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> blips) // Forge-change: add Velocity { Blips = blips; HitscanLines = new(); @@ -74,7 +74,7 @@ public GiveBlipsEvent(List<(NetEntity? Grid, Vector2 Position, float Scale, Colo /// List of blips as (grid, position, scale, color, shape). /// List of hitscan lines as (grid, start, end, thickness, color). public GiveBlipsEvent( - List<(NetEntity? Grid, Vector2 Position, float Scale, Color Color, RadarBlipShape Shape)> blips, + List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> blips, // Forge-change: add Velocity List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> hitscans) { Blips = blips; diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 029c0ac4a20f..23ea4dc84414 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -132,7 +132,7 @@ type: WiresBoundUserInterface - type: RadarConsole - type: WorldLoader - radius: 256 + radius: 512 # Forge-change - type: PointLight radius: 1.5 energy: 1.6 @@ -197,6 +197,8 @@ key_slots: - EncryptionKeyTraffic # End Frontier + - type: RadarConsole # Forge-change + maxRange: 512 - type: entity parent: BaseComputerShuttle @@ -221,7 +223,7 @@ tags: - Syndicate - type: RadarConsole - maxRange: 384 + maxRange: 512 # Forge-change - type: WorldLoader radius: 1536 - type: PointLight @@ -254,7 +256,7 @@ components: - type: CargoShuttle - type: RadarConsole - maxRange: 256 + maxRange: 512 # Forge-change - type: PointLight radius: 1.5 energy: 1.6 @@ -868,7 +870,7 @@ - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] state: generic_panel_open - type: RadarConsole - maxRange: 256 # Frontier + maxRange: 512 # Forge-change maxIffRange: 512 # Frontier - type: ActivatableUI key: enum.RadarConsoleUiKey.Key diff --git a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml index 2a32e4577cd7..14dbc439f347 100644 --- a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml +++ b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml @@ -26,6 +26,7 @@ - type: RadarBlip scale: 0.85 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" @@ -93,6 +94,7 @@ requireNoGrid: true shape: arrow radarColor: "#1df1f5" + visibleFromOtherGrids: true - type: entity id: Forge30mmBulletAPHE @@ -152,6 +154,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" - type: TimedDespawn @@ -229,6 +232,7 @@ - type: RadarBlip scale: 1.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" - type: ExplodeOnTrigger @@ -329,6 +333,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.15 @@ -385,6 +390,7 @@ - type: RadarBlip scale: 3.25 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.15 @@ -440,6 +446,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.5 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml index f30f8fd1ce80..18ad58b02c87 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml @@ -37,6 +37,7 @@ radarColor: "#C92BCC" scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 6.6 @@ -76,6 +77,7 @@ radarColor: "#C92BCC" scale: 1.45 requireNoGrid: true + visibleFromOtherGrids: true shape: arrow - type: TimedDespawn lifetime: 4.2 @@ -121,6 +123,7 @@ radarColor: "#FF00AA" scale: 2.4 requireNoGrid: true + visibleFromOtherGrids: true shape: arrow - type: TimedDespawn lifetime: 24 @@ -160,6 +163,7 @@ radarColor: "#C92BCC" scale: 0.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5 @@ -194,6 +198,7 @@ radarColor: "#C92BCC" scale: 0.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 3 @@ -226,6 +231,7 @@ radarColor: "#035EFC" scale: 2 requireNoGrid: true + visibleFromOtherGrids: true shape: circle - type: TimedDespawn lifetime: 6.6 @@ -260,6 +266,7 @@ radarColor: "#C92BCC" scale: 3.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 10 @@ -302,6 +309,7 @@ radarColor: "#ffffff" scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 3 @@ -338,6 +346,7 @@ radarColor: "#9507fa" scale: 3 requireNoGrid: true + visibleFromOtherGrids: true shape: circle - type: TimedDespawn lifetime: 10 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml index c225421ee26d..c22a3600cf3b 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml @@ -35,6 +35,7 @@ radarColor: "#c51515" scale: 3 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 2.2 @@ -90,6 +91,7 @@ - type: RadarBlip scale: 0.85 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" @@ -145,6 +147,7 @@ - type: RadarBlip scale: 1.15 requireNoGrid: true + visibleFromOtherGrids: true shape: arrow radarColor: "#1df1f5" @@ -183,6 +186,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" - type: TimedDespawn @@ -233,6 +237,7 @@ - type: RadarBlip scale: 1.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" @@ -310,6 +315,7 @@ - type: RadarBlip scale: 3.25 requireNoGrid: true + visibleFromOtherGrids: true shape: arrow radarColor: "#f7dc0c" - type: TimedDespawn @@ -365,6 +371,7 @@ - type: RadarBlip scale: 3.25 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.15 @@ -420,6 +427,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.5 @@ -475,6 +483,7 @@ - type: RadarBlip scale: 2.5 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 5.15 @@ -531,6 +540,7 @@ - type: RadarBlip scale: 4.25 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 10 @@ -627,6 +637,7 @@ - type: RadarBlip scale: 3.25 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 6 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml index ad8d6768ffa8..92f8b1e96509 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml @@ -28,6 +28,7 @@ radarColor: "#FCBA03" scale: 1 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 10 @@ -79,6 +80,7 @@ radarColor: "#FCBA03" scale: 1 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 10 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml index 0b2eabb1aa93..91656ecb8016 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml @@ -34,6 +34,7 @@ radarColor: "#FCBA03" scale: 1 requireNoGrid: true + visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn lifetime: 3.5 @@ -99,6 +100,7 @@ radarColor: "#FCBA03" scale: 1.5 requireNoGrid: true + visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn lifetime: 4.5 @@ -164,6 +166,7 @@ radarColor: "#FCBA03" scale: 4 requireNoGrid: true + visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn lifetime: 15 @@ -212,6 +215,7 @@ radarColor: "#FB00FF" scale: 1 requireNoGrid: true + visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn lifetime: 6.5 @@ -274,6 +278,7 @@ radarColor: "#FCBA03" scale: 4 requireNoGrid: true + visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn lifetime: 15 diff --git a/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml b/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml index cd8ec773581b..c9029d3e7b29 100644 --- a/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml +++ b/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml @@ -235,9 +235,9 @@ enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: RadarConsole - maxRange: 768 # Mono + maxRange: 512 # Forge-change - type: WorldLoader - radius: 384 # Mono + radius: 512 # Forge-change - type: Computer board: GunneryControlComputerCircuitboard - type: PointLight From a31b9a3f4fb0b4abf008fe73a2c66a05e2e58956 Mon Sep 17 00:00:00 2001 From: v6st Date: Tue, 13 Jan 2026 12:55:52 +0300 Subject: [PATCH 02/12] bread. bread. bread. --- .../Objects/Consumable/Food/Baked/bread.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 9c81ee7c2a90..75455793d2cd 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -22,7 +22,7 @@ maxVol: 31 reagents: - ReagentId: Nutriment - Quantity: 20 + Quantity: 10 # Forge-change: debuff bread.. what im even doing here?.. - ReagentId: Flavorol Quantity: 5 @@ -210,7 +210,7 @@ maxVol: 25 reagents: - ReagentId: Nutriment - Quantity: 15 + Quantity: 11 # Forge-change - ReagentId: Flavorol Quantity: 5 # Tastes like bread, banana, nut. @@ -262,7 +262,7 @@ maxVol: 40 reagents: - ReagentId: Nutriment - Quantity: 20 + Quantity: 15 # Forge-change - ReagentId: Vitamin Quantity: 5 - ReagentId: Flavorol @@ -318,7 +318,7 @@ maxVol: 50 reagents: - ReagentId: Nutriment - Quantity: 30 + Quantity: 24 # Forge-change - ReagentId: Vitamin Quantity: 5 - ReagentId: Flavorol @@ -536,7 +536,7 @@ maxVol: 60 reagents: - ReagentId: Nutriment - Quantity: 30 + Quantity: 20 # Forge-change - ReagentId: Vitamin Quantity: 5 - ReagentId: Toxin @@ -604,7 +604,7 @@ maxVol: 60 # Frontier: 48<60 reagents: - ReagentId: Nutriment - Quantity: 30 + Quantity: 20 # Forge-change - ReagentId: Protein Quantity: 12 - ReagentId: Flavorol # Frontier @@ -659,7 +659,7 @@ maxVol: 45 reagents: - ReagentId: Nutriment - Quantity: 30 + Quantity: 20 # Forge-change - ReagentId: Vitamin Quantity: 5 - ReagentId: Flavorol From cf07065d544847b22762e5124821da55a6cb36da Mon Sep 17 00:00:00 2001 From: v6st Date: Tue, 13 Jan 2026 17:36:32 +0300 Subject: [PATCH 03/12] alert! --- .../_Mono/TargetSeekingAlert/Events.cs | 41 +++ .../TargetSeekerAlertComponents.cs | 79 ++++++ .../TargetSeekerAlertSystem.cs | 234 ++++++++++++++++++ .../_Mono/Effects/Alerts/attributions.yml | 9 + .../_Mono/Effects/Alerts/launchwarning.ogg | Bin 0 -> 17101 bytes .../_Mono/Effects/Alerts/master_caution.ogg | Bin 0 -> 76828 bytes .../Audio/_Mono/Effects/Alerts/rwr_beep.ogg | Bin 0 -> 47630 bytes .../Machines/Computers/computers.yml | 50 ++++ .../SpaceArtillery/Ballistic/projectiles.yml | 14 +- .../SpaceArtillery/Missile/launcher.yml | 14 +- .../SpaceArtillery/Missile/projectiles.yml | 12 +- .../Machines/FireControl/gunnery.yml | 26 ++ 12 files changed, 459 insertions(+), 20 deletions(-) create mode 100644 Content.Server/_Mono/TargetSeekingAlert/Events.cs create mode 100644 Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertComponents.cs create mode 100644 Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertSystem.cs create mode 100644 Resources/Audio/_Mono/Effects/Alerts/attributions.yml create mode 100644 Resources/Audio/_Mono/Effects/Alerts/launchwarning.ogg create mode 100644 Resources/Audio/_Mono/Effects/Alerts/master_caution.ogg create mode 100644 Resources/Audio/_Mono/Effects/Alerts/rwr_beep.ogg diff --git a/Content.Server/_Mono/TargetSeekingAlert/Events.cs b/Content.Server/_Mono/TargetSeekingAlert/Events.cs new file mode 100644 index 000000000000..48644cfa078c --- /dev/null +++ b/Content.Server/_Mono/TargetSeekingAlert/Events.cs @@ -0,0 +1,41 @@ +using Content.Server._Mono.Projectiles.TargetSeeking; + +namespace Content.Server._Mono.TargetSeekingAlert; + +/// +/// Raised on an entity with when its grid gets targeted by its first target-seeker. +/// This is raised after this entity has been added to its grid's +/// and . +/// Raised before , in the case that both this and that are raised at the same time. +/// +[ByRefEvent] +public readonly record struct TargetSeekerAlertActivatedEvent(); + +/// +/// Raised on an entity with when either the grid it is on has stopped being targeted by all +/// target-seekers, it has lost power, or otherwise been deactivated. This is raised after this entity has been removed from its grid's +/// and . +/// Raised after , in the case that both this and that are raised at the same time. +/// +[ByRefEvent] +public readonly record struct TargetSeekerAlertDeactivatedEvent(); + + +/// +/// Raised on an entity with when the grid it's on gets targeted by a target-seeker, if the target-seeker's is true. +/// Raised after , in the case that both this and that are raised at the same time. +/// +/// +/// Whether the grid was already being targeted by a target-seeker. +[ByRefEvent] +public readonly record struct TargetSeekerAlertStartedBeingTargetedEvent(Entity Seeker, bool Active); + +/// +/// Raised on an entity with when the grid it's on stops being targeted by any target-seekers. +/// Does not necessarily mean that no target-seekers are targeting this grid. +/// Raised before , in the case that both this and that are raised at the same time. +/// +/// +/// Whether the grid is still being targeted by atleast one target-seeker. +[ByRefEvent] +public readonly record struct TargetSeekerAlertStoppedBeingTargetedEvent(Entity Seeker, bool Active); diff --git a/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertComponents.cs b/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertComponents.cs new file mode 100644 index 000000000000..6d13476d3750 --- /dev/null +++ b/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertComponents.cs @@ -0,0 +1,79 @@ +using Content.Server._Mono.Projectiles.TargetSeeking; +using Robust.Shared.Audio; + +namespace Content.Server._Mono.TargetSeekingAlert; + +/// +/// Component for things that alert whether their grid is being tracked by something with a . +/// +[RegisterComponent] +public sealed partial class TargetSeekerAlertComponent : Component +{ + /// + /// Sound played when a target initially starts tracking this entity. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public SoundSpecifier? TargetGainSound = null; + + /// + /// List specifying information of the sound this alerter plays when the seeker closest to the entity + /// is close enough. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List DistanceAlertSettings = new(); + + /// + /// The audio entity playing from . + /// + public EntityUid? Audio = null; + + /// + /// The key of the sound specified in currently playing. + /// + // This isn't the most amazing solution but it's necessary to prevent spamming the sound. GetHashCode is a bit overkill and it might(?) not always work either. + [DataField, ViewVariables(VVAccess.ReadOnly)] + public float? ActiveAlertSoundKey = null; +} + +/// +/// Specifies information for an entity with about +/// what it does when a seeker is closer than from the +/// entity. +/// +[DataDefinition] +public partial record struct TargetSeekerAlertSetting() +{ + [DataField] + public float MaximumDistance; + + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/_Mono/Effects/target_seeker_beep.ogg"); +} + +/// +/// Component for grids with entities that have 's. +/// +[RegisterComponent] +public sealed partial class TargetSeekerAlertGridComponent : Component +{ + /// + /// Target-seekers currently attempting to troll this grid. + /// + [ViewVariables(VVAccess.ReadOnly)] + public HashSet> CurrentSeekers = new(); + + /// + /// Entities using on this grid. + /// Used to remove this component when no more such entities remain on the grid. + /// + // what is meant by 'using' instead of 'with': an entity can have the comp, but not actually be doing anything with it (e.g. depowered). But that may not be implemented right now so this is just future-proofed. + // this isn't a hashset because we can actually guarantee uniqueness via logic here + [DataField, ViewVariables(VVAccess.ReadOnly)] + public List Alerters = new(); + + /// + /// Entities with , that are being alerted, on this grid. + /// + [ViewVariables(VVAccess.ReadOnly)] + public HashSet> ActiveAlerters = new(); +} diff --git a/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertSystem.cs b/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertSystem.cs new file mode 100644 index 000000000000..b1938d607dab --- /dev/null +++ b/Content.Server/_Mono/TargetSeekingAlert/TargetSeekerAlertSystem.cs @@ -0,0 +1,234 @@ +using Content.Server._Mono.Projectiles.TargetSeeking; +using Content.Server.Power.EntitySystems; +using Content.Shared.Power; +using Robust.Server.Audio; +using Robust.Shared.Audio; +using Robust.Shared.Map.Components; + +namespace Content.Server._Mono.TargetSeekingAlert; + +/// +/// Handles logic for things that make alerts for entities with . +/// + +// I really wonder what might unexpectedly happen when you put a target-seeker-alerter on a planetmap, since those count as grids. +public sealed class TargetSeekerAlertSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audioSystem = default!; + [Dependency] private readonly PowerReceiverSystem _powerReceiverSystem = default!; + + private EntityQuery _alertQuery = new(); + + public override void Initialize() + { + base.Initialize(); + + _alertQuery = GetEntityQuery(); + + // I didn't make a subscription for ComponentStartup because i assume EntParentChanged gets raised on entities upon spawn. + SubscribeLocalEvent(OnAlerterParentChanged); + SubscribeLocalEvent(OnAlerterShutdown); + SubscribeLocalEvent(OnAlerterPowerChanged); + + SubscribeLocalEvent(OnAlerterStartedBeingTargeted); + SubscribeLocalEvent(OnAlerterDeactivated); + + SubscribeLocalEvent(OnGridStartingBeingTargeted); + SubscribeLocalEvent(OnGridStoppedBeingTargeted); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var alertGridEqe = EntityQueryEnumerator(); + while (alertGridEqe.MoveNext(out var gridUid, out var alertGridComponent)) + { + var gridTransform = Transform(gridUid); + var closestSeekerDistance = float.MaxValue; + + foreach (var (_, seekerComponent, seekerTransform) in alertGridComponent.CurrentSeekers) + { + if (!seekerComponent.ExposesTracking || + !gridTransform.Coordinates.TryDistance(EntityManager, seekerTransform.Coordinates, out var seekerDistance)) + continue; + + if (seekerDistance < closestSeekerDistance) + closestSeekerDistance = seekerDistance; + } + foreach (var alertEntity in alertGridComponent.ActiveAlerters) + UpdateActiveAlerter(alertEntity, closestSeekerDistance); + } + } + + private void OnAlerterPowerChanged(Entity alertEntity, ref PowerChangedEvent args) + { + if (Transform(alertEntity).GridUid is not { } alertGridUid) + return; + + if (args.Powered) + { + // This event doesn't get raised on spawn so we're fine. + AddAlerterToGrid(alertGridUid, alertEntity); + } + else + { + if (TryComp(alertGridUid, out var alertGridComponent)) + RemoveAlerterFromGrid((alertGridUid, alertGridComponent), alertEntity); + } + } + + private void UpdateActiveAlerter(Entity alertEntity, float closestSeekerDistance) + { + SoundSpecifier? bestSound = null; + float? newSoundKey = null; + + foreach (var alertSetting in alertEntity.Comp.DistanceAlertSettings) + { + if (alertSetting.MaximumDistance < closestSeekerDistance) + continue; + + bestSound = alertSetting.Sound; + newSoundKey = alertSetting.MaximumDistance; + + break; + } + + if ((bestSound == null || + newSoundKey == null) ^ + alertEntity.Comp.ActiveAlertSoundKey == newSoundKey) + return; + + alertEntity.Comp.ActiveAlertSoundKey = newSoundKey; + if (alertEntity.Comp.Audio is { } currentAlertAudio) + _audioSystem.Stop(currentAlertAudio); + + // Entity isn't real + // the reason ambient audio system isn't used is because it can get muted by player via settings + var audioTuple = _audioSystem.PlayPvs(bestSound, alertEntity); + if (audioTuple != null) + alertEntity.Comp.Audio = audioTuple.Value.Entity; + } + + private void OnAlerterStartedBeingTargeted(Entity alertEntity, ref TargetSeekerAlertStartedBeingTargetedEvent args) + { + if (alertEntity.Comp.TargetGainSound is { } gainSound) + _audioSystem.PlayPvs(gainSound, alertEntity.Owner); + } + + private void OnAlerterDeactivated(Entity alertEntity, ref TargetSeekerAlertDeactivatedEvent args) + { + if (alertEntity.Comp.Audio is { } alertAudio) + _audioSystem.Stop(alertAudio); + + alertEntity.Comp.ActiveAlertSoundKey = null; + } + + /// + /// adds an entity with to a grid's list of alerters, + /// and ensures the grid's . Raises associated + /// events on the grid. + /// + private void AddAlerterToGrid(EntityUid gridUid, EntityUid alertUid) + { + var alertGridComponent = EnsureComp(gridUid); + alertGridComponent.Alerters.Add(alertUid); + + var alerterActivatedEvent = new TargetSeekerAlertActivatedEvent(); + RaiseLocalEvent(alertUid, ref alerterActivatedEvent); + } + + /// + /// Removes an entity with from a grid's list of alerters, + /// and removes the grid's if no more of + /// such entities are left specified as alerters on it. Raises associated events on the grid. + /// + private void RemoveAlerterFromGrid(Entity gridEntity, Entity alertEntity) + { + if (!Resolve(gridEntity, ref gridEntity.Comp, logMissing: false)) + return; + + gridEntity.Comp.Alerters.Remove(alertEntity); + gridEntity.Comp.ActiveAlerters.Remove(alertEntity); + + var alerterDeactivatedEvent = new TargetSeekerAlertDeactivatedEvent(); + RaiseLocalEvent(alertEntity, ref alerterDeactivatedEvent); + + if (gridEntity.Comp.Alerters.Count == 0) + { + RemComp(gridEntity, gridEntity.Comp); + return; + } + } + + private void OnAlerterParentChanged(Entity alertEntity, ref EntParentChangedMessage args) + { + if (!_powerReceiverSystem.IsPowered(alertEntity.Owner)) + return; + + var alertTransform = args.Transform; + if (alertTransform.GridUid is not { } alertGridUid) + return; + + AddAlerterToGrid(alertGridUid, alertEntity); + + // remove it from old parent if it was a grid, and if necessary + if (TryComp(args.OldParent, out _) && + TryComp(alertGridUid, out var alertGridComponent)) + RemoveAlerterFromGrid((alertGridUid, alertGridComponent), alertEntity); + } + + private void OnAlerterShutdown(Entity alertEntity, ref ComponentShutdown args) + { + var alertTransform = Transform(alertEntity); + + if (alertTransform.GridUid is not { } alertGridUid || + !TryComp(alertGridUid, out var alertGridComponent)) + return; + + RemoveAlerterFromGrid((alertGridUid, alertGridComponent), alertEntity); + } + + private void OnGridStartingBeingTargeted(Entity gridEntity, ref EntityStartedBeingSeekedTargetEvent args) + { + var wasAlreadyActive = gridEntity.Comp.CurrentSeekers.Count > 0; + gridEntity.Comp.CurrentSeekers.Add(args.Seeker); + + foreach (var alertUid in gridEntity.Comp.Alerters) + { + if (!_alertQuery.TryGetComponent(alertUid, out var alertComponent)) + continue; + + Entity alerterEntity = (alertUid, alertComponent); + if (gridEntity.Comp.ActiveAlerters.Add(alerterEntity)) + { + var alerterActivatedEvent = new TargetSeekerAlertActivatedEvent(); + RaiseLocalEvent(alerterEntity, ref alerterActivatedEvent); + } + + var alerterTargetedEvent = new TargetSeekerAlertStartedBeingTargetedEvent(args.Seeker, wasAlreadyActive); + RaiseLocalEvent(alerterEntity, ref alerterTargetedEvent); + } + } + + private void OnGridStoppedBeingTargeted(Entity gridEntity, ref EntityStoppedBeingSeekedTargetEvent args) + { + gridEntity.Comp.CurrentSeekers.Remove(args.Seeker); + var stillTargeted = gridEntity.Comp.CurrentSeekers.Count > 0; + + var alerterUntargetedEvent = new TargetSeekerAlertStoppedBeingTargetedEvent(args.Seeker, stillTargeted); + + foreach (var activeAlertEntity in gridEntity.Comp.ActiveAlerters) + { + RaiseLocalEvent(activeAlertEntity, ref alerterUntargetedEvent); + if (!stillTargeted) + { + var alerterDeactivatedEvent = new TargetSeekerAlertDeactivatedEvent(); + RaiseLocalEvent(activeAlertEntity, ref alerterDeactivatedEvent); + } + } + + if (!stillTargeted) + gridEntity.Comp.ActiveAlerters.Clear(); + } +} diff --git a/Resources/Audio/_Mono/Effects/Alerts/attributions.yml b/Resources/Audio/_Mono/Effects/Alerts/attributions.yml new file mode 100644 index 000000000000..a20f330e8524 --- /dev/null +++ b/Resources/Audio/_Mono/Effects/Alerts/attributions.yml @@ -0,0 +1,9 @@ +- files: ["rwr_beep.ogg"] + license: "CC0-1.0" + copyright: "Made by Alxy on freesound.org, converted to Ogg Vorbis." + source: "https://freesound.org/people/Alxy/sounds/189327/" + +- files: ["launchwarning.ogg", "master_caution.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from https://github.com/BeeStation/NSV13/ at commit fa47d5fe77f9af12784e5eb37428c78d48067782" + source: "https://github.com/BeeStation/NSV13/tree/fa47d5fe77f9af12784e5eb37428c78d48067782/nsv13/sound" diff --git a/Resources/Audio/_Mono/Effects/Alerts/launchwarning.ogg b/Resources/Audio/_Mono/Effects/Alerts/launchwarning.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e7a0c0371e4711691846504e618a2910dbc983c6 GIT binary patch literal 17101 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Mono/Effects/Alerts/master_caution.ogg b/Resources/Audio/_Mono/Effects/Alerts/master_caution.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ea1f845bcb1e9fb112b032c3c4ee54fc85a37a8e GIT binary patch literal 76828 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 h()7|3-->S^ugiAZL`1a(Uu{he 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Mono/Effects/Alerts/rwr_beep.ogg b/Resources/Audio/_Mono/Effects/Alerts/rwr_beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fb6f8f4ea58dcc550fae0dc27f72c16d1faf791d GIT binary patch literal 47630 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 P=qS*nr#hJPf4}%Ya?#kf literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 23ea4dc84414..c83dfc1085ae 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -156,6 +156,31 @@ - type: GuideHelp guides: - ShuttleCraft + - type: TargetSeekerAlert # Mono + targetGainSound: + path: /Audio/_Mono/Effects/Alerts/rwr_beep.ogg + params: + volume: 1.55 + distanceAlertSettings: + - maximumDistance: 64 + sound: + path: /Audio/_Mono/Effects/Alerts/launchwarning.ogg + params: + loop: true + volume: 0.9 + - maximumDistance: 128 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1.2 + pitch: 1.15 + - maximumDistance: 256 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1 - type: entity parent: [BaseComputerShuttle, BaseShuttleIntercom] # Frontier - BaseShuttleIntercom @@ -886,6 +911,31 @@ radius: 1.5 energy: 1.6 color: "#e6e227" + - type: TargetSeekerAlert # Mono + targetGainSound: + path: /Audio/_Mono/Effects/Alerts/rwr_beep.ogg + params: + volume: 1.55 + distanceAlertSettings: + - maximumDistance: 128 + sound: + path: /Audio/_Mono/Effects/Alerts/launchwarning.ogg + params: + loop: true + volume: 0.9 + - maximumDistance: 256 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1.2 + pitch: 1.15 + - maximumDistance: 512 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1 - type: entity id: ComputerCargoOrders diff --git a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml index 14dbc439f347..2812b12a9a13 100644 --- a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml +++ b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml @@ -19,7 +19,7 @@ Piercing: 24 - type: ShipWeaponProjectile - type: TimedDespawn - lifetime: 2 + lifetime: 4 - type: PointLight radius: 3.5 energy: 0.5 @@ -85,7 +85,7 @@ Piercing: 38 - type: ShipWeaponProjectile - type: TimedDespawn - lifetime: 3 + lifetime: 6 - type: PointLight radius: 3.5 energy: 0.5 @@ -158,7 +158,7 @@ shape: triangle radarColor: "#1df1f5" - type: TimedDespawn - lifetime: 7 + lifetime: 14 - type: PointLight color: "#FCBA03" # - type: ExplodeOnTrigger @@ -223,7 +223,7 @@ Blunt: 89 Piercing: 95 - type: TimedDespawn - lifetime: 4.2 + lifetime: 12 - type: PointLight color: orange radius: 3.5 @@ -336,7 +336,7 @@ visibleFromOtherGrids: true shape: triangle - type: TimedDespawn - lifetime: 5.15 + lifetime: 14 - type: PointLight color: "#fc8c03" - type: ExplodeOnTrigger @@ -393,7 +393,7 @@ visibleFromOtherGrids: true shape: triangle - type: TimedDespawn - lifetime: 5.15 + lifetime: 14 - type: PointLight color: "#FCBA03" - type: ExplodeOnTrigger @@ -449,7 +449,7 @@ visibleFromOtherGrids: true shape: triangle - type: TimedDespawn - lifetime: 5.5 + lifetime: 15 - type: PointLight color: "#fc5a03" - type: ExplodeOnTrigger diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml index 42b92c34e6cc..cc16c3889e3f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml @@ -32,13 +32,13 @@ - type: FireControlRotate - type: AmmoCounter - type: Battery - maxCharge: 40000 - startingCharge: 40000 + maxCharge: 3500 + startingCharge: 3500 - type: ExaminableBattery - type: WirelessNetworkConnection range: 500 - type: Gun - fireRate: 0.1 + fireRate: 0.6 shootThermalSignature: 32000000 # ~5.6km soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -49,7 +49,7 @@ powerUsePassive: 200 - type: BatterySelfRecharger autoRecharge: true - autoRechargeRate: 60 + autoRechargeRate: 70 - type: Actions - type: ProjectileBatteryAmmoProvider proto: ShipMissileASM501 @@ -81,8 +81,8 @@ - type: FireControlRotate - type: AmmoCounter - type: Battery - maxCharge: 40000 - startingCharge: 40000 + maxCharge: 2100 + startingCharge: 2100 - type: ExaminableBattery - type: WirelessNetworkConnection range: 500 @@ -98,7 +98,7 @@ powerUsePassive: 200 - type: BatterySelfRecharger autoRecharge: true - autoRechargeRate: 60 + autoRechargeRate: 70 - type: Actions - type: ProjectileBatteryAmmoProvider proto: ShipMissileSerpent diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml index 91656ecb8016..6d930c6dda93 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml @@ -169,7 +169,7 @@ visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn - lifetime: 15 + lifetime: 20 - type: PointLight radius: 5 color: orange @@ -177,9 +177,9 @@ - type: ExplodeOnTrigger - type: Explosive explosionType: DefaultShipGun - maxIntensity: 6000 + maxIntensity: 3000 intensitySlope: 30 - totalIntensity: 6000 + totalIntensity: 3000 - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard @@ -281,7 +281,7 @@ visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn - lifetime: 15 + lifetime: 21 - type: PointLight radius: 5 color: orange @@ -289,9 +289,9 @@ - type: ExplodeOnTrigger - type: Explosive explosionType: DefaultShipGun - maxIntensity: 4500 + maxIntensity: 4000 # Forge-change intensitySlope: 20 - totalIntensity: 4500 + totalIntensity: 4000 # Forge-change - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard diff --git a/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml b/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml index c9029d3e7b29..e0a89fd20e57 100644 --- a/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml +++ b/Resources/Prototypes/_Mono/Entities/Structures/Machines/FireControl/gunnery.yml @@ -244,3 +244,29 @@ radius: 1.5 energy: 1.6 color: "#ff8400" + - type: TargetSeekerAlert + targetGainSound: + path: /Audio/_Mono/Effects/Alerts/rwr_beep.ogg + distanceAlertSettings: + - maximumDistance: 128 # curse of... + sound: + path: /Audio/_Mono/Effects/Alerts/launchwarning.ogg + params: + loop: true + volume: 0.9 + pitch: 1.05 + - maximumDistance: 256 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1.3 + pitch: 1.15 + - maximumDistance: 512 + sound: + path: /Audio/_Mono/Effects/Alerts/master_caution.ogg + params: + loop: true + volume: 1.2 + pitch: 1.05 + variation: 0.05 From b5e6b9c3c565e31f91a1d5218da81e19ae0928e0 Mon Sep 17 00:00:00 2001 From: v6st Date: Tue, 13 Jan 2026 17:39:17 +0300 Subject: [PATCH 04/12] tarnyx buff --- .../Kinetic/Cartridge/tarnyx_150mm_ammo.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml index 4ff69993e678..ce6fad098aa5 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml @@ -29,13 +29,13 @@ requireNoGrid: true shape: circle - type: TimedDespawn - lifetime: 5 + lifetime: 15 - type: PointLight color: "#FB00FF" - type: EmpOnTrigger - range: 10 + range: 14 energyConsumption: 500000 - disableDuration: 5.5 + disableDuration: 9.5 - type: entity id: 150mmEmpShell @@ -109,11 +109,11 @@ - type: TriggerOnCollide fixtureID: projectile - type: ExplodeOnTrigger - - type: Explosive # Forge-change - explosionType: DefaultShipGun # Forge-change + - type: Explosive + explosionType: HardBombShipGun + totalIntensity: 400 + intensitySlope: 40 maxIntensity: 100 - intensitySlope: 3 - totalIntensity: 30 - type: entity id: 150mmApShell From 92beab03814b04c8cad653ce7bf12e249a0d7121 Mon Sep 17 00:00:00 2001 From: v6st Date: Tue, 13 Jan 2026 17:39:48 +0300 Subject: [PATCH 05/12] lifetime up --- .../SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml index ce6fad098aa5..fc6d8a1bf08f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml @@ -105,7 +105,7 @@ requireNoGrid: true shape: triangle - type: TimedDespawn - lifetime: 5 + lifetime: 15 - type: TriggerOnCollide fixtureID: projectile - type: ExplodeOnTrigger From c733ee6b934075a59ff49338fb018d071ac3da0e Mon Sep 17 00:00:00 2001 From: v6st Date: Wed, 14 Jan 2026 01:05:28 +0300 Subject: [PATCH 06/12] update missle, fix mining lasers & other --- .../Locale/ru-RU/_Forge/research/techtree.ftl | 4 + .../SpaceArtillery/Magazines/missile.ftl | 28 +-- .../SpaceArtillery/SpaceArtillery/kinetic.ftl | 18 +- .../SpaceArtillery/SpaceArtillery/missile.ftl | 16 +- .../SpaceArtillery/Ballistic/ammo.yml | 39 ++-- .../Recipes/Lathes/Packs/CorvaxPacks.yml | 4 + .../_Forge/Recipes/Lathes/shipammo.yml | 49 +++++ .../Prototypes/_Forge/Research/shipammo.yml | 55 ++++++ .../Kinetic/Cartridge/tarnyx_150mm_ammo.yml | 1 + .../Kinetic/Magazine/140mm_launcher.yml | 3 +- .../Kinetic/Magazine/20mm_launcher.yml | 2 + .../Kinetic/Magazine/30mm_launcher.yml | 2 + .../Kinetic/Magazine/57mm_launcher.yml | 3 +- .../Kinetic/Magazine/90mm_launcher.yml | 3 +- .../SpaceArtillery/Kinetic/drone_kinetic.yml | 64 +++++++ .../SpaceArtillery/Kinetic/projectiles.yml | 36 ++++ ...t_munitions_ammo.yml => bomb_bay_ammo.yml} | 8 - .../Missile/Cartridge/tovek_ammo.yml | 91 ++++++++- .../{asm_220_ammo.yml => trident_ammo.yml} | 21 +-- .../Missile/Cartridge/vanyk_ammo.yml | 14 +- .../Missile/Cartridge/vespera_ammo.yml | 46 +++-- .../SpaceArtillery/Missile/launcher.yml | 12 +- ...itions_launcher.yml => light_bomb_bay.yml} | 20 +- .../SpaceArtillery/Missile/mpssm.yml | 30 ++- .../SpaceArtillery/Missile/projectiles.yml | 176 ++++++++++-------- .../{Cartridge => }/tovek_launcher.yml | 24 ++- ..._220_launcher.yml => trident_launcher.yml} | 14 +- .../{Cartridge => }/vanyk_launcher.yml | 20 +- .../{Cartridge => }/vespera_launcher.yml | 44 ++--- .../Entities/SpaceArtillery/ammo_tags.yml | 3 + .../Entities/Structures/Walls/asteroid.yml | 3 - .../_NF/Recipes/Lathes/Packs/blueprints.yml | 8 + .../SpaceArtillery/ammo.rsi/250aphe.png | Bin 0 -> 360 bytes .../SpaceArtillery/ammo.rsi/250emp.png | Bin 0 -> 358 bytes .../SpaceArtillery/ammo.rsi/250emphe.png | Bin 0 -> 386 bytes .../Objects/SpaceArtillery/ammo.rsi/meta.json | 9 + .../hybrid_missile.rsi/hybrid-missile.png | Bin 0 -> 385 bytes .../hybrid_missile.rsi/meta.json | 14 ++ .../ShuttleWeapons/adder.rsi/meta.json | 2 +- .../ShuttleWeapons/apollo.rsi/meta.json | 2 +- .../ShuttleWeapons/artillery.rsi/meta.json | 7 +- .../artillery.rsi/space_artillery.png | Bin 3194 -> 791 bytes .../ShuttleWeapons/bofors.rsi/meta.json | 7 +- .../bofors.rsi/space_artillery.png | Bin 5676 -> 2035 bytes .../ShuttleWeapons/cyrexa.rsi/meta.json | 7 +- .../cyrexa.rsi/space_artillery.png | Bin 5387 -> 2353 bytes .../ShuttleWeapons/dravon.rsi/meta.json | 27 ++- .../dravon.rsi/space_artillery.png | Bin 1916 -> 699 bytes .../ShuttleWeapons/dymere.rsi/meta.json | 27 ++- .../dymere.rsi/space_artillery.png | Bin 5195 -> 3476 bytes .../Objects/ShuttleWeapons/fang.rsi/meta.json | 2 +- .../ShuttleWeapons/flayer.rsi/meta.json | 2 +- .../ShuttleWeapons/harbringer.rsi/meta.json | 2 +- .../ShuttleWeapons/hlgg9.rsi/meta.json | 9 +- .../hlgg9.rsi/space_artillery.png | Bin 2334 -> 758 bytes .../ShuttleWeapons/hydra.rsi/meta.json | 2 +- .../ShuttleWeapons/longbow.rsi/meta.json | 2 +- .../Objects/ShuttleWeapons/m25.rsi/meta.json | 9 +- .../m25.rsi/space_artillery.png | Bin 11714 -> 781 bytes .../rac-30_draupnir.rsi/meta.json | 2 +- .../ShuttleWeapons/reaper.rsi/meta.json | 2 +- .../ShuttleWeapons/rubicon.rsi/meta.json | 9 +- .../rubicon.rsi/space_artillery.png | Bin 1523 -> 797 bytes .../ShuttleWeapons/scythe.rsi/meta.json | 2 +- .../ShuttleWeapons/serpent.rsi/meta.json | 2 +- .../ShuttleWeapons/shard.rsi/meta.json | 14 ++ .../shard.rsi/space_artillery.png | Bin 0 -> 1339 bytes .../ShuttleWeapons/sunder.rsi/meta.json | 2 +- .../Objects/ShuttleWeapons/t241.rsi/meta.json | 26 +-- .../t241.rsi/space_artillery.png | Bin 14855 -> 3507 bytes .../Objects/ShuttleWeapons/t35.rsi/meta.json | 9 +- .../t35.rsi/space_artillery.png | Bin 1700 -> 904 bytes .../Objects/ShuttleWeapons/t54.rsi/meta.json | 9 +- .../t54.rsi/space_artillery.png | Bin 6803 -> 956 bytes .../ShuttleWeapons/tarnyx.rsi/meta.json | 27 ++- .../tarnyx.rsi/space_artillery.png | Bin 2528 -> 1180 bytes .../ShuttleWeapons/thanatos.rsi/meta.json | 2 +- .../Boxes/generic_shipgun_box.rsi/base.png | Bin 0 -> 328 bytes .../Boxes/generic_shipgun_box.rsi/mag-0.png | Bin 0 -> 114 bytes .../Boxes/generic_shipgun_box.rsi/mag-1.png | Bin 0 -> 151 bytes .../Boxes/generic_shipgun_box.rsi/mag-2.png | Bin 0 -> 193 bytes .../Boxes/generic_shipgun_box.rsi/mag-3.png | Bin 0 -> 184 bytes .../Boxes/generic_shipgun_box.rsi/meta.json | 26 +++ 83 files changed, 745 insertions(+), 378 deletions(-) create mode 100644 Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/{light_munitions_ammo.yml => bomb_bay_ammo.yml} (96%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/{asm_220_ammo.yml => trident_ammo.yml} (95%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/{Cartridge/light_munitions_launcher.yml => light_bomb_bay.yml} (74%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/{Cartridge => }/tovek_launcher.yml (61%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/{Cartridge/asm_220_launcher.yml => trident_launcher.yml} (79%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/{Cartridge => }/vanyk_launcher.yml (75%) rename Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/{Cartridge => }/vespera_launcher.yml (51%) create mode 100644 Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250aphe.png create mode 100644 Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250emp.png create mode 100644 Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250emphe.png create mode 100644 Resources/Textures/Forge/Objects/SpaceArtillery/hybrid_missile.rsi/hybrid-missile.png create mode 100644 Resources/Textures/Forge/Objects/SpaceArtillery/hybrid_missile.rsi/meta.json create mode 100644 Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/meta.json create mode 100644 Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/space_artillery.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/base.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-0.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-1.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-2.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-3.png create mode 100644 Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/meta.json diff --git a/Resources/Locale/ru-RU/_Forge/research/techtree.ftl b/Resources/Locale/ru-RU/_Forge/research/techtree.ftl index 9d2542f078d4..ce7ffa03bb49 100644 --- a/Resources/Locale/ru-RU/_Forge/research/techtree.ftl +++ b/Resources/Locale/ru-RU/_Forge/research/techtree.ftl @@ -12,6 +12,10 @@ forge-research-technology-shipammo20aphe = Каморные 20-ти миллим forge-research-technology-shipammo30aphe = Каморные 30-ти миллиметровые forge-research-technology-shipammo57aphe = Каморные 57-ми миллиметровые forge-research-technology-bombmerc = Неуправляемая 50-ти килограммовая бомба +forge-research-technology-vesperamagazine = Разгон до 26 снарядов свободы +forge-research-technology-vanykcartridge = Космическая 155мм ракетка +forge-research-technology-tovek-emphe = Взрывоопасный ЭМИ +forge-research-technology-tovek-aphe = Разрывная 250мм ракета # NFSD research ent-ForgeRnDNFSDServer = сервер ДСБФ diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Magazines/missile.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Magazines/missile.ftl index 8b6bbb7e7c11..8c7e5070031d 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Magazines/missile.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Magazines/missile.ftl @@ -24,17 +24,17 @@ ent-LightFighterOrdinanceQuasarProjectile = гиперпроникающий з ent-LightFighterOrdinanceQuasarItem = гиперпроникающий заряд AD-901 «Квазар» .desc = Гиперпроникающий заряд Квазар - дорогостоящий экспериментальный проект по минимизации гиперускорительных технологий для использования на малых космических аппаратах. Представляет собой относительно слабый, но быстро движущийся боеприпас, неуязвимый для большинства средств поражения. Он может быть установлен в лёгкий корпус GPOL. -ent-TovekCartridge = ракета ASM-557 ЭМИ - .desc = Ракета ASM-557 ЭМИ для пусковой установки «Товек». -ent-TovekCartridgeWeak = стоковая ракета ASM-557 ЭМИ - .desc = Ракета ASM-557 ЭМИ для пусковой установки «Товек». Слабовата из-за штатных характеристик. - -ent-VanykCartridge = кумулятивная ракета ASM-302 - .desc = Кумулятивная ракета ASM-302. -ent-VanykCartridgeWeak = ракета ASM-302. - .desc = Ракета ASM-302. - -ent-VesperaCartridge = кумулятивная ракета ASM-417 - .desc = Кумулятивная ракета ASM-417 для ADMP-27 «Веспера». -ent-VesperaCartridgeWeak = ракета ASM-417 - .desc = Ракета ASM-417 для ADMP-27 «Веспера» +ent-VanykCartridge = ракета 155мм (HEAT) + .desc = Ракета 155мм (HEAT) для ASM-302 «Вэнок». + +ent-VesperaCartridge = ракета 50мм (HE) + .desc = Ракета 50мм (HE) для ADMP-27 «Веспера» +ent-VesperaMagazine = «Веспера» 50мм автолоадер + .desc = Автолоадер для ADMP-27 «Веспера». + +ent-TovekCartridge = ракета 250мм (EMP) + .desc = Ракета 250мм EMP для пусковой установки «Товек». +ent-TovekCartridgeAPHE = ракета 250мм (APHE) + .desc = Ракета 250мм APHE для пусковой установки «Товек». +ent-TovekCartridgeEMPHE = ракета 250мм (EMPHE) + .desc = Ракета 250мм EMPHE для пусковой установки «Товек». diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/kinetic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/kinetic.ftl index 8f2c8eb67370..c544a799c1fa 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/kinetic.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/kinetic.ftl @@ -24,30 +24,30 @@ ent-WeaponTurretCyrexa = орудие «Цирекса» 220мм ent-WeaponTurretBofors = орудие «Бофорс» 255мм .desc = Тяжелое артиллерийское орудие, разработаннон для крейсеров, обеспечивающая огромную боевую мощь на большой дистанции. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Fraction -ent-WeaponTurretCharon = массдрайвер M381 «Чарон» +ent-WeaponTurretCharon = M381 «Чарон» .desc = Рельсотрон капитального класса, стреляющий мощным снарядом с огромной скоростью, способным нанести катастрофический урон вражеским кораблям. Тяжелый линейный ускоритель, активируемый дистанционно или подключаемый к системе управления орудиями. Этот заряжается из автозаряжающего устройства, расположенного где-то в другом месте, и не требует ручной перезарядки. .suffix = ShipGun, Outpost Only, Capital -ent-WeaponTurretCharonReload = массдрайвер M381 «Чарон» +ent-WeaponTurretCharonReload = M381 «Чарон» .desc = Рельсотрон капитального класса, стреляющий мощным снарядом с огромной скоростью, способным нанести катастрофический урон вражеским кораблям. Тяжелый линейный ускоритель, активируемый дистанционно или подключаемый к системе управления орудиями. .suffix = ShipGun, Fraction -ent-WeaponTurretCharonette = массдрайвер M194 «Чароннета» +ent-WeaponTurretCharonette = M194 «Чароннета» .desc = Небольшой, более компактный рельсотрон, стреляющий большими снарядами с высокой скоростью, способный нанести большой урон вражеским кораблям. Средний линейный ускоритель, активируемый дистанционно или подключаемый к системе управления орудиями. .suffix = ShipGun, Fraction -ent-WeaponTurretTarnyx = ADBX-37 ЭМИ «Тарникс» 150мм +ent-WeaponTurretTarnyx = ADBX-37 «Тарникс» 150мм .desc = Тяжёлое ЭМИ-орудие производства Aetherion Dynamics, предназначенная для выведения из строя больших участков вражеских кораблей одним мощным выстрелом. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Outpost Only, Recharge -ent-WeaponTurretTarnyxReload = ADBX-37 ЭМИ «Тарникс» 150мм +ent-WeaponTurretTarnyxReload = ADBX-37 «Тарникс» 150мм .desc = Тяжёлое ЭМИ-орудие производства Aetherion Dynamics, предназначенная для выведения из строя больших участков вражеских кораблей одним мощным выстрелом. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Mercenary -ent-WeaponTurretL85Autocannon = пулемёт L85 «Аспид» 20мм +ent-WeaponTurretL85Autocannon = L85 «Аспид» 20мм .desc = Лёгкий 20мм пулемёт, предназначенный для подавления небольших целей на ближней дистанции. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Mercenary -ent-WeaponTurretRAC30 = пулемёт RAC-30 «Драупнир» 30мм +ent-WeaponTurretRAC30 = RAC-30 «Драупнир» 30мм .desc = Мощный скорострельный пулемёт, стреляющий градом снарядов, подобно своему тезке, превращаясь в, цитата инженера "град копий". Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Fraction -ent-WeaponTurretDravon = пулемёт ADBP-7 «Дравон» 57мм +ent-WeaponTurretDravon = ADBP-7 «Дравон» 57мм .desc = Одноствольная автоматическое орудие производства Aetherion Dynamics. Среднекалиберное артиллерийское орудие с высокой скорострельностью, но относительно низкой отдачей, стреляющее кумулятивными снарядами, повреждающими броню и системы корабля. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Mercenary @@ -55,6 +55,6 @@ ent-WeaponTurretAK570 = AK570 «Клычки» 90мм .desc = Двуствольное 90мм автоматическое орудие, эффективное для ведения непрерывного огня по средним целям. Может активироваться дистанционно или подключаться к системе управления орудиями. .suffix = ShipGun, Mercenary -ent-WeaponTurretLongbow = автоматическое орудие L65 Mk.II «Лонгбоу» 140мм +ent-WeaponTurretLongbow = L65 Mk.II «Лонгбоу» 140мм .desc = Двуствольное тяжелое автоматическое орудие, стреляющее снарядами 140мм очередью по десять выстрелов. .suffix = ShipGun, Fraction diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl index ec9e8b4048fb..57c01dcbd347 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl @@ -1,24 +1,24 @@ ent-WeaponTurretASM501 = ракетница ASM-501 .desc = Крейсерский торпедный аппарат. Стреляет тяжёлыми торпедами, нанося большой урон крупным кораблям и станциям. Может активироваться дистанционно или подключаться к консоли управления орудиями. - .suffix = ShipGun, DoNotMap + .suffix = ShipGun, NFSD ent-WeaponTurretSerpentMissile = ракетница «Змея» .desc = Легкая и опасная торпедная установка, использующие систему для самозарядки боеприпасов. - .suffix = ShipGun, DoNotMap + .suffix = ShipGun, Syndicate ent-WeaponTurretASM220 = установка ASM-220 VLS .desc = Тяжёлая торпедная установка, заряжаемая вручную, обычно в порту. Однако, оснащенная мощными ракетами для своего размера. .suffix = ShipGun, Capital ent-WeaponTurretLightMunitionsBay = бомбовый отсек GPOB-L .desc = Относительно небольшой бронированный отсек для бомб, способный вместить до двух зарядов. Устанавливается на лёгких кораблях, в основном на бомбардировщиках, и имеет ограниченное применение для поражения целей, значительно превосходящих по весовой категории пользователя. .suffix = ShipGun, Mercenary -ent-WeaponTurretTovek = ракетница ADMX-23 «Товек» ЭМИ - .desc = Гибридный блок ЭМИ-ракет ADMX-23 «Товек» запускает ЭМИ-боеголовки, выводя из строя и ослабляя вражеские корабли на большом расстоянии. Может активироваться дистанционно или подключаться к консоли управления орудиями. +ent-WeaponTurretTovek = ракетница ADMX-23 «Товек» + .desc = Гибридный ракетный блок ADMX-23 «Товек». Способный выводить из строя вражеские корабли на большом расстоянии. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, Mercenary -ent-WeaponTurretVanyk = ракетница ASM-302 +ent-WeaponTurretVanyk = ASM-302 «Вэнок» 155мм .desc = Ракетный блок, разработанный компанией Aetherion Dynamics. Запускает управляемые ракеты для ведения корабельного боя и воспрепятствования наземному движению. Может активироваться дистанционно или подключаться к консоли управления орудиями. - .suffix = ShipGun, DoNotMap -ent-WeaponTurretVespera = ракетница ADMP-27 «Веспера» + .suffix = ShipGun, Mercenary +ent-WeaponTurretVespera = ADMP-27 «Веспера» .desc = Скорострельный ракетный блок роевого типа производства Aetherion Dynamics. Обстреливает цели управляемыми боеголовками, подавляя оборону. Может активироваться дистанционно или подключаться к консоли управления орудиями. - .suffix = DoNotMap + .suffix = ShipGun, Mercenary # HideSpawn. Я не знаю зачем, но я сделяль ent-ShipMissileASM19 = Переносной противокорабельный ракетный комплекс MPSSM ASM-19 ent-RocketMk248 = Ракета MPSSM Mk.248 diff --git a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml index 7e6a54b58bff..933de12c9f55 100644 --- a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml +++ b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml @@ -17,9 +17,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge16mmCartridgeBase capacity: 65 + mayTransfer: true whitelist: tags: - 16mmCartridge @@ -57,9 +58,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge20mmCartridgeBase capacity: 180 + mayTransfer: true - type: entity id: Forge20mmCartridgeBase @@ -89,9 +91,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge20mmCartridgeAPHE capacity: 180 + mayTransfer: true - type: entity id: Forge20mmCartridgeAPHE @@ -122,9 +125,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge20mmCartridgeAPCBC capacity: 180 + mayTransfer: true - type: entity id: Forge20mmCartridgeAPCBC @@ -156,9 +160,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge30mmCartridgeBase capacity: 250 + mayTransfer: true - type: entity id: Forge30mmCartridgeBase @@ -189,9 +194,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge30mmCartridgeAPHE capacity: 250 + mayTransfer: true - type: entity id: Forge30mmCartridgeAPHE @@ -221,9 +227,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge30mmCartridgeAPCBC capacity: 250 + mayTransfer: true - type: entity id: Forge30mmCartridgeAPCBC @@ -254,9 +261,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge57mmCartridgeBase capacity: 95 + mayTransfer: true - type: entity id: Forge57mmCartridgeBase @@ -286,9 +294,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge57mmCartridgeAPHE capacity: 95 + mayTransfer: true - type: entity id: Forge57mmCartridgeAPHE @@ -318,9 +327,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge57mmCartridgeAPCBC capacity: 95 + mayTransfer: true - type: entity id: Forge57mmCartridgeAPCBC @@ -354,9 +364,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge90mmCartridge capacity: 60 + mayTransfer: true - type: entity id: Forge90mmCartridge @@ -389,9 +400,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge90mmCartridgeAPHE capacity: 60 + mayTransfer: true - type: entity id: Forge90mmCartridgeAPHE @@ -424,9 +436,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false proto: Forge90mmCartridgeAPHEBC capacity: 60 + mayTransfer: true - type: entity id: Forge90mmCartridgeAPHEBC diff --git a/Resources/Prototypes/_Forge/Recipes/Lathes/Packs/CorvaxPacks.yml b/Resources/Prototypes/_Forge/Recipes/Lathes/Packs/CorvaxPacks.yml index ce285e7e0cd8..092a5fb53fa4 100644 --- a/Resources/Prototypes/_Forge/Recipes/Lathes/Packs/CorvaxPacks.yml +++ b/Resources/Prototypes/_Forge/Recipes/Lathes/Packs/CorvaxPacks.yml @@ -464,6 +464,10 @@ - FRecTovekCartridge - FRec150mmEmpShell - FRecLightFighterOrdinanceGPOItem + - FRecVesperaMagazine + - FRecVanykCartridge + - FRecTovekCartridgeEMPHE + - FRecTovekCartridgeAPHE - type: latheRecipePack id: ForgePackNfsd diff --git a/Resources/Prototypes/_Forge/Recipes/Lathes/shipammo.yml b/Resources/Prototypes/_Forge/Recipes/Lathes/shipammo.yml index 3729f4d9b818..d83c1b72759a 100644 --- a/Resources/Prototypes/_Forge/Recipes/Lathes/shipammo.yml +++ b/Resources/Prototypes/_Forge/Recipes/Lathes/shipammo.yml @@ -170,6 +170,55 @@ Uranium: 1000 Silver: 700 +# ROCKET JUMP +- type: latheRecipe + parent: BaseAmmoRecipe + id: FRecVanykCartridge + result: VanykCartridge + materials: + Steel: 750 + Plastic: 350 + Plasteel: 1200 + Plasma: 950 + Uranium: 230 + Silver: 150 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: FRecVesperaMagazine + result: VesperaMagazine + materials: + Steel: 3800 + Plastic: 850 + Plasteel: 1200 + Plasma: 4550 + Uranium: 950 + Silver: 950 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: FRecTovekCartridgeEMPHE + result: TovekCartridgeEMPHE + materials: + Steel: 650 + Plasteel: 260 + Uranium: 480 + Plasma: 350 + Gold: 620 + Silver: 420 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: FRecTovekCartridgeAPHE + result: TovekCartridgeAPHE + materials: + Steel: 650 + Plasteel: 260 + Uranium: 480 + Plasma: 350 + Gold: 620 + Silver: 420 + # region NFSD - type: latheRecipe parent: BaseAmmoRecipe diff --git a/Resources/Prototypes/_Forge/Research/shipammo.yml b/Resources/Prototypes/_Forge/Research/shipammo.yml index 4aad6c885aaa..23b3f3a5ecbf 100644 --- a/Resources/Prototypes/_Forge/Research/shipammo.yml +++ b/Resources/Prototypes/_Forge/Research/shipammo.yml @@ -92,3 +92,58 @@ technologyPrerequisites: - ForgeResearchShipAmmoAll position: 0, 46 + +# region Missle +- type: technology + id: ForgeResearchVesperaMagazine + name: forge-research-technology-vesperamagazine + entityIcon: VesperaMagazine + discipline: NFArsenalMercenary + tier: 1 + cost: 8500 + recipeUnlocks: + - FRecVesperaMagazine + technologyPrerequisites: + - ForgeResearchVanykCartridge + position: 2, 52 + +- type: technology + id: ForgeResearchVanykCartridge + name: forge-research-technology-vanykcartridge + entityIcon: VanykCartridge + discipline: NFArsenalMercenary + tier: 1 + cost: 7500 + recipeUnlocks: + - FRecVanykCartridge + technologyPrerequisites: + - ForgeResearchShipBombMerc + position: 1, 52 + +- type: technology + id: ForgeResearchTovekCartridgeEMPHE + name: forge-research-technology-tovek-emphe + entityIcon: TovekCartridgeEMPHE + discipline: NFArsenalMercenary + tier: 1 + cost: 6000 + recipeUnlocks: + - FRecTovekCartridgeEMPHE + technologyPrerequisites: + - ForgeResearchShipAmmo90 + - ForgeResearchShipAmmoEMP + position: 0, 53 + +- type: technology + id: ForgeResearchTovekCartridgeAPHE + name: forge-research-technology-tovek-aphe + entityIcon: TovekCartridgeAPHE + discipline: NFArsenalMercenary + tier: 1 + cost: 4500 + recipeUnlocks: + - FRecTovekCartridgeAPHE + technologyPrerequisites: + - ForgeResearchVanykCartridge + - ForgeResearchTovekCartridgeEMPHE + position: 2, 53 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml index fc6d8a1bf08f..26c2f01650b3 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml @@ -27,6 +27,7 @@ radarColor: "#035EFC" scale: 1.5 requireNoGrid: true + visibleFromOtherGrids: true shape: circle - type: TimedDespawn lifetime: 15 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/140mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/140mm_launcher.yml index 0f62c99c7a7e..7470a0ea194f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/140mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/140mm_launcher.yml @@ -10,6 +10,8 @@ parent: BallisticArtilleryUnanchorableMagazine description: Fires 140mm HEAT shells in a 10 round burst from an internal autoloader. components: + - type: AmmoCounter + - type: MagazineAmmoProvider - type: BindToStation # Forge-change - type: StaticPrice # Forge-change price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. @@ -20,7 +22,6 @@ scale: 1, 1 - type: Appearance - type: FireControlRotate - - type: AmmoCounter - type: WirelessNetworkConnection range: 500 - type: Fixtures diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/20mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/20mm_launcher.yml index c9e9ea796f2d..05b319424df8 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/20mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/20mm_launcher.yml @@ -10,6 +10,8 @@ parent: BallisticArtilleryMagazine description: A light 20mm ballistic autocannon designed for rapid fire and suppressing smaller targets at close range. Cheap, light, and can be remotely activated or linked up to a GCS. components: + - type: AmmoCounter + - type: MagazineAmmoProvider - type: BindToStation # Forge-change - type: StaticPrice # Forge-change price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/30mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/30mm_launcher.yml index 975e79fbbd9f..b0ac25b0929d 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/30mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/30mm_launcher.yml @@ -10,6 +10,8 @@ parent: BallisticArtilleryMagazine description: A more heavy duty rapid rife autocannon, firing a hail of rounds much like its namesake became a hail of spears. components: + - type: AmmoCounter + - type: MagazineAmmoProvider - type: BindToStation # Forge-change - type: StaticPrice # Forge-change price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml index e69778397145..645d868bbdd7 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml @@ -10,6 +10,8 @@ parent: BallisticArtilleryMagazine description: A single-barrel autocannon made by Aetherion Dynamics. Medium artillery piece with high fire rate but relatively low impact, firing HEAT shells to damage ship armor and systems. Can be remotely activated or linked up to a GCS. components: + - type: AmmoCounter + - type: MagazineAmmoProvider - type: BindToStation # Forge-change - type: StaticPrice # Forge-change price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. @@ -19,7 +21,6 @@ - state: space_artillery - type: Appearance - type: FireControlRotate - - type: AmmoCounter - type: WirelessNetworkConnection range: 500 - type: Gun diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/90mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/90mm_launcher.yml index ee362ed3cb1d..0419967464a6 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/90mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/90mm_launcher.yml @@ -10,6 +10,8 @@ parent: BallisticArtilleryMagazine description: A dual-barrel, heavy 90mm autocannon firing general-purpose APHE rounds, effective for sustained fire against medium targets. Can be remotely activated or linked up to a GCS. components: + - type: AmmoCounter + - type: MagazineAmmoProvider - type: BindToStation # Forge-change - type: StaticPrice # Forge-change price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. @@ -19,7 +21,6 @@ - state: space_artillery - type: Appearance - type: FireControlRotate - - type: AmmoCounter - type: WirelessNetworkConnection range: 500 - type: Gun diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml new file mode 100644 index 000000000000..22c62d92cce4 --- /dev/null +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml @@ -0,0 +1,64 @@ +- type: entity + id: WeaponTurretShard + name: Light mass driver "Shard" + parent: BallisticArtillery + description: Ultralight mass driver weapon of unknown origin, designated "Shard" during initial reverse engineering attempts. Light damage, but long range and little upkeep to mount on ships. + suffix: DRONE ONLY + components: + - type: StaticPrice + price: 1500 + - type: Sprite + sprite: _Mono/Objects/ShuttleWeapons/shard.rsi + layers: + - state: space_artillery + - type: Appearance + - type: FireControlRotate + - type: AmmoCounter + - type: WirelessNetworkConnection + range: 500 + - type: Gun + fireRate: 0.4 + # recoil: 25 # 1x + projectileSpeed: 350 + minAngle: 0 + maxAngle: 0 + shootThermalSignature: 300000 + soundGunshot: + path: /Audio/_Mono/Weapons/Guns/Gunshots/autopulse_laser_fire_01.ogg + soundEmpty: + path: /Audio/Weapons/click.ogg + - type: SpaceArtillery + powerChargeRate: 1500 + powerUsePassive: 1500 + powerUseActive: 0 + - type: Battery + maxCharge: 10000 + startingCharge: 10000 + - type: ProjectileBatteryAmmoProvider + proto: ShipShardProjectile + fireCost: 1500 + - type: BatterySelfRecharger + autoRecharge: true + autoRechargeRate: 3000 + - type: ExtensionCableReceiver + - type: ApcPowerReceiver + powerLoad: 1500 + - type: Actions + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 9000 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - type: RadarBlip + radarColor: "#FF0000" + scale: 1.5 + - type: ShipGunType + shipType: Ballistic + - type: ShipGunClass + shipClass: Light diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml index c22a3600cf3b..91ce21604f35 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml @@ -652,3 +652,39 @@ - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard + +# Drone + +- type: entity + id: ShipShardProjectile + parent: BaseBulletTrigger + categories: [ HideSpawnMenu ] + components: + - type: Projectile + damage: + types: + Structural: 300 + Blunt: 50 + Piercing: 50 + - type: Sprite + sprite: _Mono/Objects/SpaceArtillery/57_shell.rsi + layers: + - state: 57-shell + scale: 1, 1 + - type: ShipWeaponProjectile + - type: RadarBlip + scale: 2.5 + requireNoGrid: true + shape: triangle + radarColor: "#1df1f5" + - type: TimedDespawn + lifetime: 5 + - type: PointLight + color: "#FCBA03" + - type: ExplodeOnTrigger + - type: Explosive + explosionType: Default + totalIntensity: 12 + intensitySlope: 2 + maxIntensity: 2 + maxTileBreak: 1 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml similarity index 96% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_ammo.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml index badae7c3a8ab..518413b6980f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml @@ -1,11 +1,3 @@ -# SPDX-FileCopyrightText: 2025 Onezero0 -# SPDX-FileCopyrightText: 2025 Redrover1760 -# SPDX-FileCopyrightText: 2025 Ted Lukin -# SPDX-FileCopyrightText: 2025 significant harassment -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - - type: entity id: LightFighterOrdinanceGPOProjectile name: GPO-L 50kg Unguided Bomb diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_ammo.yml index 8410907801f6..8450adab5938 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_ammo.yml @@ -1,8 +1,8 @@ - type: entity id: TovekCartridge - name: ASM-557 EMPHE missile + name: 250mm EMPHE missile description: An individual ASM-557 EMPHE missile for a Tovek launcher. - parent: BaseGrenade + parent: [ BaseGrenade, BaseC1Contraband ] components: - type: Tag tags: @@ -13,9 +13,50 @@ proto: ShipMissileASM557 deleteOnSpawn: true - type: Sprite - sprite: _Mono/Objects/SpaceArtillery/hybrid_missile.rsi + sprite: Forge/Objects/SpaceArtillery/ammo.rsi # Forge-change + layers: + - state: 250emp + map: ["enum.AmmoVisualLayers.Base"] + - type: Appearance + - type: SpentAmmoVisuals + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 250 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:ExplodeBehavior + # - type: Explosive # Forge-change: APHE it APHE, EMP it EMP + # explosionType: Default + # maxIntensity: 100 + # intensitySlope: 3 + # totalIntensity: 3 + # - type: ExplodeOnTrigger + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + +# Forge-change add EMPHE and APHE version's +- type: entity + id: TovekCartridgeAPHE + name: 250mm APHE missile + description: An individual ASM-557 EMPHE missile for a Tovek launcher. + parent: BaseGrenade + components: + - type: Tag + tags: + - TovekCartridge + - type: Item + size: Huge + - type: CartridgeAmmo + proto: ShipMissileASM557APHE + deleteOnSpawn: true + - type: Sprite + sprite: Forge/Objects/SpaceArtillery/ammo.rsi layers: - - state: hybrid-missile + - state: 250aphe map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals @@ -39,10 +80,42 @@ damageModifierSet: Metallic - type: entity - id: TovekCartridgeWeak - name: stock ASM-557 EMPHE missile - description: An individual ASM-557 EMPHE missile for a Tovek launcher. Weaker due to stock specs. - parent: TovekCartridge + id: TovekCartridgeEMPHE + name: 250mm EMPHE missile + description: An individual ASM-557 EMPHE missile for a Tovek launcher. + parent: [ BaseGrenade, BaseC1Contraband ] components: + - type: Tag + tags: + - TovekCartridge + - type: Item + size: Huge - type: CartridgeAmmo - proto: ShipMissileASM557Weak + proto: ShipMissileASM557EMPHE + deleteOnSpawn: true + - type: Sprite + sprite: Forge/Objects/SpaceArtillery/ammo.rsi + layers: + - state: 250emphe + map: ["enum.AmmoVisualLayers.Base"] + - type: Appearance + - type: SpentAmmoVisuals + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 250 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:ExplodeBehavior + - type: Explosive + explosionType: Default + maxIntensity: 100 + intensitySlope: 3 + totalIntensity: 3 + - type: ExplodeOnTrigger + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic +# Forge-change end diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/trident_ammo.yml similarity index 95% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_ammo.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/trident_ammo.yml index d6ae6b3d6f78..2620fcf845a9 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/trident_ammo.yml @@ -1,12 +1,3 @@ -# SPDX-FileCopyrightText: 2025 Onezero0 -# SPDX-FileCopyrightText: 2025 Redrover1760 -# SPDX-FileCopyrightText: 2025 Ted Lukin -# SPDX-FileCopyrightText: 2025 pheenty -# SPDX-FileCopyrightText: 2025 significant harassment -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - - type: entity id: BaseTorpedo name: BaseTorpedo @@ -101,7 +92,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 2500 + damage: 500 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -195,9 +186,9 @@ trackDelay: 1 - type: Explosive explosionType: HardBombShipGun - maxIntensity: 300 - intensitySlope: 90 - totalIntensity: 500 + maxIntensity: 1000 + intensitySlope: 100 + totalIntensity: 200 # destructible components below - type: Fixtures fixtures: @@ -218,12 +209,12 @@ - type: Meteor damageTypes: types: - Blunt: 5 + Blunt: 50 - type: Destructible thresholds: - trigger: !type:DamageTrigger - damage: 85000 + damage: 2400 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_ammo.yml index 09b398dbb5ea..e5768083f411 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_ammo.yml @@ -1,12 +1,13 @@ - type: entity id: VanykCartridge - name: ASM-302 HEAT missile - description: An individual ASM-302 HEAT missile. + name: 150mm HEAT missile + description: An individual ASM-302 HEAT missile used in the Vanyk. parent: BaseGrenade components: - type: Tag tags: - VanykCartridge + # Thats funny, but we need balance them - 150mmShell # intentional, silly + interesting hidden feature stemming from funny shared caliber - type: Item size: Huge - type: CartridgeAmmo @@ -37,12 +38,3 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic - -- type: entity - id: VanykCartridgeWeak - name: ASM-302 missile - description: An individual ASM-302 missile. - parent: VanykCartridge - components: - - type: CartridgeAmmo - proto: ShipMissileASM302Weak diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_ammo.yml index 5d7946bc3dac..d10e86d65130 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_ammo.yml @@ -1,7 +1,40 @@ +- type: entity + id: VesperaMagazine + name: "Vespera 50mm HE missile autoloader" + parent: [BaseItem, RecyclableItemSteelTiny] + components: + - type: Tag + tags: + - VesperaMagazine + - type: Item + size: Small + - type: BallisticAmmoProvider + proto: VesperaCartridge + capacity: 26 + mayTransfer: true + whitelist: + tags: + - VesperaCartridge + - type: ContainerContainer + containers: + ballistic-ammo: !type:Container + - type: Sprite + sprite: _Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi + layers: + - state: base + map: [ "enum.GunVisualLayers.Base" ] + - state: mag-0 + map: [ "enum.GunVisualLayers.Mag" ] + - type: MagazineVisuals + magState: mag + steps: 4 + zeroVisible: false + - type: Appearance + - type: entity id: VesperaCartridge - name: ASM-417 HEAT missile - description: An individual ASM-417 HEAT missile for the Vespera. + name: 50mm HE missile + description: An individual ASM-417 HE missile for the Vespera. parent: BaseGrenade components: - type: Tag @@ -37,12 +70,3 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic - -- type: entity - id: VesperaCartridgeWeak - name: ASM-417 missile - description: An individual ASM-417 missile. - parent: VesperaCartridge - components: - - type: CartridgeAmmo - proto: ShipMissileASM417Weak diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml index cc16c3889e3f..3999307e59ad 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/launcher.yml @@ -38,7 +38,7 @@ - type: WirelessNetworkConnection range: 500 - type: Gun - fireRate: 0.6 + fireRate: 0.25 shootThermalSignature: 32000000 # ~5.6km soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -47,9 +47,10 @@ - type: SpaceArtillery powerChargeRate: 250 powerUsePassive: 200 + powerUseActive: 0 - type: BatterySelfRecharger autoRecharge: true - autoRechargeRate: 70 + autoRechargeRate: 50 - type: Actions - type: ProjectileBatteryAmmoProvider proto: ShipMissileASM501 @@ -87,7 +88,8 @@ - type: WirelessNetworkConnection range: 500 - type: Gun - fireRate: 0.5 + fireRate: 0.2 + # recoil: 10 shootThermalSignature: 32000000 # ~5.6km soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -96,6 +98,7 @@ - type: SpaceArtillery powerChargeRate: 250 powerUsePassive: 200 + powerUseActive: 0 - type: BatterySelfRecharger autoRecharge: true autoRechargeRate: 70 @@ -110,3 +113,6 @@ shipType: Missile - type: ShipGunClass shipClass: Heavy + # - type: ShipRepairable + # repairTime: 30 + # repairCost: 120 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml similarity index 74% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_launcher.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml index 7756687a053e..27d589484042 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/light_munitions_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml @@ -1,21 +1,11 @@ -# SPDX-FileCopyrightText: 2025 Greenwall -# SPDX-FileCopyrightText: 2025 Ilya246 -# SPDX-FileCopyrightText: 2025 Onezero0 -# SPDX-FileCopyrightText: 2025 Your Name -# SPDX-FileCopyrightText: 2025 significant harassment -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - - type: entity id: WeaponTurretLightMunitionsBay name: GPOB-L Light Munitions Bay parent: BallisticArtilleryUnanchorableCartridge description: A relatively small, armored munitions bay capable of holding up to two lightweight ordinance packages. Typically found on light spacecraft, particularly bombers, and provide a limited use method of damaging targets far above the user's weight class. components: - - type: BindToStation # Forge-change - - type: StaticPrice # Forge-change - price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. + - type: StaticPrice + price: 1000 - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/lightmunitionsbay.rsi layers: @@ -27,7 +17,8 @@ - type: GunSignalControl - type: Gun projectileSpeed: 10 - fireRate: 0.2 + fireRate: 0.8 + # recoil: 5 shootThermalSignature: 8000000 # ~2.8km soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -63,3 +54,6 @@ shipType: Missile - type: ShipGunClass shipClass: Medium + # - type: ShipRepairable + # repairTime: 25 + # repairCost: 100 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml index 92f8b1e96509..b99c3ff30253 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/mpssm.yml @@ -1,22 +1,17 @@ -# SPDX-FileCopyrightText: 2025 LaCumbiaDelCoronavirus -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - # ASM - type: entity id: ShipMissileASM19 - name: MPSSM ASM-19 man-portable anti-ship missile + name: MPSSM anti-ship EMPHE missile parent: BaseBulletTrigger categories: [ HideSpawnMenu ] components: - type: Projectile damage: types: - Structural: 1500 - Blunt: 65 - Heat: 50 + Structural: 500 + Blunt: 50 + Heat: 25 - type: Sprite sprite: _Mono/Objects/SpaceArtillery/mini_rocket.rsi layers: @@ -38,10 +33,10 @@ energy: 0.5 - type: ExplodeOnTrigger - type: Explosive - explosionType: DefaultShipGun - totalIntensity: 150 + explosionType: Default + totalIntensity: 8 intensitySlope: 8 - maxIntensity: 75 + maxIntensity: 3 - type: TargetSeeking acceleration: 170 detectionRange: 1200 @@ -66,9 +61,8 @@ damage: types: Structural: 2500 - Blunt: 150 - Piercing: 500 - Heat: 50 + Blunt: 35 + Heat: 15 - type: Sprite sprite: _Mono/Objects/SpaceArtillery/mini_rocket.rsi layers: @@ -98,7 +92,7 @@ exposesTracking: false - type: ExplodeOnTrigger - type: Explosive - explosionType: DefaultShipGun - totalIntensity: 200 + explosionType: Default + totalIntensity: 25 intensitySlope: 80 - maxIntensity: 1000 + maxIntensity: 10 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml index 6d930c6dda93..328d282e46d9 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml @@ -1,28 +1,17 @@ -# SPDX-FileCopyrightText: 2025 Avalon -# SPDX-FileCopyrightText: 2025 Blu -# SPDX-FileCopyrightText: 2025 Disguised Bear -# SPDX-FileCopyrightText: 2025 Ilya246 -# SPDX-FileCopyrightText: 2025 Redrover1760 -# SPDX-FileCopyrightText: 2025 RikuTheKiller -# SPDX-FileCopyrightText: 2025 core-mene -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - # VESPERA - type: entity id: ShipMissileASM417 - name: ASM-417 Mini Missile + name: ASM-417 50mm Mini Missile parent: BaseBulletTrigger categories: [ HideSpawnMenu ] components: - type: Projectile damage: types: - Structural: 450 - Blunt: 65 - Heat: 10 + Structural: 350 + Blunt: 20 + Heat: 30 - type: Sprite sprite: _Mono/Objects/SpaceArtillery/mini_rocket.rsi layers: @@ -52,43 +41,27 @@ - type: MiningGatheringSoft - type: MiningGatheringHard - type: TargetSeeking - acceleration: 300 + acceleration: 120 detectionRange: 500 scanArc: 35 - launchSpeed: 150 - maxSpeed: 180 + launchSpeed: 90 + maxSpeed: 140 trackDelay: 0.1 -- type: entity - id: ShipMissileASM417Weak - name: Stock ASM-417 Mini Missile - parent: ShipMissileASM417 - components: - - type: Projectile - damage: - types: - Structural: 360 - Blunt: 52 - Heat: 8 - - type: Explosive - totalIntensity: 60 - intensitySlope: 6 - maxIntensity: 20 - # ASM-302 - type: entity id: ShipMissileASM302 - name: ASM-302 missile + name: ASM-302 150mm missile parent: BaseBulletTrigger categories: [ HideSpawnMenu ] components: - type: Projectile damage: types: - Structural: 1000 - Blunt: 175 - Heat: 50 + Structural: 1200 + Blunt: 52 + Heat: 25 - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi layers: @@ -111,36 +84,20 @@ - type: ExplodeOnTrigger - type: Explosive explosionType: DefaultShipGun - totalIntensity: 150 + totalIntensity: 250 intensitySlope: 10 - maxIntensity: 55 + maxIntensity: 95 - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard - type: TargetSeeking - acceleration: 200 + acceleration: 120 detectionRange: 600 scanArc: 40 - launchSpeed: 90 + launchSpeed: 10 maxSpeed: 210 trackDelay: 0.2 -- type: entity - id: ShipMissileASM302Weak - name: Stock ASM-302 Missile - parent: ShipMissileASM302 - components: - - type: Projectile - damage: - types: - Structural: 800 - Blunt: 140 - Heat: 40 - - type: Explosive - totalIntensity: 48 - intensitySlope: 5 - maxIntensity: 16 - # ASM-501 - type: entity @@ -152,7 +109,7 @@ - type: Projectile damage: types: - Structural: 15000 + Structural: 1600 Blunt: 2000 Heat: 500 - type: Sprite @@ -169,7 +126,7 @@ visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn - lifetime: 20 + lifetime: 15 - type: PointLight radius: 5 color: orange @@ -187,8 +144,8 @@ acceleration: 50 detectionRange: 600 scanArc: 30 - launchSpeed: 25 - maxSpeed: 30 + launchSpeed: 15 + maxSpeed: 85 trackDelay: 2 # TOVEK @@ -202,7 +159,7 @@ - type: Projectile damage: types: - Structural: 750 # Forge-change + Structural: 100 Heat: 30 - type: Sprite sprite: _Mono/Objects/SpaceArtillery/hybrid_missile.rsi @@ -218,15 +175,22 @@ visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn - lifetime: 6.5 + lifetime: 16 - type: PointLight radius: 3.5 color: orange energy: 0.5 - type: EmpOnTrigger - range: 6 # Forge-change + range: 9 # Forge-change energyConsumption: 2700000 disableDuration: 5 + # - type: ExplodeOnTrigger + # - type: Explosive + # explosionType: Default + # totalIntensity: 20 + # intensitySlope: 10 + # maxIntensity: 15 + # maxTileBreak: 1 - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard @@ -238,20 +202,70 @@ maxSpeed: 125 trackDelay: 0.6 +# Forge-change add APHE & EMPHE version's - type: entity - id: ShipMissileASM557Weak - name: Stock ASM-557 Hybrid EMP Missile - parent: ShipMissileASM557 + id: ShipMissileASM557APHE + name: ASM-557 Hybrid EMP Missile + parent: BaseBulletTrigger + categories: [ HideSpawnMenu ] components: - type: Projectile damage: types: - Structural: 750 # Forge-change - Heat: 24 + Structural: 100 + Heat: 30 + - type: Sprite + sprite: _Mono/Objects/SpaceArtillery/hybrid_missile.rsi + layers: + - state: hybrid-missile + - type: Ammo + muzzleFlash: MuzzleFlashEffectSmall + - type: ShipWeaponProjectile + - type: RadarBlip + radarColor: "#FB00FF" + scale: 1 + requireNoGrid: true + visibleFromOtherGrids: true + shape: hexagon + - type: TimedDespawn + lifetime: 16 + - type: PointLight + radius: 3.5 + color: orange + energy: 0.5 + # - type: EmpOnTrigger + # range: 6 # Forge-change + # energyConsumption: 2700000 + # disableDuration: 5 + - type: ExplodeOnTrigger + - type: Explosive + explosionType: DefaultShipGun + totalIntensity: 100 + intensitySlope: 10 + maxIntensity: 15 + maxTileBreak: 1 + - type: GatheringProjectile + - type: MiningGatheringSoft + - type: MiningGatheringHard + - type: TargetSeeking + acceleration: 200 + detectionRange: 600 + scanArc: 45 + launchSpeed: 50 + maxSpeed: 125 + trackDelay: 0.6 + +- type: entity + id: ShipMissileASM557EMPHE + name: ASM-557 Hybrid EMP Missile + parent: ShipMissileASM557APHE + categories: [ HideSpawnMenu ] + components: - type: EmpOnTrigger - range: 5 - energyConsumption: 2300000 - disableDuration: 4 + range: 6 # Forge-change + energyConsumption: 2700000 + disableDuration: 5 +# Forge-change end # Serpent Torpedo @@ -264,9 +278,9 @@ - type: Projectile damage: types: - Structural: 12500 - Blunt: 1500 - Heat: 500 + Structural: 3000 + Blunt: 10 + Heat: 30 - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi layers: @@ -281,7 +295,7 @@ visibleFromOtherGrids: true shape: hexagon - type: TimedDespawn - lifetime: 21 + lifetime: 25 - type: PointLight radius: 5 color: orange @@ -289,9 +303,9 @@ - type: ExplodeOnTrigger - type: Explosive explosionType: DefaultShipGun - maxIntensity: 4000 # Forge-change + maxIntensity: 4500 # Forge-change intensitySlope: 20 - totalIntensity: 4000 # Forge-change + totalIntensity: 4500 # Forge-change - type: GatheringProjectile - type: MiningGatheringSoft - type: MiningGatheringHard @@ -299,6 +313,6 @@ acceleration: 50 detectionRange: 600 scanArc: 30 - launchSpeed: 25 - maxSpeed: 30 + launchSpeed: 15 + maxSpeed: 60 trackDelay: 2 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml similarity index 61% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_launcher.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml index c4e04f659f5e..2d1b90cc0e46 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/tovek_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml @@ -1,17 +1,11 @@ -# SPDX-FileCopyrightText: 2025 Ilya246 -# SPDX-FileCopyrightText: 2025 kasature90 -# -# SPDX-License-Identifier: MPL-2.0 - - type: entity id: WeaponTurretTovek - name: ADMX-23 TOVEK Hybrid EMP Pod + name: ADMX-23 TOVEK 250mm Missile Pod parent: BallisticArtilleryCartridge - description: A hybrid EMP missile pod by Aetherion Dynamics. Fires EMPHE warheads to disable and weaken enemy ships at long range. Can be remotely activated or linked to a GCS. + description: A 250mm missile pod created by Aetherion Dynamics. Fires 250mm warheads to devastate enemy ships at long range. Can be remotely activated or linked to a GCS. components: - - type: BindToStation # Forge-change - - type: StaticPrice # Forge-change - price: 1 # Чисто чтоб цена шаттлов не сильно менялась. На совесть мапперам. + - type: StaticPrice + price: 10000 - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/tovek.rsi layers: @@ -23,6 +17,7 @@ range: 500 - type: Gun fireRate: 0.2 + # recoil: 5 shootThermalSignature: 8000000 # ~2828m soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -37,15 +32,18 @@ radarColor: "#035EFC" scale: 2 - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false whitelist: tags: - TovekCartridge - capacity: 6 - proto: TovekCartridgeWeak + capacity: 2 + proto: TovekCartridge soundInsert: path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg - type: ShipGunType shipType: Missile - type: ShipGunClass shipClass: Medium + # - type: ShipRepairable + # repairTime: 35 + # repairCost: 120 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml similarity index 79% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_launcher.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml index 7a659e2c78dc..2505e57466ea 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/asm_220_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml @@ -1,15 +1,9 @@ -# SPDX-FileCopyrightText: 2025 Onezero0 -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: AGPL-3.0-or-later - - type: entity id: WeaponTurretASM220 - name: ASM-220 torpedo VLS + name: ASM-220 "Trident" 500mm torpedo rack parent: BallisticArtilleryUnanchorableCartridge - description: A heavy torpedo VLS relying on manual loading to work, usually done at harbor. However, it has high-yield missiles for its size. + description: A heavy built-in torpedo rack for cruisers which relies on manual loading, usually done at harbor. Despite this, it has the largest missiles in the sector. components: - - type: BindToStation # Forge-change - type: StaticPrice price: 10000 - type: Sprite @@ -22,6 +16,7 @@ range: 500 - type: Gun fireRate: 0.1 + # recoil: 10 shootThermalSignature: 16000000 # 4000m after firing soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg @@ -57,3 +52,6 @@ shipType: Missile - type: ShipGunClass shipClass: Medium + # - type: ShipRepairable + # repairTime: 30 + # repairCost: 100 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml similarity index 75% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_launcher.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml index bdf555127f32..f9f0fe56a4db 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vanyk_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml @@ -1,17 +1,9 @@ -# SPDX-FileCopyrightText: 2025 Ilya246 -# SPDX-FileCopyrightText: 2025 kasature90 -# SPDX-FileCopyrightText: 2025 significant harassment -# SPDX-FileCopyrightText: 2025 starch -# -# SPDX-License-Identifier: MPL-2.0 - - type: entity id: WeaponTurretVanyk - name: ASM-302 pod + name: ASM-302 "Vanyk" 150mm missile pod parent: BallisticArtilleryCartridge - description: An escort missile pod manufactured by Aetherion Dynamics. Launches guided missiles for basic ship-to-ship combat and area denial. Can be remotely activated or linked to a GCS. + description: An escort missile pod manufactured by Aetherion Dynamics. Launches 150mm guided missiles for basic ship-to-ship combat and area denial. Uses a built-in autoloader instead of a rack, increasing capacity but reducing rate of fire. Can be remotely activated or linked to a GCS. components: - - type: BindToStation # Forge-change - type: StaticPrice price: 4000 - type: Sprite @@ -25,6 +17,7 @@ range: 500 - type: Gun fireRate: 0.8 + # recoil: 5 minAngle: 0 maxAngle: 0 shootThermalSignature: 8000000 # ~5km if firing continuously @@ -49,12 +42,12 @@ sound: collection: MetalBreak - type: BallisticAmmoProvider - infiniteUnspawned: true + infiniteUnspawned: false whitelist: tags: - VanykCartridge capacity: 12 - proto: VanykCartridgeWeak + proto: VanykCartridge soundInsert: path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg - type: RadarBlip @@ -64,3 +57,6 @@ shipType: Missile - type: ShipGunClass shipClass: Medium + # - type: ShipRepairable + # repairTime: 30 + # repairCost: 100 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml similarity index 51% rename from Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_launcher.yml rename to Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml index 2df7c5d34300..19c33c5eac0a 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/vespera_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml @@ -1,15 +1,9 @@ -# SPDX-FileCopyrightText: 2025 Ilya246 -# SPDX-FileCopyrightText: 2025 kasature90 -# -# SPDX-License-Identifier: MPL-2.0 - - type: entity id: WeaponTurretVespera - name: ADMP-27 VESPERA Rapid-Fire Pod - parent: BallisticArtilleryUnanchorableCartridge - description: A rapid-fire swarm missile pod manufactured by Aetherion Dynamics. Saturates targets with guided warheads to overwhelm defenses. Can be remotely activated or linked to a GCS. + name: ADMP-27 VESPERA 50mm Rapid-Fire Missile Rack + parent: BallisticArtilleryMagazine + description: A rapid-fire swarm missile rack manufactured by Aetherion Dynamics. Saturates targets with guided warheads to overwhelm defenses. Limited ammo, but deadly. Can be remotely activated or linked to a GCS. components: - - type: BindToStation # Forge-change - type: StaticPrice price: 1500 - type: Sprite @@ -23,11 +17,12 @@ range: 500 - type: Gun fireRate: 16 - minAngle: 0 - maxAngle: 1 + # recoil: 1 + minAngle: 4 + maxAngle: 35 burstCooldown: 20 burstFireRate: 16 - shotsPerBurst: 28 + shotsPerBurst: 13 selectedMode: Burst availableModes: Burst shootThermalSignature: 2000000 # ~4.9km if firing continuously @@ -40,15 +35,19 @@ powerUsePassive: 750 powerUseActive: 0 - type: Actions - - type: BallisticAmmoProvider - infiniteUnspawned: true - whitelist: - tags: - - VesperaCartridge - capacity: 26 - proto: VesperaCartridgeWeak - soundInsert: - path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg + - type: MagazineAmmoProvider + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: VesperaMagazine + insertSound: /Audio/Weapons/Guns/MagIn/hpistol_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/sfrifle_magout.ogg + priority: 2 + whitelist: + tags: + - VesperaMagazine + whitelistFailPopup: gun-magazine-whitelist-fail - type: RadarBlip radarColor: "#FCBA03" scale: 2 @@ -56,3 +55,6 @@ shipType: Missile - type: ShipGunClass shipClass: Medium + # - type: ShipRepairable + # repairTime: 30 + # repairCost: 100 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/ammo_tags.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/ammo_tags.yml index 3b5e706dd4df..988bead7dc06 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/ammo_tags.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/ammo_tags.yml @@ -74,6 +74,9 @@ - type: Tag id: VesperaCartridge +- type: Tag + id: VesperaMagazine + - type: Tag id: TovekCartridge diff --git a/Resources/Prototypes/_NF/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/_NF/Entities/Structures/Walls/asteroid.yml index a954bd8ec08e..72e8f6baf1e1 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Walls/asteroid.yml @@ -3,9 +3,6 @@ id: NFBaseSoftOreVein components: - type: OreVein - gatherDestructionWhitelist: - components: - - MiningGatheringHard - type: entity parent: [NFBaseSoftOreVein, AsteroidRock] diff --git a/Resources/Prototypes/_NF/Recipes/Lathes/Packs/blueprints.yml b/Resources/Prototypes/_NF/Recipes/Lathes/Packs/blueprints.yml index 2676d1c728f6..2eaee0935a3c 100644 --- a/Resources/Prototypes/_NF/Recipes/Lathes/Packs/blueprints.yml +++ b/Resources/Prototypes/_NF/Recipes/Lathes/Packs/blueprints.yml @@ -266,6 +266,10 @@ - FRecTovekCartridge - FRec150mmEmpShell - FRecLightFighterOrdinanceGPOItem + - FRecVesperaMagazine + - FRecVanykCartridge + - FRecTovekCartridgeEMPHE + - FRecTovekCartridgeAPHE # Forge-change end # region NFSD @@ -335,6 +339,10 @@ - FRecTovekCartridge - FRec150mmEmpShell - FRecLightFighterOrdinanceGPOItem + - FRecVesperaMagazine + - FRecVanykCartridge + - FRecTovekCartridgeEMPHE + - FRecTovekCartridgeAPHE # Forge-change end # region Salvage diff --git a/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250aphe.png b/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250aphe.png new file mode 100644 index 0000000000000000000000000000000000000000..55d35bd9504439ff490b5619a14354d5dab274b5 GIT binary patch literal 360 zcmV-u0hj)XP)Px$B1uF+R9J=Wlp#;UKp2J}2ny36D+*0%IyzNDf^0HVv03meIF|4Sa1&EgSbhK? zhnOMZ50Ff4tQpGyF+DST2)IkS^h!ubYwl6^-FtWWzW2L3Fc=I5L&aq)_)MSwB@yi*P7sULashy4yU4M`vR#7Op^DF^ zV_w#49(MQCoYae4%XL6jc^o$YkWK&`1qZyQ@0l3jPx$AW1|)R9J=Wl)X;FFcd})h&^+Lh$y6nbjrdWsY`}-Ee}v3u^{mf9Xj<5cmP=2 zp$jUH(23HhR7DJxGSMB$49J!OP7o4G7N5!2-?e@H`3Ec(i^b9~2UTLHH;~`^9wxVy zWB$rfnc#^;#&H{fZkhrx9F6frA_3mA$A2lLbP`V_a=+UG;J7}jt#Di)aeAWTcOvrD zw2-6pD%Xq-s9l~X9RQRQ0B7Qu=j^o*1I+Ul09Sp#pnoxtWknbZ*zdMn-dyX+0m2|+ zI-3y&5n&Mh7&Fg5be_`JntzLi{o*~rp5m_u2i=}Zs0dD$ck#jMHbpQYW07*qoM6N<$ Ef&~PWGXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250emphe.png b/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/250emphe.png new file mode 100644 index 0000000000000000000000000000000000000000..c71a6c26513d07d2621423b3d1ace76586e9cc92 GIT binary patch literal 386 zcmV-|0e$|7P)Px$JV``BR9J=Wlrc-gP!Pv|ijzxl>`)CcrpBq?z<^7@b`o?~1Q$Wn)yWPWB)fx? zlNF~rbdmZ6#7?aVHB=l5o$S&{h|>$kCV@(5m-n0A-Jd(|-Q9a2kw_$x88eqAZj}#$ zzrLsXO=`@fEF=ke!wQPU4FF2E4M3&pkT#iUdBX~Z{T={HPDPvrN>0Tn ztcLc!+va67;(l={^a(w!Yq5g3rAQz;0kCeY@aBC)Y=GuqjqU3rMi*xh9iY`}Cl(Pq zf?>bM;mL8B96;Ah9vcmG%|zGCv6$xI8>g_t)i1s4cftaam`_wDiUM}`%AsAdZ7Nj<&wU4`@C;!( gACW{Nkw|9F4~)QX`PiR1ssI2007*qoM6N<$f>y_=jQ{`u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/meta.json b/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/meta.json index 8faa88d91def..ba08f8c5a353 100644 --- a/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/meta.json +++ b/Resources/Textures/Forge/Objects/SpaceArtillery/ammo.rsi/meta.json @@ -61,6 +61,15 @@ { "name": "220hesh" }, + { + "name": "250emp" + }, + { + "name": "250aphe" + }, + { + "name": "250emphe" + }, { "name": "255mm" }, diff --git a/Resources/Textures/Forge/Objects/SpaceArtillery/hybrid_missile.rsi/hybrid-missile.png b/Resources/Textures/Forge/Objects/SpaceArtillery/hybrid_missile.rsi/hybrid-missile.png new file mode 100644 index 0000000000000000000000000000000000000000..01d70ee71f99be015ede006b7d1de364edf33b25 GIT binary patch literal 385 zcmV-{0e=38P)5a~7=|C3uFA|{JP|$qOk9GA3xlk90WQ6cwnL}hffvxOIJg+S3oEgP#({)M_a<~` zA^ow5hl+_Q&-C#g_;?TDdvlsCW#Ey3R<$7?tZmi0N^j5 z^PPgvJoztsYgLpDZ2Y;V8{&tq8$x;anG68Prg@N-n*n(L2lmw`GjJ@F#}Hskn_1Lg z7QKEb4YmZQGY~Du2Whz(0Jw6+mmIjh$=2uma^TqfDF;^TMH<5=&w*p19GwZ@Pd-y` fl(|~6XFV_t@PZ2y@D1kT2xot6B(GeYxCZ$3BfL< zs&c}bZ?@YV&eG3GE3(y7HkFsmP73vNG?>}ns3mLm#M)(^hUx$R|EDc>1lq{JSQ6wH z%;50sMjD8d4lyyjv*e$pH6u_?T`Xb zi?qjzLd~mh_Wj@dj^$Nc-^y=4ip}G=obA{+tbFUWJA!tF2P@q=d4A5%J`aJlo^5( zJDy)&W5PMnXUPkmP^ESy*8C@P7@qJjoUL5(aMF$r5xf0!@24;{J*!;tQErFGH{*#~ z7Cwg#FJ3LUK*HIM>$E7_h7}r&{GrYXnYkYymM~BHzDtV9JNo*zkTa`;1Q&f+<=oqN z`fF8W&CRaK2XC&}-Y&%$ynD^-r3;e`3K+yz+z&Xs`-<4+r88IEWyt3@W$QUHOX?Fl z!=aKDiV1a%XXN7#y!fTevM0&5`386UCCdk2yBQz7DnB5*!@c}K?@AwkhSj!jI1}o4 zbAps#PxrWRVYZa;jFMLe#Q1Vv@dcPYXg{2iDt@47rTqH+zow@L-Mo3oJYn8F`{NDo zKK{##-r2|C_3dNglJg9YH|6?Q=VT>TbNvbW-gx8B!AS)lib7^C%i}^HVa@DsgLg6QEcO)Sv;kp(HamwYVfPw*a@E-L4F4fO;4_ MUHx3vIVCg!074lur~m)} literal 3194 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 diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/meta.json index 23b90e74fee0..6cc6cd4a5c02 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/meta.json @@ -1,15 +1,14 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by zeranov", + "copyright": "Sprites by kyres1, modified by Avalon-Proto", "size": { "x": 128, "y": 128 }, "states": [ { - "name": "space_artillery", - "directions": 4 + "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/bofors.rsi/space_artillery.png index bc9ce8b7411c153ca2a5e6db550e20ba9511650d..462faf8528489d4762c4cd5fe43bee28a0215f9d 100644 GIT binary patch literal 2035 zcmah~dpOf=AOGzT8}^LKD4J3BNXxk-#+o_3qvnQ5NzmZMfO zOnPAPdDbpxVCCl{)n$SJ}XJwSWc{8DY zRK>Y|{A8n;GFcw9u=-ezM1S3TyKTsFV1dgkTPG}e-N1AuwoV$138|(*3TeM9{GCeX zAC5I1(0&-E{X1YrdFBPZZLS;cCj3U^{c8a|$6uL(Ox!>p1>N(hqHjM> zj+A19gJ!9A-3nuQK}}V4aww-IynXm7fvIYOTEYv*-@_9+^Cwm)IJ{sKUw=!?*LknC835|NBdr>j^BvGTo z@7C+d~qidDy4YYd3a1q&rFK;B9gfR}6eHKgH$!Y{UHFHYv7rA09xa+zTwLTnY-2&p3vZ6KV=i^_j;2K0#!Q`1#Q%G4=!598|L;V zpL=l6ety6G@$$cPkB!va+42;ut5hGyhn=)`H#RD^(pKz*pEa3UR)&KLzq)-hrwlk1 zh{~~~n~yApKJlILTK)2IRoGLP>@I!Ddb4=?7sL$hyzg!L>~Mz~O1=1|WmBh)UO;4| zAIk+@bYmL+Ol+PrFyuk0j9yZ{Cz~}Q97?1;Y&9IT$ZZMh-?!h9ZefRCGh)&uJzs~$ zvN?8W9v3=N|M=l|H zo`ijH%{T(SssL>8)+NcQdc?u&?Rf>a=(Ec|suT~UUTr^((`rW`M%$R5W}-ZEHxZ(? zQ+zL{tr9r){>lV*_@U3bq_p`)tO3evvQCJKUZY{sVXfhxuf-vIxXzTB)hq2i;8Q%M znAj3e!|R=A&ZOe`jM;bDEh7)BmmTdNl0pFz_P~RoJMJMm!gv&YOyA1!`36uHR8!~* zL@@BVox@M>@RHWugpak(FS1LUT!CJVh?%IgN_q8C_va`E2@kU|goIQPGA_B?eH;&l zx*-Ms0>appIho(MoPuq$s}eSn28MkDm3jsHKnF4UmQ)-nfOpj0~}pi>J(z5)}_Nx+TG;K%w}%#rf| z&h5Wf0qO>nv~0YapdS419aHZgMMkff_v2L8J-2;~s!lnrOfBXZ?YAn83!wk~^$%fq zA&^kLkkaU2)m2EeJDd%4X$&ZvW}?Ha&6KX3oDTytDXGg^y)^CU&4KF7GimtKnzBq0 zSQAO*1I-Y!888j(L;AAbLdeXw5Pu~d?15@2HNePyN=e4$`Qn15sMap1vbdvD{*2&0 zIR;DQtyFyDBgi8lsCi%#^Q{gga4$$_WeL$c11wk%P>&=V^n@;po=3;n41sWMrbyTnhKCtkG^=w5J;5>B=b%c({0zDu~qdzX4CFuf_lX literal 5676 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 literal 5387 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 literal 1916 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 literal 5195 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 diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/fang.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/fang.rsi/meta.json index b03518a6fa0d..866f991ef713 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/fang.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/fang.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/flayer.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/flayer.rsi/meta.json index 83b4adda5913..a54894cf3de8 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/flayer.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/flayer.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/harbringer.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/harbringer.rsi/meta.json index 7e560e7ff5e3..90967abc3596 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/harbringer.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/harbringer.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/meta.json index b7a490f5415c..fce1cbbd2d7d 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/meta.json @@ -1,15 +1,14 @@ -{ +{ "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by Onezero0 for Monolith", + "copyright": "Sprites by kyres1 (discord) modified by Avalon-Proto", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "space_artillery", - "directions": 4 + "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/hlgg9.rsi/space_artillery.png index ebe0ce494772bfd91e497467119da3be49873b76..7d527b414f546e3225a40a0b6cad679dacbcfc24 100644 GIT binary patch literal 758 zcmVPx%ut`KgR9J=WSHEx5KotIhN(Vv}UyZ30H!+fxA$622QH6@cguEbNLi_{$6Zmtw zFalFREN*57lqD!3LllYpVlmdaN}3^5n4!7LB~6{XfW!dbWZ%7e@ALQGy*mT{Iue^K zIx4!+s_~DXJ!OAeD#lqoAMKkNShjhMg&Pfqee{BsG!Z2NEVynEJbm(bVeZ}g5B#|o zw4{CBP$9sA2R^+r7x)yqL1NTd4J8EtV0SN#-M#dc@m#^-L{uQ1tAos8R4O~@c7}NL z%w1_yt$46(6ZKjXU;3YiOvQtsQ7Y1B5iJLf}($J3|0KNJES#qqPMol>!!g zFzoZOdab!&!_*lJ``9-#(1?cdWVF_IEIaY*E!#x5GsMm5clhU9oD@SyLm0^m{Mf$3 zZDmxDQXr%uEX=F>WikS$6t12E0C>R}kOW>Wt&u^j0tcDHNF&;UGb4F{biRaK!NI+^ zuK@sGpT9u6(Zsh_9sc?Jo7md8f|Tk5qTDQayU~QJr{L--v>Q$23J%iw(#kb)kRo8& zCU?lH95d;?;EcbsIaV_=P;NvbSPh*1h7YAyJf4gY(h${(2i+iC0o@>|RyDmh{IY1LK^ZtEjFKJ1sLkJ=E9nFh$YYqS_vjQ zgfGOb?Xq1U9ze|IkG5i5v#t0JxSP2o*^%`&hf)!Wxz!EA70?X=jc9nY^ApEYD%}Gh zqd+fcC9=pzn5n>W8~Btfz*4~8W#yM5uuP&uX=>Px# literal 2334 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 literal 11714 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 diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/rac-30_draupnir.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/rac-30_draupnir.rsi/meta.json index 2a54ad5d9c4f..c2fad40485db 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/rac-30_draupnir.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/rac-30_draupnir.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/reaper.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/reaper.rsi/meta.json index 7e560e7ff5e3..90967abc3596 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/reaper.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/reaper.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/meta.json index c9e97f1cd414..d03f1123e57e 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/meta.json @@ -1,15 +1,14 @@ -{ +{ "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by kyres1 (discord)", + "copyright": "Made by kyres1 (discord), modified by Avalon-Proto", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "space_artillery", - "directions": 4 + "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/rubicon.rsi/space_artillery.png index dcd3cd218ff116842c62d2cc6eb52c1ab5f99c8d..d6aded2a92ac9485373885748058d6fa20396ec8 100644 GIT binary patch literal 797 zcmV+&1LFLNP)Px%*GWV{R9J=WS5HgZU>ttBZX#BpO(=z?X%D4f*RrCFBAW~kqcX-pG!-A|DOE*<$ZxW z{AakF7(IEE(afIj9&Xz9ci)b3n2&2AK|~}fT%(cEPNh0(a*3IUEdnGs@Au*LtCt4Z z`lrwIe@!ki`@Cm|00}NPlmVICP{8|r7TLKWfrnyR0{|`%L@b#YkjIh z73SmG_}B!zJ})9s0o96x=L;EA-L17vs-r3@+MU+WeqibWug?nrs8%FIq5_&1XQp~2 zII(GWT0?zX5+H9+oPYhYM`eZmqCq$HIDu+K!l_ip(`PfNRwRs%O(2Z8W|ak|45*5V z2n2)#5f83@qOh;htmp~(J--nWL~6qVO9G_!s-mK>U!+0Lr{3WE{GvgZ%VpvJ@sW~& zu5^$c5+EQXR7Hi~1I)Y2;0y2m1rG#q>@MR>_vZZ>x)Fg$Q~)Yn=fQXiv19_X=_x8- zURtH2+300T-;g&ZphvYLA(l*Fd1=*DW*4>z5b%DVQ&V;V?M};3OETA6YnwQg>IU7A zAkyVyW^)}Zx0HShqSp(tWC9-we*gf@-Xw6jECAqb%8lcrA}s~WHnjW})Z~(@-D#Q5 zbaQ?YTrLYPm!(AXU|q$wzJ>rWo1Vht$u>&kBU@h_mJJE?VC)Pk82tqz^};{h9>lsH{g;lY+Xw3 b004gh=-En9K2tJ>00000NkvXXu0mjf{}gM) literal 1523 zcmV-k}4HXO#=r{lX1%OFJ zK~#9!?OIJ}8%GrWHVAw$mXXqn1I9u>Ye^^dkYmBY2TMpgC6S$*A=JBVOGc&;K}jU!;De#CJt%KG`zP(}t_7+0yR3Fc zGxO%ndvD&)03JMe@Nj`4*zGte&dBWhU(zdKSVYg}Z_969?W?|Botee{)^lzee0CRK zn9n0FP5}U_(lLq~kcY*Dg+c~z1rhDJMFjWOdf#qFu)p=3d#p=#iHM6+h=vo0h7&^< z+h{m}k@gOPduzDz>@G&yJGSZYIT3ra_Vbbi|5!*he|v5bSX#x1rv2n&Q*fODlj4jl zPDcO$Qmuiibc|>?f$iO0}iZ-YxaMG3~NdCir+bpGqZB zE>{3Rd1`;BQb|a)2K-|onP(@gNEX9jjI?*qy0zJpfc6f6oYF4!m|5^y}lq>WkA66@#@Kz-|!B zkU_S{^c3i}nvgW#q*?>y0si>g6I@@}Mtg1%6P+h`{PfW$k5Em3RBNEyYH~Ax4DTDJ zFEOFpYU1k5EFLW9P(ON&^*{{w?%W4!tl2(N&o|(cfRm3+fhC+4KS%-!^LdpBc3Vx@ zJr1=x&AyvSK)*iRD!>wMq-PI*{srsBlA(SYjo}6g^LdOm*LBwf1W2o;=7vImQT0Mpb8D_3nfIVk>!3c2W*YR28^5V=4 zSTYd9AF21K`y*H{#vuLO=sS+%W01tWT&^gQ7davnq0!>CD&YiVi`e-I+q=7{O2<0s zB*SY(0xwzJ4I+XFVS^F!#HhX7YPuQ`(n7Q`M=qV#89MrptHBU6pxiGQp;NgpdS$xUq9?3pdhdv)ICp)Y(dj)sGI8U<6C6KrpLBXu|@l z`$JEPx|x*x9FwvhJb3Wn!Gi}69z6UH!0kV4eQ+m9Pp8nP&h5kmwxU5wK9N>sl|N3xi8)=Is_-;W+i!XUg2*)@TjGaXL7T$vs7#7szGkv51<{_ z&S6Rqtltk1tSp|@GZy7?MOQJhlbN-u>wr1|N@ciyw7HfR*XH|+8(W5p=dI84KwEd9 zGMv`<@zf>+yE;c1;KxrN>Dsh6w(3U*STB|=r_5&ax8;RG#&8@h?%lZ$Ky^Qe%O(kC zi`UlKh^v*(A(DZZ?kUw8IE`mMrO11A1NQenFMqYH4*s!_?7Q}j=~$!H62$3{X;txIp^(8@FpGsk2CZA0swe5_ZIL${OPr1v z(m=G);)#Ct9+NE_Kum~+6KKyZA{tI0xVNTy0{@lDjGnw0G?oz!L>o)9EgN8T74~yf z0rgd0V-@g>pjAJ>=nQ7#0`?fBGuUlEfX22$2l*nd`2kw1TA0u4E-txwKfufvF>-{o zCl-${Vrh5mxWaCR$y#r4pexK#CBE>%kQWZy*$Gub#AR`Jnh@cYybGTa^WedQ2M-q+ Z{{rB%;tho^+2#NM002ovPDHLkV1mTS$DRNH diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/scythe.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/scythe.rsi/meta.json index 092e6de5559b..90987e9c7bbf 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/scythe.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/scythe.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/serpent.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/serpent.rsi/meta.json index f1bbe8e83066..f91b4e0261a3 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/serpent.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/serpent.rsi/meta.json @@ -11,4 +11,4 @@ "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/meta.json new file mode 100644 index 000000000000..4abb62ef56d5 --- /dev/null +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Avalon (@427991401624502274 on Discord) for Monolith", + "size": { + "x": 32, + "y": 64 + }, + "states": [ + { + "name": "space_artillery" + } + ] +} diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/shard.rsi/space_artillery.png new file mode 100644 index 0000000000000000000000000000000000000000..b9efd055f91f0d6ac53e2a7cd06a68b4706a1a00 GIT binary patch literal 1339 zcmV-B1;qM^P)zyJg+4h#&rc_l?b?oJ93kx>c^NFXt}xPSpK_;!tf5kz0s4J={f#IF_u za1{Y91k!(iSR@_HW)uLilOSvr5WBpjpajUa0I`z`ia=~1AX_OpBQXWY2DwkCC?v=k z$esgaE2JZ_laSacsl~}a_8uTx1>w*9`3wveUlrZF&VZ)aeTxPuT=S;)Y^ z-^#$S?J`2_vp?AHjADm!b4rt;egcW`q~?VN18FuOmSON?&}VRDU?@&AHiD?&abRFz zz5D_DKv3fBXOc|Gnt{|G$fY?zqLkaG<>)u_zI&mKlhd($W|hJ}qZp;EiNp z5WWBmwrCvoae(bBW(Z<%XK(@lcoI%?`rC%|00009a7bBm000ie000ie0hKEb8vpqF-0r|x4L%fCY@>r=~g-v zhl0jIa1@mi2;!8M5K2Nz)IowoO(3Mn9YkEyA-pqpdGGGMm?A>H#oXQR&v(D~et+%> z^l;DU6A_*n4>!Cc9#fe@zKEZH65MvV1(z0<8xE%o0I<8-FSsL6$QN6jWGRlbRN1Z(0B+Zq76o#T$aIy!kYltV zWK}>%Xb)skIYj5@s7nAeqmW7EL`;ein4I=&&W+2EOlOfyXE8bL7a}2?hBW7_dtD`< zDk|5TWl}k)ipouZx&%Xx(Z)c(O}oCnscXM$Eco^}-x$YjpK)+3ALzsZw z<;JTwueHB~gjuB{&j$K!I$g6S#gzqzdkFx*>e>p9;z=zV;)!!a!ovWXyZl?T#USc*9(mj`C31dHOD17*<+iU8BRvpYqAhKVU(N6%PbMnH77 z>(ow114%bQjX>-0LDuzfFM+e%v8BP-<~9oXA||K(R6AS*jQu~8%4xZ8_0d7n(dgJ{ z)0BWwL6Rjr^ZO7A1`yla1^}Gpj&%_sj>*(q$QPMTxd;Ggn*#`{6{W54&>}>~z3w$&Jp>Y2}z!hFf)M^B|J|!SzjDXu>r@RaDDmU=kpVSq6-~fCi$=dV5m> zR*Jl^vSC?>?m~h`_ueZZ7Xh*ntvXw)4DaUUA|T0+5)8 z%7?SuF>2)!c6MWZGvi_EIq=SItk2<;8`X+}i76jWF4Ns1!29110Qmatv(WtTFw)Qn xTCeYPcEX>4Tx04R}tkxeKBVHn4MGfOLxgH4h$ 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 literal 14855 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 F{{i8K1S0?d diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/meta.json index c9e97f1cd414..05b521f0d529 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/meta.json @@ -1,15 +1,14 @@ -{ +{ "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by kyres1 (discord)", + "copyright": "Made by kyres1 (discord), modified by Avalon-proto", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "space_artillery", - "directions": 4 + "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t35.rsi/space_artillery.png index b0d28593d2c24b0913644b7e23e9d9cabc24e21d..46afc5135463885ad74fce6d87b213e4d50f91a2 100644 GIT binary patch literal 904 zcmV;319$w1P)Px&LPR%2tvxLvE~54 z!hCdWelY9<0Gf6!5@x?wVGqyjYy$u^T^suYfXvRea8Om|RFu*ic?SRz$vBLdj+MBH z&j)#AQy);STmb-nos?k2bYyn6u~Ii3064oT1)`yZ0B0PDWE=pnzqjkFM{9{>9Gr2L zt<^(teQ~F%8cKJn1FOcGW0@(3V%(^=1>_{z)CVyxSFX^gw}BByEHmW3~TNX7*z{UlT-)N~D}#WHe*EI8x1Jio=|`7Jo($Q80UEtV%p8zf4Z&@Fa{iSUqP zc8ATfl|KS*$f*WwZmo;C#L+UUnHN1;BVE6}lpMf_#f^G~S_C#=;khUoFSkM5TP!4X;;4ExY@4Y@)VK~4lB zu=M(k?^+@M7E9kwrrHK&#y|(;hQrNjLO>Q-N4A~W0TSvB><$x+hm1h?@j-CF-Ln6e z19A&SaMD3C0yHN>?rz^^a-jS8FxF%kF

NMnImY+~ID~LObA<$?OjEMZl{f&Rh%R z12IZSoN@7$oN-SCIO8Jwsg&qI2d*#f1pJz=VSjHIMob^e1CSmi#DT%Euk=2c>Oi$s ziFnm=$_?&3;LaI?VLvb>2O`k4YY}%rA#%C%fJ{0sJ1+_Kl!o+B<%}b7w2Wfu9@gKe efL`T6D$74}Ajv;(tRS-h0000-k}2|Ki_AoBnK1~ExQ zK~#9!?OHuZBU=>yB3isch3zav-K?XVYKmvIO+Z)(AuL!VHm`9_ry$6du`uN#?4q4N zbquVq1PKVT>0guAs2Pn$EYdB+E#3o*dBu9}p4{9??j$o=_q{nyGLy;7J!ii2oxcnG z&n4vc593DErtf!FDdcp{Z<$ZLwf`)g0s!Ws^EfT+clF!>x5_6|2_#bqH0m{s8&P}Q zh}w;M4RoFx!%taE#_;N61o!dZu$YW>eV;+Me<+vFV44x6*H$rWOaK5btXuJ0Kc#qb zgRk%2;8PEe9q0!7`NIP8hXptt_X7nlp1(xw^%S1H|J>7k26dG;X2Jjft5U^AW(614 zEsh=zP&~Q8dTJT7#soIAJD}?T*naatUl2gbn`T7#+KcBe0RRg_OW2KPo6apJV=&DK zjG3^nNVvK__a6aVdGdEI>EjGyucr{feA9X9TF;O$GCXMm!2P#cNQD6Tch93hE?;aq z-i>FmFtjAzi0T@zWMp{K9vz#+=-6Zn2N3$`cQQmz2;gtOTs~7Wyx@T8Wu>7^GvWyf zNO@x>469OY;efyX`Eji=6NdHpOdTX>A%Oco7tR54jAqJvBJ?si)Hw&xIpQB*T!0f0 zalp~TL0@9N%AkY*ooijYz@1eJHR?6ns#K9oC6o|fHL30mLb-eqi^*7vACjV0r3zyvjKyTkHzIUG03p(I1KfYBg&Osm$nq|%Tfqg3$r!dS z_po)jhmFjNI7ex*A8(&$n=%JDUE>)7WWS;?r0cJ}O1XU2;)*H`NTw35YLboyAQaF| zH?uov)N3sZXw+-i%rVGAkk%;0PEUn-oYi&4_kB;0gh{5cCTHawICA z+-P0vSs2uXpx4bdfxKM4DAMp`DxrmffnF9Ur=os0Kyvw_ zh&Hm(DLPTK@--3al!$mC<3`k;i_R+%MVaQ-+1NzY! zBE<1x%=bjds#JwyayiP+mCI)>iINuts7kJm9uAN`&M1>M-It)%5qeb4wlq>vt5WqO z1U^=eqQKz<$cwRs_>Z0>caaP0R=kXMm8doXC?B94fWi<@Md^3Ha(~&+c`?R2Ql9q& zB_y;UU^o6d+;(EzqCnAU5~cVBnh~J;_FWr5CZghY?@dWJMj*c?#PNoV+>z2zz9$2y z5YP`J7&Bp!_-tfWun>nh=9Q{$2dZlWa1Qv?hk3}IRSHo&mvaL;CWN?Yzx@&jP*s|{ zAGSqN)Tq~xUR#A}MqG#Bu1U+Q;bb=%qU0JsWjGs1Ab|uDNFe_K(TbVBQk-?W)J>X-j_;sI_TdNHa= z)z$SmHnTfT9Cl}wLV^Q!KWrntwhG{TQ&Da;^M(X%mXt+$u&pv6Hzf5C<`Zvic@HA} zPiO3Qb$u@2-)`+(S2A1^2ar$^92_WrZ$ z&ynN51xiMSC+$}sBPgESAohByt54dgwspDZxOSQ%ZDw}_2Mjp1x&VmrvwSSK#Jc&E zh5C!#e0H<;rYJyL-qUNVN=BF2o!C_uo+@ZNxj+ZEf|FZu|8^46ja;CK1IYg=q&Pj8 z!W*%_7bJLE*bki+_IoBlITuhFo^+)|E(n7`BBYTD%eyZ4Uf_1Auor_;-Bg$>E3diT ztT5!Z7~*fB9S1z6VyNAqG~~7%mKA?$xMQTr}A;Q+tG(qNM-c>_H u`lIbvj_qK diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/meta.json index 6de76d365e0b..bfd462beac78 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/meta.json @@ -1,15 +1,14 @@ -{ +{ "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by kyres1 (discord)", + "copyright": "Made by kyres1 (discord), Modified by Avalon-Proto", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "space_artillery", - "directions": 1 + "name": "space_artillery" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/t54.rsi/space_artillery.png index e0647435dfea32af5b61a4ab131af886b59e9824..3f81aeb903b4bf16fabb4b5d7324c094187f9b85 100644 GIT binary patch delta 935 zcmV;Y16cf%HM|FqBYyw^b5ch_0Itp)=>Px&c1c7*R9J=WSIMd z(L<3E4HbV7LJb}~NX06&QK2`*n>~0D`X}_-9x4P~`;tadliP_Dimwu<&`SIp^-+MD}7Wl^ys#)~($$yZ>>)%Vtw(UKzGr7YX z)BvC-6u{W%h+%APeFH=#8UUPRW0r~3*dYJ_`9cl=5RDzNKH8>Zc3_#ns~6KI+1J)L zu(rNoX>K`iL!giGUQ!l(F2BLx_GT1=!(nW1MghRkrtrD^T1H6=rM61DrJ#DDf?6!Uc&=IbAxa{MO3>8W z21*0~67du~ZZG-=LI42S*MK2cBZgd!kbMmRfc}9HJZ>)%@swe0Q)?TDN+3!i28YAY zlVAiyNo1Sm3ps>?-N+YmEZe*KIvH!C63icNK~}CID}UFRKimRQ2^*(#$3{mCwkR2@ zmMH|`U^i<=V@IfWI1Sm}6AEB=XCLEJlSnoP@u^nAr&YL%#>g zC85XdHGL=IDTtEDLLf>ae5Z18Li-R4!QuWfh)TFNcrYkHnNm65ExcvlyfeNqw~U3k zWmA8?kbmRaK*{}4RspM+eIF?{?i8p71_DM-aB^)BmEh{) zoKHZX#a2L6!W1CQLECFh1OPy}RM~{BRT*2Wa#?a+eVzF5_zeKy_0MnIO?Wow9$W&6 zcnbMK4jCmaAX~hg@`W7g9Zs$%Q~}}HGZS$`Jw4kxRQK9^skmlOp%1t-~!CzL0~*?KKo3>gn>qB2!@bU=g@eL0^>gYs;bHJy0sCt3`rxsUp%l!*U?fJA)P6 z!hh8w;rFkzvTJP<$S7&S2S4|5K^4GVGV&6UC3Lj}D0ruUr$Ff%D^IkluVO0-SV2Vs zGz_IGR8qi-{IL2c%_wQp9l<*Vb~lHe5M-3J&_57j30Y2ohmYL0eo$=x7f?(@7lox8 z2un8*CZdZ~{bAWAaNjLwXHL}w=wtKC*C5X(k7=L&@%kTD@E6y*$t8ZAVh{iT002ov JPDHLkV1k%hs)_&r literal 6803 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 diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/meta.json index 6cca0bbeecfe..8817e73417ca 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/meta.json @@ -1,15 +1,14 @@ { - "version": 1, - "license": "CC-BY-3.0", - "copyright": "Created by kyres1 (discord)", - "size": { - "x": 48, - "y": 48 - }, - "states": [ - { - "name": "space_artillery", - "directions": 4 - } - ] -} + "version": 1, + "license": "CC-BY-3.0", + "copyright": "Created by kyres1 (discord), Modified by Avalon-Proto", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "space_artillery" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/space_artillery.png b/Resources/Textures/_Mono/Objects/ShuttleWeapons/tarnyx.rsi/space_artillery.png index 110ec113083878e3cd807cf218b8dc1037ae0071..ae92e525b51b6e56a2aae1886a19daad8a0d2bca 100644 GIT binary patch literal 1180 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 diff --git a/Resources/Textures/_Mono/Objects/ShuttleWeapons/thanatos.rsi/meta.json b/Resources/Textures/_Mono/Objects/ShuttleWeapons/thanatos.rsi/meta.json index c2b5b1b4a4dc..dbb79fe8dba2 100644 --- a/Resources/Textures/_Mono/Objects/ShuttleWeapons/thanatos.rsi/meta.json +++ b/Resources/Textures/_Mono/Objects/ShuttleWeapons/thanatos.rsi/meta.json @@ -12,4 +12,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/base.png b/Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..a619f21ca447bdbd4205d26d4276989ff49f954f GIT binary patch literal 328 zcmV-O0k{5%P)Px$0!c(cR9J=Wlue4lKoEtWgSc}e#30P7Et1?IkVOulM-T?@;bn$_Il{PiVE%5P z(qV)&+!z literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-2.png b/Resources/Textures/_Mono/Objects/Weapons/Guns/Ammunition/Boxes/generic_shipgun_box.rsi/mag-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4729d26e1143954261a36b0686e6858fbba7c8 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R})t)YnArY;~ z2@B>ArY;~ z2@ Date: Wed, 14 Jan 2026 01:08:27 +0300 Subject: [PATCH 07/12] update missile names --- .../entities/SpaceArtillery/SpaceArtillery/missile.ftl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl index 57c01dcbd347..6ce9d15983fe 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/missile.ftl @@ -1,7 +1,7 @@ -ent-WeaponTurretASM501 = ракетница ASM-501 +ent-WeaponTurretASM501 = установка ASM-501 .desc = Крейсерский торпедный аппарат. Стреляет тяжёлыми торпедами, нанося большой урон крупным кораблям и станциям. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, NFSD -ent-WeaponTurretSerpentMissile = ракетница «Змея» +ent-WeaponTurretSerpentMissile = установка «Змея» .desc = Легкая и опасная торпедная установка, использующие систему для самозарядки боеприпасов. .suffix = ShipGun, Syndicate ent-WeaponTurretASM220 = установка ASM-220 VLS @@ -10,7 +10,7 @@ ent-WeaponTurretASM220 = установка ASM-220 VLS ent-WeaponTurretLightMunitionsBay = бомбовый отсек GPOB-L .desc = Относительно небольшой бронированный отсек для бомб, способный вместить до двух зарядов. Устанавливается на лёгких кораблях, в основном на бомбардировщиках, и имеет ограниченное применение для поражения целей, значительно превосходящих по весовой категории пользователя. .suffix = ShipGun, Mercenary -ent-WeaponTurretTovek = ракетница ADMX-23 «Товек» +ent-WeaponTurretTovek = ADMX-23 «Товек» .desc = Гибридный ракетный блок ADMX-23 «Товек». Способный выводить из строя вражеские корабли на большом расстоянии. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, Mercenary ent-WeaponTurretVanyk = ASM-302 «Вэнок» 155мм From 58399f19da06f74c811d54f0de65ab73a2c7274d Mon Sep 17 00:00:00 2001 From: v6st Date: Wed, 14 Jan 2026 04:05:56 +0300 Subject: [PATCH 08/12] oao shipguns oao --- .../SpaceArtillery/SpaceArtillery/Energy.ftl | 30 +++++++++---------- .../SpaceArtillery/Ballistic/ammo.yml | 24 +++++++-------- .../SpaceArtillery/Ballistic/projectiles.yml | 26 ++++++++-------- .../SpaceArtillery/Energy/launcher.yml | 2 +- .../SpaceArtillery/Energy/projectiles.yml | 16 +++++----- .../Kinetic/Cartridge/charon_ammo.yml | 2 ++ .../Kinetic/Cartridge/tarnyx_150mm_ammo.yml | 5 ++-- .../Kinetic/Magazine/57mm_launcher.yml | 2 +- .../SpaceArtillery/Kinetic/drone_kinetic.yml | 3 +- .../SpaceArtillery/Kinetic/projectiles.yml | 15 +++++----- .../Missile/Cartridge/bomb_bay_ammo.yml | 3 ++ .../SpaceArtillery/Missile/light_bomb_bay.yml | 3 +- .../SpaceArtillery/Missile/projectiles.yml | 12 ++++---- .../SpaceArtillery/Missile/tovek_launcher.yml | 3 +- .../Missile/trident_launcher.yml | 3 +- .../SpaceArtillery/Missile/vanyk_launcher.yml | 3 +- .../Missile/vespera_launcher.yml | 3 +- 17 files changed, 84 insertions(+), 71 deletions(-) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Energy.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Energy.ftl index fe4642914e32..adc0ec3dc4c8 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Energy.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_Mono/entities/SpaceArtillery/SpaceArtillery/Energy.ftl @@ -1,42 +1,42 @@ -ent-WeaponTurretType35 = плазменное орудие Тип-35 «Мародёр» +ent-WeaponTurretType35 = Тип-35 «Мародёр» .desc = Выпускает магнитно удерживаемые шары плазмы по целям. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, Mercenary -ent-WeaponNavalCannonM25 = добывающая установка M25 - .desc = Выстреливает.. чем-то. Чем-то, что отлично уничтожает породу. +ent-WeaponNavalCannonM25 = M25 «Добытчик» + .desc = Добывающая установка M25 «Добытчик» выстреливает.. чем-то. Чем-то, что отлично уничтожает породу. .suffix = ShipGun, Miner -ent-WeaponTurretType54 = плазменное орудие Тип-54C «Автопульсор» +ent-WeaponTurretType54 = Тип-54C «Автопульсор» .desc = Скоростерльное плазменное орудие, наносящее большой урон. Требует длительной перезарядки. .suffix = ShipGun, DoNotMap -ent-WeaponTurretType241 = плазменное орудие Тип-241 «Копьё» +ent-WeaponTurretType241 = Тип-241 «Копьё» .desc = Разрушительное орудие. Используется для крупномасштабной огневой поддержки и подавления противника. .suffix = ShipGun, DoNotMap -ent-WeaponTurretM25 = добывающий импульсный пульсер M25 - .desc = Механизм для запуска импульсов… чего-то. Разрушает твердые породы, но имеет ограниченный радиус действия. +ent-WeaponTurretM25 = M25-м «Разрушитель» + .desc = Добывающий импульсный пульсер M25-м «Разрушитель», выпускающий импульсы… чего-то. Разрушает твердые породы, но имеет ограниченный радиус действия. .suffix = ShipGun, Miner -ent-WeaponTurretM220 = M220 ЭМИ «Рубикон» +ent-WeaponTurretM220 = M220 «Рубикон» .desc = Пусковая установка М220 «Рубикон» выпускает ЭМИ-снаряды по кораблям, выводя из строя системы мощными электромагнитными импульсами. Идеально подходит для нелетальных атак. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, All -ent-WeaponTurretDymere = турболазер ADEX-9 «Димера» +ent-WeaponTurretDymere = ADEX-9 «Димера» .desc = Знаковое суперкапитальное орудие: выпускает гигантские ионизованные газовые снаряды, способные расплавить даже самую прочную броню корабля. Может активироваться дистанционно или подключаться к консоли управления орудиями. .suffix = ShipGun, DoNotMap -ent-WeaponLaserTurretL1Phalanx = лазерное орудие L-1 «Фаланх» +ent-WeaponLaserTurretL1Phalanx = L-1 «Фаланх» .desc = Лёгкое лазерное орудие, разработанное Pantheon Collective, предназначено для уничтожения угроз любого типа. .suffix = ShipGun, Mercenary -ent-WeaponLaserTurretApollo = тяжёлый лазерный комплекс L-20 «Аполло» +ent-WeaponLaserTurretApollo = L-20 «Аполло» .desc = Одна из ведущих пушек Pantheon Collective. Лучи разогревают зону поражения до температуры, превосходящей температуру ближайших звёзд. .suffix = ShipGun, Capital ent-WeaponTurretReaper = Curio-1089 «Жнец» .desc = Наводящее ужас орудие. Способное в одно-два попадания пробивать даже самую крепкую обшивку. .suffix = ShipGun, AI ONLY -ent-WeaponTurretHarbringer = ионное орудие Curio-129 «Харбрингер» +ent-WeaponTurretHarbringer = Curio-129 «Харбрингер» .desc = Одна из самых мощных EMP-пушек сектора: знак гибели для её целей. .suffix = ShipGun, AI ONLY -ent-WeaponTurretSunder = протонное орудие Curio-1007 «Сандер» +ent-WeaponTurretSunder = Curio-1007 «Сандер» .desc = Непрерывно стреляющий нейтронный репитер, наносящий критический урон. .suffix = ShipGun, AI ONLY -ent-WeaponTurretScythe = нейтронный репитер Curio-1008 «Коса» +ent-WeaponTurretScythe = Curio-1008 «Коса» .desc = Непрерывно стреляющий нейтронный репитер, наносящий критический урон. .suffix = ShipGun, AI ONLY -ent-WeaponLaserTurretFlayer = автокоил Curio-183 «Флаер» +ent-WeaponLaserTurretFlayer = Curio-183 «Флаер» .desc = Уникальное орудие: оно выпускает шквал вольфрамовых дротиков на скорости, близкой к скорости света, разрывая цели на куски. .suffix = ShipGun, AI ONLY diff --git a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml index 933de12c9f55..1addd357f8da 100644 --- a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml +++ b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/ammo.yml @@ -60,7 +60,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge20mmCartridgeBase - capacity: 180 + capacity: 240 mayTransfer: true - type: entity @@ -93,7 +93,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge20mmCartridgeAPHE - capacity: 180 + capacity: 240 mayTransfer: true - type: entity @@ -127,7 +127,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge20mmCartridgeAPCBC - capacity: 180 + capacity: 240 mayTransfer: true - type: entity @@ -162,7 +162,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge30mmCartridgeBase - capacity: 250 + capacity: 360 mayTransfer: true - type: entity @@ -196,7 +196,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge30mmCartridgeAPHE - capacity: 250 + capacity: 360 mayTransfer: true - type: entity @@ -229,7 +229,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge30mmCartridgeAPCBC - capacity: 250 + capacity: 360 mayTransfer: true - type: entity @@ -263,7 +263,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge57mmCartridgeBase - capacity: 95 + capacity: 80 mayTransfer: true - type: entity @@ -296,7 +296,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge57mmCartridgeAPHE - capacity: 95 + capacity: 80 mayTransfer: true - type: entity @@ -329,7 +329,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge57mmCartridgeAPCBC - capacity: 95 + capacity: 80 mayTransfer: true - type: entity @@ -366,7 +366,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge90mmCartridge - capacity: 60 + capacity: 80 mayTransfer: true - type: entity @@ -402,7 +402,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge90mmCartridgeAPHE - capacity: 60 + capacity: 80 mayTransfer: true - type: entity @@ -438,7 +438,7 @@ - type: BallisticAmmoProvider infiniteUnspawned: false proto: Forge90mmCartridgeAPHEBC - capacity: 60 + capacity: 80 mayTransfer: true - type: entity diff --git a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml index 2812b12a9a13..fe5059737415 100644 --- a/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml +++ b/Resources/Prototypes/_Forge/Entities/SpaceArtillery/Ballistic/projectiles.yml @@ -24,7 +24,7 @@ radius: 3.5 energy: 0.5 - type: RadarBlip - scale: 0.85 + scale: 0.65 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -90,7 +90,7 @@ radius: 3.5 energy: 0.5 - type: RadarBlip - scale: 1.15 + scale: 0.85 requireNoGrid: true shape: arrow radarColor: "#1df1f5" @@ -142,9 +142,9 @@ - type: Projectile damage: types: - Structural: 268 # expl + structural? no no no - Blunt: 66 - Piercing: 78 + Structural: 768 # expl + structural? no no no + Blunt: 50 + Piercing: 61 - type: Sprite sprite: _Mono/Objects/SpaceArtillery/57_shell.rsi layers: @@ -152,13 +152,13 @@ scale: 1, 1 - type: ShipWeaponProjectile - type: RadarBlip - scale: 2.5 + scale: 1.3 requireNoGrid: true visibleFromOtherGrids: true shape: triangle radarColor: "#1df1f5" - type: TimedDespawn - lifetime: 14 + lifetime: 20 - type: PointLight color: "#FCBA03" # - type: ExplodeOnTrigger @@ -179,9 +179,9 @@ - type: Projectile damage: types: - Structural: 244 + Structural: 684 Blunt: 76 - Piercing: 94 + Piercing: 73 - type: TriggerOnCollide fixtureID: projectile - type: ExplodeOnTrigger @@ -201,9 +201,9 @@ - type: Projectile damage: types: - Structural: 392 + Structural: 1126 Blunt: 96 - Piercing: 183 + Piercing: 83 # region 90mm - type: entity @@ -388,7 +388,7 @@ muzzleFlash: null - type: ShipWeaponProjectile - type: RadarBlip - scale: 3.25 + scale: 2.75 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -444,7 +444,7 @@ muzzleFlash: null - type: ShipWeaponProjectile - type: RadarBlip - scale: 2.5 + scale: 3 requireNoGrid: true visibleFromOtherGrids: true shape: triangle diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/launcher.yml index b9408810bc3e..7b3969511d3c 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/launcher.yml @@ -199,7 +199,7 @@ - type: Actions - type: ProjectileBatteryAmmoProvider proto: ShipAutopulserPlasmaProjectile - fireCost: 1100 + fireCost: 550 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml index 18ad58b02c87..6cca59ca7a8a 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Energy/projectiles.yml @@ -35,7 +35,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#C92BCC" - scale: 2.5 + scale: 1.5 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -75,7 +75,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#C92BCC" - scale: 1.45 + scale: 1.25 requireNoGrid: true visibleFromOtherGrids: true shape: arrow @@ -121,7 +121,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#FF00AA" - scale: 2.4 + scale: 2 requireNoGrid: true visibleFromOtherGrids: true shape: arrow @@ -196,7 +196,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#C92BCC" - scale: 0.5 + scale: 0.55 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -229,7 +229,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#035EFC" - scale: 2 + scale: 0.9 requireNoGrid: true visibleFromOtherGrids: true shape: circle @@ -264,7 +264,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#C92BCC" - scale: 3.5 + scale: 2.7 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -307,7 +307,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#ffffff" - scale: 2.5 + scale: 1.5 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -344,7 +344,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#9507fa" - scale: 3 + scale: 2.8 requireNoGrid: true visibleFromOtherGrids: true shape: circle diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/charon_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/charon_ammo.yml index f218a322c69e..969e3e2f1127 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/charon_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/charon_ammo.yml @@ -26,6 +26,7 @@ - type: RadarBlip radarColor: "#CF0E0E" scale: 4 + visibleFromOtherGrids: true requireNoGrid: true shape: triangle - type: TimedDespawn @@ -87,6 +88,7 @@ - type: RadarBlip radarColor: "#0DFF00" scale: 4 + visibleFromOtherGrids: true requireNoGrid: true shape: triangle - type: TimedDespawn diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml index 26c2f01650b3..4473e874ce9f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Cartridge/tarnyx_150mm_ammo.yml @@ -25,7 +25,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#035EFC" - scale: 1.5 + scale: 1.3 requireNoGrid: true visibleFromOtherGrids: true shape: circle @@ -102,8 +102,9 @@ muzzleFlash: null - type: ShipWeaponProjectile - type: RadarBlip - scale: 1.75 + scale: 1.3 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 15 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml index 645d868bbdd7..1c884e489052 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/Magazine/57mm_launcher.yml @@ -24,7 +24,7 @@ - type: WirelessNetworkConnection range: 500 - type: Gun - fireRate: 4.5 # Forge-change: rebalance + fireRate: 0.9 # Forge-change: rebalance projectileSpeed: 145 # Forge-change: rebalance minAngle: 0 maxAngle: 2 diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml index 22c62d92cce4..3344ec962399 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/drone_kinetic.yml @@ -5,8 +5,9 @@ description: Ultralight mass driver weapon of unknown origin, designated "Shard" during initial reverse engineering attempts. Light damage, but long range and little upkeep to mount on ships. suffix: DRONE ONLY components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 1500 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/shard.rsi layers: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml index 91ce21604f35..3530bfb3c77e 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Kinetic/projectiles.yml @@ -33,7 +33,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#c51515" - scale: 3 + scale: 1.8 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -313,7 +313,7 @@ - type: Ammo - type: ShipWeaponProjectile - type: RadarBlip - scale: 3.25 + scale: 1.95 requireNoGrid: true visibleFromOtherGrids: true shape: arrow @@ -538,7 +538,7 @@ muzzleFlash: null - type: ShipWeaponProjectile - type: RadarBlip - scale: 4.25 + scale: 3.25 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -635,7 +635,7 @@ muzzleFlash: null - type: ShipWeaponProjectile - type: RadarBlip - scale: 3.25 + scale: 2.25 requireNoGrid: true visibleFromOtherGrids: true shape: triangle @@ -673,14 +673,15 @@ scale: 1, 1 - type: ShipWeaponProjectile - type: RadarBlip - scale: 2.5 + scale: 1.9 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - radarColor: "#1df1f5" + radarColor: "#ffffff" - type: TimedDespawn lifetime: 5 - type: PointLight - color: "#FCBA03" + color: "#ffffff" - type: ExplodeOnTrigger - type: Explosive explosionType: Default diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml index 518413b6980f..57eac40cd086 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/Cartridge/bomb_bay_ammo.yml @@ -23,6 +23,7 @@ radarColor: "#ffff00" scale: 2 requireNoGrid: true + visibleFromOtherGrids: true shape: square - type: TimedDespawn lifetime: 30 @@ -132,6 +133,7 @@ radarColor: "#ffff00" scale: 2 requireNoGrid: true + visibleFromOtherGrids: true shape: triangle - type: TimedDespawn lifetime: 10 @@ -250,6 +252,7 @@ - type: RadarBlip radarColor: "#CF0E0E" scale: 2 + visibleFromOtherGrids: true requireNoGrid: true shape: triangle - type: TimedDespawn diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml index 27d589484042..ff78a34d0869 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/light_bomb_bay.yml @@ -4,8 +4,9 @@ parent: BallisticArtilleryUnanchorableCartridge description: A relatively small, armored munitions bay capable of holding up to two lightweight ordinance packages. Typically found on light spacecraft, particularly bombers, and provide a limited use method of damaging targets far above the user's weight class. components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 1000 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/lightmunitionsbay.rsi layers: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml index 328d282e46d9..8c3a54efec6f 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/projectiles.yml @@ -71,7 +71,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#FCBA03" - scale: 1.5 + scale: 1.2 requireNoGrid: true visibleFromOtherGrids: true shape: hexagon @@ -121,7 +121,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#FCBA03" - scale: 4 + scale: 1.8 requireNoGrid: true visibleFromOtherGrids: true shape: hexagon @@ -198,8 +198,8 @@ acceleration: 200 detectionRange: 600 scanArc: 45 - launchSpeed: 50 - maxSpeed: 125 + launchSpeed: 55 + maxSpeed: 145 trackDelay: 0.6 # Forge-change add APHE & EMPHE version's @@ -251,7 +251,7 @@ acceleration: 200 detectionRange: 600 scanArc: 45 - launchSpeed: 50 + launchSpeed: 45 maxSpeed: 125 trackDelay: 0.6 @@ -290,7 +290,7 @@ - type: ShipWeaponProjectile - type: RadarBlip radarColor: "#FCBA03" - scale: 4 + scale: 2 requireNoGrid: true visibleFromOtherGrids: true shape: hexagon diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml index 2d1b90cc0e46..e25ed4fbec10 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/tovek_launcher.yml @@ -4,8 +4,9 @@ parent: BallisticArtilleryCartridge description: A 250mm missile pod created by Aetherion Dynamics. Fires 250mm warheads to devastate enemy ships at long range. Can be remotely activated or linked to a GCS. components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 10000 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/tovek.rsi layers: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml index 2505e57466ea..8b2c5ea09b91 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/trident_launcher.yml @@ -4,8 +4,9 @@ parent: BallisticArtilleryUnanchorableCartridge description: A heavy built-in torpedo rack for cruisers which relies on manual loading, usually done at harbor. Despite this, it has the largest missiles in the sector. components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 10000 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/asm220.rsi layers: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml index f9f0fe56a4db..9dc1d1a9b521 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vanyk_launcher.yml @@ -4,8 +4,9 @@ parent: BallisticArtilleryCartridge description: An escort missile pod manufactured by Aetherion Dynamics. Launches 150mm guided missiles for basic ship-to-ship combat and area denial. Uses a built-in autoloader instead of a rack, increasing capacity but reducing rate of fire. Can be remotely activated or linked to a GCS. components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 4000 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/vanyk.rsi layers: diff --git a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml index 19c33c5eac0a..dbaa2cf4d267 100644 --- a/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml +++ b/Resources/Prototypes/_Mono/Entities/SpaceArtillery/SpaceArtillery/Missile/vespera_launcher.yml @@ -4,8 +4,9 @@ parent: BallisticArtilleryMagazine description: A rapid-fire swarm missile rack manufactured by Aetherion Dynamics. Saturates targets with guided warheads to overwhelm defenses. Limited ammo, but deadly. Can be remotely activated or linked to a GCS. components: + - type: BindToStation # Forge-change - type: StaticPrice - price: 1500 + price: 1 # Forge-change - type: Sprite sprite: _Mono/Objects/ShuttleWeapons/vespera.rsi layers: From 90711fe9e08e891eae7364ca80f95c18d0ca82f2 Mon Sep 17 00:00:00 2001 From: v6st Date: Thu, 15 Jan 2026 10:16:53 +0300 Subject: [PATCH 09/12] jo pa --- .../Shuttles/UI/ShuttleNavControl.xaml.cs | 88 +++--- .../UserInterface/Controls/ConfirmButton.cs | 2 +- .../FireControl/UI/FireControlNavControl.cs | 121 +++---- .../_Mono/Radar/RadarBlipsSystem.cs | 132 ++++++++ Content.Client/_NF/Radar/RadarBlipSystem.cs | 295 ------------------ .../BUI/ShipyardConsoleBoundUserInterface.cs | 14 + .../_NF/Shipyard/UI/ShipyardConsoleMenu.xaml | 18 +- .../Shipyard/UI/ShipyardConsoleMenu.xaml.cs | 35 ++- .../UI/ShuttleRecordDetailsControl.xaml | 1 + .../UI/ShuttleRecordDetailsControl.xaml.cs | 4 +- .../UI/ShuttleRecordsWindow.xaml.cs | 6 +- .../_NF/Shuttles/UI/ShuttleNavControl.xaml.cs | 26 +- .../Movement/Systems/JetpackSystem.cs | 30 ++ .../_Goobstation/Vehicles/VehicleSystem.cs | 6 +- .../_Mono/Radar/GetRadarSourcesEvent.cs | 8 + .../_Mono}/Radar/RadarBlipComponent.cs | 29 +- Content.Server/_Mono/Radar/RadarBlipSystem.cs | 186 +++++++++++ .../Radar/ToggleableSignatureComponent.cs | 2 +- .../_Mono/Radar/ToggleableSignatureSystem.cs | 3 +- Content.Server/_NF/Radar/RadarBlipSystem.cs | 175 ----------- .../Components/ShipRenameCooldownComponent.cs | 23 ++ .../ShipyardUnassignCooldownComponent.cs | 23 ++ .../Systems/ShipyardSystem.Consoles.cs | 182 ++++++++++- .../_NF/Shipyard/Systems/ShipyardSystem.cs | 15 + .../ShuttleRecordsSystem.Console.cs | 5 + .../Movement/Systems/SharedJetpackSystem.cs | 7 - Content.Shared/_Mono/Radar/RadarMessages.cs | 7 - .../Movement/Systems/SharedJetpackSystem.cs | 57 ---- Content.Shared/_NF/Radar/RadarMessages.cs | 106 ------- .../_NF/Radar/SharedRadarBlipSystem.cs | 6 - .../Components/ShuttleDeedComponent.cs | 4 + .../Events/ShipyardConsoleRenameMessage.cs | 17 + .../ShipyardConsoleUnassignDeedMessage.cs | 14 + .../_NF/ShuttleRecords/ShuttleRecord.cs | 5 + .../ShuttleRecordsConsoleInterfaceState.cs | 2 + .../shipyard/shipyard-console-component.ftl | 4 + .../shipyard/shipyard-console-component.ftl | 13 + .../shuttle-records-system.ftl | 2 + .../ServerInfo/_Forge/Rules/3_ViolationGA.xml | 2 + 39 files changed, 865 insertions(+), 810 deletions(-) create mode 100644 Content.Client/_Mono/Radar/RadarBlipsSystem.cs delete mode 100644 Content.Client/_NF/Radar/RadarBlipSystem.cs create mode 100644 Content.Server/_Mono/Radar/GetRadarSourcesEvent.cs rename {Content.Shared/_NF => Content.Server/_Mono}/Radar/RadarBlipComponent.cs (54%) create mode 100644 Content.Server/_Mono/Radar/RadarBlipSystem.cs delete mode 100644 Content.Server/_NF/Radar/RadarBlipSystem.cs create mode 100644 Content.Server/_NF/Shipyard/Components/ShipRenameCooldownComponent.cs create mode 100644 Content.Server/_NF/Shipyard/Components/ShipyardUnassignCooldownComponent.cs delete mode 100644 Content.Shared/_NF/Movement/Systems/SharedJetpackSystem.cs delete mode 100644 Content.Shared/_NF/Radar/RadarMessages.cs delete mode 100644 Content.Shared/_NF/Radar/SharedRadarBlipSystem.cs create mode 100644 Content.Shared/_NF/Shipyard/Events/ShipyardConsoleRenameMessage.cs create mode 100644 Content.Shared/_NF/Shipyard/Events/ShipyardConsoleUnassignDeedMessage.cs diff --git a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs index 2e0886572445..ebc0c27cae1c 100644 --- a/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs +++ b/Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs @@ -13,7 +13,8 @@ using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Content.Client.Station; // Frontier -using Content.Client._NF.Radar; // Frontier +using Content.Shared._Mono.Radar; +using Content.Client._Mono.Radar; namespace Content.Client.Shuttles.UI; @@ -65,7 +66,7 @@ public ShuttleNavControl() : base(64f, 512f, 512f) // Frontier _station = EntManager.System(); - _blips = EntManager.System();//Mono + _blips = EntManager.System();//Mono OnMouseEntered += HandleMouseEntered; OnMouseExited += HandleMouseExited; @@ -341,7 +342,7 @@ protected override void Draw(DrawingHandleScreen handle) } } - NFAddBlipToList(blipDataList, isOutsideRadarCircle, uiPosition, uiXCentre, uiYCentre, labelColor); // Frontier code + NfAddBlipToList(blipDataList, isOutsideRadarCircle, uiPosition, uiXCentre, uiYCentre, labelColor, gUid); // Frontier code // End Frontier: IFF drawing functions } @@ -438,7 +439,7 @@ protected override void Draw(DrawingHandleScreen handle) handle.DrawString(Font, (uiPosition + coordOffset) * UIScale, coordsText, 0.7f * UIScale, coordColor); } - NFAddBlipToList(blipDataList, isOutsideRadarCircle, uiPosition, uiXCentre, uiYCentre, labelColor); // Frontier code + NfAddBlipToList(blipDataList, isOutsideRadarCircle, uiPosition, uiXCentre, uiYCentre, labelColor); // Frontier code // End Frontier: IFF drawing functions } @@ -470,55 +471,56 @@ protected override void Draw(DrawingHandleScreen handle) handle.DrawLine(origin, origin + angle.ToVec() * ScaledMinimapRadius * 1.42f, Color.Red.WithAlpha(0.1f)); // Get raw blips with grid information - var rawBlips = _blips.GetCurrentBlips(); // Forge-change + var rawBlips = _blips.GetCurrentBlips(); // Prepare view bounds for culling var blipViewBounds = new Box2(-3f, -3f, Size.X + 3f, Size.Y + 3f); + // Prepare view bounds for culling + var monoViewBounds = new Box2(-3f, -3f, Size.X + 3f, Size.Y + 3f); + // Draw blips using the same grid-relative transformation approach as docks - // foreach (var blip in rawBlips) - // { - // Vector2 blipPosInView; - - // // Handle differently based on if there's a grid - // if (blip.Grid == null) - // { - // // For world-space blips without a grid, use standard world transformation - // blipPosInView = Vector2.Transform(blip.Position, worldToShuttle * shuttleToView); - // } - // else if (EntManager.TryGetEntity(blip.Grid, out var gridEntity)) - // { - // // For grid-relative blips, transform using the grid's transform - // var gridToWorld = _transform.GetWorldMatrix(gridEntity.Value); - // var gridToView = gridToWorld * worldToShuttle * shuttleToView; - - // // Transform the grid-local position - // blipPosInView = Vector2.Transform(blip.Position, gridToView); - // } - // else - // { - // // Skip blips with invalid grid references - // continue; - // } - - // // Check if this blip is within view bounds before drawing - // if (blipViewBounds.Contains(blipPosInView)) - // { - // DrawBlipShape(handle, blipPosInView, blip.Scale * 3f, blip.Color.WithAlpha(0.8f), blip.Shape); - // } - // } - // End Frontier + foreach (var blip in rawBlips) + { + var blipPosInView = Vector2.Transform(_transform.ToMapCoordinates(blip.Position).Position, worldToShuttle * shuttleToView); + + // Check if this blip is within view bounds before drawing + if (monoViewBounds.Contains(blipPosInView)) + { + DrawBlipShape(handle, blipPosInView, blip.Scale * 3f, blip.Color.WithAlpha(0.8f), blip.Shape); + } + } - // Forge-change - foreach (var (position, scale, color, shape) in rawBlips) + // Draw hitscan lines from the radar blips system + var hitscanLines = _blips.GetHitscanLines(); + foreach (var line in hitscanLines) { - var blipPosInView = Vector2.Transform(position, worldToShuttle * shuttleToView); - if (blipViewBounds.Contains(blipPosInView)) + var startPosInView = Vector2.Transform(line.Start, worldToShuttle * shuttleToView); + var endPosInView = Vector2.Transform(line.End, worldToShuttle * shuttleToView); + + // Only draw lines if at least one endpoint is within view + if (monoViewBounds.Contains(startPosInView) || monoViewBounds.Contains(endPosInView)) { - DrawBlipShape(handle, blipPosInView, scale * 3f, color.WithAlpha(0.8f), shape); + // Draw the line with the specified thickness and color + handle.DrawLine(startPosInView, endPosInView, line.Color); + + // For thicker lines, draw multiple lines side by side + if (line.Thickness > 1.0f) + { + // Calculate perpendicular vector for thickness + var dir = (endPosInView - startPosInView).Normalized(); + var perpendicular = new Vector2(-dir.Y, dir.X) * 0.5f; + + // Draw additional lines for thickness + for (float i = 1; i <= line.Thickness; i += 1.0f) + { + var offset = perpendicular * i; + handle.DrawLine(startPosInView + offset, endPosInView + offset, line.Color); + handle.DrawLine(startPosInView - offset, endPosInView - offset, line.Color); + } + } } } - // Forge-change end } private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3x2 gridToView) diff --git a/Content.Client/UserInterface/Controls/ConfirmButton.cs b/Content.Client/UserInterface/Controls/ConfirmButton.cs index 3f5f71c63ca6..1a74708a54c1 100644 --- a/Content.Client/UserInterface/Controls/ConfirmButton.cs +++ b/Content.Client/UserInterface/Controls/ConfirmButton.cs @@ -93,7 +93,7 @@ protected override void FrameUpdate(FrameEventArgs args) DrawModeChanged(); } - if (Disabled && _gameTiming.CurTime > _nextCooldown) + if (IsConfirming && Disabled && _gameTiming.CurTime > _nextCooldown) // Mono:388 Disabled = false; } diff --git a/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs b/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs index c18c9ffca8b0..a33227d280ad 100644 --- a/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs +++ b/Content.Client/_Mono/FireControl/UI/FireControlNavControl.cs @@ -13,7 +13,7 @@ using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.Systems; using Content.Shared._Crescent.ShipShields; -using Content.Shared._NF.Radar; +// using Content.Shared._NF.Radar; using Robust.Shared.Physics.Collision.Shapes; using Robust.Client.Graphics; using Robust.Client.UserInterface; @@ -24,7 +24,9 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; -using Content.Client._NF.Radar; +// using Content.Client._NF.Radar; +using Content.Client._Mono.Radar; +using Content.Shared._Mono.Radar; namespace Content.Client._Mono.FireControl.UI; @@ -33,7 +35,7 @@ public sealed class FireControlNavControl : BaseShuttleControl [Dependency] private readonly IMapManager _mapManager = default!; private readonly SharedShuttleSystem _shuttles; private readonly SharedTransformSystem _transform; - private readonly RadarBlipSystem _blips; + private readonly RadarBlipsSystem _blips; private readonly SharedPhysicsSystem _physics; private EntityCoordinates? _coordinates; @@ -73,7 +75,7 @@ public FireControlNavControl() : base(64f, 512f, 512f) IoCManager.InjectDependencies(this); _shuttles = EntManager.System(); _transform = EntManager.System(); - _blips = EntManager.System(); + _blips = EntManager.System(); _physics = EntManager.System(); OnMouseEntered += HandleMouseEntered; @@ -322,101 +324,52 @@ protected override void Draw(DrawingHandleScreen handle) var origin = ScalePosition(-new Vector2(Offset.X, -Offset.Y)); handle.DrawLine(origin, origin + angle.ToVec() * ScaledMinimapRadius * 1.42f, Color.Red.WithAlpha(0.1f)); - var blips = _blips.GetCurrentBlips(); + // Get raw blips with grid information + var rawBlips = _blips.GetCurrentBlips(); - foreach (var blip in blips) + // Prepare view bounds for culling + var monoViewBounds = new Box2(-3f, -3f, Size.X + 3f, Size.Y + 3f); + + // Draw blips using the same grid-relative transformation approach as docks + foreach (var blip in rawBlips) { - var blipPos = Vector2.Transform(blip.Item1, worldToShuttle * shuttleToView); + var blipPosInView = Vector2.Transform(_transform.ToMapCoordinates(blip.Position).Position, worldToShuttle * shuttleToView); - if (blip.Item4 == RadarBlipShape.Ring) - { - DrawShieldRing(handle, blipPos, blip.Item2, blip.Item3.WithAlpha(0.8f)); - } - else + // Check if this blip is within view bounds before drawing + if (monoViewBounds.Contains(blipPosInView)) { - // For other shapes, use the regular drawing method - DrawBlipShape(handle, blipPos, blip.Item2 * 3f, blip.Item3.WithAlpha(0.8f), blip.Item4); - } - - if (_isMouseInside && _controllables != null) - { - var worldPos = blip.Item1; - var isFireControllable = _controllables.Any(c => - { - var coords = EntManager.GetCoordinates(c.Coordinates); - var entityMapPos = _transform.ToMapCoordinates(coords); - return Vector2.Distance(entityMapPos.Position, worldPos) < 0.1f && - _selectedWeapons.Contains(c.NetEntity); - }); - - if (isFireControllable) - { - var cursorViewPos = InverseScalePosition(_lastMousePos); - cursorViewPos = ScalePosition(cursorViewPos); - - Matrix3x2.Invert(worldToShuttle * shuttleToView, out var viewToWorld); - var cursorWorldPos = Vector2.Transform(cursorViewPos, viewToWorld); - - var direction = cursorWorldPos - worldPos; - var ray = new CollisionRay(worldPos, direction.Normalized(), (int)CollisionGroup.Impassable); - - var results = _physics.IntersectRay(xform.MapID, ray, direction.Length(), ignoredEnt: _coordinates?.EntityId); - - if (!results.Any()) - { - handle.DrawLine(blipPos, cursorViewPos, blip.Item3.WithAlpha(0.3f)); - } - } + DrawBlipShape(handle, blipPosInView, blip.Scale * 3f, blip.Color.WithAlpha(0.8f), blip.Shape); } } // Draw hitscan lines from the radar blips system - var hitscanLines = _blips.GetRawHitscanLines(); + var hitscanLines = _blips.GetHitscanLines(); foreach (var line in hitscanLines) { - Vector2 startPosInView; - Vector2 endPosInView; + var startPosInView = Vector2.Transform(line.Start, worldToShuttle * shuttleToView); + var endPosInView = Vector2.Transform(line.End, worldToShuttle * shuttleToView); - // Handle differently based on if there's a grid - if (line.Grid == null) - { - // For world-space lines without a grid, use standard world transformation - startPosInView = Vector2.Transform(line.Start, worldToShuttle * shuttleToView); - endPosInView = Vector2.Transform(line.End, worldToShuttle * shuttleToView); - } - else + // Only draw lines if at least one endpoint is within view + if (monoViewBounds.Contains(startPosInView) || monoViewBounds.Contains(endPosInView)) { - // For grid-relative lines, we need to transform from grid space to world space first - var gridEntity = EntManager.GetEntity(line.Grid.Value); - if (EntManager.TryGetComponent(gridEntity, out var gridXform)) - { - var gridToWorld = _transform.GetWorldMatrix(gridEntity); - var gridStartWorld = Vector2.Transform(line.Start, gridToWorld); - var gridEndWorld = Vector2.Transform(line.End, gridToWorld); + // Draw the line with the specified thickness and color + handle.DrawLine(startPosInView, endPosInView, line.Color); - startPosInView = Vector2.Transform(gridStartWorld, worldToShuttle * shuttleToView); - endPosInView = Vector2.Transform(gridEndWorld, worldToShuttle * shuttleToView); - } - else + // For thicker lines, draw multiple lines side by side + if (line.Thickness > 1.0f) { - // Fallback to treating as world coordinates if grid transform is not available - startPosInView = Vector2.Transform(line.Start, worldToShuttle * shuttleToView); - endPosInView = Vector2.Transform(line.End, worldToShuttle * shuttleToView); - } - } - - // Check if the line is within the view bounds before drawing - var viewBounds = new Box2(-3f, -3f, Size.X + 3f, Size.Y + 3f); - var lineBounds = new Box2( - Math.Min(startPosInView.X, endPosInView.X), - Math.Min(startPosInView.Y, endPosInView.Y), - Math.Max(startPosInView.X, endPosInView.X), - Math.Max(startPosInView.Y, endPosInView.Y) - ); + // Calculate perpendicular vector for thickness + var dir = (endPosInView - startPosInView).Normalized(); + var perpendicular = new Vector2(-dir.Y, dir.X) * 0.5f; - if (viewBounds.Intersects(lineBounds)) - { - handle.DrawLine(startPosInView, endPosInView, line.Color.WithAlpha(0.8f)); + // Draw additional lines for thickness + for (float i = 1; i <= line.Thickness; i += 1.0f) + { + var offset = perpendicular * i; + handle.DrawLine(startPosInView + offset, endPosInView + offset, line.Color); + handle.DrawLine(startPosInView - offset, endPosInView - offset, line.Color); + } + } } } diff --git a/Content.Client/_Mono/Radar/RadarBlipsSystem.cs b/Content.Client/_Mono/Radar/RadarBlipsSystem.cs new file mode 100644 index 000000000000..42146bb6a609 --- /dev/null +++ b/Content.Client/_Mono/Radar/RadarBlipsSystem.cs @@ -0,0 +1,132 @@ +using System.Numerics; +using Content.Shared._Mono.Radar; +using Robust.Shared.Map; +using Robust.Shared.Timing; +using System.Linq; + +namespace Content.Client._Mono.Radar; + +public sealed partial class RadarBlipsSystem : EntitySystem +{ + private const double BlipStaleSeconds = 3.0; + private static readonly List<(Vector2, float, Color, RadarBlipShape)> EmptyBlipList = new(); + private static readonly List<(NetEntity netUid, NetCoordinates Position, Vector2 Vel, float Scale, Color Color, RadarBlipShape Shape)> EmptyRawBlipList = new(); + private static readonly List<(Vector2 Start, Vector2 End, float Thickness, Color Color)> EmptyHitscanList = new(); + private TimeSpan _lastRequestTime = TimeSpan.Zero; + private static readonly TimeSpan RequestThrottle = TimeSpan.FromMilliseconds(250); + + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + + private TimeSpan _lastUpdatedTime; + private List<(NetEntity netUid, NetCoordinates Position, Vector2 Vel, float Scale, Color Color, RadarBlipShape Shape)> _blips = new(); + private List<(Vector2 Start, Vector2 End, float Thickness, Color Color)> _hitscans = new(); + private Vector2 _radarWorldPosition; + + public override void Initialize() + { + base.Initialize(); + SubscribeNetworkEvent(HandleReceiveBlips); + SubscribeNetworkEvent(RemoveBlip); + } + + private void HandleReceiveBlips(GiveBlipsEvent ev, EntitySessionEventArgs args) + { + if (ev?.Blips == null) + { + _blips = EmptyRawBlipList; + } + else + { + _blips = ev.Blips; + } + + if (ev?.HitscanLines == null) + { + _hitscans = EmptyHitscanList; + } + else + { + _hitscans = ev.HitscanLines; + } + + _lastUpdatedTime = _timing.CurTime; + } + + private void RemoveBlip(BlipRemovalEvent args) + { + var blipid = _blips.FirstOrDefault(x => x.netUid == args.NetBlipUid); + _blips.Remove(blipid); + } + + public void RequestBlips(EntityUid console) + { + // Only request if we have a valid console + if (!Exists(console)) + return; + + // Add request throttling to avoid network spam + if (_timing.CurTime - _lastRequestTime < RequestThrottle) + return; + + _lastRequestTime = _timing.CurTime; + + // Cache the radar position for distance culling + if (TryComp(console, out var xform)) + { + _radarWorldPosition = _xform.GetWorldPosition(console); + } + + var netConsole = GetNetEntity(console); + var ev = new RequestBlipsEvent(netConsole); + RaiseNetworkEvent(ev); + } + + /// + /// Gets the current blips as world positions with their scale, color and shape. + /// + public List<(NetEntity NetUid, EntityCoordinates Position, float Scale, Color Color, RadarBlipShape Shape)> GetCurrentBlips() + { + // If it's been more than the stale threshold since our last update, + // the data is considered stale - return an empty list + if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) + return new(); + + var result = new List<(NetEntity, EntityCoordinates, float, Color, RadarBlipShape)>(_blips.Count); + + foreach (var blip in _blips) + { + var coord = GetCoordinates(blip.Position); + + if (!coord.IsValid(EntityManager)) + continue; + + var predictedPos = new EntityCoordinates(coord.EntityId, coord.Position + blip.Vel * (float)(_timing.CurTime - _lastUpdatedTime).TotalSeconds); + + result.Add((blip.netUid, predictedPos, blip.Scale, blip.Color, blip.Shape)); + } + + return result; + } + + /// + /// Gets the hitscan lines to be rendered on the radar + /// + public List<(Vector2 Start, Vector2 End, float Thickness, Color Color)> GetHitscanLines() + { + if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) + return new List<(Vector2, Vector2, float, Color)>(); + + var result = new List<(Vector2, Vector2, float, Color)>(_hitscans.Count); + + foreach (var hitscan in _hitscans) + { + var worldStart = hitscan.Start; + var worldEnd = hitscan.End; + + result.Add((worldStart, worldEnd, hitscan.Thickness, hitscan.Color)); + } + + return result; + } +} diff --git a/Content.Client/_NF/Radar/RadarBlipSystem.cs b/Content.Client/_NF/Radar/RadarBlipSystem.cs deleted file mode 100644 index 2327e166dd07..000000000000 --- a/Content.Client/_NF/Radar/RadarBlipSystem.cs +++ /dev/null @@ -1,295 +0,0 @@ -using System.Numerics; -using Content.Shared._NF.Radar; -using Robust.Shared.Timing; - -namespace Content.Client._NF.Radar; - -/// -/// A system for requesting, receiving, and caching radar blips. -/// Sends off ad hoc requests for blips, caches them for a period of time, and draws them when requested. -/// -/// -/// Ported from Monolith's RadarBlipsSystem. -/// -public sealed partial class RadarBlipSystem : EntitySystem -{ - private const double BlipStaleSeconds = 3.0; - private static readonly List<(Vector2, float, Color, RadarBlipShape)> EmptyBlipList = new(); - private static readonly List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> EmptyRawBlipList = new(); - private static readonly List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> EmptyHitscanList = new(); - private TimeSpan _lastRequestTime = TimeSpan.Zero; - private static readonly TimeSpan RequestThrottle = TimeSpan.FromMilliseconds(250); - - // Maximum distance for blips to be considered visible - private const float MaxBlipRenderDistance = 1000f; - - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly SharedTransformSystem _xform = default!; - - private TimeSpan _lastUpdatedTime; - private List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> _blips = new(); - private List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> _hitscans = new(); - private Vector2 _radarWorldPosition; - - public override void Initialize() - { - base.Initialize(); - SubscribeNetworkEvent(HandleReceiveBlips); - } - - /// - /// Handles receiving blip data from the server. - /// - private void HandleReceiveBlips(GiveBlipsEvent ev, EntitySessionEventArgs args) - { - if (ev?.Blips == null) - { - _blips = EmptyRawBlipList; - } - else - { - _blips = ev.Blips; - } - - if (ev?.HitscanLines == null) - { - _hitscans = EmptyHitscanList; - } - else - { - _hitscans = ev.HitscanLines; - } - - _lastUpdatedTime = _timing.CurTime; - } - - public void RequestBlips(EntityUid console) - { - // Only request if we have a valid console - if (!Exists(console)) - return; - - // Add request throttling to avoid network spam - if (_timing.CurTime - _lastRequestTime < RequestThrottle) - return; - - _lastRequestTime = _timing.CurTime; - - // Cache the radar position for distance culling - if (TryComp(console, out var xform)) - { - _radarWorldPosition = _xform.GetWorldPosition(console); - } - - var netConsole = GetNetEntity(console); - var ev = new RequestBlipsEvent(netConsole); - RaiseNetworkEvent(ev); - } - - /// - /// Gets the current blips as world positions with their scale, color and shape. - /// This is needed for the legacy radar display that expects world coordinates. - /// - public List<(Vector2, float, Color, RadarBlipShape)> GetCurrentBlips() - { - // If it's been more than the stale threshold since our last update, - // the data is considered stale - return an empty list - if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) - return EmptyBlipList; - - var result = new List<(Vector2, float, Color, RadarBlipShape)>(_blips.Count); - foreach (var blip in _blips) - { - Vector2 worldPosition; - - // If no grid, position is already in world coordinates - if (blip.Grid == null) - { - worldPosition = blip.Position; - } - else if (TryGetEntity(blip.Grid, out var gridEntity)) - { - // Transform the grid-local position to world position - var worldPos = _xform.GetWorldPosition(gridEntity.Value); - var gridRot = _xform.GetWorldRotation(gridEntity.Value); - - // Rotate the local position by grid rotation and add grid position - var rotatedLocalPos = gridRot.RotateVec(blip.Position); - worldPosition = worldPos + rotatedLocalPos; - } - else - { - continue; - } - - worldPosition += blip.Velocity * (float)(_timing.CurTime - _lastUpdatedTime).TotalSeconds; - - if (Vector2.DistanceSquared(worldPosition, _radarWorldPosition) > MaxBlipRenderDistance * MaxBlipRenderDistance) - continue; - result.Add((worldPosition, blip.Scale, blip.Color, blip.Shape)); - } - return result; - } - - /// - /// Gets the raw blips data which includes grid information for more accurate rendering. - /// - public List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)> GetRawBlips() - { - if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) - return EmptyRawBlipList; - - // Implement distance culling for raw blips as well - if (_blips.Count == 0) - return _blips; - - var filteredBlips = new List<(NetEntity? Grid, Vector2 Position, Vector2 Velocity, float Scale, Color Color, RadarBlipShape Shape)>(_blips.Count); - - foreach (var blip in _blips) - { - // For non-grid blips, do direct distance check - if (blip.Grid == null) - { - if (Vector2.DistanceSquared(blip.Position, _radarWorldPosition) <= MaxBlipRenderDistance * MaxBlipRenderDistance) - { - filteredBlips.Add(blip); - } - continue; - } - - // For grid blips, transform to world space for distance check - if (TryGetEntity(blip.Grid, out var gridEntity)) - { - var worldPos = _xform.GetWorldPosition(gridEntity.Value); - var gridRot = _xform.GetWorldRotation(gridEntity.Value); - var rotatedLocalPos = gridRot.RotateVec(blip.Position); - var worldPosition = worldPos + rotatedLocalPos; - - if (Vector2.DistanceSquared(worldPosition, _radarWorldPosition) <= MaxBlipRenderDistance * MaxBlipRenderDistance) - { - filteredBlips.Add(blip); - } - } - } - - return filteredBlips; - } - - /// - /// Gets the hitscan lines to be rendered on the radar - /// - public List<(Vector2 Start, Vector2 End, float Thickness, Color Color)> GetWorldHitscanLines() - { - if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) - return new List<(Vector2, Vector2, float, Color)>(); - - var result = new List<(Vector2, Vector2, float, Color)>(_hitscans.Count); - - foreach (var hitscan in _hitscans) - { - Vector2 worldStart, worldEnd; - - // If no grid, positions are already in world coordinates - if (hitscan.Grid == null) - { - worldStart = hitscan.Start; - worldEnd = hitscan.End; - - // Distance culling - check if either end of the line is in range - var startDist = Vector2.DistanceSquared(worldStart, _radarWorldPosition); - var endDist = Vector2.DistanceSquared(worldEnd, _radarWorldPosition); - - if (startDist > MaxBlipRenderDistance * MaxBlipRenderDistance && - endDist > MaxBlipRenderDistance * MaxBlipRenderDistance) - continue; - - result.Add((worldStart, worldEnd, hitscan.Thickness, hitscan.Color)); - continue; - } - - // If grid exists, transform from grid-local to world coordinates - if (TryGetEntity(hitscan.Grid, out var gridEntity)) - { - // Transform the grid-local positions to world positions - var worldPos = _xform.GetWorldPosition(gridEntity.Value); - var gridRot = _xform.GetWorldRotation(gridEntity.Value); - - // Rotate the local positions by grid rotation and add grid position - var rotatedLocalStart = gridRot.RotateVec(hitscan.Start); - var rotatedLocalEnd = gridRot.RotateVec(hitscan.End); - - worldStart = worldPos + rotatedLocalStart; - worldEnd = worldPos + rotatedLocalEnd; - - // Distance culling - check if either end of the line is in range - var startDist = Vector2.DistanceSquared(worldStart, _radarWorldPosition); - var endDist = Vector2.DistanceSquared(worldEnd, _radarWorldPosition); - - if (startDist > MaxBlipRenderDistance * MaxBlipRenderDistance && - endDist > MaxBlipRenderDistance * MaxBlipRenderDistance) - continue; - - result.Add((worldStart, worldEnd, hitscan.Thickness, hitscan.Color)); - } - } - - return result; - } - - /// - /// Gets the raw hitscan data which includes grid information for more accurate rendering. - /// - public List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)> GetRawHitscanLines() - { - if (_timing.CurTime.TotalSeconds - _lastUpdatedTime.TotalSeconds > BlipStaleSeconds) - return EmptyHitscanList; - - if (_hitscans.Count == 0) - return _hitscans; - - var filteredHitscans = new List<(NetEntity? Grid, Vector2 Start, Vector2 End, float Thickness, Color Color)>(_hitscans.Count); - - foreach (var hitscan in _hitscans) - { - // For non-grid hitscans, do direct distance check - if (hitscan.Grid == null) - { - // Check if either endpoint is in range - var startDist = Vector2.DistanceSquared(hitscan.Start, _radarWorldPosition); - var endDist = Vector2.DistanceSquared(hitscan.End, _radarWorldPosition); - - if (startDist <= MaxBlipRenderDistance * MaxBlipRenderDistance || - endDist <= MaxBlipRenderDistance * MaxBlipRenderDistance) - { - filteredHitscans.Add(hitscan); - } - continue; - } - - // For grid hitscans, transform to world space for distance check - if (TryGetEntity(hitscan.Grid, out var gridEntity)) - { - var worldPos = _xform.GetWorldPosition(gridEntity.Value); - var gridRot = _xform.GetWorldRotation(gridEntity.Value); - - var rotatedLocalStart = gridRot.RotateVec(hitscan.Start); - var rotatedLocalEnd = gridRot.RotateVec(hitscan.End); - - var worldStart = worldPos + rotatedLocalStart; - var worldEnd = worldPos + rotatedLocalEnd; - - // Check if either endpoint is in range - var startDist = Vector2.DistanceSquared(worldStart, _radarWorldPosition); - var endDist = Vector2.DistanceSquared(worldEnd, _radarWorldPosition); - - if (startDist <= MaxBlipRenderDistance * MaxBlipRenderDistance || - endDist <= MaxBlipRenderDistance * MaxBlipRenderDistance) - { - filteredHitscans.Add(hitscan); - } - } - } - - return filteredHitscans; - } -} diff --git a/Content.Client/_NF/Shipyard/BUI/ShipyardConsoleBoundUserInterface.cs b/Content.Client/_NF/Shipyard/BUI/ShipyardConsoleBoundUserInterface.cs index 26d7a5e6c872..3a62c7f66a94 100644 --- a/Content.Client/_NF/Shipyard/BUI/ShipyardConsoleBoundUserInterface.cs +++ b/Content.Client/_NF/Shipyard/BUI/ShipyardConsoleBoundUserInterface.cs @@ -27,6 +27,8 @@ protected override void Open() _menu = this.CreateWindow(); _menu.OnOrderApproved += ApproveOrder; _menu.OnSellShip += SellShip; + _menu.OnUnassignDeed += UnassignDeed; // Mono:388 + _menu.OnRenameShip += RenameShip; // Mono:671 _menu.TargetIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent("ShipyardConsole-targetId")); // Disable the NFSD popup for now. @@ -83,4 +85,16 @@ private void SellShip(ButtonEventArgs args) //reserved for a sanity check, but im not sure what since we check all the important stuffs on server already SendMessage(new ShipyardConsoleSellMessage()); } + + // Mono: 388 + private void UnassignDeed(ButtonEventArgs args) + { + SendMessage(new ShipyardConsoleUnassignDeedMessage()); + } + + // Mono:671 + private void RenameShip(string newName) + { + SendMessage(new ShipyardConsoleRenameMessage(newName)); + } } diff --git a/Content.Client/_NF/Shipyard/UI/ShipyardConsoleMenu.xaml b/Content.Client/_NF/Shipyard/UI/ShipyardConsoleMenu.xaml index b66d422e6664..2e577b61d772 100644 --- a/Content.Client/_NF/Shipyard/UI/ShipyardConsoleMenu.xaml +++ b/Content.Client/_NF/Shipyard/UI/ShipyardConsoleMenu.xaml @@ -46,16 +46,30 @@ - +