diff --git a/Content.Client/IconSmoothing/IconSmoothComponent.cs b/Content.Client/IconSmoothing/IconSmoothComponent.cs
index 7898e9dc1e..8881ef4733 100644
--- a/Content.Client/IconSmoothing/IconSmoothComponent.cs
+++ b/Content.Client/IconSmoothing/IconSmoothComponent.cs
@@ -1,84 +1,91 @@
using JetBrains.Annotations;
using Robust.Client.Graphics;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Prototypes;
-namespace Content.Client.IconSmoothing
+namespace Content.Client.IconSmoothing;
+
+///
+/// Makes sprites of other grid-aligned entities like us connect.
+///
+///
+/// The system is based on Baystation12's smoothwalling, and thus will work with those.
+/// To use, set base equal to the prefix of the corner states in the sprite base RSI.
+/// Any objects with the same key will connect.
+///
+[RegisterComponent]
+public sealed partial class IconSmoothComponent : Component
+{
+ [DataField]
+ public bool Enabled = true;
+
+ public (EntityUid?, Vector2i)? LastPosition;
+
+ ///
+ /// Objects with this key can smooth with us, and vice versa.
+ /// TODO: YAML HELL, Make smoothing one way.
+ ///
+ [DataField("key", required: true)]
+ public string SmoothKey { get; private set; }
+
+ ///
+ /// We will attempt to smooth with any objects that contain these keys.
+ /// Only works one way, objects with these keys will not smooth with us
+ ///
+ [DataField]
+ public List AdditionalKeys = new();
+
+ ///
+ /// Index override for our iconsmooth layers. If null, layers will appear on top.
+ ///
+ [DataField]
+ public int? Index;
+
+ ///
+ /// Prepended to the RSI state.
+ ///
+ [DataField("base")]
+ public string StateBase { get; set; } = string.Empty;
+
+ [DataField]
+ public ProtoId? Shader;
+
+ ///
+ /// Mode that controls how the icon should be selected.
+ ///
+ [DataField]
+ public IconSmoothingMode Mode = IconSmoothingMode.Corners;
+
+ ///
+ /// Used by to reduce redundant updates.
+ ///
+ internal int UpdateGeneration { get; set; }
+}
+
+///
+/// Controls the mode with which icon smoothing is calculated.
+///
+[PublicAPI]
+public enum IconSmoothingMode : byte
{
///
- /// Makes sprites of other grid-aligned entities like us connect.
+ /// Each icon is made up of 4 corners, each of which can get a different state depending on
+ /// adjacent entities clockwise, counter-clockwise and diagonal with the corner.
///
- ///
- /// The system is based on Baystation12's smoothwalling, and thus will work with those.
- /// To use, set base equal to the prefix of the corner states in the sprite base RSI.
- /// Any objects with the same key will connect.
- ///
- [RegisterComponent]
- public sealed partial class IconSmoothComponent : Component
- {
- [ViewVariables(VVAccess.ReadWrite), DataField("enabled")]
- public bool Enabled = true;
-
- public (EntityUid?, Vector2i)? LastPosition;
-
- ///
- /// We will smooth with other objects with the same key.
- ///
- [ViewVariables(VVAccess.ReadWrite), DataField("key")]
- public string? SmoothKey { get; private set; }
-
- ///
- /// Additional keys to smooth with.
- ///
- [DataField]
- public List AdditionalKeys = new();
-
- ///
- /// Prepended to the RSI state.
- ///
- [ViewVariables(VVAccess.ReadWrite), DataField("base")]
- public string StateBase { get; set; } = string.Empty;
-
- [DataField("shader", customTypeSerializer:typeof(PrototypeIdSerializer))]
- public string? Shader;
-
- ///
- /// Mode that controls how the icon should be selected.
- ///
- [ViewVariables(VVAccess.ReadWrite), DataField("mode")]
- public IconSmoothingMode Mode = IconSmoothingMode.Corners;
-
- ///
- /// Used by to reduce redundant updates.
- ///
- internal int UpdateGeneration { get; set; }
- }
+ Corners,
///
- /// Controls the mode with which icon smoothing is calculated.
+ /// There are 16 icons, only one of which is used at once.
+ /// The icon selected is a bit field made up of the cardinal direction flags that have adjacent entities.
///
- [PublicAPI]
- public enum IconSmoothingMode : byte
- {
- ///
- /// Each icon is made up of 4 corners, each of which can get a different state depending on
- /// adjacent entities clockwise, counter-clockwise and diagonal with the corner.
- ///
- Corners,
+ CardinalFlags,
- ///
- /// There are 16 icons, only one of which is used at once.
- /// The icon selected is a bit field made up of the cardinal direction flags that have adjacent entities.
- ///
- CardinalFlags,
+ ///
+ /// The icon represents a triangular sprite with only 2 states, representing South / East being occupied or not.
+ ///
+ Diagonal,
- ///
- /// The icon represents a triangular sprite with only 2 states, representing South / East being occupied or not.
- ///
- Diagonal,
-
- ///
- /// Where this component contributes to our neighbors being calculated but we do not update our own sprite.
- ///
- NoSprite,
- }
+ ///
+ /// Where this component contributes to our neighbors being calculated but we do not update our own sprite.
+ ///
+ NoSprite,
}
diff --git a/Content.Client/IconSmoothing/IconSmoothSystem.cs b/Content.Client/IconSmoothing/IconSmoothSystem.cs
index 1028554f4d..9367f80838 100644
--- a/Content.Client/IconSmoothing/IconSmoothSystem.cs
+++ b/Content.Client/IconSmoothing/IconSmoothSystem.cs
@@ -88,13 +88,13 @@ namespace Content.Client.IconSmoothing
_sprite.LayerMapRemove(sprite, CornerLayers.SW);
var state0 = $"{component.StateBase}0";
- _sprite.LayerMapSet(sprite, CornerLayers.SE, _sprite.AddRsiLayer(sprite, state0));
+ _sprite.LayerMapSet(sprite, CornerLayers.SE, _sprite.AddRsiLayer(sprite, state0, index: component.Index));
_sprite.LayerSetDirOffset(sprite, CornerLayers.SE, DirectionOffset.None);
- _sprite.LayerMapSet(sprite, CornerLayers.NE, _sprite.AddRsiLayer(sprite, state0));
+ _sprite.LayerMapSet(sprite, CornerLayers.NE, _sprite.AddRsiLayer(sprite, state0, index: component.Index));
_sprite.LayerSetDirOffset(sprite, CornerLayers.NE, DirectionOffset.CounterClockwise);
- _sprite.LayerMapSet(sprite, CornerLayers.NW, _sprite.AddRsiLayer(sprite, state0));
+ _sprite.LayerMapSet(sprite, CornerLayers.NW, _sprite.AddRsiLayer(sprite, state0, index: component.Index));
_sprite.LayerSetDirOffset(sprite, CornerLayers.NW, DirectionOffset.Flip);
- _sprite.LayerMapSet(sprite, CornerLayers.SW, _sprite.AddRsiLayer(sprite, state0));
+ _sprite.LayerMapSet(sprite, CornerLayers.SW, _sprite.AddRsiLayer(sprite, state0, index: component.Index));
_sprite.LayerSetDirOffset(sprite, CornerLayers.SW, DirectionOffset.Clockwise);
}
@@ -369,7 +369,6 @@ namespace Content.Client.IconSmoothing
while (candidates.MoveNext(out var entity))
{
if (_iconSmoothQuery.TryGetComponent(entity, out var other) &&
- other.SmoothKey != null &&
(other.SmoothKey == smooth.SmoothKey || smooth.AdditionalKeys.Contains(other.SmoothKey)) &&
other.Enabled)
{