diff --git a/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.cs b/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.cs
new file mode 100644
index 000000000000..369a9d207c3d
--- /dev/null
+++ b/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.cs
@@ -0,0 +1,13 @@
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client._ADT.Hands.UI
+{
+ public sealed class HandPlaceholderStatus : Control
+ {
+ public HandPlaceholderStatus()
+ {
+ RobustXamlLoader.Load(this);
+ }
+ }
+}
diff --git a/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.xaml b/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.xaml
new file mode 100644
index 000000000000..702046dcf810
--- /dev/null
+++ b/Content.Client/_ADT/Hands/UI/HandPlaceholderStatus.xaml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml b/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml
new file mode 100644
index 000000000000..6dc56db57bc7
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml.cs b/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml.cs
new file mode 100644
index 000000000000..bec761b85bc9
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitMenu.xaml.cs
@@ -0,0 +1,110 @@
+using Content.Client.UserInterface.Controls;
+using Content.Client.UserInterface.Fragments;
+using Content.Shared._ADT.Modsuit.Components;
+using Content.Shared._ADT.Modsuit.Events;
+using Content.Shared._ADT.Modsuit.Systems;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Utility;
+
+namespace Content.Client._ADT.Modsuits.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class ModSuitMenu : FancyWindow
+{
+ [Dependency] private readonly IEntityManager _ent = default!;
+ private readonly ModSuitSystem _modsuit = default!;
+ private readonly SpriteSystem spriteSystem = default!;
+
+ private List _buttonColors = new()
+ { Color.FromHex("#121923ff"), Color.FromHex("#04060aFF"), Color.FromHex("#153b66"), Color.FromHex("#153b66") };
+
+ private EntityUid _mod;
+
+ public ModSuitMenu()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+ _modsuit = _ent.System();
+ spriteSystem = _ent.System();
+ }
+
+ public event Action? OnRemoveButtonPressed;
+ public event Action? OnActivateButtonPressed;
+ public event Action? OnDeactivateButtonPressed;
+
+ public void SetEntity(EntityUid uid)
+ {
+ MechView.SetEntity(uid);
+ _mod = uid;
+ }
+
+ public void UpdateModStats()
+ {
+ if (!_ent.TryGetComponent(_mod, out var modComp))
+ return;
+
+ _buttonColors = modComp.ButtonColors;
+
+ ModComplex.Text =
+ Loc.GetString("mod-module-space",
+ ("complexity", modComp.CurrentComplexity),
+ ("maxcomplexity", modComp.MaxComplexity)) + Environment.NewLine +
+ Loc.GetString("mod-energy-waste", ("energy", modComp.ModEnergyBaseUsing.ToString("0.0")));
+ var backpanelsStyle = new StyleBoxFlat(modComp.BackpanelsColor);
+ var scrollStyle = new StyleBoxFlat(modComp.ScrollColor);
+
+ UsernamePanel.PanelOverride = backpanelsStyle;
+ ComplexityPanel.PanelOverride = backpanelsStyle;
+ StatePanel.PanelOverride = backpanelsStyle;
+ ScrollPanel.PanelOverride = scrollStyle;
+ BackTexture.Texture = spriteSystem.Frame0(new SpriteSpecifier.Texture(new ResPath(modComp.BackgroundPath)));
+
+ LockButton.Text = modComp.UserName != null ? Loc.GetString("mod-lock") : Loc.GetString("mod-locked");
+ ModUsername.Text = modComp.UserName != null
+ ? Loc.GetString("mod-user") + modComp.UserName
+ : Loc.GetString("mod-no-user");
+ switch (_modsuit.GetPartsToggleStatus(_mod, modComp))
+ {
+ case ModSuitAttachedStatus.NoneToggled:
+ ModState.ModulateSelfOverride = new Color(0.86f, 0.22f, 0.22f, 0.7f);
+ ModState.Text = Loc.GetString("mod-none-toggled");
+ break;
+ case ModSuitAttachedStatus.PartlyToggled:
+ ModState.ModulateSelfOverride = new Color(0.95f, 0.78f, 0.25f);
+ ModState.Text = Loc.GetString("mod-partly-toggled");
+ break;
+ case ModSuitAttachedStatus.AllToggled:
+ ModState.ModulateSelfOverride = new Color(0.35f, 0.84f, 0.33f);
+ ModState.Text = Loc.GetString("mod-all-toggled");
+ break;
+ }
+ }
+
+ public void UpdateModuleView(ModBoundUiState state)
+ {
+ EquipmentControlContainer.RemoveAllChildren();
+
+ foreach (var item in state.EquipmentStates)
+ {
+ var ent = _ent.GetEntity(item.Key);
+
+ if (!_ent.TryGetComponent(ent, out var metaData))
+ continue;
+
+ var uicomp = _ent.GetComponentOrNull(ent);
+ var ui = uicomp?.Ui?.GetUIFragmentRoot();
+
+ var colors = (_buttonColors[0], _buttonColors[1], _buttonColors[2], _buttonColors[3]);
+ var control = new ModuleControl(ent, metaData.EntityName, item.Value, colors, ui);
+
+ control.OnRemoveButtonPressed += () => OnRemoveButtonPressed?.Invoke(ent);
+ control.OnActivateButtonPressed += () => OnActivateButtonPressed?.Invoke(ent);
+ control.OnDeactivateButtonPressed += () => OnDeactivateButtonPressed?.Invoke(ent);
+
+ EquipmentControlContainer.AddChild(control);
+ }
+ }
+}
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitMenuBoundUserInterface.cs b/Content.Client/_ADT/Modsuits/UI/ModSuitMenuBoundUserInterface.cs
new file mode 100644
index 000000000000..a27840057359
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitMenuBoundUserInterface.cs
@@ -0,0 +1,52 @@
+using Content.Shared._ADT.Modsuit.Events;
+using Robust.Client.UserInterface;
+
+namespace Content.Client._ADT.Modsuits.UI;
+
+public sealed class ModSuitMenuBoundUserInterface : BoundUserInterface
+{
+ private ModSuitMenu? _menu;
+
+ public ModSuitMenuBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ IoCManager.InjectDependencies(this);
+ }
+
+ protected override void UpdateState(BoundUserInterfaceState state)
+ {
+ base.UpdateState(state);
+
+ if (state is not ModBoundUiState msg)
+ return;
+
+ _menu?.UpdateModStats();
+ _menu?.UpdateModuleView(msg);
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _menu = this.CreateWindow();
+ _menu.SetEntity(Owner);
+
+ _menu.OpenCentered();
+ _menu.UpdateModStats();
+
+ _menu.LockButton.OnPressed += _ => OnLockPressed();
+
+ _menu.OnRemoveButtonPressed +=
+ owner => SendPredictedMessage(new ModModuleRemoveMessage(EntMan.GetNetEntity(owner)));
+ _menu.OnActivateButtonPressed += owner =>
+ SendPredictedMessage(new ModModuleActivateMessage(EntMan.GetNetEntity(owner)));
+ _menu.OnDeactivateButtonPressed += owner =>
+ SendPredictedMessage(new ModModuleDeactivateMessage(EntMan.GetNetEntity(owner)));
+ }
+
+ private void OnLockPressed()
+ {
+ var msg = new ModLockMessage(EntMan.GetNetEntity(Owner));
+ SendPredictedMessage(msg);
+ _menu?.UpdateModStats();
+ }
+}
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitRadialBoundUserInterface.cs b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialBoundUserInterface.cs
new file mode 100644
index 000000000000..6b41f9f835ab
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialBoundUserInterface.cs
@@ -0,0 +1,43 @@
+using Content.Shared._ADT.Modsuit.Events;
+using Robust.Client.UserInterface;
+
+namespace Content.Client._ADT.Modsuits.UI;
+
+public sealed class ModSuitRadialBoundUserInterface : BoundUserInterface
+{
+ private readonly IEntityManager _entityManager;
+ private ModSuitRadialMenu? _menu;
+
+ public ModSuitRadialBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ IoCManager.InjectDependencies(this);
+ _entityManager = IoCManager.Resolve();
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _menu = this.CreateWindow();
+ _menu.SetEntity(Owner);
+
+ _menu.SendToggleClothingMessageAction += SendModSuitMessage;
+ _menu.OpenCentered();
+ }
+
+ protected override void UpdateState(BoundUserInterfaceState state)
+ {
+ base.UpdateState(state);
+
+ if (state is not RadialModBoundUiState)
+ return;
+
+ _menu?.RefreshUI();
+ }
+
+ private void SendModSuitMessage(EntityUid uid)
+ {
+ var message = new ToggleModSuitPartMessage(_entityManager.GetNetEntity(uid));
+ SendPredictedMessage(message);
+ }
+}
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml
new file mode 100644
index 000000000000..83be4d0723d9
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml.cs b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml.cs
new file mode 100644
index 000000000000..5ec513652f09
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModSuitRadialMenu.xaml.cs
@@ -0,0 +1,101 @@
+using System.Numerics;
+using Content.Client.UserInterface.Controls;
+using Content.Shared._ADT.Modsuit.Components;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client._ADT.Modsuits.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class ModSuitRadialMenu : RadialMenu
+{
+ [Dependency] private readonly EntityManager _entityManager = default!;
+
+ public ModSuitRadialMenu()
+ {
+ IoCManager.InjectDependencies(this);
+ RobustXamlLoader.Load(this);
+ }
+
+ public EntityUid Entity { get; set; }
+
+ public event Action? SendToggleClothingMessageAction;
+
+ public void SetEntity(EntityUid uid)
+ {
+ Entity = uid;
+
+ CreateButtons();
+ }
+
+ private void CreateButtons()
+ {
+ if (!_entityManager.TryGetComponent(Entity, out var mod) || mod.PartsContainer == null)
+ return;
+
+ foreach (var attached in mod.ClothingUids)
+ {
+ var part = _entityManager.GetEntity(attached.Key);
+ AddButton(part, mod.BackpanelsColor, !mod.PartsContainer.Contains(part));
+ }
+ }
+
+ public void RefreshUI()
+ {
+ if (!_entityManager.TryGetComponent(Entity, out var mod) || mod.PartsContainer == null)
+ return;
+
+ foreach (var item in Main.Children)
+ {
+ if (item is not ModSuitRadialMenuButton button)
+ continue;
+
+ var equipped = !mod.PartsContainer.Contains(button.AttachedClothingId);
+
+ button.SeparatorColor = equipped ? Color.LimeGreen : Color.IndianRed;
+ button.BorderColor = equipped ? Color.LimeGreen : Color.IndianRed;
+ }
+ }
+
+ private void AddButton(EntityUid entity, Color panelColor, bool equipped)
+ {
+ if (!_entityManager.TryGetComponent(entity, out var meta) || meta.EntityPrototype == null)
+ return;
+
+ var tooltipText = Loc.GetString($"modsuit-{(equipped ? "unattach" : "attach")}-tooltip");
+
+ var button = new ModSuitRadialMenuButton
+ {
+ BackgroundColor = panelColor,
+ SeparatorColor = equipped ? Color.LimeGreen : Color.IndianRed,
+ BorderColor = equipped ? Color.LimeGreen : Color.IndianRed,
+ DrawBorder = true,
+ StyleClasses = { "RadialMenuButton" },
+ SetSize = new Vector2(64, 64),
+ ToolTip = tooltipText,
+ AttachedClothingId = entity,
+ };
+
+ var spriteView = new SpriteView
+ {
+ SetSize = new Vector2(48, 48),
+ VerticalAlignment = VAlignment.Center,
+ HorizontalAlignment = HAlignment.Center,
+ Stretch = SpriteView.StretchMode.Fill,
+ };
+
+ var copy = _entityManager.Spawn(meta.EntityPrototype.ID);
+ spriteView.SetEntity(copy);
+ button.AddChild(spriteView);
+
+ button.OnButtonUp += _ => SendToggleClothingMessageAction?.Invoke(entity);
+
+ Main.AddChild(button);
+ }
+}
+
+public sealed class ModSuitRadialMenuButton : RadialMenuTextureButtonWithSector
+{
+ public EntityUid AttachedClothingId { get; set; }
+}
diff --git a/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml b/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml
new file mode 100644
index 000000000000..6d9c76224447
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml.cs b/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml.cs
new file mode 100644
index 000000000000..806dcf880934
--- /dev/null
+++ b/Content.Client/_ADT/Modsuits/UI/ModuleControl.xaml.cs
@@ -0,0 +1,57 @@
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client._ADT.Modsuits.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class ModuleControl : Control
+{
+ [Dependency] private readonly IEntityManager _ent = default!;
+ public event Action? OnRemoveButtonPressed;
+ public event Action? OnActivateButtonPressed;
+ public event Action? OnDeactivateButtonPressed;
+
+ public ModuleControl(EntityUid entity, string itemName, bool active, (Color, Color, Color, Color) buttonColors, Control? fragment)
+ {
+ RobustXamlLoader.Load(this);
+
+ EquipmentName.SetMessage(itemName);
+ EquipmentView.SetEntity(entity);
+
+ if (fragment != null)
+ {
+ Separator.Visible = true;
+ CustomControlContainer.AddChild(fragment);
+ }
+
+ StartupButtons(active, buttonColors);
+ }
+
+ private void StartupButtons(bool active, (Color, Color, Color, Color) colors)
+ {
+ var activateText = active ? Loc.GetString("mod-activate-nonactive") : Loc.GetString("mod-activate-active");
+ var deactivateText = active ? Loc.GetString("mod-deactivate-active") : Loc.GetString("mod-deactivate-nonactive");
+ var ejectText = Loc.GetString("mod-eject");
+
+ ActivateButton.Panel.AddChild(new Label() { Text = activateText, HorizontalAlignment = HAlignment.Center });
+ DeactivateButton.Panel.AddChild(new Label() { Text = deactivateText, HorizontalAlignment = HAlignment.Center });
+ EjectButton.Panel.AddChild(new Label() { Text = ejectText, HorizontalAlignment = HAlignment.Center });
+
+ ActivateButton.Button.Disabled = active;
+ DeactivateButton.Button.Disabled = !active;
+
+ (ActivateButton.Color, ActivateButton.DisabledColor, ActivateButton.HoveredColor, ActivateButton.BorderColor) = colors;
+ (DeactivateButton.Color, DeactivateButton.DisabledColor, DeactivateButton.HoveredColor, DeactivateButton.BorderColor) = colors;
+ (EjectButton.Color, EjectButton.DisabledColor, EjectButton.HoveredColor, EjectButton.BorderColor) = colors;
+
+ ActivateButton.UpdateColor();
+ DeactivateButton.UpdateColor();
+ EjectButton.UpdateColor();
+
+ EjectButton.OnPressed += _ => OnRemoveButtonPressed?.Invoke();
+ ActivateButton.OnPressed += _ => OnActivateButtonPressed?.Invoke();
+ DeactivateButton.OnPressed += _ => OnDeactivateButtonPressed?.Invoke();
+ }
+}
diff --git a/Content.Client/_ADT/UserInterface/Controls/FancyButton/DrawButton.cs b/Content.Client/_ADT/UserInterface/Controls/FancyButton/DrawButton.cs
new file mode 100644
index 000000000000..a68a138415d8
--- /dev/null
+++ b/Content.Client/_ADT/UserInterface/Controls/FancyButton/DrawButton.cs
@@ -0,0 +1,17 @@
+using Robust.Client.UserInterface.Controls;
+
+namespace Content.Client._ADT.UserInterface.Controls.FancyButton;
+
+public sealed class DrawButton : Button
+{
+ public event Action? OnDrawModeChanged;
+
+ public DrawButton()
+ {
+ }
+
+ protected override void DrawModeChanged()
+ {
+ OnDrawModeChanged?.Invoke();
+ }
+}
diff --git a/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml b/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml
new file mode 100644
index 000000000000..2074432ae8fd
--- /dev/null
+++ b/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml.cs b/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml.cs
new file mode 100644
index 000000000000..8999be500f5d
--- /dev/null
+++ b/Content.Client/_ADT/UserInterface/Controls/FancyButton/FancyButton.xaml.cs
@@ -0,0 +1,53 @@
+using Robust.Client.AutoGenerated;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client._ADT.UserInterface.Controls.FancyButton;
+
+[Virtual]
+[GenerateTypedNameReferences]
+public partial class FancyButton : Control
+{
+ // Вызывается по нажатию кнопки
+ public Action? OnPressed;
+
+ // Стандартные цвета
+ public static readonly Color DefaultColor = Color.FromHex("#141F2F");
+ public static readonly Color DefaultBorderColor = Color.FromHex("#4972A1");
+ public static readonly Color DefaultHoveredColor = Color.FromHex("#4972A1");
+ private static readonly Color DefaultDisabledColor = Color.FromHex("#47000fff");
+
+ // Использующиеся цвета, меняются в коде
+ public Color Color = DefaultColor;
+ public Color BorderColor = DefaultBorderColor;
+ public Color HoveredColor = DefaultHoveredColor;
+ public Color DisabledColor = DefaultDisabledColor;
+
+ public FancyButton()
+ {
+ RobustXamlLoader.Load(this);
+
+ Button.OnPressed += Pressed;
+ Button.OnDrawModeChanged += UpdateColor;
+
+ UpdateColor();
+ }
+
+ public void UpdateColor()
+ {
+ var panel = (StyleBoxFlat)Panel.PanelOverride!;
+ if (Button.Disabled)
+ panel.BackgroundColor = DisabledColor;
+ else
+ panel.BackgroundColor = Button.IsHovered ? HoveredColor : Color;
+
+ panel.BorderColor = BorderColor;
+ }
+
+ private void Pressed(BaseButton.ButtonEventArgs args)
+ {
+ OnPressed?.Invoke(args);
+ }
+}
diff --git a/Content.Client/_ADT/UserInterface/Controls/ScaledAnimatedTextureRect.cs b/Content.Client/_ADT/UserInterface/Controls/ScaledAnimatedTextureRect.cs
new file mode 100644
index 000000000000..5a1442373cce
--- /dev/null
+++ b/Content.Client/_ADT/UserInterface/Controls/ScaledAnimatedTextureRect.cs
@@ -0,0 +1,74 @@
+using System.Numerics;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.Utility;
+using Robust.Shared.Graphics.RSI;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
+
+namespace Content.Client._ADT.UserInterface.Controls
+{
+ ///
+ /// Copy-paste of engine that can be scaled.
+ ///
+ public sealed class ScaledAnimatedTextureRect : Control
+ {
+ private IRsiStateLike? _state;
+ private int _curFrame;
+ private float _curFrameTime;
+
+ ///
+ /// Internal TextureRect used to do actual drawing of the texture.
+ /// You can use this property to change shaders or styling or such.
+ ///
+ public TextureRect DisplayRect { get; }
+
+ public RsiDirection RsiDirection { get; } = RsiDirection.South;
+
+ public ScaledAnimatedTextureRect()
+ {
+ IoCManager.InjectDependencies(this);
+
+ DisplayRect = new TextureRect()
+ {
+ TextureScale = new(1, 1)
+ };
+ AddChild(DisplayRect);
+ }
+
+ public void SetFromSpriteSpecifier(SpriteSpecifier specifier, Vector2 scale)
+ {
+ _curFrame = 0;
+ _state = specifier.RsiStateLike();
+ _curFrameTime = _state.GetDelay(0);
+ DisplayRect.Texture = _state.GetFrame(RsiDirection, 0);
+ DisplayRect.TextureScale = scale;
+ }
+
+ public void SetScale(Vector2 scale)
+ {
+ DisplayRect.TextureScale = scale;
+ }
+
+ protected override void FrameUpdate(FrameEventArgs args)
+ {
+ if (!VisibleInTree || _state == null || !_state.IsAnimated)
+ return;
+
+ var oldFrame = _curFrame;
+
+ _curFrameTime -= args.DeltaSeconds;
+ while (_curFrameTime < _state.GetDelay(_curFrame))
+ {
+ _curFrame = (_curFrame + 1) % _state.AnimationFrameCount;
+ _curFrameTime += _state.GetDelay(_curFrame);
+ }
+
+ if (_curFrame != oldFrame)
+ {
+ DisplayRect.Texture = _state.GetFrame(RsiDirection, _curFrame);
+ }
+ }
+ }
+}
diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs
index c8ebed23d011..46882093b163 100644
--- a/Content.Server/Power/EntitySystems/BatterySystem.cs
+++ b/Content.Server/Power/EntitySystems/BatterySystem.cs
@@ -156,7 +156,27 @@ public float UseCharge(EntityUid uid, float value, BatteryComponent? battery = n
return ChangeCharge(uid, -value, battery);
}
+ ///ADT plasmacutters start
+ public float AddCharge(EntityUid uid, float value, BatteryComponent? battery = null)
+ {
+ if (value <= 0 || !Resolve(uid, ref battery))
+ return 0;
+ var newValue = Math.Clamp(battery.CurrentCharge + value, 0, battery.MaxCharge);
+ battery.CurrentCharge = newValue;
+ var ev = new ChargeChangedEvent(battery.CurrentCharge, battery.MaxCharge);
+ RaiseLocalEvent(uid, ref ev);
+ return newValue;
+ }
+ public bool TryAddCharge(EntityUid uid, float value, BatteryComponent? battery = null)
+ {
+ if (!Resolve(uid, ref battery, false))
+ return false;
+
+ AddCharge(uid, value, battery);
+ return true;
+ }
+ ///ADT plasmacutters end
public void SetMaxCharge(EntityUid uid, float value, BatteryComponent? battery = null)
{
if (!Resolve(uid, ref battery))
diff --git a/Content.Server/_ADT/DNALocker/Components/DNALockerComponent.cs b/Content.Server/_ADT/DNALocker/Components/DNALockerComponent.cs
new file mode 100644
index 000000000000..e837444b5a1d
--- /dev/null
+++ b/Content.Server/_ADT/DNALocker/Components/DNALockerComponent.cs
@@ -0,0 +1,32 @@
+using Robust.Shared.Audio;
+
+namespace Content.Server._ADT.DNALocker.Components;
+
+[RegisterComponent]
+public sealed partial class DNALockerComponent : Component
+{
+ [DataField]
+ public string DNA = string.Empty;
+
+ [DataField]
+ public bool Enabled = true;
+ public bool IsLocked => DNA != string.Empty;
+
+ [DataField]
+ public bool IsEquipped = false;
+
+ [DataField]
+ public bool CanBeEmagged = true;
+
+ [DataField("lockSound")]
+ public SoundSpecifier LockSound = new SoundPathSpecifier("/Audio/ADT/dna-lock.ogg");
+
+ [DataField("emagSound")]
+ public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks");
+
+ [DataField("lockerExplodeSound")]
+ public SoundSpecifier LockerExplodeSound = new SoundPathSpecifier("/Audio/Effects/Grenades/SelfDestruct/SDS_Charge.ogg");
+
+ [DataField("deniedSound")]
+ public SoundSpecifier DeniedSound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg");
+}
diff --git a/Content.Server/_ADT/DNALocker/Systems/DNALockerSystem.cs b/Content.Server/_ADT/DNALocker/Systems/DNALockerSystem.cs
new file mode 100644
index 000000000000..9c5d42061184
--- /dev/null
+++ b/Content.Server/_ADT/DNALocker/Systems/DNALockerSystem.cs
@@ -0,0 +1,135 @@
+using Content.Server.Administration.Logs;
+using Content.Server.Explosion.EntitySystems;
+using Content.Shared.Database;
+using Content.Shared.Emag.Systems;
+using Content.Shared.Forensics.Components;
+using Content.Shared.Interaction.Components;
+using Content.Shared.Inventory.Events;
+using Content.Shared.Popups;
+using Content.Shared.Verbs;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
+
+namespace Content.Server._ADT.DNALocker.Systems;
+
+public sealed partial class DNALockerSystem : EntitySystem
+{
+ [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
+ [Dependency] private readonly ExplosionSystem _explosion = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+
+ [Dependency] private readonly IAdminLogManager _adminLogger = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<_ADT.DNALocker.Components.DNALockerComponent, GetVerbsEvent>(OnAltVerb);
+ SubscribeLocalEvent<_ADT.DNALocker.Components.DNALockerComponent, GotEquippedEvent>(OnEquip);
+ SubscribeLocalEvent<_ADT.DNALocker.Components.DNALockerComponent, GotEmaggedEvent>(OnGotEmagged);
+ }
+
+ public void LockEntity(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, EntityUid equipee)
+ {
+ if (!TryComp(equipee, out var dna))
+ {
+ ExplodeEntity(uid, component, equipee);
+ return;
+ }
+ if (dna.DNA != null)
+ component.DNA = dna.DNA;
+ _audioSystem.PlayPvs(component.LockSound, uid);
+ var selfMessage = Loc.GetString("dna-locker-success");
+ _popup.PopupEntity(selfMessage, equipee, equipee);
+ }
+
+ public void ExplodeEntity(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, EntityUid equipee)
+ {
+ if (!component.IsLocked)
+ return;
+
+ EnsureComp(uid);
+ var selfMessage = Loc.GetString("dna-locker-failure");
+ var unremoveableMessage = Loc.GetString("dna-locker-unremoveable");
+
+ _popup.PopupEntity(unremoveableMessage, equipee, equipee, PopupType.LargeCaution);
+ _audioSystem.PlayPvs(component.LockerExplodeSound, uid);
+ Timer.Spawn(3000, () =>
+ {
+ _popup.PopupEntity(selfMessage, equipee, equipee, PopupType.LargeCaution);
+ _explosion.QueueExplosion(equipee, "Default", 200f, 10f, 100f, 1f);
+ QueueDel(uid);
+ });
+ }
+
+ private void OnEquip(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, GotEquippedEvent args)
+ {
+ if (!component.Enabled)
+ return;
+ if (!component.IsLocked)
+ {
+ LockEntity(uid, component, args.Equipee);
+ return;
+ }
+
+ if (TryComp(args.Equipee, out var dna))
+ {
+ if (component.DNA != null && component.DNA != dna.DNA)
+ {
+ _adminLogger.Add(LogType.AdminMessage, LogImpact.High, $"{ToPrettyString(args.Equipee)} exploded DNA Locker of {ToPrettyString(uid)}");
+ ExplodeEntity(uid, component, args.Equipee);
+ }
+ }
+ }
+
+ private void OnGotEmagged(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, ref GotEmaggedEvent args)
+ {
+ if (!component.CanBeEmagged || !component.Enabled)
+ return;
+
+ component.DNA = string.Empty;
+ _audioSystem.PlayPvs(component.EmagSound, uid);
+ var userUid = args.UserUid;
+ Timer.Spawn(1500, () =>
+ {
+ _audioSystem.PlayPvs(component.LockSound, uid);
+ var selfMessage = Loc.GetString("dna-locker-unlock");
+ _popup.PopupEntity(selfMessage, uid, userUid);
+ });
+ component.Enabled = !component.Enabled;
+ args.Repeatable = true;
+ args.Handled = true;
+ }
+
+ private void OnAltVerb(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, GetVerbsEvent args)
+ {
+ if (!component.IsLocked || !component.Enabled)
+ return;
+
+ AlternativeVerb verbDNALock = new()
+ {
+ Act = () => MakeUnlocked(uid, component, args.User),
+ Text = Loc.GetString("dna-locker-verb-name"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/fold.svg.192dpi.png")),
+ };
+ args.Verbs.Add(verbDNALock);
+ }
+
+ private void MakeUnlocked(EntityUid uid, _ADT.DNALocker.Components.DNALockerComponent component, EntityUid userUid)
+ {
+ if (TryComp(userUid, out var userDNAComponent) && component.DNA == userDNAComponent.DNA)
+ {
+ var unlocked = Loc.GetString("dna-locker-unlock");
+ _audioSystem.PlayPvs(component.LockSound, userUid);
+ _popup.PopupEntity(unlocked, uid, userUid);
+ component.DNA = string.Empty;
+ }
+ else
+ {
+ var denied = Loc.GetString("dna-locker-failure");
+ _audioSystem.PlayPvs(component.DeniedSound, userUid);
+ _popup.PopupEntity(denied, uid, userUid);
+ }
+ }
+}
diff --git a/Content.Server/_ADT/Emp/EmpDisablingComponent.cs b/Content.Server/_ADT/Emp/EmpDisablingComponent.cs
new file mode 100644
index 000000000000..2ef8f8294a5d
--- /dev/null
+++ b/Content.Server/_ADT/Emp/EmpDisablingComponent.cs
@@ -0,0 +1,8 @@
+namespace Content.Server._ADT.Emp;
+
+[RegisterComponent]
+public sealed partial class EmpDisablingComponent : Component
+{
+ [DataField]
+ public TimeSpan DisablingTime;
+}
diff --git a/Content.Server/_ADT/Emp/EmpDisablingSystem.cs b/Content.Server/_ADT/Emp/EmpDisablingSystem.cs
new file mode 100644
index 000000000000..c69cb6a55b44
--- /dev/null
+++ b/Content.Server/_ADT/Emp/EmpDisablingSystem.cs
@@ -0,0 +1,16 @@
+using Content.Server.Emp;
+
+namespace Content.Server._ADT.Emp;
+
+public sealed class EmpDisablingSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ SubscribeLocalEvent<_ADT.Emp.EmpDisablingComponent, EmpPulseEvent>(OnEmpPulse);
+ }
+ private void OnEmpPulse(EntityUid uid, _ADT.Emp.EmpDisablingComponent component, ref EmpPulseEvent args)
+ {
+ args.Disabled = true;
+ args.Duration = component.DisablingTime;
+ }
+}
diff --git a/Content.Server/_ADT/Emp/EmpOnCollideComponent.cs b/Content.Server/_ADT/Emp/EmpOnCollideComponent.cs
new file mode 100644
index 000000000000..46d4bd141854
--- /dev/null
+++ b/Content.Server/_ADT/Emp/EmpOnCollideComponent.cs
@@ -0,0 +1,24 @@
+using Content.Server.Emp;
+
+namespace Content.Server._ADT.Emp;
+
+///
+/// Upon being triggered will EMP area around it.
+///
+[RegisterComponent]
+[Access(typeof(EmpSystem))]
+public sealed partial class EmpOnCollideComponent : Component
+{
+
+ ///
+ /// How much energy will be consumed per battery
+ ///
+ [DataField("energyConsumption"), ViewVariables(VVAccess.ReadWrite)]
+ public float EnergyConsumption;
+
+ ///
+ /// How long it disables targets in seconds
+ ///
+ [DataField("disableDuration"), ViewVariables(VVAccess.ReadWrite)]
+ public float DisableDuration = 60f;
+}
diff --git a/Content.Server/_ADT/Emp/EmpProtactionContainerComponent.cs b/Content.Server/_ADT/Emp/EmpProtactionContainerComponent.cs
new file mode 100644
index 000000000000..b7f230fd8910
--- /dev/null
+++ b/Content.Server/_ADT/Emp/EmpProtactionContainerComponent.cs
@@ -0,0 +1,9 @@
+namespace Content.Server._ADT.Emp;
+
+[RegisterComponent]
+public sealed partial class EmpContainerProtactionComponent : Component
+{
+ public EntityUid? BatteryUid;
+ [DataField]
+ public string ContainerId = "cell_slot";
+}
diff --git a/Content.Server/_ADT/Emp/EmpProtactionSystem.cs b/Content.Server/_ADT/Emp/EmpProtactionSystem.cs
new file mode 100644
index 000000000000..f2bfa530808f
--- /dev/null
+++ b/Content.Server/_ADT/Emp/EmpProtactionSystem.cs
@@ -0,0 +1,50 @@
+using Content.Shared._ADT.Emp;
+using Content.Shared.Containers.ItemSlots;
+
+namespace Content.Server._ADT.Emp;
+
+public sealed class EmpProtactionSystem : EntitySystem
+{
+ [Dependency] private readonly ItemSlotsSystem _slot = default!;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnInserted);
+ SubscribeLocalEvent(OnEjected);
+ SubscribeLocalEvent(OnShutdown);
+ SubscribeLocalEvent(OnInit);
+ }
+
+ private void OnInserted(EntityUid uid,
+ EmpContainerProtactionComponent component,
+ ref ItemSlotInsertAttemptEvent args)
+ {
+ if (args.Cancelled)
+ return;
+ EnsureComp(args.Item);
+ component.BatteryUid = args.Item;
+ }
+
+ private void OnEjected(EntityUid uid, EmpContainerProtactionComponent component, ref ItemSlotEjectedEvent args)
+ {
+ if (args.Cancelled)
+ return;
+ RemComp(args.Item);
+ component.BatteryUid = null;
+ }
+
+ private void OnShutdown(EntityUid uid, EmpContainerProtactionComponent component, ComponentShutdown args)
+ {
+ if (component.BatteryUid == null)
+ return;
+ RemComp(component.BatteryUid.Value);
+ }
+
+ private void OnInit(EntityUid uid, EmpContainerProtactionComponent component, MapInitEvent args)
+ {
+ var battery = _slot.GetItemOrNull(uid, component.ContainerId);
+ if (battery == null)
+ return;
+ EnsureComp(battery.Value);
+ }
+}
diff --git a/Content.Server/_ADT/PlasmaCutter/BatteryRechargeComponent.cs b/Content.Server/_ADT/PlasmaCutter/BatteryRechargeComponent.cs
new file mode 100644
index 000000000000..29e5d4ffa95d
--- /dev/null
+++ b/Content.Server/_ADT/PlasmaCutter/BatteryRechargeComponent.cs
@@ -0,0 +1,27 @@
+///TAKEN FROM: https://github.com/Workbench-Team/space-station-14/pull/327
+
+namespace Content.Server._ADT.PlasmaCutter;
+
+[RegisterComponent]
+public sealed partial class BatteryRechargeComponent : Component
+{
+
+ ///
+ /// NOT (material.Amount * Multiplier)
+ /// This is (material.materialComposition * Multiplier)
+ /// 1 plasma sheet = 100 material units
+ /// 1 plasma ore = 500 material units
+ ///
+ ///
+ [DataField("multiplier"), ViewVariables(VVAccess.ReadWrite)]
+ public float Multiplier = 1.0f;
+
+
+ ///
+ /// Max material storage limit
+ /// 7500 = 15 plasma ore
+ ///
+ [DataField("storageMaxCapacity"), ViewVariables(VVAccess.ReadWrite)]
+ public int StorageMaxCapacity = 7500;
+}
+
diff --git a/Content.Server/_ADT/PlasmaCutter/BatteryRechargeSystem.cs b/Content.Server/_ADT/PlasmaCutter/BatteryRechargeSystem.cs
new file mode 100644
index 000000000000..092f48e10a7d
--- /dev/null
+++ b/Content.Server/_ADT/PlasmaCutter/BatteryRechargeSystem.cs
@@ -0,0 +1,77 @@
+///TAKEN FROM: https://github.com/Workbench-Team/space-station-14/pull/327
+
+using Content.Server.Materials;
+using Content.Server.Power.Components;
+using Content.Server.Power.EntitySystems;
+using Content.Server.PowerCell;
+using Content.Shared.Materials;
+using Content.Shared.PowerCell.Components;
+
+namespace Content.Server._ADT.PlasmaCutter
+{
+
+ ///
+ /// This CODE FULL OF SHICODE!!!
+ ///
+ ///
+ public sealed class BatteryRechargeSystem : EntitySystem
+ {
+ [Dependency] private readonly MaterialStorageSystem _materialStorage = default!;
+ [Dependency] private readonly BatterySystem _batterySystem = default!;
+ [Dependency] private readonly PowerCellSystem _powerCell = default!;
+
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnMaterialAmountChanged);
+ SubscribeLocalEvent<_ADT.PlasmaCutter.BatteryRechargeComponent, ChargeChangedEvent>(OnChargeChanged);
+ }
+
+ private void OnMaterialAmountChanged(EntityUid uid, MaterialStorageComponent component, ref MaterialEntityInsertedEvent args)
+ {
+ if (component.MaterialWhiteList != null)
+ if (TryComp<_ADT.PlasmaCutter.BatteryRechargeComponent>(uid, out var comp))
+ foreach (var fuelType in component.MaterialWhiteList)
+ {
+ FuelAddCharge(uid, fuelType, comp);
+ }
+ }
+
+ private void OnChargeChanged(EntityUid uid, _ADT.PlasmaCutter.BatteryRechargeComponent component, ChargeChangedEvent args)
+ {
+ ChangeStorageLimit(uid, component.StorageMaxCapacity);
+ }
+
+ private void ChangeStorageLimit(
+ EntityUid uid,
+ int value,
+ BatteryComponent? battery = null)
+ {
+ if (!Resolve(uid, ref battery) && !HasComp(uid))
+ return;
+ if (battery != null && battery.CurrentCharge == battery.MaxCharge)
+ value = 0;
+ _materialStorage.TryChangeStorageLimit(uid, value);
+ }
+
+ private void FuelAddCharge(
+ EntityUid uid,
+ string fuelType,
+ _ADT.PlasmaCutter.BatteryRechargeComponent recharge)
+ {
+ var availableMaterial = _materialStorage.GetMaterialAmount(uid, fuelType);
+ var chargePerMaterial = availableMaterial * recharge.Multiplier;
+ if (TryComp(uid, out var slot) && _powerCell.TryGetBatteryFromSlot(uid, out var batteryEnt, out var battery, slot))
+ {
+ _batterySystem.TryAddCharge(batteryEnt.Value, chargePerMaterial, battery);
+ }
+ if (_materialStorage.TryChangeMaterialAmount(uid, fuelType, -availableMaterial))
+ {
+ _batterySystem.TryAddCharge(uid, chargePerMaterial);
+ }
+ }
+ }
+
+}
diff --git a/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmComponent.cs b/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmComponent.cs
new file mode 100644
index 000000000000..ddd17b92a927
--- /dev/null
+++ b/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmComponent.cs
@@ -0,0 +1,12 @@
+using Content.Shared.Alert;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._ADT.ShowEnergyAlarm;
+
+[RegisterComponent]
+public sealed partial class ShowEnergyAlarmComponent : Component
+{
+ [DataField]
+ public ProtoId PowerAlert = "ModsuitPower";
+ public EntityUid? User;
+}
diff --git a/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmSystem.cs b/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmSystem.cs
new file mode 100644
index 000000000000..26f0c60a2e53
--- /dev/null
+++ b/Content.Server/_ADT/ShowEnergyAlarm/ShowEnergyAlarmSystem.cs
@@ -0,0 +1,44 @@
+using Content.Server.PowerCell;
+using Content.Shared.Actions;
+using Content.Shared.Alert;
+using Content.Shared.PowerCell;
+using Content.Shared.PowerCell.Components;
+using Content.Shared.Rounding;
+
+namespace Content.Server._ADT.ShowEnergyAlarm;
+
+public sealed class ShowEnergyAlarmSystem : EntitySystem
+{
+ [Dependency] private readonly AlertsSystem _alertsSystem = default!;
+ [Dependency] private readonly PowerCellSystem _powerCellSystem = default!;
+ public override void Initialize()
+ {
+ SubscribeLocalEvent<_ADT.ShowEnergyAlarm.ShowEnergyAlarmComponent, PowerCellChangedEvent>(OnPowerCellUpdate);
+ SubscribeLocalEvent<_ADT.ShowEnergyAlarm.ShowEnergyAlarmComponent, GetItemActionsEvent>(OnGetActions);
+ }
+ private void OnPowerCellUpdate(EntityUid uid, _ADT.ShowEnergyAlarm.ShowEnergyAlarmComponent component, PowerCellChangedEvent args)
+ {
+ UpdateClothingPowerAlert((uid, component));
+ }
+ private void OnGetActions(EntityUid uid, _ADT.ShowEnergyAlarm.ShowEnergyAlarmComponent component, GetItemActionsEvent args)
+ {
+ component.User = args.User;
+ UpdateClothingPowerAlert((uid, component));
+ }
+ private void UpdateClothingPowerAlert(Entity<_ADT.ShowEnergyAlarm.ShowEnergyAlarmComponent> entity)
+ {
+ var (uid, comp) = entity;
+
+ if (!TryComp(uid, out var drawComp) || entity.Comp.User == null)
+ return;
+
+ if (!_powerCellSystem.TryGetBatteryFromSlot(entity, out var battery) || !drawComp.Enabled)
+ {
+ _alertsSystem.ClearAlert(entity.Comp.User.Value, comp.PowerAlert);
+ return;
+ }
+
+ var severity = ContentHelpers.RoundToLevels(MathF.Max(0f, battery.CurrentCharge), battery.MaxCharge, 6);
+ _alertsSystem.ShowAlert(entity.Comp.User.Value, comp.PowerAlert, (short) severity);
+ }
+}
diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
index 29443e284a06..710f2c50cc4f 100644
--- a/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
+++ b/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
@@ -275,4 +275,10 @@ public record struct ItemSlotInsertAttemptEvent(EntityUid SlotEntity, EntityUid
///
[ByRefEvent]
public record struct ItemSlotEjectAttemptEvent(EntityUid SlotEntity, EntityUid Item, EntityUid? User, ItemSlot Slot, bool Cancelled = false);
+
+ ///
+ /// ADT tweak: fix ejecting item success
+ ///
+ [ByRefEvent]
+ public record struct ItemSlotEjectedEvent(EntityUid SlotEntity, EntityUid Item, EntityUid? User, ItemSlot Slot, bool Cancelled = false);
}
diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs
index ff0349c00a69..7ee990c8dcf4 100644
--- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs
+++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs
@@ -512,4 +512,18 @@ public int GetSheetVolume(MaterialPrototype material)
return composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == material.ID).Value;
}
+
+ ///ADT plasmacutters start
+ public bool TryChangeStorageLimit(
+ EntityUid uid,
+ int value,
+ MaterialStorageComponent? storage = null)
+ {
+ if (!Resolve(uid, ref storage) || value < 0)
+ return false;
+
+ storage.StorageLimit = value;
+ return true;
+ }
+ ///ADT plasmacutters end
}
diff --git a/Content.Shared/PowerCell/SharedPowerCellSystem.cs b/Content.Shared/PowerCell/SharedPowerCellSystem.cs
index 3398563e556f..ca6ffb44ef4a 100644
--- a/Content.Shared/PowerCell/SharedPowerCellSystem.cs
+++ b/Content.Shared/PowerCell/SharedPowerCellSystem.cs
@@ -1,4 +1,5 @@
using Content.Shared.Containers.ItemSlots;
+using Content.Shared.Inventory; // ADT tweak start
using Content.Shared.PowerCell.Components;
using Content.Shared.Rejuvenate;
using Robust.Shared.Containers;
@@ -105,3 +106,13 @@ public abstract bool HasDrawCharge(
PowerCellSlotComponent? cell = null,
EntityUid? user = null);
}
+
+// ADT tweak start
+[ByRefEvent]
+public record struct FindInventoryBatteryEvent() : IInventoryRelayEvent
+{
+ public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET;
+
+ public EntityUid? FoundBattery { get; set; }
+}
+// ADT tweak end
diff --git a/Content.Shared/_ADT/Clothing/Components/ClothingGrantComponentComponent.cs b/Content.Shared/_ADT/Clothing/Components/ClothingGrantComponentComponent.cs
new file mode 100644
index 000000000000..83271d773148
--- /dev/null
+++ b/Content.Shared/_ADT/Clothing/Components/ClothingGrantComponentComponent.cs
@@ -0,0 +1,15 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._ADT.Clothing.Components
+{
+ [RegisterComponent]
+ public sealed partial class ClothingGrantComponentComponent : Component
+ {
+ [DataField("component", required: true)]
+ [AlwaysPushInheritance]
+ public ComponentRegistry Components { get; private set; } = new();
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public bool IsActive = false;
+ }
+}
diff --git a/Content.Shared/_ADT/Clothing/Components/ClothingGrantTagComponent.cs b/Content.Shared/_ADT/Clothing/Components/ClothingGrantTagComponent.cs
new file mode 100644
index 000000000000..fcdc6570a36a
--- /dev/null
+++ b/Content.Shared/_ADT/Clothing/Components/ClothingGrantTagComponent.cs
@@ -0,0 +1,11 @@
+namespace Content.Shared._ADT.Clothing.Components;
+
+[RegisterComponent]
+public sealed partial class ClothingGrantTagComponent : Component
+{
+ [DataField("tag", required: true), ViewVariables(VVAccess.ReadWrite)]
+ public string Tag = "";
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public bool IsActive = false;
+}
diff --git a/Content.Shared/_ADT/Clothing/Systems/ClothingGrantingSystem.cs b/Content.Shared/_ADT/Clothing/Systems/ClothingGrantingSystem.cs
new file mode 100644
index 000000000000..867f1bd8e607
--- /dev/null
+++ b/Content.Shared/_ADT/Clothing/Systems/ClothingGrantingSystem.cs
@@ -0,0 +1,97 @@
+using Content.Shared._ADT.Clothing.Components;
+using Content.Shared.Clothing.Components;
+using Content.Shared.Inventory.Events;
+using Content.Shared.Tag;
+using Robust.Shared.Serialization.Manager;
+
+namespace Content.Shared._ADT.Clothing.Systems;
+
+public sealed class ClothingGrantingSystem : EntitySystem
+{
+ [Dependency] private readonly IComponentFactory _componentFactory = default!;
+ [Dependency] private readonly ISerializationManager _serializationManager = default!;
+ [Dependency] private readonly TagSystem _tagSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnCompEquip);
+ SubscribeLocalEvent(OnCompUnequip);
+
+ SubscribeLocalEvent(OnTagEquip);
+ SubscribeLocalEvent(OnTagUnequip);
+ }
+
+ private void OnCompEquip(EntityUid uid, ClothingGrantComponentComponent component, GotEquippedEvent args)
+ {
+ if (!TryComp(uid, out var clothing))
+ return;
+
+ if (!clothing.Slots.HasFlag(args.SlotFlags))
+ return;
+
+ if (component.Components.Count > 1)
+ {
+ Logger.Error(
+ "Although a component registry supports multiple components, we cannot bookkeep more than 1 component for ClothingGrantComponent at this time.");
+ return;
+ }
+
+ foreach (var (name, data) in component.Components)
+ {
+ var newComp = (Component)_componentFactory.GetComponent(name);
+
+ if (HasComp(args.Equipee, newComp.GetType()))
+ continue;
+
+ newComp.Owner = args.Equipee;
+
+ var temp = (object)newComp;
+ _serializationManager.CopyTo(data.Component, ref temp);
+ EntityManager.AddComponent(args.Equipee, (Component)temp!);
+
+ component.IsActive = true;
+ }
+ }
+
+ private void OnCompUnequip(EntityUid uid, ClothingGrantComponentComponent component, GotUnequippedEvent args)
+ {
+ if (!component.IsActive)
+ return;
+
+ foreach (var (name, data) in component.Components)
+ {
+ var newComp = (Component)_componentFactory.GetComponent(name);
+
+ RemComp(args.Equipee, newComp.GetType());
+ }
+
+ component.IsActive = false;
+ }
+
+
+ private void OnTagEquip(EntityUid uid, ClothingGrantTagComponent component, GotEquippedEvent args)
+ {
+ if (!TryComp(uid, out var clothing))
+ return;
+
+ if (!clothing.Slots.HasFlag(args.SlotFlags))
+ return;
+
+ EnsureComp(args.Equipee);
+ _tagSystem.AddTag(args.Equipee, component.Tag);
+
+ component.IsActive = true;
+ }
+
+ private void OnTagUnequip(EntityUid uid, ClothingGrantTagComponent component, GotUnequippedEvent args)
+ {
+ if (!component.IsActive)
+ return;
+
+ _tagSystem.RemoveTag(args.Equipee, component.Tag);
+
+ component.IsActive = false;
+ }
+}
diff --git a/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerComponent.cs b/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerComponent.cs
new file mode 100644
index 000000000000..e75105f8bc59
--- /dev/null
+++ b/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerComponent.cs
@@ -0,0 +1,38 @@
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._ADT.DNAGunLocker;
+
+[RegisterComponent]
+[NetworkedComponent]
+public sealed partial class DNAGunLockerComponent : Component
+{
+ ///
+ /// ADT. personableWeapon emagged
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public bool IsEmagged = false;
+
+ ///
+ /// Emag sound effects.
+ ///
+ [DataField("sparkSound")]
+ public SoundSpecifier SparkSound = new SoundCollectionSpecifier("sparks")
+ {
+ Params = AudioParams.Default.WithVolume(8),
+ };
+
+ [DataField("lockSound")]
+ public SoundSpecifier LockSound = new SoundPathSpecifier("/Audio/ADT/dna-lock.ogg");
+
+ [DataField("electricSound")]
+ public SoundSpecifier ElectricSound = new SoundPathSpecifier("/Audio/Effects/PowerSink/electric.ogg");
+
+ //ADT TWEAK START
+ ///
+ /// ADT. personableWeapon field
+ ///
+ [DataField("gunOwner"), ViewVariables(VVAccess.ReadWrite)]
+ public EntityUid? GunOwner = null;
+ //ADT END
+}
diff --git a/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerSystem.cs b/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerSystem.cs
new file mode 100644
index 000000000000..94c4af26ea10
--- /dev/null
+++ b/Content.Shared/_ADT/DNAGunLocker/DNAGunLockerSystem.cs
@@ -0,0 +1,123 @@
+using Content.Shared.Electrocution;
+using Content.Shared.Emag.Systems;
+using Content.Shared.Hands;
+using Content.Shared.Popups;
+using Content.Shared.Verbs;
+using Content.Shared.Weapons.Ranged.Components;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._ADT.DNAGunLocker;
+
+public sealed partial class SharedDNAGunLockerSystem : EntitySystem
+{
+
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly SharedElectrocutionSystem _electrocutionSystem = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<_ADT.DNAGunLocker.DNAGunLockerComponent, HandSelectedEvent>(OnHand);
+ SubscribeLocalEvent<_ADT.DNAGunLocker.DNAGunLockerComponent, GetVerbsEvent>(OnAltVerbs);
+ SubscribeLocalEvent<_ADT.DNAGunLocker.DNAGunLockerComponent, GotEmaggedEvent>(OnEmaggedPersonalGun);
+ }
+
+ private void OnHand(EntityUid uid, _ADT.DNAGunLocker.DNAGunLockerComponent component, HandSelectedEvent args)
+ {
+ if (!_timing.IsFirstTimePredicted)
+ return;
+ //Log.Debug($"{ToPrettyString(uid)} было завладето {ToPrettyString(args.User)}");
+ if (TryComp(uid, out var compGun))
+ {
+ MakeWeaponPersonal(uid, compGun, component, args.User);
+ }
+ Dirty(uid, component);
+ }
+
+ private void OnAltVerbs(EntityUid uid, _ADT.DNAGunLocker.DNAGunLockerComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract)
+ return;
+
+ AlternativeVerb verbPersonalize = new()
+ {
+ Act = () => AltPrivateWeaponPersonal(uid, component, args.User),
+ Text = Loc.GetString("gun-personalize-verb"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/fold.svg.192dpi.png")),
+ Priority = -20,
+ };
+ args.Verbs.Add(verbPersonalize);
+ }
+
+ ///
+ /// ADT, modern. This method makes weapon personal, making everyone except user not able to shoot with it.
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void MakeWeaponPersonal(EntityUid uid, GunComponent gunComp, _ADT.DNAGunLocker.DNAGunLockerComponent dnaComp,
+ EntityUid? user = null, bool popup = false)
+ {
+ if (!_timing.IsFirstTimePredicted)
+ return;
+ if (dnaComp.GunOwner != null)
+ {
+ if (popup)
+ _popup.PopupPredicted(Loc.GetString("gun-personalize-error"), uid, user);
+ return;
+ }
+ dnaComp.GunOwner = user;
+ _popup.PopupPredicted(Loc.GetString("gun-was-personalized"), uid, user);
+ _audioSystem.PlayPredicted(dnaComp.LockSound, uid, user);
+
+ Dirty(uid, dnaComp);
+ }
+
+ private void AltPrivateWeaponPersonal(EntityUid uid, _ADT.DNAGunLocker.DNAGunLockerComponent dnaComp, EntityUid user)
+ {
+ if (!_timing.IsFirstTimePredicted)
+ return;
+ // Если оружие еще не имеет владельца
+ if (dnaComp.GunOwner == null)
+ {
+ // Установить пользователя как владельца
+ dnaComp.GunOwner = user;
+ _popup.PopupPredicted(Loc.GetString("gun-was-personalized"), uid, user);
+ _audioSystem.PlayPredicted(dnaComp.LockSound, uid, user);
+ return;
+ }
+ // Если владелец заходит в эту функцию
+ else if (dnaComp.GunOwner == user)
+ {
+ // Сбросить владельца
+ dnaComp.GunOwner = null;
+ _popup.PopupPredicted(Loc.GetString("gun-personalize-unlocked"), uid, user);
+ _audioSystem.PlayPredicted(dnaComp.LockSound, uid, user);
+ return;
+ }
+ // Если заходит другой пользователь, не владелец оружия
+ else
+ {
+ _popup.PopupPredicted(Loc.GetString("gun-personalize-error"), uid, user);
+ }
+ }
+
+ private void OnEmaggedPersonalGun(EntityUid uid, _ADT.DNAGunLocker.DNAGunLockerComponent component, GotEmaggedEvent ev)
+ {
+ if (!_timing.IsFirstTimePredicted)
+ return;
+ if ((ev.Handled || component.IsEmagged) && TryComp<_ADT.DNAGunLocker.DNAGunLockerComponent>(uid, out var _))
+ return;
+ _audio.PlayPredicted(component.SparkSound, uid, ev.UserUid);
+ _popup.PopupPredicted(Loc.GetString("gun-component-upgrade-emag"), uid, ev.UserUid);
+ component.IsEmagged = true;
+ ev.Handled = true;
+ Dirty(uid, component);
+ }
+}
diff --git a/Content.Shared/_ADT/Emp/EmpProtectionComponent.cs b/Content.Shared/_ADT/Emp/EmpProtectionComponent.cs
new file mode 100644
index 000000000000..88165c42d418
--- /dev/null
+++ b/Content.Shared/_ADT/Emp/EmpProtectionComponent.cs
@@ -0,0 +1,6 @@
+namespace Content.Shared._ADT.Emp;
+
+[RegisterComponent]
+public sealed partial class EmpAdtProtectionComponent : Component
+{
+}
diff --git a/Content.Shared/_ADT/Hands/HandEvents.cs b/Content.Shared/_ADT/Hands/HandEvents.cs
new file mode 100644
index 000000000000..142801632a27
--- /dev/null
+++ b/Content.Shared/_ADT/Hands/HandEvents.cs
@@ -0,0 +1,27 @@
+using Robust.Shared.Map;
+
+namespace Content.Shared._ADT.Hands;
+
+public sealed class BeforeVirtualItemDeletedEvent : CancellableEntityEventArgs
+{
+ public EntityUid BlockingEntity;
+ public EntityUid User;
+ public BeforeVirtualItemDeletedEvent(EntityUid blockingEntity, EntityUid user)
+ {
+ BlockingEntity = blockingEntity;
+ User = user;
+ }
+}
+
+public sealed class BeforeVirtualItemThrownEvent : CancellableEntityEventArgs
+{
+ public EntityUid BlockingEntity;
+ public EntityUid User;
+ public EntityCoordinates Coords;
+ public BeforeVirtualItemThrownEvent(EntityUid blockingEntity, EntityUid user, EntityCoordinates coords)
+ {
+ BlockingEntity = blockingEntity;
+ User = user;
+ Coords = coords;
+ }
+}
diff --git a/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotComponent.cs b/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotComponent.cs
new file mode 100644
index 000000000000..1ee16cdffdc9
--- /dev/null
+++ b/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotComponent.cs
@@ -0,0 +1,17 @@
+using Content.Shared.Inventory;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._ADT.Inventory.CoveredSlot;
+
+///
+/// Used to prevent items from being unequipped and equipped from slots that are listed in .
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CoveredSlotSystem))]
+public sealed partial class CoveredSlotComponent : Component
+{
+ ///
+ /// Slots that this entity should cover.
+ ///
+ [DataField(required: true), AutoNetworkedField]
+ public SlotFlags Slots = SlotFlags.NONE;
+}
diff --git a/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotSystem.cs b/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotSystem.cs
new file mode 100644
index 000000000000..c548707c2bad
--- /dev/null
+++ b/Content.Shared/_ADT/Inventory/CoveredSlot/CoveredSlotSystem.cs
@@ -0,0 +1,82 @@
+using Content.Shared.Clothing.Components;
+using Content.Shared.Inventory;
+using Content.Shared.Inventory.Events;
+
+namespace Content.Shared._ADT.Inventory.CoveredSlot;
+
+///
+/// Handles prevention of items being unequipped and equipped from slots that are blocked by .
+///
+public sealed class CoveredSlotSystem : EntitySystem
+{
+ [Dependency] private readonly InventorySystem _inventory = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnEquipAttempt);
+ SubscribeLocalEvent(OnUnequipAttempt);
+ }
+
+ private void OnEquipAttempt(Entity ent, ref IsEquippingAttemptEvent args)
+ {
+ if (args.Cancelled)
+ return;
+
+ if (args.EquipTarget != ent.Owner)
+ return;
+
+ var blocker = GetBlocker(ent, args.SlotFlags);
+
+ // Don't do anything if nothing is blocking the entity from equipping.
+ if (blocker == null)
+ return;
+
+ args.Reason = Loc.GetString("covered-slot-component-blocked", ("item", blocker));
+ args.Cancel();
+ }
+
+ private void OnUnequipAttempt(Entity ent, ref IsUnequippingAttemptEvent args)
+ {
+ if (args.Cancelled)
+ return;
+
+ if (args.UnEquipTarget != ent.Owner)
+ return;
+
+ var blocker = GetBlocker(ent, args.SlotFlags);
+
+ // Don't do anything if nothing is blocking the entity from unequipping.
+ if (blocker == null)
+ return;
+
+ args.Reason = Loc.GetString("covered-slot-component-blocked", ("item", blocker));
+ args.Cancel();
+ }
+
+ ///
+ /// Used to get an entity that is blocking item from being equipped or unequipped.
+ ///
+ private EntityUid? GetBlocker(Entity ent, SlotFlags slot)
+ {
+ foreach (var slotDef in ent.Comp.Slots)
+ {
+ if (!_inventory.TryGetSlotEntity(ent, slotDef.Name, out var entity))
+ continue;
+
+ if ((slotDef.SlotFlags & SlotFlags.POCKET) != 0)
+ continue;
+
+ if (!TryComp(entity, out var blockComponent) || (slot & blockComponent.Slots) == 0)
+ continue;
+
+ if (TryComp(entity, out var mask) && mask.IsToggled)
+ continue;
+
+ return entity;
+ }
+
+ return null;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Components/ModPartComponent.cs b/Content.Shared/_ADT/Modsuit/Components/ModPartComponent.cs
new file mode 100644
index 000000000000..58235c313ffa
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Components/ModPartComponent.cs
@@ -0,0 +1,31 @@
+using Robust.Shared.Containers;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._ADT.Modsuit.Components;
+
+///
+/// This component indicates that this clothing is attached to some other entity with a . When unequipped, this entity should be returned to the entity that it is
+/// attached to, rather than being dumped on the floor or something like that. Intended for use with hardsuits and
+/// hardsuit helmets.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class ModPartComponent : Component
+{
+ ///
+ /// The Id of the piece of clothing that this entity belongs to.
+ ///
+ [DataField, AutoNetworkedField]
+ public NetEntity AttachedUid;
+
+ ///
+ /// Container ID for clothing that will be replaced with this one
+ ///
+ [DataField, AutoNetworkedField]
+ public string ClothingContainerId = DefaultClothingContainerId;
+
+ [ViewVariables, NonSerialized]
+ public ContainerSlot ClothingContainer = default!;
+
+ public const string DefaultClothingContainerId = "replaced-clothing";
+}
diff --git a/Content.Shared/_ADT/Modsuit/Components/ModSuitComponent.cs b/Content.Shared/_ADT/Modsuit/Components/ModSuitComponent.cs
new file mode 100644
index 000000000000..58e55c345edf
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Components/ModSuitComponent.cs
@@ -0,0 +1,169 @@
+using Content.Shared.Inventory;
+using Robust.Shared.Audio;
+using Robust.Shared.Containers;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Components;
+
+///
+/// This component gives an item an action that will equip or un-equip some clothing e.g. hardsuits and hardsuit helmets.
+///
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class ModSuitComponent : Component
+{
+ #region GUI
+
+ [DataField]
+ public string BackgroundPath = "/Textures/ADT/Interface/Backgrounds/Modsuits/nanotrasen_background.png";
+
+ [DataField]
+ public Color BackpanelsColor = new Color(0.06f, 0.1f, 0.16f, 0.6f);
+
+ [DataField]
+ public Color ScrollColor = new Color(0.06f, 0.1f, 0.16f, 0.6f);
+
+ [DataField]
+ public List ButtonColors = new() { Color.FromHex("#121923ff"), Color.FromHex("#04060aFF"), Color.FromHex("#153b66"), Color.FromHex("#153b66") };
+
+ #endregion gui
+
+ #region Containers
+
+ public const string DefaultClothingContainerId = "modsuit-part";
+ public const string DefaultModuleContainerId = "mod-modules-container";
+
+ ///
+ /// The container that the clothing is stored in when not equipped.
+ ///
+ [DataField, AutoNetworkedField]
+ public string ContainerId = DefaultClothingContainerId;
+
+ [DataField, AutoNetworkedField]
+ public string ModuleContainerId = DefaultModuleContainerId;
+
+ [ViewVariables]
+ public Container PartsContainer = default!;
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public Container ModuleContainer = default!;
+
+ #endregion
+
+ #region Actions
+
+ ///
+ /// Action used to toggle the clothing on or off.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntProtoId Action = "ADTActionToggleMODPiece";
+
+ [DataField, AutoNetworkedField]
+ public EntProtoId MenuAction = "ADTActionToggleMODMenu";
+
+ [DataField, AutoNetworkedField]
+ public EntityUid? ActionEntity;
+
+ [DataField, AutoNetworkedField]
+ public EntityUid? ActionMenuEntity;
+
+ #endregion
+
+ #region Stats
+ ///
+ /// non-modifyed energy using. 1 toggled part - 1 energy per PowerCellDraw use
+ ///
+ [DataField, AutoNetworkedField]
+ public int MaxComplexity = 15;
+
+ ///
+ /// non-modifyed energy using. 1 toggled part - 1 energy per PowerCellDraw use
+ ///
+ [DataField, AutoNetworkedField]
+ public float ModEnergyBaseUsing = 0.5f;
+
+ ///
+ /// Dictionary of inventory slots and entity prototypes to spawn into the clothing container.
+ ///
+ [DataField, AutoNetworkedField]
+ public Dictionary ClothingPrototypes = new();
+
+ ///
+ /// Dictionary of clothing uids and slots
+ ///
+ [DataField, AutoNetworkedField]
+ public Dictionary ClothingUids = new();
+
+ ///
+ /// Time it takes for this clothing to be toggled via the stripping menu verbs. Null prevents the verb from even showing up.
+ ///
+ [DataField, AutoNetworkedField]
+ public TimeSpan? StripDelay = TimeSpan.FromSeconds(3);
+
+ #endregion
+
+ #region Sounds
+
+ ///
+ /// Sound, playing when mod is fully enabled
+ ///
+ [DataField]
+ public SoundSpecifier FullyEnabledSound = new SoundPathSpecifier("/Audio/ADT/Mecha/nominal.ogg");
+
+ [DataField]
+ public SoundSpecifier InsertModuleSound = new SoundPathSpecifier("/Audio/Machines/id_insert.ogg");
+
+ [DataField]
+ public SoundSpecifier EjectModuleSound = new SoundPathSpecifier("/Audio/Machines/id_swipe.ogg");
+
+ #endregion
+ ///
+ /// Text shown in the toggle-clothing verb. Defaults to using the name of the action.
+ ///
+ [DataField, AutoNetworkedField]
+ public string? VerbText;
+
+ ///
+ /// If true it will block unequip of this entity until all attached clothing are removed
+ ///
+ [DataField, AutoNetworkedField]
+ public bool BlockUnequipWhenAttached = true;
+
+ ///
+ /// If true all attached will replace already equipped clothing on equip attempt
+ ///
+ [DataField, AutoNetworkedField]
+ public bool ReplaceCurrentClothing = true;
+
+ [DataField("requiredSlot"), AutoNetworkedField]
+ public SlotFlags RequiredFlags = SlotFlags.BACK;
+
+ ///
+ /// Modules on start
+ ///
+ [DataField]
+ public List StartingModules = [];
+
+ [AutoNetworkedField]
+ public int CurrentComplexity = 0;
+
+ [AutoNetworkedField]
+ public string? UserName = null;
+
+ [AutoNetworkedField]
+ public EntityUid? TempUser = null;
+}
+
+[Serializable, NetSerializable]
+public enum ModSuitMenuUiKey : byte
+{
+ Key
+}
+
+[Serializable, NetSerializable]
+public enum ModSuitUiKey : byte
+{
+ Key
+}
diff --git a/Content.Shared/_ADT/Modsuit/Components/ModSuitModComponent.cs b/Content.Shared/_ADT/Modsuit/Components/ModSuitModComponent.cs
new file mode 100644
index 000000000000..b72c6ff24926
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Components/ModSuitModComponent.cs
@@ -0,0 +1,46 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._ADT.Modsuit.Components;
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class ModSuitModComponent : Component
+{
+ [DataField, AutoNetworkedField]
+ public bool IsInstantlyActive = false;
+
+ [AutoNetworkedField]
+ public bool Active = false;
+
+ ///
+ /// Module limit
+ ///
+ [DataField, AutoNetworkedField]
+ public int Complexity = 1;
+
+ ///
+ /// energy using
+ ///
+ [DataField, AutoNetworkedField]
+ public float EnergyUsing = 0;
+
+ ///
+ /// The components to add when activated.
+ ///
+ [DataField(required: true)]
+ public Dictionary Components = new();
+
+ ///
+ /// The components to remove when deactivated.
+ /// If this is null is reused.
+ ///
+ [DataField]
+ public Dictionary? RemoveComponents;
+}
+
+public enum ExamineColor
+{
+ Red,
+ Yellow,
+ Green
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ActionEvents.cs b/Content.Shared/_ADT/Modsuit/Events/ActionEvents.cs
new file mode 100644
index 000000000000..69af11b7e3fe
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ActionEvents.cs
@@ -0,0 +1,7 @@
+using Content.Shared.Actions;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+public sealed partial class ToggleModMenuActionEvent : InstantActionEvent;
+
+public sealed partial class ToggleModPartActionEvent : InstantActionEvent;
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModBoundUiState.cs b/Content.Shared/_ADT/Modsuit/Events/ModBoundUiState.cs
new file mode 100644
index 000000000000..d719f6ff26b4
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModBoundUiState.cs
@@ -0,0 +1,12 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ModBoundUiState : BoundUserInterfaceState
+{
+ public Dictionary EquipmentStates = new();
+}
+
+[Serializable, NetSerializable]
+public sealed class RadialModBoundUiState : BoundUserInterfaceState;
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModLockMessage.cs b/Content.Shared/_ADT/Modsuit/Events/ModLockMessage.cs
new file mode 100644
index 000000000000..3da5e1c8b197
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModLockMessage.cs
@@ -0,0 +1,14 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ModLockMessage : BoundUserInterfaceMessage
+{
+ public NetEntity Module;
+
+ public ModLockMessage(NetEntity module)
+ {
+ Module = module;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModModuleActivateMessage.cs b/Content.Shared/_ADT/Modsuit/Events/ModModuleActivateMessage.cs
new file mode 100644
index 000000000000..e23a74c9623c
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModModuleActivateMessage.cs
@@ -0,0 +1,14 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ModModuleActivateMessage : BoundUserInterfaceMessage
+{
+ public NetEntity Module;
+
+ public ModModuleActivateMessage(NetEntity module)
+ {
+ Module = module;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModModuleDeactivateMessage.cs b/Content.Shared/_ADT/Modsuit/Events/ModModuleDeactivateMessage.cs
new file mode 100644
index 000000000000..3af49ff00f4e
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModModuleDeactivateMessage.cs
@@ -0,0 +1,14 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ModModuleDeactivateMessage : BoundUserInterfaceMessage
+{
+ public NetEntity Module;
+
+ public ModModuleDeactivateMessage(NetEntity module)
+ {
+ Module = module;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModModuleRemoveMessage.cs b/Content.Shared/_ADT/Modsuit/Events/ModModuleRemoveMessage.cs
new file mode 100644
index 000000000000..acaf49caa11c
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModModuleRemoveMessage.cs
@@ -0,0 +1,14 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ModModuleRemoveMessage : BoundUserInterfaceMessage
+{
+ public NetEntity Module;
+
+ public ModModuleRemoveMessage(NetEntity module)
+ {
+ Module = module;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ModModulesUiStateReadyEvent.cs b/Content.Shared/_ADT/Modsuit/Events/ModModulesUiStateReadyEvent.cs
new file mode 100644
index 000000000000..551a2aec8fda
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ModModulesUiStateReadyEvent.cs
@@ -0,0 +1,6 @@
+namespace Content.Shared._ADT.Modsuit.Events;
+
+public sealed class ModModulesUiStateReadyEvent : EntityEventArgs
+{
+ public Dictionary States = new(); // ADT Mech UI Fix
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ToggleClothingAttemptEvent.cs b/Content.Shared/_ADT/Modsuit/Events/ToggleClothingAttemptEvent.cs
new file mode 100644
index 000000000000..2b0f79b8b3a4
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ToggleClothingAttemptEvent.cs
@@ -0,0 +1,16 @@
+namespace Content.Shared._ADT.Modsuit.Events;
+
+///
+/// Event raises on modsuit when someone trying to toggle it
+///
+public sealed class ToggleClothingAttemptEvent : CancellableEntityEventArgs
+{
+ public EntityUid User { get; }
+ public EntityUid Target { get; }
+
+ public ToggleClothingAttemptEvent(EntityUid user, EntityUid target)
+ {
+ User = user;
+ Target = target;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Events/ToggleModPartsDoAfterEvent.cs b/Content.Shared/_ADT/Modsuit/Events/ToggleModPartsDoAfterEvent.cs
new file mode 100644
index 000000000000..42fab6a7fe01
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ToggleModPartsDoAfterEvent.cs
@@ -0,0 +1,7 @@
+using Content.Shared.DoAfter;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed partial class ToggleModPartsDoAfterEvent : SimpleDoAfterEvent;
diff --git a/Content.Shared/_ADT/Modsuit/Events/ToggleModSuitPartMessage.cs b/Content.Shared/_ADT/Modsuit/Events/ToggleModSuitPartMessage.cs
new file mode 100644
index 000000000000..e82963b99308
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Events/ToggleModSuitPartMessage.cs
@@ -0,0 +1,14 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._ADT.Modsuit.Events;
+
+[Serializable, NetSerializable]
+public sealed class ToggleModSuitPartMessage : BoundUserInterfaceMessage
+{
+ public NetEntity PartEntity;
+
+ public ToggleModSuitPartMessage(NetEntity partEntity)
+ {
+ PartEntity = partEntity;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Modules.cs b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Modules.cs
new file mode 100644
index 000000000000..e19b11374518
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Modules.cs
@@ -0,0 +1,208 @@
+using Content.Shared._ADT.Modsuit.Components;
+using Content.Shared._ADT.Modsuit.Events;
+using Content.Shared.Examine;
+using Content.Shared.Interaction;
+using Content.Shared.PowerCell;
+
+namespace Content.Shared._ADT.Modsuit.Systems;
+
+public sealed partial class ModSuitSystem
+{
+ private void InitializeModules()
+ {
+ SubscribeLocalEvent(OnAfterInteract);
+ SubscribeLocalEvent(OnGetUIState);
+ SubscribeLocalEvent(OnExamine);
+
+ SubscribeLocalEvent(OnEject);
+ SubscribeLocalEvent(OnActivate);
+ SubscribeLocalEvent(OnDeactivate);
+ }
+
+ private void OnEject(Entity ent, ref ModModuleRemoveMessage args)
+ {
+ var module = GetEntity(args.Module);
+ if (!TryComp(module, out var mod))
+ return;
+
+ if (ent.Comp.UserName != null &&
+ (!_id.TryFindIdCard(args.Actor, out var id) || ent.Comp.UserName != id.Comp.FullName))
+ {
+ _popupSystem.PopupPredicted(Robust.Shared.Localization.Loc.GetString("modsuit-locked-popup"),
+ args.Actor,
+ args.Actor);
+ return;
+ }
+
+ ent.Comp.CurrentComplexity -= mod.Complexity;
+
+ if (mod.Active)
+ DeactivateModule(ent, (module, mod));
+
+ _containerSystem.Remove(module, ent.Comp.ModuleContainer);
+ _audio.PlayPredicted(ent.Comp.EjectModuleSound, ent, args.Actor);
+
+ Dirty(module, mod);
+ UpdateUserInterface(ent, ent.Comp);
+ }
+
+ private void OnActivate(Entity ent, ref ModModuleActivateMessage args)
+ {
+ var module = GetEntity(args.Module);
+ if (!TryComp(module, out var mod))
+ return;
+
+ if (mod.Active)
+ return;
+
+ ActivateModule(ent, (module, mod));
+ }
+
+ private void OnDeactivate(Entity ent, ref ModModuleDeactivateMessage args)
+ {
+ var module = GetEntity(args.Module);
+ if (!TryComp(module, out var mod))
+ return;
+
+ if (!mod.Active)
+ return;
+
+ DeactivateModule(ent, (module, mod));
+ }
+
+ private void OnAfterInteract(Entity ent, ref BeforeRangedInteractEvent args)
+ {
+ if (!TryComp(args.Target, out var modsuit))
+ return;
+
+ if (modsuit.CurrentComplexity + ent.Comp.Complexity > modsuit.MaxComplexity)
+ return;
+
+ _containerSystem.Insert(ent.Owner, modsuit.ModuleContainer);
+ _audio.PlayPredicted(modsuit.InsertModuleSound, args.Target.Value, args.User);
+
+ modsuit.CurrentComplexity += ent.Comp.Complexity;
+
+ if (ent.Comp.IsInstantlyActive)
+ ActivateModule((args.Target.Value, modsuit), ent);
+
+ Dirty(ent);
+ UpdateUserInterface(args.Target.Value, modsuit);
+ }
+
+ private void OnGetUIState(EntityUid uid, ModSuitModComponent component, ModModulesUiStateReadyEvent args)
+ {
+ args.States.Add(GetNetEntity(uid), null);
+ }
+
+ public void ActivateModule(Entity suit, Entity module)
+ {
+ module.Comp.Active = true;
+ Dirty(module);
+
+ if (_netMan.IsServer)
+ {
+ if (module.Comp.Components.TryGetValue("MODcore", out var defaultComps))
+ EntityManager.AddComponents(suit, defaultComps); // <-- НЕ через Robust.Shared...
+
+ UpdateUserInterface(suit, suit.Comp);
+
+ foreach (var attached in suit.Comp.ClothingUids)
+ {
+ var part = GetEntity(attached.Key);
+
+ if (module.Comp.Components.TryGetValue(attached.Value, out var comps))
+ EntityManager.AddComponents(part, comps);
+
+ if (module.Comp.RemoveComponents != null &&
+ module.Comp.RemoveComponents.TryGetValue(attached.Value, out var remComps))
+ EntityManager.RemoveComponents(part, remComps);
+ }
+ }
+
+ if (TryComp(suit, out var cellDraw))
+ {
+ suit.Comp.ModEnergyBaseUsing = MathF.Round(suit.Comp.ModEnergyBaseUsing + module.Comp.EnergyUsing, 3);
+ var attachedCount = GetAttachedToggleCount(suit);
+ cellDraw.DrawRate = suit.Comp.ModEnergyBaseUsing * attachedCount;
+ Dirty(suit, cellDraw);
+ }
+ }
+
+ public void DeactivateModule(Entity suit, Entity module)
+ {
+ if (!module.Comp.Active)
+ return;
+
+ module.Comp.Active = false;
+ Dirty(module);
+
+ if (_netMan.IsServer)
+ {
+ if (module.Comp.Components.TryGetValue("MODcore", out var defaultComps))
+ EntityManager.RemoveComponents(suit, defaultComps);
+
+ foreach (var attached in suit.Comp.ClothingUids)
+ {
+ var part = GetEntity(attached.Key);
+
+ if (module.Comp.Components.TryGetValue(attached.Value, out var comps))
+ EntityManager.RemoveComponents(part, comps);
+
+ if (module.Comp.RemoveComponents != null &&
+ module.Comp.RemoveComponents.TryGetValue(attached.Value, out var remComps))
+ EntityManager.AddComponents(part, remComps);
+ }
+
+ UpdateUserInterface(suit, suit.Comp);
+ }
+
+ if (TryComp(suit, out var cellDraw))
+ {
+ suit.Comp.ModEnergyBaseUsing = MathF.Max(
+ 0f,
+ MathF.Round(suit.Comp.ModEnergyBaseUsing - module.Comp.EnergyUsing, 3)
+ );
+
+ var attachedCount = GetAttachedToggleCount(suit);
+ cellDraw.DrawRate = suit.Comp.ModEnergyBaseUsing * attachedCount;
+ Dirty(suit, cellDraw);
+ }
+ }
+
+
+ public string GetColor(ExamineColor color, string text)
+ {
+ var colorCode = color switch
+ {
+ ExamineColor.Red => "red",
+ ExamineColor.Yellow => "yellow",
+ _ => "green",
+ };
+
+ return $"[color={colorCode}]{text}[/color]";
+ }
+
+ private void OnExamine(EntityUid uid, ModSuitModComponent mod, ref ExaminedEvent args)
+ {
+ var complexityColor = mod.Complexity switch
+ {
+ > 2 => ExamineColor.Red,
+ > 1 => ExamineColor.Yellow,
+ _ => ExamineColor.Green,
+ };
+
+ var energyColor = mod.EnergyUsing switch
+ {
+ > 0.2f => ExamineColor.Red,
+ > 0.1f => ExamineColor.Yellow,
+ _ => ExamineColor.Green,
+ };
+
+ args.PushMarkup(Robust.Shared.Localization.Loc.GetString("modsuit-mod-description-complexity",
+ ("complexity", GetColor(complexityColor, mod.Complexity.ToString("0")))));
+
+ args.PushMarkup(Robust.Shared.Localization.Loc.GetString("modsuit-mod-description-energy",
+ ("energy", GetColor(energyColor, mod.EnergyUsing.ToString("0.0")))));
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Parts.cs b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Parts.cs
new file mode 100644
index 000000000000..aee778ff0638
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Parts.cs
@@ -0,0 +1,274 @@
+using System.Linq;
+using Content.Shared._ADT.Modsuit.Components;
+using Content.Shared.Interaction;
+using Content.Shared.Inventory.Events;
+using Content.Shared.Verbs;
+using Content.Shared.Wires;
+using Robust.Shared.Containers;
+
+namespace Content.Shared._ADT.Modsuit.Systems;
+
+public sealed partial class ModSuitSystem
+{
+ private void InitializeParts()
+ {
+ SubscribeLocalEvent(OnAttachedInit);
+ SubscribeLocalEvent(OnRemoveAttached);
+
+ SubscribeLocalEvent(OnAttachedUnequip);
+ SubscribeLocalEvent(OnAttachedUnequipAttempt);
+
+ SubscribeLocalEvent(OnInteractHand);
+ SubscribeLocalEvent>(OnGetAttachedStripVerbsEvent);
+ }
+
+ private void OnAttachedInit(Entity ent, ref ComponentInit args)
+ {
+ ent.Comp.ClothingContainer = _containerSystem.EnsureContainer(ent, ent.Comp.ClothingContainerId);
+ }
+
+ private void OnRemoveAttached(Entity ent, ref ComponentRemove args)
+ {
+ // if the attached component is being removed (maybe entity is being deleted?) we will just remove the
+ // modsuit component. This means if you had a hard-suit helmet that took too much damage, you would
+ // still be left with a suit that was simply missing a helmet. There is currently no way to fix a partially
+ // broken suit like this.
+
+ var suit = GetEntity(ent.Comp.AttachedUid);
+
+ if (!TryComp(suit, out ModSuitComponent? modSuitComp))
+ return;
+
+ if (!modSuitComp.ClothingUids.Remove(GetNetEntity(ent.Owner)))
+ return;
+
+ // If no attached clothing left - remove component and action
+ if (modSuitComp.ClothingUids.Count > 0)
+ return;
+
+ _actionsSystem.RemoveAction(modSuitComp.ActionEntity);
+ RemComp(suit, modSuitComp);
+ }
+
+ ///
+ /// Called if the clothing was unequipped, to ensure that it gets moved into the suit's container.
+ ///
+ private void OnAttachedUnequip(Entity ent, ref GotUnequippedEvent args)
+ {
+ if (_timing.ApplyingState)
+ return;
+
+ var suit = GetEntity(ent.Comp.AttachedUid);
+
+ if (!TryComp(suit, out ModSuitComponent? modSuitComp))
+ return;
+
+ // As unequipped gets called in the middle of container removal, we cannot call a container-insert without causing issues.
+ // So we delay it and process it during a system update:
+ if (!modSuitComp.ClothingUids.ContainsKey(GetNetEntity(ent.Owner)))
+ return;
+
+ _containerSystem.Insert(ent.Owner, modSuitComp.PartsContainer);
+ }
+
+ private void OnAttachedUnequipAttempt(Entity ent, ref BeingUnequippedAttemptEvent args)
+ {
+ args.Cancel();
+ }
+
+ private void OnInteractHand(Entity ent, ref InteractHandEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ if (_timing.ApplyingState)
+ return;
+
+ var suit = GetEntity(ent.Comp.AttachedUid);
+
+ if (!TryComp(suit, out ModSuitComponent? modSuitComp) || !modSuitComp.TempUser.HasValue)
+ return;
+
+ // Get slot from dictionary of uid-slot
+ if (!modSuitComp.ClothingUids.TryGetValue(GetNetEntity(ent.Owner), out var attachedSlot))
+ return;
+
+ if (!_inventorySystem.TryUnequip(modSuitComp.TempUser.Value, attachedSlot, force: true, predicted: true))
+ return;
+
+ _containerSystem.Insert(ent.Owner, modSuitComp.PartsContainer);
+ args.Handled = true;
+ }
+
+ private void OnGetAttachedStripVerbsEvent(Entity ent, ref GetVerbsEvent args)
+ {
+ var suit = GetEntity(ent.Comp.AttachedUid);
+
+ if (!TryComp(suit, out var modSuitComp))
+ return;
+
+ // redirect to the attached entity.
+ OnGetVerbs((suit, modSuitComp), ref args);
+ }
+
+ ///
+ /// Toggle function for toggling multiple clothings at once
+ ///
+ private void ToggleClothing(Entity ent, EntityUid user)
+ {
+ if (!CanToggleClothing(user, ent))
+ return;
+
+ if (GetPartsToggleStatus(ent, ent.Comp) == ModSuitAttachedStatus.NoneToggled)
+ {
+ foreach (var clothing in ent.Comp.ClothingUids)
+ {
+ EquipPart(ent, user, GetEntity(clothing.Key), clothing.Value, false);
+ }
+ }
+ else
+ {
+ foreach (var clothing in ent.Comp.ClothingUids.Where(x =>
+ !ent.Comp.PartsContainer.Contains(GetEntity(x.Key))))
+ {
+ UnequipPart(ent, user, GetEntity(clothing.Key), clothing.Value, false);
+ }
+ }
+
+ UpdateUserInterface(ent, ent.Comp);
+ }
+
+ ///
+ /// Toggle function for single clothing
+ ///
+ private void TogglePart(Entity ent, EntityUid user, EntityUid part)
+ {
+ if (!TryComp(ent, out var panel) || panel.Open)
+ {
+ _popupSystem.PopupPredicted(Robust.Shared.Localization.Loc.GetString("modsuit-close-wires"), user, user);
+ return;
+ }
+
+ if (!CanToggleClothing(user, ent))
+ return;
+
+ if (!ent.Comp.ClothingUids.TryGetValue(GetNetEntity(part), out var slot) || string.IsNullOrEmpty(slot))
+ return;
+
+ if (!ent.Comp.PartsContainer.Contains(part))
+ UnequipPart(ent, user, part, slot);
+ else
+ EquipPart(ent, user, part, slot);
+ }
+
+ private void EquipPart(Entity ent,
+ EntityUid user,
+ EntityUid part,
+ string slot,
+ bool updateUi = true)
+ {
+ if (_timing.ApplyingState)
+ return;
+
+ if (!ent.Comp.TempUser.HasValue)
+ return;
+
+ if (!TryComp(part, out var attachedComp))
+ return;
+
+ var parent = ent.Comp.TempUser.Value;
+ _inventorySystem.TryGetSlotEntity(parent, slot, out var currentClothing);
+
+ // Check if we need to replace current clothing
+ if (currentClothing.HasValue && !ent.Comp.ReplaceCurrentClothing)
+ {
+ _popupSystem.PopupPredicted(
+ Robust.Shared.Localization.Loc.GetString("modsuit-remove-first", ("entity", currentClothing)),
+ user,
+ user);
+ return;
+ }
+
+ if (_inventorySystem.TryUnequip(user, parent, slot, out var removedItem, predicted: true))
+ _containerSystem.Insert(removedItem.Value, attachedComp.ClothingContainer);
+ else if (removedItem.HasValue)
+ return;
+
+ _inventorySystem.TryEquip(user, parent, part, slot, force: true, predicted: true);
+
+ UpdateCellDraw(ent);
+
+ if (GetPartsToggleStatus(ent.Owner, ent.Comp) == ModSuitAttachedStatus.AllToggled &&
+ _timing.IsFirstTimePredicted && _netMan.IsClient)
+ _audio.PlayGlobal(ent.Comp.FullyEnabledSound, user);
+
+ if (updateUi)
+ UpdateUserInterface(ent.Owner, ent.Comp);
+ }
+
+ private void UnequipPart(Entity ent,
+ EntityUid user,
+ EntityUid clothing,
+ string slot,
+ bool updateUi = true)
+ {
+ if (_timing.ApplyingState)
+ return;
+
+ if (!ent.Comp.TempUser.HasValue)
+ return;
+
+ var parent = ent.Comp.TempUser.Value;
+
+ _inventorySystem.TryUnequip(user, parent, slot, force: true, predicted: true);
+
+ // If attached have clothing in container - equip it
+ if (!TryComp(clothing, out var attachedComp))
+ return;
+
+ if (attachedComp.ClothingContainer.ContainedEntity is { Valid: true } stored)
+ _inventorySystem.TryEquip(parent, stored, slot, force: true, predicted: true);
+
+ UpdateCellDraw(ent);
+
+ if (updateUi)
+ UpdateUserInterface(ent.Owner, ent.Comp);
+ }
+
+ private void RemoveAllParts(Entity ent)
+ {
+ foreach (var clothing in ent.Comp.ClothingUids)
+ {
+ if (!ent.Comp.PartsContainer.Contains(GetEntity(clothing.Key)))
+ UnequipPart(ent, ent, GetEntity(clothing.Key), clothing.Value, false);
+ }
+
+ UpdateUserInterface(ent, ent.Comp);
+ }
+
+ public int GetAttachedToggleCount(Entity ent)
+ {
+ return ent.Comp.ClothingUids.Where(x => !ent.Comp.PartsContainer.Contains(GetEntity(x.Key))).Count();
+ }
+
+ public ModSuitAttachedStatus GetPartsToggleStatus(EntityUid modSuit, ModSuitComponent? component = null)
+ {
+ if (!Resolve(modSuit, ref component))
+ return ModSuitAttachedStatus.NoneToggled;
+
+ // If entity don't have any attached clothings it means none toggled
+ if (component.ClothingUids.Count == 0)
+ return ModSuitAttachedStatus.NoneToggled;
+
+ var toggledCount = component.ClothingUids.Where(x => !component.PartsContainer.Contains(GetEntity(x.Key)))
+ .Count();
+
+ if (toggledCount <= 0)
+ return ModSuitAttachedStatus.NoneToggled;
+
+ if (toggledCount < component.ClothingUids.Count)
+ return ModSuitAttachedStatus.PartlyToggled;
+
+ return ModSuitAttachedStatus.AllToggled;
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Suit.cs b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Suit.cs
new file mode 100644
index 000000000000..05deb8efcdef
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.Suit.cs
@@ -0,0 +1,429 @@
+using System.Linq;
+using Content.Shared._ADT.Modsuit.Components;
+using Content.Shared._ADT.Modsuit.Events;
+using Content.Shared.Actions;
+using Content.Shared.Coordinates;
+using Content.Shared.DoAfter;
+using Content.Shared.Emp;
+using Content.Shared.IdentityManagement;
+using Content.Shared.Inventory;
+using Content.Shared.Inventory.Events;
+using Content.Shared.Popups;
+using Content.Shared.PowerCell;
+using Content.Shared.Verbs;
+using Robust.Shared.Containers;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._ADT.Modsuit.Systems;
+
+public sealed partial class ModSuitSystem
+{
+ private void InitializeSuit()
+ {
+ SubscribeLocalEvent(OnModSuitInit);
+ SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnToggleClothingAction);
+ SubscribeLocalEvent(OnToggleMenuAction);
+ SubscribeLocalEvent(OnGetActions);
+ SubscribeLocalEvent(OnRemoveModSuit);
+ SubscribeLocalEvent(OnModSuitEquip);
+ SubscribeLocalEvent(OnModSuitUnequip);
+ SubscribeLocalEvent(OnToggleClothingMessage);
+ SubscribeLocalEvent(OnModSuitUnequipAttempt);
+
+ SubscribeLocalEvent>>(GetRelayedVerbs);
+ SubscribeLocalEvent>(OnGetVerbs);
+ SubscribeLocalEvent(OnDoAfterComplete);
+ SubscribeLocalEvent(OnLocked);
+
+ SubscribeLocalEvent(OnPowercellEmpty);
+ SubscribeLocalEvent>(
+ OnFindInventoryBatteryEvent);
+ }
+
+ private void OnModSuitInit(Entity ent, ref ComponentInit args)
+ {
+ ent.Comp.PartsContainer = _containerSystem.EnsureContainer(ent, ent.Comp.ContainerId);
+ ent.Comp.ModuleContainer = _containerSystem.EnsureContainer(ent, ent.Comp.ModuleContainerId);
+ }
+
+ ///
+ /// On map init, either spawn the appropriate entity into the suit slot, or if it already exists, perform some
+ /// sanity checks. Also updates the action icon to show the toggled-entity.
+ ///
+ private void OnMapInit(Entity ent, ref MapInitEvent args)
+ {
+ if (_netMan.IsClient)
+ return;
+
+ if (ent.Comp.PartsContainer.Count != 0)
+ {
+ DebugTools.Assert(ent.Comp.ClothingUids.Count != 0,
+ "Unexpected entity present inside of a modsuit container.");
+ return;
+ }
+
+ StartupClothing(ent);
+ StartupModules(ent);
+
+ if (_actionContainer.EnsureAction(ent, ref ent.Comp.ActionEntity, out var action, ent.Comp.Action))
+ _actionsSystem.SetEntityIcon((ent.Comp.ActionEntity.Value, action), ent.Owner);
+
+ _actionContainer.EnsureAction(ent, ref ent.Comp.ActionMenuEntity, ent.Comp.MenuAction);
+
+ Dirty(ent);
+
+ if (HasComp(ent))
+ _cell.SetDrawEnabled(ent.Owner, false);
+
+ UpdateUserInterface(ent.Owner, ent.Comp);
+ }
+
+
+
+ ///
+ /// Equip or unequip the modsuit.
+ ///
+ private void OnToggleClothingAction(Entity ent, ref ToggleModPartActionEvent args)
+ {
+ if (!CanUseMod(ent, args.Performer, false))
+ return;
+
+ if (args.Handled)
+ return;
+
+ if (ent.Comp.UserName != null &&
+ (!_id.TryFindIdCard(args.Performer, out var id) || ent.Comp.UserName != id.Comp.FullName))
+ {
+ _popupSystem.PopupPredicted(Robust.Shared.Localization.Loc.GetString("modsuit-locked-popup"),
+ args.Performer,
+ args.Performer);
+ return;
+ }
+
+ args.Handled = true;
+
+ // If modsuit have only one attached clothing (like helmets) action will just toggle it
+ // If it have more attached clothings, it'll open radial menu
+ if (ent.Comp.ClothingUids.Count == 1)
+ TogglePart(ent, args.Performer, GetEntity(ent.Comp.ClothingUids.First().Key));
+ else
+ _ui.TryToggleUi(ent.Owner, ModSuitUiKey.Key, args.Performer);
+ }
+
+ ///
+ /// Equip or unequip the modsuit.
+ ///
+ private void OnToggleMenuAction(Entity ent, ref ToggleModMenuActionEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ args.Handled = true;
+
+ _ui.TryToggleUi(ent.Owner, ModSuitMenuUiKey.Key, args.Performer);
+ }
+
+ private void OnGetActions(Entity ent, ref GetItemActionsEvent args)
+ {
+ if (!_netMan.IsServer)
+ return;
+
+ if (!_inventorySystem.InSlotWithFlags(ent.Owner, ent.Comp.RequiredFlags))
+ return;
+
+ args.AddAction(ent.Comp.ActionMenuEntity);
+ args.AddAction(ent.Comp.ActionEntity);
+ }
+
+ private void OnRemoveModSuit(Entity ent, ref ComponentRemove args)
+ {
+ // If the parent/owner component of the attached clothing is being removed (entity getting deleted?) we will
+ // delete the attached entity. We do this regardless of whether or not the attached entity is currently
+ // "outside" of the container or not. This means that if a hardsuit takes too much damage, the helmet will also
+ // automatically be deleted.
+
+ _actionsSystem.RemoveAction(ent.Comp.ActionEntity);
+
+ if (_netMan.IsClient)
+ return;
+
+ foreach (var clothing in ent.Comp.ClothingUids.Keys)
+ {
+ QueueDel(GetEntity(clothing));
+ }
+ }
+
+ ///
+ /// Called when the suit is unequipped, to ensure that the helmet also gets unequipped.
+ ///
+ private void OnModSuitEquip(Entity ent, ref GotEquippedEvent args)
+ {
+ ent.Comp.TempUser = args.Equipee;
+ }
+
+ ///
+ /// Called when the suit is unequipped, to ensure that the helmet also gets unequipped.
+ ///
+ private void OnModSuitUnequip(Entity ent, ref GotUnequippedEvent args)
+ {
+ ent.Comp.TempUser = null;
+
+ foreach (var part in ent.Comp.ClothingUids)
+ {
+ // Check if entity in container what means it already unequipped
+ if (ent.Comp.PartsContainer.Contains(GetEntity(part.Key)))
+ continue;
+
+ if (part.Value == null)
+ continue;
+
+ _inventorySystem.TryUnequip(args.Equipee,
+ part.Value,
+ force: true,
+ predicted: true); //TODO: сделать чтобы это работало, а то сейчас писец после гиба
+ }
+ }
+
+ ///
+ /// Equip or unequip modsuit with ui message
+ ///
+ private void OnToggleClothingMessage(Entity ent, ref ToggleModSuitPartMessage args)
+ {
+ var part = GetEntity(args.PartEntity);
+
+ TogglePart(ent, args.Actor, part);
+ }
+
+ ///
+ /// Prevents from unequipping entity if all attached not unequipped
+ ///
+ private void OnModSuitUnequipAttempt(Entity ent, ref BeingUnequippedAttemptEvent args)
+ {
+ if (!ent.Comp.BlockUnequipWhenAttached)
+ return;
+
+ if (GetPartsToggleStatus(ent) == ModSuitAttachedStatus.NoneToggled)
+ return;
+
+ _popupSystem.PopupPredicted(Robust.Shared.Localization.Loc.GetString("modsuit-remove-all-attached-first"),
+ args.Unequipee,
+ args.Unequipee);
+
+ args.Cancel();
+ }
+
+ private void GetRelayedVerbs(Entity ent,
+ ref InventoryRelayedEvent> args)
+ {
+ OnGetVerbs(ent, ref args.Args);
+ }
+
+ private void OnGetVerbs(Entity ent, ref GetVerbsEvent args)
+ {
+ if (!args.CanInteract || args.Hands == null)
+ return;
+
+ if (GetAttachedToggleCount(ent) == 0)
+ return;
+
+ if (!CanUseMod(ent, args.User))
+ return;
+
+ if (!ent.Comp.ActionEntity.HasValue)
+ return;
+
+ var text = ent.Comp.VerbText ?? Name(ent.Comp.ActionEntity.Value);
+
+ if (args.User != ent.Comp.TempUser && ent.Comp.StripDelay == null)
+ return;
+
+ var user = args.User;
+
+ var verb = new EquipmentVerb
+ {
+ Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")),
+ Text = Robust.Shared.Localization.Loc.GetString(text),
+ };
+
+ verb.Act = () => StartDoAfter(ent, user);
+
+ args.Verbs.Add(verb);
+ }
+
+ private void OnDoAfterComplete(Entity ent, ref ToggleModPartsDoAfterEvent args)
+ {
+ if (args.Cancelled)
+ return;
+
+ ToggleClothing(ent, args.User);
+ }
+
+ private void OnLocked(EntityUid uid, ModSuitComponent comp, ModLockMessage args)
+ {
+ if (!comp.TempUser.HasValue)
+ return;
+
+ if (!_id.TryFindIdCard(comp.TempUser.Value, out var id))
+ return;
+
+ if (comp.UserName != null && id.Comp.FullName != comp.UserName)
+ return;
+
+ if (comp.UserName == null)
+ comp.UserName = id.Comp.FullName;
+ else
+ comp.UserName = null;
+
+ UpdateUserInterface(uid, comp);
+ }
+
+ private void OnPowercellEmpty(EntityUid uid, ModSuitComponent component, PowerCellSlotEmptyEvent args)
+ {
+ RemoveAllParts((uid, component));
+ }
+
+ ///
+ /// Tries to find battery for charger
+ ///
+ private void OnFindInventoryBatteryEvent(Entity entity,
+ ref InventoryRelayedEvent args)
+ {
+ UpdateUserInterface(entity.Owner, entity.Comp);
+
+ if (args.Args.FoundBattery.HasValue)
+ return;
+
+ if (_itemSlotsSystem.TryGetSlot(entity.Owner, "cell_slot", out var slot))
+ args.Args.FoundBattery = slot.Item;
+ }
+
+ private bool CanUseMod(Entity ent, EntityUid? user, bool checkLock = true)
+ {
+ if (ent.Comp.ClothingUids.Count == 0 || ent.Comp.PartsContainer == null)
+ return false;
+
+ if (ent.Comp.TempUser == null || !_inventorySystem.InSlotWithFlags(ent.Owner, ent.Comp.RequiredFlags))
+ return false;
+
+ if (checkLock && ent.Comp.UserName != null && _id.TryFindIdCard(ent.Comp.TempUser.Value, out var id) &&
+ ent.Comp.UserName != id.Comp.FullName)
+ return false;
+
+ if (HasComp(ent.Owner) && (user == ent.Comp.TempUser || user == null))
+ return false;
+
+ return true;
+ }
+
+ private bool CanToggleClothing(EntityUid user, Entity ent)
+ {
+ if (!_cell.HasDrawCharge(ent.Owner, user: user))
+ return false;
+
+ if (ent.Comp.ClothingUids.Count <= 0)
+ return false;
+
+ var ev = new ToggleClothingAttemptEvent(user, ent);
+ RaiseLocalEvent(ent, ev);
+
+ if (ev.Cancelled)
+ return false;
+
+ return true;
+ }
+
+ private void StartupClothing(Entity ent)
+ {
+ var xform = Transform(ent);
+
+ foreach (var prototype in ent.Comp.ClothingPrototypes)
+ {
+ var spawned = Spawn(prototype.Value, xform.Coordinates);
+ var attachedClothing = EnsureComp(spawned);
+ attachedClothing.AttachedUid = GetNetEntity(ent.Owner);
+
+ EnsureComp(spawned);
+
+ ent.Comp.ClothingUids.Add(GetNetEntity(spawned), prototype.Key);
+ _containerSystem.Insert(spawned, ent.Comp.PartsContainer, xform);
+
+ Dirty(spawned, attachedClothing);
+ }
+ }
+
+ private void StartupModules(Entity ent)
+ {
+ foreach (var module in ent.Comp.StartingModules)
+ {
+ var spawned = Spawn(module, ent.Owner.ToCoordinates());
+ if (!TryComp(spawned, out var moduleComp))
+ continue;
+
+ _containerSystem.Insert(spawned, ent.Comp.ModuleContainer);
+ ent.Comp.CurrentComplexity += moduleComp.Complexity;
+
+ if (moduleComp.IsInstantlyActive)
+ ActivateModule(ent, (spawned, moduleComp));
+ }
+ }
+
+ private void StartDoAfter(Entity ent, EntityUid user)
+ {
+ if (!ent.Comp.TempUser.HasValue)
+ return;
+
+ var wearer = ent.Comp.TempUser.Value;
+ if (ent.Comp.StripDelay is null)
+ return;
+
+ var (time, stealth) = _strippable.GetStripTimeModifiers(user, wearer, ent, ent.Comp.StripDelay.Value);
+
+ var args = new DoAfterArgs(
+ EntityManager,
+ user,
+ time,
+ new ToggleModPartsDoAfterEvent(),
+ target: ent.Owner,
+ used: wearer,
+ eventTarget: ent.Owner)
+ {
+ BreakOnDamage = true,
+ BreakOnMove = true,
+ DistanceThreshold = 2f,
+ };
+
+ if (!_doAfter.TryStartDoAfter(args))
+ return;
+
+ if (!stealth && user != wearer)
+ {
+ var popup = Loc.GetString("strippable-component-alert-owner-interact",
+ ("user", Identity.Name(user, EntityManager)),
+ ("item", ent.Owner));
+ _popupSystem.PopupEntity(popup, wearer, wearer, PopupType.Large);
+ }
+ }
+
+
+ private void UpdateCellDraw(Entity ent)
+ {
+ if (!TryComp(ent, out var draw))
+ return;
+
+ var attachedCount = GetAttachedToggleCount(ent);
+ var enabled = attachedCount > 0 && ent.Comp.ModEnergyBaseUsing > 0f;
+
+ _cell.SetDrawEnabled(ent.Owner, enabled);
+
+ var newRate = enabled
+ ? MathF.Round(ent.Comp.ModEnergyBaseUsing * attachedCount, 3)
+ : 0f;
+
+ if (!newRate.Equals(draw.DrawRate))
+ {
+ draw.DrawRate = newRate;
+ Dirty(ent, draw);
+ }
+ }
+}
diff --git a/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.cs b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.cs
new file mode 100644
index 000000000000..9840f87c4d73
--- /dev/null
+++ b/Content.Shared/_ADT/Modsuit/Systems/ModSuitSystem.cs
@@ -0,0 +1,74 @@
+using Content.Shared._ADT.Modsuit.Components;
+using Content.Shared._ADT.Modsuit.Events;
+using Content.Shared.Access.Systems;
+using Content.Shared.Actions;
+using Content.Shared.Containers.ItemSlots;
+using Content.Shared.DoAfter;
+using Content.Shared.Inventory;
+using Content.Shared.Popups;
+using Content.Shared.PowerCell;
+using Content.Shared.Strip;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Containers;
+using Robust.Shared.Network;
+using Robust.Shared.Serialization;
+using Robust.Shared.Timing;
+
+namespace Content.Shared._ADT.Modsuit.Systems;
+
+public sealed partial class ModSuitSystem : EntitySystem
+{
+ [Dependency] private readonly ActionContainerSystem _actionContainer = default!;
+ [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly SharedPowerCellSystem _cell = default!;
+ [Dependency] private readonly SharedContainerSystem _containerSystem = default!;
+ [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
+ [Dependency] private readonly SharedIdCardSystem _id = default!;
+ [Dependency] private readonly InventorySystem _inventorySystem = default!;
+ [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
+ [Dependency] private readonly INetManager _netMan = default!;
+ [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+ [Dependency] private readonly SharedStrippableSystem _strippable = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+ [Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ InitializeSuit();
+ InitializeParts();
+ InitializeModules();
+ }
+
+ public void UpdateUserInterface(EntityUid uid, ModSuitComponent component)
+ {
+ _ui.SetUiState(uid, ModSuitUiKey.Key, new RadialModBoundUiState());
+
+ Dirty(uid, component);
+
+ var state = new ModBoundUiState();
+
+ foreach (var ent in component.ModuleContainer.ContainedEntities)
+ {
+ if (!TryComp(ent, out var mod))
+ continue;
+
+ state.EquipmentStates.Add(GetNetEntity(ent), mod.Active);
+ }
+
+ _ui.SetUiState(uid, ModSuitMenuUiKey.Key, state);
+ }
+}
+
+///
+/// Status of modsuit attachee
+///
+[Serializable] [NetSerializable]
+public enum ModSuitAttachedStatus : byte
+{
+ NoneToggled,
+ PartlyToggled,
+ AllToggled,
+}
diff --git a/Content.Shared/_ADT/Turrets/Components/TurretControllableComponent.cs b/Content.Shared/_ADT/Turrets/Components/TurretControllableComponent.cs
new file mode 100644
index 000000000000..fcd114be82f9
--- /dev/null
+++ b/Content.Shared/_ADT/Turrets/Components/TurretControllableComponent.cs
@@ -0,0 +1,29 @@
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._ADT.Turrets.Components;
+
+[RegisterComponent]
+public sealed partial class TurretControllableComponent : Component
+{
+ [ViewVariables]
+ public EntityUid? Controller;
+
+ [DataField("ControlReturnActionEntity")]
+ public EntityUid? ControlReturnActEntity;
+
+ [DataField("ControlReturnAction")]
+ public EntProtoId ControlReturnAction = "ControlReturnAction";
+
+ [DataField("isDrone")]
+ public bool IsDrone;
+
+ [DataField("isMoveable")]
+ public bool IsMoveable;
+
+ [DataField("Range")]
+ public float Range = 50f;
+
+ [ViewVariables]
+ public EntityUid? User;
+ [DataField] public bool UseMouseRotation = true;
+}
diff --git a/Content.Shared/_ADT/Turrets/Components/TurretControllerComponent.cs b/Content.Shared/_ADT/Turrets/Components/TurretControllerComponent.cs
new file mode 100644
index 000000000000..5254774c50f3
--- /dev/null
+++ b/Content.Shared/_ADT/Turrets/Components/TurretControllerComponent.cs
@@ -0,0 +1,11 @@
+namespace Content.Shared._ADT.Turrets.Components;
+
+[RegisterComponent]
+public sealed partial class TurretControllerComponent : Component
+{
+ [ViewVariables]
+ public EntityUid? CurrentTurret;
+
+ [ViewVariables]
+ public EntityUid? CurrentUser;
+}
diff --git a/Content.Shared/_ADT/Turrets/Events/TurretEvents.cs b/Content.Shared/_ADT/Turrets/Events/TurretEvents.cs
new file mode 100644
index 000000000000..19ed492623a0
--- /dev/null
+++ b/Content.Shared/_ADT/Turrets/Events/TurretEvents.cs
@@ -0,0 +1,29 @@
+using Content.Shared.Actions;
+
+namespace Content.Shared._ADT.Turrets.Events;
+
+public sealed partial class ControlReturnActionEvent : InstantActionEvent
+{
+}
+
+public sealed class ReturnToBodyTurretEvent : EntityEventArgs
+{
+ public EntityUid TurretController;
+
+ public ReturnToBodyTurretEvent(EntityUid turretcontroller)
+ {
+ TurretController = turretcontroller;
+ }
+}
+
+public sealed class GettingControlledEvent : EntityEventArgs
+{
+ public EntityUid Controller;
+ public EntityUid User;
+
+ public GettingControlledEvent(EntityUid user, EntityUid controller)
+ {
+ User = user;
+ Controller = controller;
+ }
+}
diff --git a/Content.Shared/_ADT/Turrets/Systems/TurretControllableSystem.cs b/Content.Shared/_ADT/Turrets/Systems/TurretControllableSystem.cs
new file mode 100644
index 000000000000..2a4098d26357
--- /dev/null
+++ b/Content.Shared/_ADT/Turrets/Systems/TurretControllableSystem.cs
@@ -0,0 +1,174 @@
+using Content.Shared._ADT.Turrets.Components;
+using Content.Shared._ADT.Turrets.Events;
+using Content.Shared.Actions;
+using Content.Shared.Bed.Sleep;
+using Content.Shared.Damage;
+using Content.Shared.Destructible;
+using Content.Shared.Mind;
+using Content.Shared.Mind.Components;
+using Content.Shared.Mobs.Systems;
+using Content.Shared.MouseRotator;
+using Content.Shared.Movement.Components;
+using Content.Shared.Movement.Events;
+using Content.Shared.StatusEffectNew;
+
+namespace Content.Shared._ADT.Turrets.Systems;
+
+///
+/// Управление контролируемыми турелями/дронами:
+/// - Пересадка Mind в цель и назад
+/// - Экшен возврата в тело
+/// - Ограничения по состояниям тела
+/// - Режим дрона: временно навешивает компоненты для движения/поворота мышью
+///
+public sealed class TurretControllableSystem : EntitySystem
+{
+ [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+
+ private readonly HashSet _addedMover = new();
+ private readonly HashSet _addedRotator = new();
+
+ private readonly Dictionary _bodyToTurret = new();
+ [Dependency] private readonly SharedMindSystem _mindSystem = default!;
+ [Dependency] private readonly MobStateSystem _mobStateSystem = default!;
+ [Dependency] private readonly StatusEffectsSystem _statusNew = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnStartup);
+ SubscribeLocalEvent(OnShutdown);
+ SubscribeLocalEvent(OnDestruction);
+
+ SubscribeLocalEvent(OnReturn);
+ SubscribeLocalEvent(OnGettingControlled);
+
+ SubscribeLocalEvent(OnUserMoveInput);
+
+ SubscribeLocalEvent(OnBodyDamaged);
+ }
+
+ private void OnStartup(EntityUid uid, TurretControllableComponent component, MapInitEvent args)
+ {
+ _actionsSystem.AddAction(uid, ref component.ControlReturnActEntity, component.ControlReturnAction);
+ }
+
+ private void OnShutdown(EntityUid uid, TurretControllableComponent component, ComponentShutdown args)
+ {
+ Return(uid, component);
+ _actionsSystem.RemoveAction(component.ControlReturnActEntity);
+ }
+
+ private void OnDestruction(EntityUid uid, TurretControllableComponent component, DestructionEventArgs args)
+ {
+ Return(uid, component);
+ _actionsSystem.RemoveAction(component.ControlReturnActEntity);
+ }
+
+ public void OnGettingControlled(EntityUid uid, TurretControllableComponent comp, GettingControlledEvent e)
+ {
+ comp.User = e.User;
+ comp.Controller = e.Controller;
+ _bodyToTurret[e.User] = uid;
+
+ if (comp.IsMoveable || comp.IsDrone)
+ EnsureMovementStack(uid, comp);
+ }
+
+ public void OnReturn(EntityUid uid, TurretControllableComponent component, ControlReturnActionEvent args)
+ {
+ Return(uid, component);
+ }
+
+ private void OnUserMoveInput(Entity turret, ref MoveInputEvent args)
+ {
+ if (!args.HasDirectionalMovement)
+ return;
+
+ if (!turret.Comp.IsMoveable && !turret.Comp.IsDrone)
+ Return(args.Entity, turret.Comp);
+ }
+
+ private void OnBodyDamaged(EntityUid uid, DamageableComponent _, ref DamageChangedEvent args)
+ {
+ if (_bodyToTurret.TryGetValue(uid, out var turretUid) &&
+ TryComp(turretUid, out var tComp) &&
+ tComp.User == uid)
+ Return(turretUid, tComp);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var it = EntityQueryEnumerator();
+ while (it.MoveNext(out var uid, out var comp))
+ {
+ if (comp.User is not { } user || comp.Controller is null)
+ continue;
+
+ var shouldReturn =
+ !_mobStateSystem.IsAlive(user) ||
+ HasComp(user) ||
+ _statusNew.HasEffectComp(user);
+
+ if (shouldReturn)
+ Return(uid, comp);
+ }
+ }
+
+ private void Return(EntityUid uid, TurretControllableComponent comp)
+ {
+ if (comp.User is { } body)
+ _bodyToTurret.Remove(body);
+
+ if (TryComp(uid, out var mind) && mind.HasMind)
+ TryReturnToBody(uid, comp);
+
+ comp.User = null;
+
+ if (comp.Controller is not null)
+ {
+ RaiseLocalEvent((EntityUid)comp.Controller, new ReturnToBodyTurretEvent(uid));
+ comp.Controller = null;
+ }
+
+ TeardownMovementStack(uid);
+ }
+
+ public bool TryReturnToBody(EntityUid uid, TurretControllableComponent component)
+ {
+ if (component.User is not null)
+ {
+ _mindSystem.ControlMob(uid, (EntityUid)component.User);
+ return true;
+ }
+
+ return false;
+ }
+
+ private void EnsureMovementStack(EntityUid uid, TurretControllableComponent comp)
+ {
+ if (!HasComp(uid))
+ {
+ AddComp(uid);
+ _addedMover.Add(uid);
+ }
+
+ if (comp.UseMouseRotation && !HasComp(uid))
+ {
+ AddComp(uid);
+ _addedRotator.Add(uid);
+ }
+ }
+
+ private void TeardownMovementStack(EntityUid uid)
+ {
+ if (_addedMover.Remove(uid) && TryComp(uid, out _))
+ RemComp(uid);
+
+ if (_addedRotator.Remove(uid) && TryComp(uid, out _))
+ RemComp(uid);
+ }
+}
diff --git a/Content.Shared/_ADT/Turrets/Systems/TurretControllerSystem.cs b/Content.Shared/_ADT/Turrets/Systems/TurretControllerSystem.cs
new file mode 100644
index 000000000000..f05d5d5eadfe
--- /dev/null
+++ b/Content.Shared/_ADT/Turrets/Systems/TurretControllerSystem.cs
@@ -0,0 +1,111 @@
+using System.Linq;
+using Content.Shared._ADT.Turrets.Components;
+using Content.Shared._ADT.Turrets.Events;
+using Content.Shared.DeviceLinking;
+using Content.Shared.DeviceLinking.Events;
+using Content.Shared.Ghost;
+using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
+using Content.Shared.Mind;
+using Content.Shared.Mind.Components;
+using Content.Shared.Popups;
+
+namespace Content.Shared._ADT.Turrets.Systems;
+
+public sealed class TurretControllerSystem : EntitySystem
+{
+ [Dependency] private readonly SharedMindSystem _mindSystem = default!;
+ [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnActivateInWorld);
+ SubscribeLocalEvent(OnUseInHand);
+ SubscribeLocalEvent(OnShutdown);
+ SubscribeLocalEvent(OnLinkAttempt);
+ SubscribeLocalEvent(OnNewLink);
+ SubscribeLocalEvent(OnReturn);
+ }
+
+ public void OnReturn(EntityUid uid, TurretControllerComponent component, ReturnToBodyTurretEvent args)
+ {
+ component.CurrentUser = null;
+ component.CurrentTurret = null;
+ }
+
+ public void OnLinkAttempt(EntityUid uid, TurretControllerComponent component, LinkAttemptEvent args)
+ {
+ if (component.CurrentUser is not null)
+ args.Cancel();
+ }
+
+ private void OnUseInHand(EntityUid uid, TurretControllerComponent comp, UseInHandEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ TryStartControl(uid, comp, args.User);
+ args.Handled = true;
+ }
+
+ private void OnActivateInWorld(EntityUid uid, TurretControllerComponent component, ActivateInWorldEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ TryStartControl(uid, component, args.User);
+ args.Handled = true;
+ }
+
+ private void TryStartControl(EntityUid controllerUid, TurretControllerComponent controllerComp, EntityUid user)
+ {
+ if (TryComp(user, out _) || TryComp(user, out _))
+ return;
+
+ if (!TryComp(controllerUid, out var linkSource))
+ return;
+
+ if (controllerComp.CurrentUser != null)
+ {
+ var msg = Loc.GetString("machine-already-in-use", ("machine", controllerUid));
+ _popupSystem.PopupEntity(msg, controllerUid, user);
+ return;
+ }
+
+ if (!TryComp(user, out var userMind) || !userMind.HasMind)
+ return;
+
+ if (linkSource.LinkedPorts.Count == 0)
+ return;
+
+ var target = linkSource.LinkedPorts.First().Key;
+ if (!TryComp(target, out _))
+ return;
+
+ if (TryComp(target, out var tMind) && tMind.HasMind)
+ {
+ var msg = Loc.GetString("machine-already-in-use", ("machine", target));
+ _popupSystem.PopupEntity(msg, controllerUid, user);
+ return;
+ }
+
+ controllerComp.CurrentUser = user;
+ controllerComp.CurrentTurret = target;
+ RaiseLocalEvent(target, new GettingControlledEvent(user, controllerUid));
+ _mindSystem.ControlMob(user, target);
+ }
+
+ public void OnShutdown(EntityUid uid, TurretControllerComponent component, ComponentShutdown args)
+ {
+ if (component.CurrentUser is not null && component.CurrentTurret is not null)
+ RaiseLocalEvent(component.CurrentTurret.Value, new ControlReturnActionEvent());
+ }
+
+ public void OnNewLink(EntityUid uid, TurretControllerComponent component, NewLinkEvent args)
+ {
+ if (TryComp(args.Sink, out _))
+ component.CurrentTurret = args.Sink;
+ }
+}
diff --git a/Content.Shared/_ADT/Wires/Components/ItemSlotsRequirePanelComponent.cs b/Content.Shared/_ADT/Wires/Components/ItemSlotsRequirePanelComponent.cs
new file mode 100644
index 000000000000..8bf8420b19fb
--- /dev/null
+++ b/Content.Shared/_ADT/Wires/Components/ItemSlotsRequirePanelComponent.cs
@@ -0,0 +1,13 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._ADT.Wires.Components;
+
+[RegisterComponent]
+[NetworkedComponent]
+[AutoGenerateComponentState]
+public sealed partial class ItemSlotsRequirePanelComponent : Component
+{
+ [DataField("slots"), AutoNetworkedField]
+ public Dictionary Slots = new();
+}
+
diff --git a/Content.Shared/_ADT/Wires/Systems/RequirePanelSystem.cs b/Content.Shared/_ADT/Wires/Systems/RequirePanelSystem.cs
new file mode 100644
index 000000000000..590bbd55c4e8
--- /dev/null
+++ b/Content.Shared/_ADT/Wires/Systems/RequirePanelSystem.cs
@@ -0,0 +1,43 @@
+using Content.Shared.Containers.ItemSlots;
+using Content.Shared.Wires;
+
+namespace Content.Shared._ADT.Wires.Systems;
+
+public sealed partial class RequirePanelSystem : EntitySystem
+{
+ [Dependency] private readonly ItemSlotsSystem _itemSlots = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<_ADT.Wires.Components.ItemSlotsRequirePanelComponent, ItemSlotInsertAttemptEvent>(ItemSlotInsertAttempt);
+ SubscribeLocalEvent<_ADT.Wires.Components.ItemSlotsRequirePanelComponent, ItemSlotEjectAttemptEvent>(ItemSlotEjectAttempt);
+ }
+
+ private void ItemSlotInsertAttempt(Entity<_ADT.Wires.Components.ItemSlotsRequirePanelComponent> entity, ref ItemSlotInsertAttemptEvent args)
+ {
+ args.Cancelled = !CheckPanelStateForItemSlot(entity, args.Slot.ID);
+ }
+ private void ItemSlotEjectAttempt(Entity<_ADT.Wires.Components.ItemSlotsRequirePanelComponent> entity, ref ItemSlotEjectAttemptEvent args)
+ {
+ args.Cancelled = !CheckPanelStateForItemSlot(entity, args.Slot.ID);
+ }
+
+ public bool CheckPanelStateForItemSlot(Entity<_ADT.Wires.Components.ItemSlotsRequirePanelComponent> entity, string? slot)
+ {
+ var (uid, comp) = entity;
+
+ if (slot == null)
+ return false;
+
+ // If slot not require wire panel - don't cancel interaction
+ if (!comp.Slots.TryGetValue(slot, out var isRequireOpen))
+ return false;
+
+ if (!TryComp(uid, out var wiresPanel))
+ return false;
+
+ return wiresPanel.Open == isRequireOpen;
+ }
+}
diff --git a/Resources/Audio/ADT/Mecha/attributions.yml b/Resources/Audio/ADT/Mecha/attributions.yml
new file mode 100644
index 000000000000..bb1993335988
--- /dev/null
+++ b/Resources/Audio/ADT/Mecha/attributions.yml
@@ -0,0 +1,12 @@
+- files: ["mechmove03.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "Taken from TG station."
+ source: "https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0"
+- files: ["sound_mecha_hydraulic.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "Taken from TG station."
+ source: "https://github.com/tgstation/tgstation/commit/45123dd06cb6dc7c56e8004c528230682ea559b2"
+- files: ["sound_mecha_powerloader_step.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "Taken from TG station."
+ source: "https://github.com/tgstation/tgstation/commit/45123dd06cb6dc7c56e8004c528230682ea559b2"
diff --git a/Resources/Audio/ADT/Mecha/nominal.ogg b/Resources/Audio/ADT/Mecha/nominal.ogg
new file mode 100644
index 000000000000..b89bd39616ab
Binary files /dev/null and b/Resources/Audio/ADT/Mecha/nominal.ogg differ
diff --git a/Resources/Audio/ADT/Mecha/nominalnano.ogg b/Resources/Audio/ADT/Mecha/nominalnano.ogg
new file mode 100644
index 000000000000..6ccb7dbee42d
Binary files /dev/null and b/Resources/Audio/ADT/Mecha/nominalnano.ogg differ
diff --git a/Resources/Audio/ADT/Mecha/nominalsyndi.ogg b/Resources/Audio/ADT/Mecha/nominalsyndi.ogg
new file mode 100644
index 000000000000..8cec7b645e98
Binary files /dev/null and b/Resources/Audio/ADT/Mecha/nominalsyndi.ogg differ
diff --git a/Resources/Audio/ADT/dna-lock.ogg b/Resources/Audio/ADT/dna-lock.ogg
new file mode 100644
index 000000000000..d8ce3f523033
Binary files /dev/null and b/Resources/Audio/ADT/dna-lock.ogg differ
diff --git a/Resources/Locale/ru-RU/_ADT/modsuits/ui-modsuit.ftl b/Resources/Locale/ru-RU/_ADT/modsuits/ui-modsuit.ftl
new file mode 100644
index 000000000000..0a98793f6cea
--- /dev/null
+++ b/Resources/Locale/ru-RU/_ADT/modsuits/ui-modsuit.ftl
@@ -0,0 +1,18 @@
+mod-module-space = Сложность: {$complexity} ({$maxcomplexity})
+mod-energy-waste = Расход W: {$energy}
+mod-username = Имя пользователя:
+mod-all-toggled = Полностью включен
+mod-partly-toggled = Частично включен
+mod-none-toggled = Выключен
+base-mod-title = Меню МОДа
+mod-activate-active = ⚪Включить
+mod-deactivate-active = ⚪Выключить
+mod-activate-nonactive = ⚫Включить
+mod-deactivate-nonactive = ⚫Выключить
+mod-eject = ⚠Извлечь
+mod-lock = заблокирован🔒
+mod-locked = разблокирован🔓
+mod-user = пользователь:
+mod-no-user = пользователь отсутствует
+fibers-carbon-adt = углеродные
+fibers-advancedcarbon-adt = продвинутые углеродные
diff --git a/Resources/Locale/ru-RU/_ADT/mosduits.ftl b/Resources/Locale/ru-RU/_ADT/mosduits.ftl
new file mode 100644
index 000000000000..722ea3a71d02
--- /dev/null
+++ b/Resources/Locale/ru-RU/_ADT/mosduits.ftl
@@ -0,0 +1,6 @@
+modsuit-remove-all-attached-first = Вначале вам нужно снять части МОДа.
+modsuit-attach-tooltip = Надеть.
+modsuit-unattach-tooltip = Снять.
+modsuit-close-wires = В начале надо закрутить МОД.
+alerts-modsuit-power-name = Заряд МОДсьюита
+alerts-modsuit-power-desc = Показывает, сколько заряда осталось у вашего МОДа.
diff --git a/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Clothing/Back/mods.ftl b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Clothing/Back/mods.ftl
new file mode 100644
index 000000000000..e596e2824417
--- /dev/null
+++ b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Clothing/Back/mods.ftl
@@ -0,0 +1,112 @@
+ent-ADTClothingModsuitBackBase = стандартный МОД
+ .desc = Костюм гражданского класса от Nakamura Engineering, не дающий ничего особенного, кроме небольшого замедления передвижения.
+
+ent-ADTClothingModsuitBackAtmos = атмосферный МОД
+ .desc = Атмосферостойкий костюм от Nakamura Egineering, обладающий повышенной термостойкостью и меньшим количеством слотов по сравнению с инженерным МОДом.
+
+ent-ADTClothingModsuitBackClown = МОД "Космохонк"
+ .desc = Костюм от компании Honk Ltd., известный также как Модульный Ограничитель Дурачков. Защищает от низкого уровня юмора.
+
+ent-ADTClothingModsuitBackEngineering = инженерный МОД
+ .desc = Инженерный костюм с термо- и ударопрочностью. Классика от Nakamura Engineering.
+
+ent-ADTClothingModsuitBackMedical = медицинский МОД
+ .desc = Легкий костюм от DeForest Medical Corporation, позволяющий быстрее двигаться.
+
+ent-ADTClothingModsuitBackMining = шахтёрский МОД
+ .desc = Шахтерский МОД NanoTrasen для работы с рудой, оснащенный противопепельным заслоном и сферным преобразователем.
+
+ent-ADTClothingModsuitBackSecurity = охранный МОД
+ .desc = Защитный костюм Apadyne Technologies, обеспечивающий высокую скорость за счет снижения грузоподъемности.
+
+ent-ADTClothingModsuitBackScience = научный МОД
+ .desc = Сделано учёными для учёных. С любовью!
+
+ent-ADTClothingModsuitBackSyndicate = кроваво-красный МОД
+ .desc = Костюм, разработанный Gorlex Marauders, предлагающий броню, признанную незаконной в большинстве секторов.
+
+ent-ADTClothingModsuitBackSafeguard = МОД "Диктатор"
+ .desc = Улучшенная версия простого охранного МОДА, что был создан специально для ГСБ. Жаждит забить генокрада собой досмерти!
+
+ent-ADTClothingModsuitBackBlueShield = МОД офицера синего щита
+ .desc = Лёгкий боевой МОД NanoTrasen, с технологиями точно не украденными у синдиката, специально для офицера синего щита и защиты его частей тела. Я уверяю вас, это АБСОЛЮТНО легально.
+
+ent-ADTClothingModsuitBackAdvanced = продвинутый МОД
+ .desc = Усовершенствованная версия классического костюма Nakamura Engineering, сияющая белизной, кислото- и огнестойкой полировкой.
+
+ent-ADTClothingModsuitBackSyndicateElite = элитный МОД синдиката
+ .desc = Элитный костюм, усовершенствованный Cybersun Industries и предлагающий повышенные показатели брони.
+
+ent-ADTClothingModsuitBackSyndicateCommander = МОД "Меркурий"
+ .desc = Сильно улучшенная версия обычного МОДа синдиката, что выполшена по заказу элитного бойца с годами службы за спиной. Обладает значительно повышенной бронёй и фактором стиля.
+
+# Понятие не имею где прописать части мода. Пропишу тут
+
+ent-ADTActionToggleMODPiece = Переключить элементы MOD
+
+# Шлемы
+ent-ADTClothingHeadHelmetModsuitBase = базовый шлем МОДа
+ent-ADTClothingHeadHelmetModsuitAtmos = атмосферный шлем МОДа
+ent-ADTClothingHeadHelmetModsuitClown = шлем МОДа "Космохонк"
+ent-ADTClothingHeadHelmetModsuitEngineering = инженерный шлем МОДа
+ent-ADTClothingHeadHelmetModsuitMedical = медицинский шлем МОДа
+ent-ADTClothingHeadHelmetModsuitMining = шахтёрский шлем MМОДа
+ent-ADTClothingHeadHelmetModsuitSecurity = охранный шлем МОДа
+ent-ADTClothingHeadHelmetModsuitScience = научный шлем МОДа
+ent-ADTClothingHeadHelmetModsuitSyndicate = шлем МОДа синдиката
+ent-ADTClothingHeadHelmetModsuitSafeguard = шлем "Диктатор"
+ .desc = Шлем, что 24/7 сканирует агентов вокруг.
+ent-ADTClothingHeadHelmetModsuitBso = шлем МОДа офицера синего щита
+ent-ADTClothingHeadHelmetModsuitAdvanced = продвинутый шлем МОДа
+ent-ADTClothingHeadHelmetModsuitSyndicateElite = элитный шлем МОДа
+ent-ADTClothingHeadHelmetModsuitSyndicateCommander = шлем МОДа "Меркурий"
+
+# Оболочка
+ent-ADTClothingOuterModsuitBodyBase = Базовая оболочка МОДа
+ent-ADTClothingOuterModsuitBodyAtmos = Атмосферная оболочка МОДа
+ent-ADTClothingOuterModsuitBodyClown = Оболочка МОДа "Космохонк"
+ent-ADTClothingOuterModsuitBodyEngineering = Инженерная оболочка МОДа
+ent-ADTClothingOuterModsuitBodyMedical = Медицинская оболочка МОДа
+ent-ADTClothingOuterModsuitBodyMining = Шахтёрская оболочка МОДа
+ent-ADTClothingOuterModsuitBodySecurity = Охранная оболочка МОДа
+ent-ADTClothingOuterModsuitBodyScience = Научная оболочка МОДа
+ent-ADTClothingOuterModsuitBodySyndicate = оболочка МОДа синдиката
+ent-ADTClothingOuterModsuitBodySafeguard = оболочка МОДа "Диктатор"
+ .desc = Готова впитать любую пулю от ядерного оперативника!
+ent-ADTClothingOuterModsuitBodyAdvanced = оболочка продвинутого МОДа
+ent-ADTClothingOuterModsuitBodyBso = оболочка МОДа офицера синего щита
+ent-ADTClothingOuterModsuitBodySyndicateElite = элитная оболочка МОДа
+ent-ADTClothingOuterModsuitBodySyndicateCommander = оболочка МОДа "Меркурий"
+
+# Ботинки
+ent-ADTClothingModsuitShoesBase = Базовые ботинки МОДа
+ent-ADTClothingModsuitShoesAtmos = Атмосферные ботинки МОДа
+ent-ADTClothingModsuitShoesClown = Ботинки МОДа "Космохонк"
+ent-ADTClothingModsuitShoesEngineering = Инженерные ботинки МОДа
+ent-ADTClothingModsuitShoesMedical = Медицинские ботинки МОДа
+ent-ADTClothingModsuitShoesMining = Шахтёрские ботинки МОДа
+ent-ADTClothingModsuitShoesSecurity = Охранные ботинки МОДа
+ent-ADTClothingModsuitShoesScience = Научные ботинки МОДа
+ent-ADTClothingModsuitShoesSyndicate = ботинки МОДа синдиката
+ent-ADTClothingModsuitShoesSafeguard = ботинки МОДа "Диктатор"
+ .desc = Испачканы кровью революционеров.
+ent-ADTClothingModsuitBso = ботинки МОДа офицера синего щита
+ent-ADTClothingModsuitShoesAdvanced = ботинки продвинутого МОДа
+ent-ADTClothingModsuitShoesSyndicateElite = ботинки элитного МОДа
+ent-ADTClothingModsuitShoesSyndicateCommander = ботинки МОДа "Меркурий"
+
+# Перчатки
+ent-ADTClothingHandsModsuitBase = Базовые перчатки МОДа
+ent-ADTClothingHandsModsuitAtmos = Атмосферные перчатки МОДа
+ent-ADTClothingHandsModsuitClown = Перчатки МОДа "Космохонк"
+ent-ADTClothingHandsModsuitEngineering = Инженерные перчатки МОДа
+ent-ADTClothingHandsModsuitMedical = Медицинские перчатки МОДа
+ent-ADTClothingHandsModsuitMining = Шахтёрские перчатки МОДа
+ent-ADTClothingHandsModsuitSecurity = Охранные перчатки МОДа
+ent-ADTClothingHandsModsuitScience = Научные перчатки МОДа
+ent-ADTClothingHandsModsuitSyndicate = перчатки МОДа синдиката
+ent-ADTClothingHandsModsuitSafeguard = перчатки МОДа "Диктатор"
+ .desc = Властно сжимают шею еретика!
+ent-ADTClothingHandsModsuitAdvanced = перчатки продвинутого МОДа
+ent-ADTClothingHandsModsuitSyndicateElite = перчатки элитного МОДа
+ent-ADTClothingHandsModsuitSyndicateCommander = перчатки МОДа "Меркурий"
diff --git a/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/construction.ftl b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/construction.ftl
new file mode 100644
index 000000000000..b296b26eb032
--- /dev/null
+++ b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/construction.ftl
@@ -0,0 +1,15 @@
+ent-ADTModsuitHelmet = шлем МОДа
+ent-ADTModsuitGauntlets = перчатки МОДа
+ent-ADTModsuitCoreEnergy = ядро питания МОДа
+ent-ADTModsuitChestplate = нагрудник МОДа
+ent-ADTModsuitBoots = ботинки МОДа
+ent-ADTModsuitPlateAtmospheric = покрытие атмосферного МОДа
+ent-ADTModsuitPlateCosmohonk = покрытие МОДа "космохонк"
+ent-ADTModsuitPlateEngineering = покрытие инженерного МОДа
+ent-ADTModsuitPlateMedical = покрытие медицинского МОДа
+ent-ADTModsuitPlateSecurity = покрытие охранного МОДа
+ent-ADTModsuitPlateStandard = стандартное покрытие МОДа
+ent-ADTModsuitPlateCience = научное покрытие МОДа
+ent-ADTModsuitPlateMining = покрытие шахтёрского МОДа
+ent-ADTModsuitAssembly = ядро МОДа
+ent-ADTModsuitAssembled = собранное ядро МОДа
diff --git a/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/modules.ftl b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/modules.ftl
new file mode 100644
index 000000000000..ab269245baab
--- /dev/null
+++ b/Resources/Locale/ru-RU/_ADT/prototypes/Entities/Objects/Specific/MODsuits/modules.ftl
@@ -0,0 +1,78 @@
+ent-ADTModsuitModAntigrav = модуль лунной походки
+ .desc = Модуль, делающий вас абсолютно невесомым при надевании ботинок.
+
+ent-ADTModsuitModApparatus = модуль голо-челюсти
+ .desc = Любимая шахтерами модификация шлема использует нанотехнологический барьер перед ртом, позволяющий есть и пить, сохраняя при этом защиту и атмосферу. Однако это никак не улучшит вкус стейка из голиафа.
+
+ent-ADTModsuitModDrill = модуль бура
+ .desc = Встроенный бур, обычно выступающий над рукой пользователя. Пригодится для разрушения горных пород, но именно ваш бур сможет пронзить и небеса!
+
+ent-ADTModsuitModJetpack = модуль джетпака
+ .desc = Позволяет вам летать в условиях отсутствия гравитации.
+
+ent-ADTModsuitModMagboot = модуль-магнит
+ .desc = Это мощные электромагниты, вмонтированные в ботинки костюма. Обеспечивают отличное сцепление с поверхностью, независимо от условий в помещении, и позволяют, по сути, передвигаться по внешней стороне корпуса. Однако эти базовые модели не оснащены компьютеризированными системами для автоматического включения и выключения, поэтому многие пользователи отмечают некоторую липкость их шагов.
+
+ent-ADTModsuitModNightVision = модуль ночного зрения
+ .desc = В визор костюма вмонтирован дисплей. Обычно используется как в гражданских, так и в военных целях и позволяет пользователю воспринимать окружающую обстановку, находясь в полной темноте.
+
+ent-ADTModsuitModStun = модуль оглушения
+ .desc = Позволяет вам оглушать врагов ударами кулаков.
+
+ent-ADTModsuitModNoslip = модуль галош
+ .desc = Это модифицированный вариант стандартных магнитных ботинок, в подошве которых используются пьезоэлектрические кристаллы. Две пластины на подошве ботинок автоматически выдвигаются и намагничиваются, когда пользователь наступаетна поверхность; притяжение слишком слабое, чтобы прикрепить их к корпусу, но достаточно сильное, чтобы защитить от того, что вы пожалели, пропустив знак «мокрый пол». Компания Honk Co. неоднократно выступала с протестами против того, чтобы эти модули были легальными.
+
+ent-ADTModsuitModPowerKick = модуль силового удара
+ .desc = Супер-мега-пупер силовой удар! Отбрасывает врагов после удара.
+
+ent-ADTModsuitModSechud = модуль охранного визора
+ .desc = В визор костюма вмонтирован головной дисплей. Этот модуль представляет собой сильно модернизированную систему целеуказания, подключенную к различным криминальным базам данных, чтобы иметь возможность просматривать записи об арестах, управлять простыми роботами, ориентированными на безопасность, и вообще знать, в кого стрелять. Говорят, они также позволяют видеть происходящее за своей спиной.
+
+ent-ADTModsuitModStorage = модуль хранилища
+ .desc = По всей поверхности костюма расположено множество встроенных отсеков и специализированных карманов, в которых можно хранить различные мелочи.
+
+ent-ADTModsuitModSatchelStorage = модуль сумочного хранилища
+ .desc = По всей поверхности костюма расположено множество встроенных отсеков и специализированных карманов, в которых можно хранить различные мелочи.
+
+ent-ADTModsuitModDuffelbagStorage = модуль вещмешкового хранилища
+ .desc = По всей поверхности костюма расположено множество встроенных отсеков и специализированных карманов, в которых можно хранить различные мелочи.
+
+ent-ADTModsuitModWelding = модуль защиты глаз
+ .desc = Модуль, установленный в визор костюма. Проецирует перед глазами пользователя поляризованную голографическую пленку. Имеет достаточно высокую защащиту от таких экстремальных воздействий, как точечная и дуговая сварка, солнечные затмения и ручные фонарики.
+
+ent-ADTModsuitModArmor = модуль замены брони
+ .desc = После установки заменяет всю броню на нагруднике МОДа на "идеально 40". После снятия не возвращает старую броню.
+
+ent-ADTModsuitModStorageLarge = модуль большого хранилища
+ .desc = Система скрытых отсеков, созданная Nakamura Engineering на основе разработок Donk Corporation. Полностью находится внутри костюма, равномерно распределяя предметы и вес, чтобы обеспечить комфорт для пользователя, будь то контрабанда или просто груз.
+
+ent-ADTModsuitModTray = модуль т-лучевого сканера
+ .desc = Модуль, установленный в визор скафандра, позволяющий использовать импульс терагерцового излучения для эхолокации предметов под полом, в основном кабелей и труб. Применяется для работы в атмосфере и для борьбы с контрабандой.
+
+ent-ADTModsuitModIsulation = модуль изоляции перчаток
+ .desc = Модуль изоляции ваших перчаток, защищающий от электрического тока.
+
+
+ent-ADTModsuitModDnaLock = модуль ДНК замка
+ .desc = Взрывает любого, кто попробует надеть МОД после вас.
+
+ent-ADTModsuitModLight = модуль фонарика
+ .desc = Всроенный в визор фонарик, что освещает путь!
+
+ent-ADTModsuitModOrebag = модуль мешка для руды
+ .desc = Встроенный в оболочку мешок для руды, что собирает любую руду с пола.
+
+ent-ADTModsuitModRadiationProtection = модуль защиты от радиации
+ .desc = Изолирует от радиации до такой степени, что за вами можно будет спрятаться от радиации!
+
+ent-ADTModsuitModStorageSyndie = модуль хранилища синдиката
+ .desc = Работает так же как и простой модуль, но делает это намного лучше благодаля манипуляциям с редспейсом.
+
+ent-ADTModsuitModEmpProtection = модуль ЭМИ защиты
+ .desc = Полностью обнуляет эффект эми на батарейку, если включен.
+
+ent-ADTModsuitModPlasmaStabilizer = модуль переработки плазмы
+ .desc = Позволяет переработать плазму в энергию. Популярен у утилизаторов.
+
+ent-ADTModsuitModUraniumStabilizer = модуль переработки урана
+ .desc = Позволяет переработать уран в энергию. Эффективнее переработки плазмы в 2.5 раза!
diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
index 274c5a8ee202..12e6b097ed69 100644
--- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
+++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
@@ -115,6 +115,8 @@
size: Normal
- type: StaticPrice #CorvaxFrontier
price: 200
+
+
- type: entity
parent: BaseAction
id: ActionToggleMagboots
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml
index ce8a2e48dc48..1a4703c49727 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml
@@ -76,6 +76,10 @@
- type: NoRotateOnMove
- type: Input
context: "human"
+ - type: TurretControllable #Forge Change Begin
+ - type: DeviceLinkSink
+ ports:
+ - On
- type: entity
parent: BaseWeaponTurret
diff --git a/Resources/Prototypes/_ADT/Actions/types.yml b/Resources/Prototypes/_ADT/Actions/types.yml
new file mode 100644
index 000000000000..dab3d19b9e42
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Actions/types.yml
@@ -0,0 +1,27 @@
+- type: entity
+ id: ADTActionToggleMODPiece
+ name: Toggle Suit Piece
+ description: Remember to equip the important pieces of your suit before going into action.
+ components:
+ - type: Action
+ priority: -5
+ itemIconStyle: BigItem
+ useDelay: 1 # equip noise spam.
+ - type: InstantAction
+ event: !type:ToggleModPartActionEvent
+
+- type: entity
+ id: ADTActionToggleMODMenu
+ name: Toggle Suit Piece
+ description: Remember to equip the important pieces of your suit before going into action.
+ components:
+ - type: Action
+ priority: -6
+ itemIconStyle: BigItem
+ useDelay: 1 # equip noise spam.
+ icon:
+ sprite: ADT/Interface/Actions/mod_menu.rsi
+ state: icon
+ - type: InstantAction
+ event: !type:ToggleModMenuActionEvent
+
diff --git a/Resources/Prototypes/_ADT/Alerts/alerts.yml b/Resources/Prototypes/_ADT/Alerts/alerts.yml
new file mode 100644
index 000000000000..b8ae5d6a146c
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Alerts/alerts.yml
@@ -0,0 +1,41 @@
+# Simple Station
+
+- type: alert
+ id: Charge
+ icons:
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge-empty
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge0
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge1
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge2
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge3
+ - sprite: /Textures/ADT/Interface/Alerts/charge.rsi
+ state: charge4
+ name: alerts-charge-name
+ description: alerts-charge-desc
+ minSeverity: -1
+ maxSeverity: 4
+
+- type: alert
+ id: ModsuitPower
+ icons:
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower0
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower1
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower2
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower3
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower4
+ - sprite: /Textures/ADT/Interface/Alerts/modpower.rsi
+ state: modpower5
+ name: alerts-modsuit-power-name
+ description: alerts-modsuit-power-desc
+ minSeverity: 0
+ maxSeverity: 5
diff --git a/Resources/Prototypes/_ADT/Entities/Clothing/Back/mods.yml b/Resources/Prototypes/_ADT/Entities/Clothing/Back/mods.yml
new file mode 100644
index 000000000000..3c5242314cba
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Clothing/Back/mods.yml
@@ -0,0 +1,445 @@
+#базовый
+- type: entity
+ parent: Clothing
+ id: ADTClothingModsuitBackBase
+ name: base MOD control unit
+ description: A civilian class suit by Nakamura Engineering, doesn't offer much other than slightly quicker movement.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/standart.rsi
+ state: icon
+ - type: ModSuit
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitBase
+ gloves: ADTClothingHandsModsuitBase
+ outerClothing: ADTClothingOuterModsuitBodyBase
+ shoes: ADTClothingModsuitShoesBase
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominal.ogg
+ - type: ContainerContainer
+ containers:
+ mod-modules-container: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+ modsuit-part: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+ storagebase: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+ cell_slot: !type:ContainerSlot
+ showEnts: False
+ occludes: True
+ ent: null # ContainerContainer и UserInterface для модулей надо добавлять сюда, а через модули возможность включить
+ - type: UserInterface
+ interfaces:
+ enum.ModSuitUiKey.Key:
+ type: ModSuitRadialBoundUserInterface
+ enum.StorageUiKey.Key:
+ type: StorageBoundUserInterface
+ enum.ModSuitMenuUiKey.Key:
+ type: ModSuitMenuBoundUserInterface
+ - type: Clothing
+ quickEquip: false
+ slots:
+ - back
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ whitelist:
+ components:
+ - PowerCell
+ - type: WiresPanel
+ - type: ActivatableUIRequiresPanel
+ requireOpen: false
+ - type: Item
+ size: Huge
+ - type: PowerCellDraw
+ enabled: false
+ drawRate: 1
+ useRate: 5
+ delay: 10
+ - type: PowerCellSlot
+ cellSlotId: cell_slot
+ fitsInCharger: false
+ - type: ItemSlotsRequirePanel
+ slots:
+ cell_slot: true
+ - type: EmpDisabling
+ disablingTime: 30000
+ - type: ShowEnergyAlarm
+ - type: ContainerFill
+ containers:
+ cell_slot:
+ - PowerCellHigh
+ - type: Geiger
+ showExamine: true
+ attachedToSuit: true
+ showControl: true
+
+#атмосферный
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackAtmos
+ name: atmos MOD control unit
+ description: An atmospheric-resistant suit by Nakamura Engineering, offering extreme heat resistance compared to the engineer suit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/atmospheric.rsi
+ state: icon
+ - type: ModSuit
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitAtmos
+ gloves: ADTClothingHandsModsuitAtmos
+ outerClothing: ADTClothingOuterModsuitBodyAtmos
+ shoes: ADTClothingModsuitShoesAtmos
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModRadiationProtection
+ - ADTModsuitModTray
+ - ADTModsuitModIsulation
+
+
+#смешной
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackClown
+ name: clown MOD control unit
+ description: A suit by Honk Ltd. Protects against low humor environments.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/clown.rsi
+ state: icon
+ - type: ModSuit
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitClown
+ gloves: ADTClothingHandsModsuitClown
+ outerClothing: ADTClothingOuterModsuitBodyClown
+ shoes: ADTClothingModsuitShoesClown
+
+#инженерный
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackEngineering
+ name: engineering MOD control unit
+ description: An engineer-fit suit with heat and shock resistance. Nakamura Engineering's classic.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/engineering.rsi
+ state: icon
+ - type: ModSuit
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitEngineering
+ gloves: ADTClothingHandsModsuitEngineering
+ outerClothing: ADTClothingOuterModsuitBodyEngineering
+ shoes: ADTClothingModsuitShoesEngineering
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModRadiationProtection
+ - ADTModsuitModMagboot
+ - ADTModsuitModIsulation
+
+
+#медицинский
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackMedical
+ name: medical MOD control unit
+ description: A lightweight suit by DeForest Medical Corporation, allows for easier movement.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/medical.rsi
+ state: icon
+ - type: ModSuit
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitMedical
+ gloves: ADTClothingHandsModsuitMedical
+ outerClothing: ADTClothingOuterModsuitBodyMedical
+ shoes: ADTClothingModsuitShoesMedical
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModLight
+
+
+#шахтёрский
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackMining
+ name: mining MOD control unit
+ description: A Nanotrasen mining suit for on-site operations, fit with accreting ash armor and a sphere form.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/mining.rsi
+ state: icon
+ - type: ModSuit
+ maxComplexity: 10
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitMining
+ gloves: ADTClothingHandsModsuitMining
+ outerClothing: ADTClothingOuterModsuitBodyMining
+ shoes: ADTClothingModsuitShoesMining
+ startingModules:
+ - ADTModsuitModOrebag
+ - ADTModsuitModStorage
+ - ADTModsuitModLight
+ - ADTModsuitModPlasmaStabilizer
+ - type: Tag
+ tags:
+ - ADTHardsuitSalvage
+
+
+#охранный
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackSecurity
+ name: security MOD control unit
+ description: An Apadyne Technologies security suit, offering quicker speed at the cost of carrying capacity.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/security.rsi
+ state: icon
+ - type: ModSuit
+ maxComplexity: 8
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitSecurity
+ gloves: ADTClothingHandsModsuitSecurity
+ outerClothing: ADTClothingOuterModsuitBodySecurity
+ shoes: ADTClothingModsuitShoesSecurity
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModLight
+ - ADTModsuitModEmpProtection
+
+
+# учёный
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackScience
+ name: Sciene MOD control unit
+ description: Made by scientists for scientists.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/science.rsi
+ state: icon
+ - type: ModSuit
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitScience
+ gloves: ADTClothingHandsModsuitScience
+ outerClothing: ADTClothingOuterModsuitBodyScience
+ shoes: ADTClothingModsuitShoesScience
+ startingModules:
+ - ADTModsuitModStorage
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModRadiationProtection
+
+
+#гсб
+- type: entity
+ parent: ADTClothingModsuitBackSecurity
+ id: ADTClothingModsuitBackSafeguard
+ name: safeguard MOD control unit
+ description: An Apadyne Technologies security suit, offering quicker speed at the cost of carrying capacity.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/hos.rsi
+ state: icon
+ - type: ModSuit
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitSafeguard
+ gloves: ADTClothingHandsModsuitSafeguard
+ outerClothing: ADTClothingOuterModsuitBodySafeguard
+ shoes: ADTClothingModsuitShoesSafeguard
+ startingModules:
+ - ADTModsuitModStorageLarge
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModEmpProtection
+ - ADTModsuitModIsulation
+ - type: MeleeWeapon
+ damage:
+ types:
+ Blunt: 10
+
+#осщ
+- type: entity
+ parent: ADTClothingModsuitBackSecurity
+ id: ADTClothingModsuitBackBlueShield
+ name: blueshield MOD control unit
+ description: A lightweight NanoTrasen combat suit, with technology not at all stolen from the Syndicate, specifically for the Blue Shield Officer and the protection of his shielding body chapters. I assure you, all of this is ABSOLUTELY legal.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/bso.rsi
+ state: icon
+ - type: ModSuit
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitBso
+ gloves: ADTClothingHandsModsuitBso
+ outerClothing: ADTClothingOuterModsuitBodyBso
+ shoes: ADTClothingModsuitBso
+ startingModules:
+ - ADTModsuitModStorageLarge
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModEmpProtection
+ - ADTModsuitModIsulation
+
+# СИ
+- type: entity
+ parent: ADTClothingModsuitBackBase
+ id: ADTClothingModsuitBackAdvanced
+ name: advanced MOD control unit
+ description: Made by scientists for scientists.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/advanced.rsi
+ state: icon
+ - type: ModSuit
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalnano.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitAdvanced
+ gloves: ADTClothingHandsModsuitAdvanced
+ outerClothing: ADTClothingOuterModsuitBodyAdvanced
+ shoes: ADTClothingModsuitShoesAdvanced
+ startingModules:
+ - ADTModsuitModStorageLarge
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModEmpProtection
+ - ADTModsuitModIsulation
+
+# синдиката
+- type: entity
+ parent: Clothing
+ id: ADTClothingModsuitBackSyndicate
+ name: syndicate MOD control unit
+ description: A suit designed by Gorlex Marauders, offering armor made illegal in most Spinward Stellar. A newer version with more built-in modules compared to the operative variant.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/syndicate.rsi
+ state: icon
+ - type: ModSuit
+ backpanelsColor: "#16050599"
+ backgroundPath: "/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png"
+ maxComplexity: 20
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalsyndi.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitSyndicate
+ gloves: ADTClothingHandsModsuitSyndicate
+ outerClothing: ADTClothingOuterModsuitBodySyndicate
+ shoes: ADTClothingModsuitShoesSyndicate
+ startingModules:
+ - ADTModsuitModStorageSyndie
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModIsulation
+ - type: UserInterface
+ interfaces:
+ enum.ModSuitUiKey.Key:
+ type: ModSuitRadialBoundUserInterface
+ enum.StorageUiKey.Key:
+ type: StorageBoundUserInterface
+ enum.ModSuitMenuUiKey.Key:
+ type: ModSuitMenuBoundUserInterface
+ - type: Clothing
+ quickEquip: false
+ slots:
+ - back
+ - type: WiresPanel
+ - type: ActivatableUIRequiresPanel
+ requireOpen: false
+ - type: ItemSlotsRequirePanel
+ slots:
+ cell_slot: true
+ - type: DNALocker
+ - type: ContainerContainer
+ containers:
+ mod-modules-container: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+ modsuit-part: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+ storagebase: !type:Container
+ showEnts: False
+ occludes: True
+ ents: []
+
+- type: entity
+ parent: ADTClothingModsuitBackSyndicate
+ id: ADTClothingModsuitBackSyndicateElite
+ name: elite syndicate MOD control unit
+ description: A suit designed by Gorlex Marauders, offering armor made illegal in most Spinward Stellar. A newer version with more built-in modules compared to the operative variant.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/syndicate_elite.rsi
+ state: icon
+ - type: ModSuit
+ backgroundPath: "/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png"
+ maxComplexity: 20
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalsyndi.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitSyndicateElite
+ gloves: ADTClothingHandsModsuitSyndicateElite
+ outerClothing: ADTClothingOuterModsuitBodySyndicateElite
+ shoes: ADTClothingModsuitShoesSyndicateElite
+ startingModules:
+ - ADTModsuitModStorageSyndie
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModIsulation
+
+- type: entity
+ parent: ADTClothingModsuitBackSyndicate
+ id: ADTClothingModsuitBackSyndicateCommander
+ name: comm syndicate MOD control unit
+ description: A suit designed by Gorlex Marauders, offering armor made illegal in most Spinward Stellar. A newer version with more built-in modules compared to the operative variant.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Back/Modsuit/syndicate_comma.rsi
+ state: icon
+ - type: ModSuit
+ backgroundPath: "/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png"
+ maxComplexity: 15
+ fullyEnabledSound:
+ path: /Audio/ADT/Mecha/nominalsyndi.ogg
+ clothingPrototypes:
+ head: ADTClothingHeadHelmetModsuitSyndicateCommander
+ gloves: ADTClothingHandsModsuitSyndicateCommander
+ outerClothing: ADTClothingOuterModsuitBodySyndicateCommander
+ shoes: ADTClothingModsuitShoesSyndicateCommander
+ startingModules:
+ - ADTModsuitModStorageSyndie
+ - ADTModsuitModWelding
+ - ADTModsuitModLight
+ - ADTModsuitModJetpack
+ - ADTModsuitModIsulation
diff --git a/Resources/Prototypes/_ADT/Entities/Clothing/Hands/modsuit_gloves.yml b/Resources/Prototypes/_ADT/Entities/Clothing/Hands/modsuit_gloves.yml
new file mode 100644
index 000000000000..2f568fa21122
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Clothing/Hands/modsuit_gloves.yml
@@ -0,0 +1,234 @@
+- type: entity
+ parent: ClothingHandsBase
+ id: ADTClothingHandsModsuitBase
+ name: base MOD gauntlets
+ description: A pair of gauntlets for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/standart.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/standart.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-carbon-adt
+ fiberColor: fibers-grey
+ - type: FingerprintMask
+ - type: Tag
+ tags:
+ - WhitelistChameleon
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitAtmos
+ name: atmos MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/atmospheric.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/atmospheric.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-yellow
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitClown
+ name: clown MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/clown.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/clown.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-colorful-adt
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitEngineering
+ name: atmos MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/engineering.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/engineering.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-brown
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitMedical
+ name: atmos MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/medical.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/medical.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-cyan
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitMining
+ name: mining MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/mining.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/mining.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-darkblack-adt
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitSecurity
+ name: security MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/security.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/security.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-black
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitScience
+ name: Science MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/cience.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/cience.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-purple
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitSafeguard
+ name: safeguard MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/hos.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/hos.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-advancedcarbon-adt
+ fiberColor: fibers-black
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitBso
+ name: bso MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/bso.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/bso.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-advancedcarbon-adt
+ fiberColor: fibers-blue
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitAdvanced
+ name: advanced MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/advanced.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/advanced.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-advancedcarbon-adt
+ fiberColor: fibers-white
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitSyndicate
+ name: syndicate MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberColor: fibers-bloodred-adt
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitSyndicateElite
+ name: elite syndicate MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-advancedcarbon-adt
+ fiberColor: fibers-darkgrey-adt
+
+- type: entity
+ parent: ADTClothingHandsModsuitBase
+ id: ADTClothingHandsModsuitSyndicateCommander
+ name: comm syndicate MOD gauntlets
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ equipDelay: 3
+ unequipDelay: 3
+ - type: Fiber
+ fiberMaterial: fibers-advancedcarbon-adt
+ fiberColor: fibers-bloodred-adt
diff --git a/Resources/Prototypes/_ADT/Entities/Clothing/Head/modsuit-helmets.yml b/Resources/Prototypes/_ADT/Entities/Clothing/Head/modsuit-helmets.yml
new file mode 100644
index 000000000000..c728e80eb8b3
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Clothing/Head/modsuit-helmets.yml
@@ -0,0 +1,381 @@
+- type: entity
+ parent: ClothingHeadHardsuitBase
+ id: ADTClothingHeadHelmetModsuitBase
+ name: base MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/standart.rsi
+ layers:
+ - state: icon
+ - state: icon-unshaded
+ shader: unshaded
+ - state: light-overlay
+ visible: false
+ shader: unshaded
+ map: [ "light" ]
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Head/Modsuit/standart.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.90
+ Slash: 0.90
+ Piercing: 0.95
+ Heat: 0.90
+ Radiation: 0.25
+ - type: PressureProtection
+ highPressureMultiplier: 0.1
+ lowPressureMultiplier: 1000
+ - type: ToggleableLightVisuals
+ - type: PointLight
+ color: "#adffe6"
+ enabled: false
+ radius: 3
+ energy: 2
+ mask: /Textures/Effects/LightMasks/cone.png
+ autoRot: true
+ netsync: false
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitAtmos
+ name: atmos MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/atmospheric.rsi
+ layers:
+ - state: icon
+ - state: icon-unshaded
+ shader: unshaded
+ - state: light-overlay
+ visible: false
+ shader: unshaded
+ map: [ "light" ]
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ - type: PointLight
+ enabled: false
+ color: "#adffe6"
+ - type: PressureProtection
+ highPressureMultiplier: 0.08
+ lowPressureMultiplier: 1000
+ - type: TemperatureProtection
+ heatingCoefficient: 0.005
+ coolingCoefficient: 0.005
+ - type: FireProtection
+ reduction: 0.8
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitClown
+ name: clown MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/clown.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Head/Modsuit/clown.rsi
+ - type: PointLight
+ enabled: false
+ color: "#FFFDE0"
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitEngineering
+ name: engineering MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/engineering.rsi
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ - type: PointLight
+ enabled: false
+ color: "#ffdbad"
+ - type: PressureProtection
+ highPressureMultiplier: 0.08
+ lowPressureMultiplier: 1000
+ - type: TemperatureProtection
+ heatingCoefficient: 0.005
+ coolingCoefficient: 0.005
+ - type: FireProtection
+ reduction: 0.8
+ - type: EyeProtection
+ - type: ShowHealthBars
+ damageContainers:
+ - Inorganic
+ - Silicon
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitMedical
+ name: medical MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/medical.rsi
+ layers:
+ - state: icon
+ - type: Clothing
+ sprite: ADT/Clothing/Head/Modsuit/medical.rsi
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - type: ShowHealthBars
+ damageContainers:
+ - Biological
+ - type: ShowHealthIcons
+ damageContainers:
+ - Biological
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitMining
+ name: mining MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/mining.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Head/Modsuit/mining.rsi
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitSecurity
+ name: security MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/security.rsi
+ - type: Clothing
+ sprite: ADT/Clothing/Head/Modsuit/security.rsi
+ - type: PointLight
+ enabled: false
+ color: "#ffeead"
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.90
+ Slash: 0.90
+ Piercing: 0.95
+ Heat: 0.90
+ Radiation: 0.25
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitScience
+ name: Science MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/science.rsi
+ layers:
+ - state: icon
+ - state: icon-unshaded
+ shader: unshaded
+ - state: light-overlay
+ visible: false
+ shader: unshaded
+ map: [ "light" ]
+ - type: ToggleableLightVisuals
+ spriteLayer: light
+ clothingVisuals:
+ head:
+ - state: equipped-head-light
+ shader: unshaded
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitSafeguard
+ name: safeguard MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/hos.rsi
+ layers:
+ - state: icon
+ - type: Clothing
+ sprite: ADT/Clothing/Head/Modsuit/hos.rsi
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.9
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: PointLight
+ enabled: false
+ color: "#a50500"
+ energy: 3
+ radius: 7
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitBso
+ name: bso MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/bso.rsi
+ layers:
+ - state: icon
+ - state: icon-unshaded
+ shader: unshaded
+ - state: light-overlay
+ visible: false
+ shader: unshaded
+ map: [ "light" ]
+ - type: ToggleableLightVisuals
+ spriteLayer: light
+ clothingVisuals:
+ head:
+ - state: equipped-head-light
+ shader: unshaded
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitAdvanced
+ name: advanced MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/advanced.rsi
+ layers:
+ - state: icon
+ - state: icon-unshaded
+ shader: unshaded
+ - state: light-overlay
+ visible: false
+ shader: unshaded
+ map: [ "light" ]
+ - type: PointLight # Corvax-Resprite
+ color: "#e6aa5c"
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitSyndicate
+ name: syndicate MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/syndicate.rsi
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.9
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: PointLight
+ enabled: false
+ color: "#3fb906"
+ - type: ShowSyndicateIcons
+ - type: ShowJobIcons
+ - type: ShowMindShieldIcons
+ - type: ShowCriminalRecordIcons
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitSyndicateElite
+ name: syndicate MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/syndicate_elite.rsi
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.9
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: PointLight
+ enabled: false
+ color: "#b9a706"
+ - type: ShowSyndicateIcons
+ - type: ShowJobIcons
+ - type: ShowMindShieldIcons
+ - type: ShowCriminalRecordIcons
+
+- type: entity
+ parent: ADTClothingHeadHelmetModsuitBase
+ id: ADTClothingHeadHelmetModsuitSyndicateCommander
+ name: syndicate MOD helmet
+ description: A helmet for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Head/Modsuit/syndicate_comma.rsi
+ - type: Clothing
+ clothingVisuals:
+ head:
+ - state: equipped-head
+ - state: equipped-head-unshaded
+ shader: unshaded
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.9
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: PointLight
+ enabled: false
+ color: "#b9a706"
+ - type: ShowSyndicateIcons
+ - type: ShowJobIcons
+ - type: ShowMindShieldIcons
+ - type: ShowCriminalRecordIcons
diff --git a/Resources/Prototypes/_ADT/Entities/Clothing/OuterClothing/modsuits.yml b/Resources/Prototypes/_ADT/Entities/Clothing/OuterClothing/modsuits.yml
new file mode 100644
index 000000000000..df74027ab321
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Clothing/OuterClothing/modsuits.yml
@@ -0,0 +1,470 @@
+- type: entity
+ parent: ClothingOuterHardsuitEVA
+ id: ADTClothingOuterModsuitBodyBase
+ name: base MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Clickable
+ - type: InteractionOutline
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/standart.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/standart.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: PressureProtection
+ highPressureMultiplier: 0.02
+ lowPressureMultiplier: 1000
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.9
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.8
+ Slash: 0.8
+ Piercing: 0.8
+ Heat: 0.8
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: ExplosionResistance
+ damageCoefficient: 0.8
+ - type: UserInterface
+ interfaces:
+ enum.StorageUiKey.Key:
+ type: StorageBoundUserInterface
+ - type: FireProtection
+ reduction: 0.25
+ - type: CoveredSlot
+ slots: [innerclothing]
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyAtmos
+ name: atmos MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: PressureProtection
+ highPressureMultiplier: 0.02
+ lowPressureMultiplier: 1000
+ - type: ClothingSpeedModifier
+ walkModifier: 0.85
+ sprintModifier: 0.85
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.7
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.4
+ Radiation: 0.5
+ Caustic: 0.5
+ - type: StaminaResistance
+ damageCoefficient: 0.9
+ - type: ExplosionResistance
+ damageCoefficient: 0.7
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyClown
+ name: clown MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/clown.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/clown.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Caustic: 0.8
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: FireProtection
+ reduction: 0.5
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyEngineering
+ name: engineering MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/engineering.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/engineering.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Piercing: 0.9
+ Heat: 0.9
+ Radiation: 0.5
+ Caustic: 0.5
+ - type: StaminaResistance
+ damageCoefficient: 0.9
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.85
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyMedical
+ name: medical MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/medical.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/medical.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.9
+ Slash: 0.9
+ Radiation: 0.6
+ Caustic: 0.8
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.85
+ - type: ExplosionResistance
+ damageCoefficient: 0.8
+ - type: FireProtection
+ reduction: 0.6
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyMining
+ name: mining MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/mining.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/mining.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.7
+ Slash: 0.4
+ Piercing: 0.85
+ Heat: 0.8
+ Radiation: 0.8
+ Caustic: 0.8
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.85
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodySecurity
+ name: security MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/security.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/security.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.7
+ Slash: 0.7
+ Heat: 0.8
+ Piercing: 0.55
+ Caustic: 0.7
+ - type: StaminaResistance
+ damageCoefficient: 0.8
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.9
+ - type: ExplosionResistance
+ damageCoefficient: 0.6
+ - type: FireProtection
+ reduction: 0.75
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyScience
+ name: Science MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/science.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/science.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.85
+ Slash: 0.85
+ Heat: 0.8
+ Piercing: 0.8
+ Caustic: 0.7
+ Radiation: 0.6
+ - type: ClothingSpeedModifier
+ walkModifier: 0.9
+ sprintModifier: 0.9
+ - type: ExplosionResistance
+ damageCoefficient: 0.2
+ - type: FireProtection
+ reduction: 0.9
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodySafeguard
+ name: safeguard MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/hos.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/hos.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.6
+ Slash: 0.6
+ Heat: 0.6
+ Piercing: 0.5
+ Caustic: 0.7
+ - type: StaminaResistance
+ damageCoefficient: 0.7
+ - type: ClothingSpeedModifier
+ walkModifier: 0.85
+ sprintModifier: 0.85
+ - type: ExplosionResistance
+ damageCoefficient: 0.2
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyBso
+ name: bso MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/bso.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/bso.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.5
+ Slash: 0.5
+ Heat: 0.6
+ Piercing: 0.6
+ Caustic: 0.7
+ - type: StaminaResistance
+ damageCoefficient: 0.75
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: ExplosionResistance
+ damageCoefficient: 0.5
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodyAdvanced
+ name: advanced MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/advanced.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/advanced.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.8
+ Slash: 0.8
+ Piercing: 0.8
+ Heat: 0.4
+ Radiation: 0.0
+ Caustic: 0.7
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: ExplosionResistance
+ damageCoefficient: 0.5
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodyBase
+ id: ADTClothingOuterModsuitBodySyndicate
+ name: syndicate MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: ExplosionResistance
+ damageCoefficient: 0.5
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.6
+ Slash: 0.6
+ Piercing: 0.4
+ Heat: 0.6
+ Radiation: 0.3
+ Caustic: 0.3
+ - type: StaminaResistance
+ damageCoefficient: 0.3
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodySyndicate
+ id: ADTClothingOuterModsuitBodySyndicateElite
+ name: elite syndicate MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.5
+ Slash: 0.5
+ Piercing: 0.6
+ Heat: 0.1
+ Radiation: 0.01
+ Caustic: 0.5
+ - type: StaminaResistance
+ damageCoefficient: 0.3
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: TemperatureProtection
+ heatingCoefficient: 0.001
+ coolingCoefficient: 0.001
+ - type: ExplosionResistance
+ damageCoefficient: 0.1
+ - type: FireProtection
+ reduction: 1
+
+- type: entity
+ parent: ADTClothingOuterModsuitBodySyndicate
+ id: ADTClothingOuterModsuitBodySyndicateCommander
+ name: commander syndicate MOD chestplate
+ description: A chestplate for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi
+ slots: [ OUTERCLOTHING ]
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.4
+ Slash: 0.4
+ Piercing: 0.3
+ Heat: 0.5
+ Radiation: 0.25
+ Caustic: 0.4
+ - type: StaminaResistance
+ damageCoefficient: 0.3
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 1
+ - type: TemperatureProtection
+ heatingCoefficient: 0.001
+ coolingCoefficient: 0.001
+ - type: ExplosionResistance
+ damageCoefficient: 0.1
+ - type: FireProtection
+ reduction: 1
diff --git a/Resources/Prototypes/_ADT/Entities/Clothing/Shoes/modsuit_boots.yml b/Resources/Prototypes/_ADT/Entities/Clothing/Shoes/modsuit_boots.yml
new file mode 100644
index 000000000000..8b605e7fbf3e
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Clothing/Shoes/modsuit_boots.yml
@@ -0,0 +1,226 @@
+- type: entity
+ parent: ClothingShoesBase
+ id: ADTClothingModsuitShoesBase
+ name: base MOD boots
+ description: A pair of boots for a MODsuit.
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/standart.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/standart.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: StaticPrice
+ price: 750
+ - type: FootstepModifier
+ footstepSoundCollection:
+ collection: FootstepHeavy
+ params:
+ volume: -9
+ - type: Tag
+ tags:
+ - WhitelistChameleon
+
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesAtmos
+ name: atmos MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/atmospheric.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/atmospheric.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: [ClothingShoesClown, ADTClothingModsuitShoesBase]
+ id: ADTClothingModsuitShoesClown
+ name: clown MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/clown.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/clown.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+ - type: FootstepModifier
+ footstepSoundCollection:
+ collection: FootstepClown
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesEngineering
+ name: engineering MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/engineering.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/engineering.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesMedical
+ name: medical MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/medical.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/medical.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesMining
+ name: mining MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/mining.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/mining.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesSecurity
+ name: security MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/mining.rsi
+ state: icon
+ - type: ClothingSlowOnDamageModifier
+ modifier: 0.5
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/mining.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesScience
+ name: Science MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/cience.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/cience.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesSafeguard
+ name: safeguard MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/hos.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/hos.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitBso
+ name: bso MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/bso.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/bso.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesAdvanced
+ name: advanced MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/advanced.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/advanced.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesSyndicate
+ name: syndicate MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesSyndicateElite
+ name: syndicate MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
+
+- type: entity
+ parent: ADTClothingModsuitShoesBase
+ id: ADTClothingModsuitShoesSyndicateCommander
+ name: syndicate MOD boots
+ components:
+ - type: Sprite
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi
+ state: icon
+ - type: Clothing
+ equipDelay: 3
+ unequipDelay: 3
+ sprite: ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi
+ equipSound: /Audio/Mecha/mechmove03.ogg
+ unequipSound: /Audio/Mecha/mechmove03.ogg
diff --git a/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modsuit_construction.yml b/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modsuit_construction.yml
new file mode 100644
index 000000000000..9811455a3f1f
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modsuit_construction.yml
@@ -0,0 +1,182 @@
+- type: entity
+ id: BaseModsuitCorePart
+ parent: BaseMechPart
+ abstract: true
+ components:
+ - type: Sprite
+ drawdepth: Items
+ noRot: false
+ sprite: ADT/Objects/Specific/Modsuits/modcore_construction.rsi
+
+- type: entity
+ id: BaseModsuitCorePartItem
+ parent: BaseModsuitCorePart
+ abstract: true
+ components:
+ - type: Item
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitHelmet
+ name: MOD helmet
+ components:
+ - type: Sprite
+ state: helmet
+ - type: Tag
+ tags:
+ - ADTModsuitHelmet
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitGauntlets
+ name: MOD gauntlets
+ components:
+ - type: Sprite
+ state: gauntlets
+ - type: Tag
+ tags:
+ - ADTModsuitGauntlets
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitCoreEnergy
+ name: MOD energy core
+ components:
+ - type: Sprite
+ state: mod-core-standard
+ - type: Tag
+ tags:
+ - ADTModsuitCoreEnergy
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitChestplate
+ name: MOD chestplate
+ components:
+ - type: Sprite
+ state: chestplate
+ - type: Tag
+ tags:
+ - ADTModsuitChestplate
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitBoots
+ name: MOD boots
+ components:
+ - type: Sprite
+ state: boots
+ - type: Tag
+ tags:
+ - ADTModsuitBoots
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateAtmospheric
+ name: atmospheric MOD plate
+ components:
+ - type: Sprite
+ state: atmospheric
+ - type: Tag
+ tags:
+ - ADTModsuitPlateAtmospheric
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateCosmohonk
+ name: cosmohonk MOD plate
+ components:
+ - type: Sprite
+ state: cosmohonk
+ - type: Tag
+ tags:
+ - ADTModsuitPlateCosmohonk
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateEngineering
+ name: engineering MOD plate
+ components:
+ - type: Sprite
+ state: engineering
+ - type: Tag
+ tags:
+ - ADTModsuitPlateEngineering
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateMedical
+ name: medical MOD plate
+ components:
+ - type: Sprite
+ state: medical
+ - type: Tag
+ tags:
+ - ADTModsuitPlateMedical
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateSecurity
+ name: security MOD plate
+ components:
+ - type: Sprite
+ state: security
+ - type: Tag
+ tags:
+ - ADTModsuitPlateSecurity
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateStandard
+ name: standart MOD plate
+ components:
+ - type: Sprite
+ state: standard
+ - type: Tag
+ tags:
+ - ADTModsuitPlateStandard
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateCience
+ name: science MOD plate
+ components:
+ - type: Sprite
+ state: science
+ - type: Tag
+ tags:
+ - ADTModsuitPlateCience
+
+- type: entity
+ parent: BaseModsuitCorePartItem
+ id: ADTModsuitPlateMining
+ name: mining MOD plate
+ components:
+ - type: Sprite
+ state: engineering
+ - type: Tag
+ tags:
+ - ADTModsuitPlateMining
+
+- type: entity
+ id: ADTModsuitAssembly
+ parent: BaseModsuitCorePart
+ name: MOD core assembly
+ components:
+ - type: Appearance
+ - type: MechAssemblyVisuals
+ statePrefix: modcore
+ - type: Sprite
+ noRot: true
+ state: modcore0
+ - type: Item
+- type: entity
+ id: ADTModsuitAssembled
+ parent: BaseModsuitCorePartItem
+ name: MOD core
+ components:
+ - type: Tag
+ tags:
+ - ADTModsuitAssembledPart
+ - type: Sprite
+ state: modcore8
diff --git a/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modules.yml b/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modules.yml
new file mode 100644
index 000000000000..2390be22fc64
--- /dev/null
+++ b/Resources/Prototypes/_ADT/Entities/Objects/Specific/Modsuits/modules.yml
@@ -0,0 +1,514 @@
+- type: entity
+ parent: BaseItem
+ id: ADTModsuitModBase
+ abstract: true
+ components:
+ - type: Sprite
+ sprite: ADT/Objects/Specific/Modsuits/modules.rsi
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModAntigrav
+ name: MOD antigrav module
+ description: A module that uses a gravitational core to make the user completely weightless.
+ components:
+ - type: Sprite
+ state: antigrav
+ - type: ModSuitMod
+ complexity: 1
+ components:
+ shoes:
+ - type: AntiGravityClothing
+ energyUsing: 0.1
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModApparatus
+ name: MOD apparatus module
+ description: A favorite by Miners, this modification to the helmet utilizes a nanotechnology barrier in front of the mouth to allow eating and drinking while retaining protection and atmosphere. However, it will do nothing to improve the taste of a goliath stea
+ components:
+ - type: Sprite
+ state: apparatus
+ - type: ModSuitMod
+ complexity: 1
+ components:
+ head:
+ - type: IngestionBlocker
+ removeComponents:
+ head:
+ - type: IngestionBlocker #маленький костыль, связанный с тем, что первым делом добавляет, а не убирает компонент
+ energyUsing: 0.2
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModDrill
+ name: MOD drill module
+ description: An integrated drill, typically extending over the user's hand. While useful for drilling through rock, your drill is surely the one that both pierces and creates the heavens.
+ components:
+ - type: Sprite
+ state: drill
+ - type: ModSuitMod
+ energyUsing: 0.2
+ complexity: 2
+ components:
+ gloves:
+ - type: IngestionBlocker
+ - type: Tag
+ tags:
+ - Pickaxe
+ - type: StaminaDamageOnHit
+ damage: 1
+ - type: MeleeWeapon
+ autoAttack: true
+ angle: 0
+ wideAnimationRotation: -90
+ soundHit:
+ path: "/Audio/Items/drill_hit.ogg"
+ attackRate: 4
+ damage:
+ groups:
+ Brute: 3
+ types:
+ Structural: 15
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModJetpack
+ name: MOD jetpack module
+ description: It's a jetpack module. It can hold 5 L of gas.
+ components:
+ - type: Sprite
+ state: jetpack_adv
+ - type: ModSuitMod
+ energyUsing: 3.5
+ components:
+ MODcore:
+ - type: MovementSpeedModifier
+ weightlessAcceleration: 1
+ weightlessFriction: 0.3
+ weightlessModifier: 1.2
+ - type: CanMoveInAir
+ - type: InputMover
+ - type: GasTank
+ outputPressure: 21.3
+ air:
+ volume: 5
+ temperature: 293.15
+ moles:
+ - 0.615413716 # oxygen
+ - type: Jetpack
+ moleUsage: 0
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModMagboot
+ name: MOD magboot module
+ description: These are powerful electromagnets fitted into the suit's boots, allowing users both excellent traction no matter the condition indoors, and to essentially hitch a ride on the exterior of a hull. However, these basic models do not feature computerized systems to automatically toggle them on and off, so numerous users report a certain stickiness to their steps.
+ components:
+ - type: Sprite
+ state: magnet
+ - type: ModSuitMod
+ energyUsing: 0.2
+ components:
+ shoes:
+ - type: ToggleClothing
+ action: ActionToggleMagboots
+ mustEquip: false
+ - type: ComponentToggler
+ components:
+ - type: NoSlip
+ - type: Magboots
+ - type: ClothingSpeedModifier
+ walkModifier: 0.85
+ sprintModifier: 0.8
+ - type: ItemToggle
+ onUse: false
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModStun
+ name: MOD stun module
+ description: Alows you to stun people with punching.
+ components:
+ - type: Sprite
+ state: no_baton
+ - type: ModSuitMod
+ energyUsing: 0.3
+ complexity: 3
+ components:
+ gloves:
+ - type: StaminaDamageOnHit
+ damage: 30
+ - type: MeleeWeapon
+ attackRate: 1.5
+ damage:
+ types:
+ Blunt: 0.4
+ animation: WeaponArcFist
+ mustBeEquippedToUse: true
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModNoslip
+ name: MOD noslip module
+ description: These are a modified variant of standard magnetic boots, utilizing piezoelectric crystals on the soles. The two plates on the bottom of the boots automatically extend and magnetize as the user steps; a pull that's too weak to offer them the ability to affix to a hull, but just strong enough to protect against the fact that you didn't read the wet floor sign. Honk Co. has come out numerous times in protest of these modules being legal.
+ components:
+ - type: Sprite
+ state: noslip
+ - type: ModSuitMod
+ complexity: 2
+ components:
+ shoes:
+ - type: NoSlip
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModPowerKick
+ name: MOD power kick module
+ description: Super mega power punch! Twowing back every punched.
+ components:
+ - type: Sprite
+ state: power_kick
+ - type: ModSuitMod
+ energyUsing: 0.3
+ complexity: 3
+ components:
+ gloves:
+ - type: MeleeThrowOnHit
+ - type: MeleeWeapon
+ attackRate: 1
+ damage:
+ types:
+ Blunt: 1
+ animation: WeaponArcFist
+ mustBeEquippedToUse: true
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModSechud
+ name: MOD Security Visor Module
+ description: A heads-up display installed into the visor of the suit. This module is a heavily-retrofitted targeting system, plugged into various criminal databases to be able to view arrest records, command simple security-oriented robots, and generally know who to shoot. They say these also let you see behind you.
+ components:
+ - type: Sprite
+ state: sechud_viisor
+ - type: ModSuitMod
+ energyUsing: 0.1
+ complexity: 2
+ components:
+ head:
+ - type: ShowJobIcons
+ - type: ShowMindShieldIcons
+ - type: ShowCriminalRecordIcons
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModStorage
+ name: MOD storage module
+ description: What amounts to a series of integrated storage compartments and specialized pockets installed across the surface of the suit, useful for storing various bits, and or bobs.
+ components:
+ - type: Sprite
+ state: storage
+ - type: ModSuitMod
+ energyUsing: 0.1
+ isInstantlyActive: true
+ complexity: 3
+ components:
+ MODcore:
+ - type: Storage
+ grid:
+ - 0,0,6,3
+ maxItemSize: Huge
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModDuffelbagStorage
+ name: MOD duffelbag storage module
+ description: What amounts to a series of integrated storage compartments and specialized pockets installed across the surface of the suit, useful for storing various bits, and or bobs.
+ components:
+ - type: Sprite
+ state: storage_large
+ - type: ModSuitMod
+ energyUsing: 0.1
+ isInstantlyActive: true
+ complexity: 3
+ components:
+ MODcore:
+ - type: Storage
+ maxItemSize: Huge
+ grid:
+ - 0,0,7,4
+ - type: ClothingSpeedModifier
+ walkModifier: 1
+ sprintModifier: 0.9
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModSatchelStorage
+ name: MOD satchel storage module
+ description: What amounts to a series of integrated storage compartments and specialized pockets installed across the surface of the suit, useful for storing various bits, and or bobs.
+ components:
+ - type: Sprite
+ state: storage
+ - type: ModSuitMod
+ energyUsing: 0.1
+ isInstantlyActive: true
+ complexity: 3
+ components:
+ MODcore:
+ - type: Storage
+ grid:
+ - 0,0,1,3
+ - 3,0,6,3
+ - 8,0,9,3
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModWelding
+ name: MOD welding module
+ description: A module installed into the visor of the suit, this projects a polarized, holographic overlay in front of the user's eyes. It's rated high enough for immunity against extremities such as spot and arc welding, solar eclipses, and handheld flashlights.
+ components:
+ - type: Sprite
+ state: welding
+ - type: ModSuitMod
+ energyUsing: 0.2
+ complexity: 1
+ components:
+ head:
+ - type: EyeProtection
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModArmor
+ name: MOD aromor replace module
+ description: Repaces armor in your MOD with "perfect 40".
+ components:
+ - type: Sprite
+ state: plate_compression
+ - type: ModSuitMod
+ energyUsing: 0.1
+ complexity: 4
+ components:
+ outerClothing:
+ - type: Armor
+ modifiers:
+ coefficients:
+ Blunt: 0.6
+ Slash: 0.6
+ Piercing: 0.7
+ Heat: 0.7
+ Radiation: 0.6
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModStorageLarge
+ name: MOD storage module large
+ description: Reverse engineered by Nakamura Engineering from Donk Corporation designs, this system of hidden compartments is entirely within the suit, distributing items and weight evenly to ensure a comfortable experience for the user; whether smuggling, or simply hauling.
+ components:
+ - type: Sprite
+ state: storage_large
+ - type: ModSuitMod
+ energyUsing: 0.3
+ isInstantlyActive: true
+ complexity: 3
+ components:
+ MODcore:
+ - type: Storage
+ maxItemSize: Huge
+ grid:
+ - 0,0,7,4
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModTray
+ name: MOD Tray module
+ description: A module installed into the visor of the suit, allowing the user to use a pulse of terahertz radiation to essentially echolocate things beneath the floor, mostly cables and pipes. A staple of atmospherics work, and counter-smuggling work.
+ components:
+ - type: Sprite
+ state: tray
+ - type: ModSuitMod
+ energyUsing: 0.1
+ complexity: 2
+ components:
+ head:
+ - type: TrayScanner
+ enabled: true
+ range: 10
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModIsulation
+ name: MOD isolated gloves module
+ description: Insolates your gloves.
+ components:
+ - type: Sprite
+ state: carry
+ - type: ModSuitMod
+ energyUsing: 0.2
+ complexity: 2
+ components:
+ gloves:
+ - type: Insulated
+
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModLight
+ name: MOD light module
+ description: Blind.
+ components:
+ - type: Sprite
+ state: flashlight
+ - type: ModSuitMod
+ energyUsing: 0.1
+ complexity: 1
+ components:
+ head:
+ - type: ToggleableLightVisuals
+ clothingVisuals:
+ head:
+ - state: equipped-head-light
+ shader: unshaded
+ - type: Appearance
+ - type: HandheldLight
+ addPrefix: true
+ blinkingBehaviourId: blinking
+ radiatingBehaviourId: radiating
+ - type: LightBehaviour
+ behaviours:
+ - !type:FadeBehaviour
+ id: radiating
+ interpolate: Linear
+ maxDuration: 2.0
+ startValue: 3.0
+ endValue: 2.0
+ isLooped: true
+ reverseWhenFinished: true
+ - !type:PulseBehaviour
+ id: blinking
+ interpolate: Nearest
+ maxDuration: 1.0
+ minValue: 0.1
+ maxValue: 2.0
+ isLooped: true
+ - type: Battery
+ maxCharge: 600
+ startingCharge: 600
+ - type: BatterySelfRecharger
+ autoRecharge: true
+ autoRechargeRate: 2
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModOrebag
+ name: MOD orebag module
+ description: Locks modsuit on you.
+ components:
+ - type: Sprite
+ state: ore
+ - type: ModSuitMod
+ isInstantlyActive: true
+ complexity: 2
+ components:
+ outerClothing:
+ - type: MagnetPickup
+ slotFlags: OUTERCLOTHING
+ - type: Storage
+ maxItemSize: Normal
+ grid:
+ - 0,0,9,5
+ quickInsert: true
+ areaInsert: true
+ whitelist:
+ tags:
+ - ArtifactFragment
+ - Ore
+ - type: Dumpable
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModRadiationProtection
+ name: MOD radiation protection module
+ description: Locks modsuit on you.
+ components:
+ - type: Sprite
+ state: radshield
+ - type: ModSuitMod
+ energyUsing: 0.2
+ complexity: 2
+ components:
+ outerClothing:
+ - type: RadiationBlocker
+ resistance: 100
+ - type: RadiationProtection
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModStorageSyndie
+ name: MOD syndie storage module
+ description: What amounts to a series of integrated storage compartments and specialized pockets installed across the surface of the suit, useful for storing various bits, and or bobs.
+ components:
+ - type: Sprite
+ state: storage_syndi
+ - type: ModSuitMod
+ energyUsing: 0.1
+ isInstantlyActive: true
+ complexity: 2
+ components:
+ MODcore:
+ - type: Storage
+ grid:
+ - 0,0,8,4
+ maxItemSize: Huge
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModEmpProtection
+ name: MOD emp protection module
+ description: Locks modsuit on you.
+ components:
+ - type: Sprite
+ state: empshield
+ - type: ModSuitMod
+ energyUsing: 0.2
+ complexity: 1
+ components:
+ MODcore:
+ - type: EmpContainerProtaction
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModPlasmaStabilizer
+ name: MOD plasma fuel module
+ description: Locks modsuit on you.
+ components:
+ - type: Sprite
+ state: micriwave_beam
+ - type: ModSuitMod
+ complexity: 3
+ components:
+ MODcore:
+ - type: MaterialStorage
+ storageLimit: 3000
+ materialWhiteList: [RawPlasma, Plasma]
+ canEjectStoredMaterials: false
+ - type: BatteryRecharge
+ multiplier: 1.25
+
+- type: entity
+ parent: ADTModsuitModBase
+ id: ADTModsuitModUraniumStabilizer
+ name: MOD uranium fuel module
+ description: Locks modsuit on you.
+ components:
+ - type: Sprite
+ state: micriwave_beam
+ - type: ModSuitMod
+ complexity: 3
+ components:
+ MODcore:
+ - type: MaterialStorage
+ storageLimit: 3000
+ materialWhiteList: [Uranium]
+ canEjectStoredMaterials: false
+ - type: BatteryRecharge
+ multiplier: 3
diff --git a/Resources/Prototypes/_ADT/tags.yml b/Resources/Prototypes/_ADT/tags.yml
new file mode 100644
index 000000000000..33cebd1f35ad
--- /dev/null
+++ b/Resources/Prototypes/_ADT/tags.yml
@@ -0,0 +1,45 @@
+- type: Tag
+ id: ADTModsuitHelmet
+
+- type: Tag
+ id: ADTModsuitGauntlets
+
+- type: Tag
+ id: ADTModsuitCoreEnergy
+
+- type: Tag
+ id: ADTModsuitChestplate
+
+- type: Tag
+ id: ADTModsuitBoots
+
+- type: Tag
+ id: ADTModsuitPlateAtmospheric
+
+- type: Tag
+ id: ADTModsuitPlateCosmohonk
+
+- type: Tag
+ id: ADTModsuitPlateEngineering
+
+- type: Tag
+ id: ADTModsuitPlateMedical
+
+- type: Tag
+ id: ADTModsuitPlateSecurity
+
+- type: Tag
+ id: ADTModsuitPlateStandard
+
+- type: Tag
+ id: ADTModsuitPlateCience
+
+- type: Tag
+ id: ADTModsuitPlateMining
+
+- type: Tag
+ id: ADTModsuitAssembledPart
+
+- type: Tag
+ id: ADTHardsuitSalvage
+
diff --git a/Resources/Prototypes/_Forge/Entities/Objects/Weapons/handheldshuttleconsole.yml b/Resources/Prototypes/_Forge/Entities/Objects/Weapons/handheldshuttleconsole.yml
new file mode 100644
index 000000000000..fa313450ca91
--- /dev/null
+++ b/Resources/Prototypes/_Forge/Entities/Objects/Weapons/handheldshuttleconsole.yml
@@ -0,0 +1,70 @@
+- type: entity
+ parent: BaseItem
+ id: ADTHandheldShuttleConsoleSyndicate
+ name: handheld syndicate shuttle console
+ description: Used to pilot a syndicate shuttle.
+ components:
+ - type: Sprite
+ sprite: ADT/Objects/Specific/handheldshuttleconsole.rsi
+ state: syndicate
+ - type: PointLight
+ radius: 1.5
+ energy: 1.6
+ color: "#c94242"
+ - type: DeviceList
+ - type: DeviceNetwork
+ deviceNetId: Wired
+ - type: DeviceLinkSource
+ range: 20
+ ports:
+ - TurretControllerSender
+ - type: TurretController
+
+- type: sourcePort #прототип порта, который отправляет данные
+ id: TurretControllerSender
+ name: signal-port-name-tur-sender
+ description: signal-port-description-tur-sender
+
+- type: entity
+ id: ControlReturnAction
+ name: Stop controlling turret
+ components:
+ - type: Action
+ icon: { sprite: ADT/Interface/Actions/actions_turret.rsi, state: stop_control }
+ useDelay: 1
+ - type: InstantAction
+ event: !type:ControlReturnActionEvent
+
+- type: entity
+ id: ActionTurretShowRadar
+ name: Mass Scanner Interface
+ description: View a Mass Scanner Interface.
+ components:
+ - type: Action
+ icon: { sprite: Objects/Tools/crowbar.rsi, state: icon }
+ useDelay: 1
+ checkCanInteract: false
+ - type: InstantAction
+ event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key }
+
+- type: entity
+ id: PlayerBorgSyndicateSui
+ parent: BorgChassisSyndicateSaboteur
+ suffix: Battery, Module, Operative
+ components:
+ - type: TurretControllable
+ isDrone: true
+ isMoveable: true
+ - type: ContainerFill
+ containers:
+ borg_module:
+ - BorgModuleTool
+ - BorgModuleMartyr
+ - type: DeviceLinkSink
+ ports:
+ - On
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ startingItem: PowerCellHyper
diff --git a/Resources/Textures/ADT/Alerts/offer_item.rsi/meta.json b/Resources/Textures/ADT/Alerts/offer_item.rsi/meta.json
new file mode 100644
index 000000000000..0513aeb3e064
--- /dev/null
+++ b/Resources/Textures/ADT/Alerts/offer_item.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Original icon taken from https://github.com/ss220-space/Paradise/blob/master220/icons/mob/screen_alert.dmi, modified by Mocho, resprited by AwareFoxy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "offer_item"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Alerts/offer_item.rsi/offer_item.png b/Resources/Textures/ADT/Alerts/offer_item.rsi/offer_item.png
new file mode 100644
index 000000000000..6215d2e53ff3
Binary files /dev/null and b/Resources/Textures/ADT/Alerts/offer_item.rsi/offer_item.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..30ed6e838cbb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/icon.png
new file mode 100644
index 000000000000..c0e8ca97ce91
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-left.png
new file mode 100644
index 000000000000..e4d2b0b341c5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-right.png
new file mode 100644
index 000000000000..bf69fefd5e2b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/advanced.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..f45e098bfbba
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/icon.png
new file mode 100644
index 000000000000..7226bfb9a655
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-left.png
new file mode 100644
index 000000000000..66836ef8cdad
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-right.png
new file mode 100644
index 000000000000..52d6e4918890
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/atmospheric.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..a087847e4519
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/icon.png
new file mode 100644
index 000000000000..7040c251ec01
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-left.png
new file mode 100644
index 000000000000..daf802e96ef0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-right.png
new file mode 100644
index 000000000000..91a57dbac75a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/meta.json
new file mode 100644
index 000000000000..63de6b021583
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/bso.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..224b34ae438f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/icon.png
new file mode 100644
index 000000000000..c7c1d6a00014
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-left.png
new file mode 100644
index 000000000000..00f213cf4c3e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-right.png
new file mode 100644
index 000000000000..7b5f06a789bf
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/meta.json
new file mode 100644
index 000000000000..63de6b021583
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/clown.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..f99ed7d6ef26
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/icon.png
new file mode 100644
index 000000000000..12f76c65dc96
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-left.png
new file mode 100644
index 000000000000..85906ccbbec2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-right.png
new file mode 100644
index 000000000000..5574583aa6c9
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/engineering.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..cddc82c56e59
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/icon.png
new file mode 100644
index 000000000000..1487865f0d01
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-left.png
new file mode 100644
index 000000000000..e8f716b60bc4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-right.png
new file mode 100644
index 000000000000..f6c1d4a261f6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/meta.json
new file mode 100644
index 000000000000..63de6b021583
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/hos.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..0e49c189f4ab
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/icon.png
new file mode 100644
index 000000000000..b07c76b12b5c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-left.png
new file mode 100644
index 000000000000..4a2d6c8e992f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-right.png
new file mode 100644
index 000000000000..d19abdc2dd6b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/medical.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..323cea92c5ca
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/icon.png
new file mode 100644
index 000000000000..0c75e9df21d4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-left.png
new file mode 100644
index 000000000000..b2621e73ac68
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-right.png
new file mode 100644
index 000000000000..46f2e7f8740f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/mining.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..77df262bea4a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/icon.png
new file mode 100644
index 000000000000..78b237d4cda4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-left.png
new file mode 100644
index 000000000000..de702ba6585f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-right.png
new file mode 100644
index 000000000000..f21fa2c8e82c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/meta.json
new file mode 100644
index 000000000000..3d83d4b7f27b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/science.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..a84723ee276d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/icon.png
new file mode 100644
index 000000000000..8a1bcd750d94
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-left.png
new file mode 100644
index 000000000000..d9ab65337981
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-right.png
new file mode 100644
index 000000000000..fd6901667b68
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/security.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..88607339e5d7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/icon.png
new file mode 100644
index 000000000000..a66910c14d87
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-left.png
new file mode 100644
index 000000000000..f50903fe0a2a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-right.png
new file mode 100644
index 000000000000..416b9d279f71
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/standart.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..d39ff4b243a7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/icon.png
new file mode 100644
index 000000000000..33c3d5ae8e09
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-left.png
new file mode 100644
index 000000000000..5bc218997399
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-right.png
new file mode 100644
index 000000000000..42dba65bb41c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..6f08c25bf2b4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/icon.png
new file mode 100644
index 000000000000..ae18d5886b5d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-left.png
new file mode 100644
index 000000000000..1ef63a9751a5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-right.png
new file mode 100644
index 000000000000..d3e2758d313e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_comma.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/equipped-BACKPACK.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/equipped-BACKPACK.png
new file mode 100644
index 000000000000..8317887c0ef4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/equipped-BACKPACK.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/icon.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/icon.png
new file mode 100644
index 000000000000..798814e50fed
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-left.png
new file mode 100644
index 000000000000..7817ca5a626a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-right.png
new file mode 100644
index 000000000000..6f535110e87c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/meta.json b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/meta.json
new file mode 100644
index 000000000000..cf2d894936a0
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Back/Modsuit/syndicate_elite.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BACKPACK",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES-hamster.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES-hamster.png
new file mode 100644
index 000000000000..6097e85c832a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES-hamster.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..ed1c16ef1483
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/icon.png
new file mode 100644
index 000000000000..875f9745f573
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-left.png
new file mode 100644
index 000000000000..388d8f90c21f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-right.png
new file mode 100644
index 000000000000..72a70ec90b64
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/meta.json
new file mode 100644
index 000000000000..d3a337bc26e1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/blueshield.rsi/meta.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from Skyrat-TG at https://github.com/Skyrat-SS13/Skyrat-tg",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-hamster",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..47f9b737a9ae
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/icon.png
new file mode 100644
index 000000000000..b971776627ee
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-left.png
new file mode 100644
index 000000000000..4aa0438bb731
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-right.png
new file mode 100644
index 000000000000..6dabd17411b5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/meta.json
new file mode 100644
index 000000000000..19e6deaea949
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/med_chem_goggles.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by buhojmed (discord)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..0974537d9bc6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/icon.png
new file mode 100644
index 000000000000..66340ab376be
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-left.png
new file mode 100644
index 000000000000..46297d34bdb0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-right.png
new file mode 100644
index 000000000000..e592b72c9b22
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/meta.json
new file mode 100644
index 000000000000..0caf46788d3d
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/meson.rsi/meta.json
@@ -0,0 +1,60 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Mady by tamioki",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4,
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..318bb33f84c6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/icon.png
new file mode 100644
index 000000000000..f6733aafeaa5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/meta.json
new file mode 100644
index 000000000000..68fc9314137e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mgd_pnvhud.rsi/meta.json
@@ -0,0 +1,19 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by discord:peacemakerrus",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states":
+ [
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..8041a1cd7398
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/icon.png
new file mode 100644
index 000000000000..89c76123fe85
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-left.png
new file mode 100644
index 000000000000..464f96b072f5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-right.png
new file mode 100644
index 000000000000..840860af3177
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/meta.json
new file mode 100644
index 000000000000..4b942cdb3502
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/mimicry.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by decente",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..b73cbc7a8045
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/icon.png
new file mode 100644
index 000000000000..03ec0a54b9c2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-left.png
new file mode 100644
index 000000000000..aec8056f5c6e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-right.png
new file mode 100644
index 000000000000..5063d468e045
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/meta.json
new file mode 100644
index 000000000000..022a48dd97d7
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/monocle.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "made by 0uch, taken from MOLOT-BlueMoon-Station at commit https://github.com/BlueMoon-Labs/MOLOT-BlueMoon-Station/commit/443ee973e41cfd91bd0803501b318ef1b709eeee. If the author is specified incorrectly, you can contact us: https://discord.gg/MraaYU9ZE3",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..8d981ab86281
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/icon.png
new file mode 100644
index 000000000000..b8ec190151f3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/meta.json
new file mode 100644
index 000000000000..a27d15fd037e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/neontactical.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by discord:prazat911",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES-hamster.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES-hamster.png
new file mode 100644
index 000000000000..ae7511badd96
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES-hamster.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..3999233de187
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/icon.png
new file mode 100644
index 000000000000..410e4f8d8794
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-left.png
new file mode 100644
index 000000000000..464f96b072f5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-right.png
new file mode 100644
index 000000000000..840860af3177
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/meta.json
new file mode 100644
index 000000000000..28e07b5514e6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/pink_glasses.rsi/meta.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by discord:dion_clawed",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-hamster",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..ec59638c3717
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/icon.png
new file mode 100644
index 000000000000..68132454df18
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/meta.json
new file mode 100644
index 000000000000..a27d15fd037e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/servant_of_evil.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by discord:prazat911",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES-hamster.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES-hamster.png
new file mode 100644
index 000000000000..c3075a5034e2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES-hamster.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..9a340d3f7bd9
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/icon.png
new file mode 100644
index 000000000000..95b672e68417
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-left.png
new file mode 100644
index 000000000000..e90068b213a0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-right.png
new file mode 100644
index 000000000000..4c7b27bc4826
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/meta.json
new file mode 100644
index 000000000000..5005c7cdd815
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sollux_captor.rsi/meta.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by discord:prazat911",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-hamster",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES-hamster.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES-hamster.png
new file mode 100644
index 000000000000..7fbe3818439d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES-hamster.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..29650475e8af
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/icon.png
new file mode 100644
index 000000000000..eedfa1bc8371
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-left.png
new file mode 100644
index 000000000000..5a2955dc367d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-right.png
new file mode 100644
index 000000000000..37f25287a5ee
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/meta.json
new file mode 100644
index 000000000000..2baf49e2c0a3
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/sunmed.rsi/meta.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da & modified glass color by mureixlol",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-hamster",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..2915de317d2b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/icon.png
new file mode 100644
index 000000000000..22f5c87ddaf5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/meta.json
new file mode 100644
index 000000000000..82eaa971f8af
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-arachnid.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-arachnid.png
new file mode 100644
index 000000000000..e558e6e3c31f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-arachnid.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-moth.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-moth.png
new file mode 100644
index 000000000000..93257e844543
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-moth.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-secdog.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-secdog.png
new file mode 100644
index 000000000000..0a2fe588c056
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES-secdog.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..46379d491474
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/icon.png
new file mode 100644
index 000000000000..fb3ec89b0c50
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-left.png
new file mode 100644
index 000000000000..d155746761fb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-right.png
new file mode 100644
index 000000000000..ff54a736db5e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/meta.json
new file mode 100644
index 000000000000..a14dc5c61b77
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/Glasses/welding_old.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da. equipped-EYES-secdog modified from equipped-EYES by TJohnson. Equipped-EYES-arachnid and equipped-EYES-moth modified from equipped-EYES by HTMLSystem.",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-arachnid",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-moth",
+ "directions": 4
+ },
+ {
+ "name": "equipped-EYES-secdog",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..0bdfa1e8841c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/icon.png
new file mode 100644
index 000000000000..c06681e26170
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/meta.json
new file mode 100644
index 000000000000..68fc9314137e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/HUD/mgd_hud.rsi/meta.json
@@ -0,0 +1,19 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by discord:peacemakerrus",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states":
+ [
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/equipped-EYES.png b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/equipped-EYES.png
new file mode 100644
index 000000000000..973c402b301e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/icon.png b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/icon.png
new file mode 100644
index 000000000000..de5d6f2b6100
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/meta.json b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/meta.json
new file mode 100644
index 000000000000..f0d97723f861
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Eyes/HUD/phantom_hud.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by discord: mnogo_znal",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..e8eab2b869fb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/icon.png
new file mode 100644
index 000000000000..953297dc32b1
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/advanced.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..9b2149fb9d3f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/icon.png
new file mode 100644
index 000000000000..db5f617dbdd0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/atmospheric.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..64e770ec6366
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/icon.png
new file mode 100644
index 000000000000..acc45baa995d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/meta.json
new file mode 100644
index 000000000000..dab381f0483e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/bso.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..da33d0b75050
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/icon.png
new file mode 100644
index 000000000000..99566d0f61bf
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/meta.json
new file mode 100644
index 000000000000..37cb4b5a815c
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/cience.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..2dc92cb404b7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/icon.png
new file mode 100644
index 000000000000..f5d9da68549d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/meta.json
new file mode 100644
index 000000000000..dab381f0483e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/clown.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..b27bd98f0d67
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/icon.png
new file mode 100644
index 000000000000..e39dd26feeb8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/engineering.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..443652bf68f1
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/icon.png
new file mode 100644
index 000000000000..2ecc1dffc970
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/meta.json
new file mode 100644
index 000000000000..dab381f0483e
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/hos.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..406f6e91297b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/icon.png
new file mode 100644
index 000000000000..d6db9aba72dd
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/medical.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..bd1cda7cf21b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/icon.png
new file mode 100644
index 000000000000..6eb5843b8399
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/mining.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..109b54b25ef3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/icon.png
new file mode 100644
index 000000000000..b414ab22e38f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/rescue.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..9770ca2f96e9
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/icon.png
new file mode 100644
index 000000000000..bdf73619cf24
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/security.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..4c49c02e1e12
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/icon.png
new file mode 100644
index 000000000000..d4441d9a94c4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/standart.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..763e9c446d1b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/icon.png
new file mode 100644
index 000000000000..3a8924e62dbd
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..395641403bed
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/icon.png
new file mode 100644
index 000000000000..68be7b295964
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_comma.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/equipped-HAND.png
new file mode 100644
index 000000000000..de394a9ed430
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/equipped-HAND.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/icon.png b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/icon.png
new file mode 100644
index 000000000000..cdc2f755aeee
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/meta.json
new file mode 100644
index 000000000000..d6a56828aa11
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Hands/Modsuit/syndicate_elite.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HAND",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..058dc8a0e63f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..e9b51531c81c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head.png
new file mode 100644
index 000000000000..5b8d550114d7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-flash.png
new file mode 100644
index 000000000000..cbdadda1d2fc
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..2511e50d0086
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon.png
new file mode 100644
index 000000000000..cbdadda1d2fc
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/light-overlay.png
new file mode 100644
index 000000000000..5347ab016e2a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/meta.json
new file mode 100644
index 000000000000..655ebad28caa
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/advanced.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/97ec5ed1a0fc8263df5df5a5afbb653d4684992e & light version made by github:Morb0. Vox states made by Flareguy for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..058dc8a0e63f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..c107e174a50e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head.png
new file mode 100644
index 000000000000..68d26272e4d2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-flash.png
new file mode 100644
index 000000000000..75dd12fcd798
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..b249bec8dccb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon.png
new file mode 100644
index 000000000000..8dc4d36530d2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/light-overlay.png
new file mode 100644
index 000000000000..5347ab016e2a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/meta.json
new file mode 100644
index 000000000000..655ebad28caa
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/atmospheric.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/97ec5ed1a0fc8263df5df5a5afbb653d4684992e & light version made by github:Morb0. Vox states made by Flareguy for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..270eb303af5d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..270eb303af5d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head.png
new file mode 100644
index 000000000000..f2c20053704f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-flash.png
new file mode 100644
index 000000000000..ad2f40430281
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..ad2f40430281
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon.png
new file mode 100644
index 000000000000..15bcefd1fe86
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/light-overlay.png
new file mode 100644
index 000000000000..7244b37f5c78
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/meta.json
new file mode 100644
index 000000000000..c902d669bb30
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/bso.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..a47b00f42941
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..c67204c5f890
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head.png
new file mode 100644
index 000000000000..fae72ad7d8f5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-flash.png
new file mode 100644
index 000000000000..0b95da06f489
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..875ae92fc1ca
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon.png
new file mode 100644
index 000000000000..0b95da06f489
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/light-overlay.png
new file mode 100644
index 000000000000..7244b37f5c78
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/meta.json
new file mode 100644
index 000000000000..c902d669bb30
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/clown.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..0492044f01da
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..f18cd6fea2ff
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head.png
new file mode 100644
index 000000000000..c11f7b716530
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-flash.png
new file mode 100644
index 000000000000..889f4f17b727
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..c62dc9aa74dc
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon.png
new file mode 100644
index 000000000000..3d31e57f6dd3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/light-overlay.png
new file mode 100644
index 000000000000..1ab0d3dd936b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/meta.json
new file mode 100644
index 000000000000..655ebad28caa
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/engineering.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/97ec5ed1a0fc8263df5df5a5afbb653d4684992e & light version made by github:Morb0. Vox states made by Flareguy for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/equipped-head.png
new file mode 100644
index 000000000000..e44c255a8ef8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/icon.png
new file mode 100644
index 000000000000..418589da5d36
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/meta.json
new file mode 100644
index 000000000000..5ae986005156
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/hos.rsi/meta.json
@@ -0,0 +1,60 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4,
+ "delays": [
+ [
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4
+ ],
+ [
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4
+ ],
+ [
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4
+ ],
+ [
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..deb5b9db0932
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head.png
new file mode 100644
index 000000000000..fac90a76de38
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon-flash.png
new file mode 100644
index 000000000000..9ed6ec9671a4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon.png
new file mode 100644
index 000000000000..949f27b6aa7a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/meta.json
new file mode 100644
index 000000000000..1d312276267a
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/medical.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/97ec5ed1a0fc8263df5df5a5afbb653d4684992e & light version made by Ratyy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..affe9a145ef7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..186e0985c9b2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head.png
new file mode 100644
index 000000000000..c615cfbd0edb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-flash.png
new file mode 100644
index 000000000000..46aa9150fb23
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..5a3820f0d2b9
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon.png
new file mode 100644
index 000000000000..c77c1de7199c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/light-overlay.png
new file mode 100644
index 000000000000..b4b70401d3af
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/mining.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..cc457d8787e9
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..46185a0fd54b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head.png
new file mode 100644
index 000000000000..a9eeb73e8d9c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-flash.png
new file mode 100644
index 000000000000..f357a7b61466
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..ba603a4c1d68
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon.png
new file mode 100644
index 000000000000..f357a7b61466
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/light-overlay.png
new file mode 100644
index 000000000000..ba603a4c1d68
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/meta.json
new file mode 100644
index 000000000000..655ebad28caa
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/science.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/97ec5ed1a0fc8263df5df5a5afbb653d4684992e & light version made by github:Morb0. Vox states made by Flareguy for SS14",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..2a4444f94a8f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..7bae504c95e0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head.png
new file mode 100644
index 000000000000..4ffa16befe6c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-flash.png
new file mode 100644
index 000000000000..cb5e396a66c6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..75e4437948d8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon.png
new file mode 100644
index 000000000000..cb5e396a66c6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/light-overlay.png
new file mode 100644
index 000000000000..5640d214a929
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/security.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..391579a392c2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..68e8d9995725
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head.png
new file mode 100644
index 000000000000..9a77c7153fb5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-flash.png
new file mode 100644
index 000000000000..380ace43e445
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..1b5ebfeb3e8b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon.png
new file mode 100644
index 000000000000..3863a02d4879
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/light-overlay.png
new file mode 100644
index 000000000000..1b5ebfeb3e8b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/standart.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..ac1f5200ee00
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..a369fbe5a1df
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head.png
new file mode 100644
index 000000000000..4aa7df4a6ba5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-flash.png
new file mode 100644
index 000000000000..fb11ab8c65ac
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..23dad0da4f40
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon.png
new file mode 100644
index 000000000000..b10ed27e75cb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/light-overlay.png
new file mode 100644
index 000000000000..7244b37f5c78
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..487222960f0a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..487222960f0a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head.png
new file mode 100644
index 000000000000..3e02106a398d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-flash.png
new file mode 100644
index 000000000000..c46429fc29ff
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..c46429fc29ff
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon.png
new file mode 100644
index 000000000000..033d4c6e6ca3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/light-overlay.png
new file mode 100644
index 000000000000..7244b37f5c78
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_comma.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-light.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-light.png
new file mode 100644
index 000000000000..69747137c8d7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-light.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-unshaded.png
new file mode 100644
index 000000000000..2a9bac00ef6c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head.png
new file mode 100644
index 000000000000..0d815b9010d3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/equipped-head.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-flash.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-flash.png
new file mode 100644
index 000000000000..8689795cb68c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-flash.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-unshaded.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-unshaded.png
new file mode 100644
index 000000000000..2695b298dde7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon-unshaded.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon.png
new file mode 100644
index 000000000000..8689795cb68c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/light-overlay.png b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/light-overlay.png
new file mode 100644
index 000000000000..7244b37f5c78
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/light-overlay.png differ
diff --git a/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/meta.json
new file mode 100644
index 000000000000..7d60d0694ac1
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Head/Modsuit/syndicate_elite.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-unshaded"
+ },
+ {
+ "name": "icon-flash"
+ },
+ {
+ "name": "light-overlay"
+ },
+ {
+ "name": "equipped-head",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-light",
+ "directions": 4
+ },
+ {
+ "name": "equipped-head-unshaded",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..a4f57554a478
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon-siren.png b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon-siren.png
new file mode 100644
index 000000000000..fcfa8ec9d800
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon-siren.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon.png
new file mode 100644
index 000000000000..49fd098f2657
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-left.png
new file mode 100644
index 000000000000..7d226a1bf1a7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-right.png
new file mode 100644
index 000000000000..0ef5a9f290f8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/meta.json
new file mode 100644
index 000000000000..87178bdd5aeb
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Hardsuits/brigmedic-praz.rsi/meta.json
@@ -0,0 +1,29 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by discord:Празат Д.В. aka [767Sikon] (prazat911)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-siren"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..a07c52176ca6
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/icon.png
new file mode 100644
index 000000000000..101feff6564f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/advanced.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..37c386301b29
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/icon.png
new file mode 100644
index 000000000000..be8c1c6582e4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/atmospheric.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..32df4d191264
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/icon.png
new file mode 100644
index 000000000000..332aba61405b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/meta.json
new file mode 100644
index 000000000000..29c3b7b25880
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/bso.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..21aff3536589
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/icon.png
new file mode 100644
index 000000000000..cc63e34fa6e7
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/meta.json
new file mode 100644
index 000000000000..29c3b7b25880
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/clown.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..b8dc7a858b7b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/icon.png
new file mode 100644
index 000000000000..300b4d401e48
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/engineering.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..c321a090318c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/icon.png
new file mode 100644
index 000000000000..7e5e6b5f70c5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/meta.json
new file mode 100644
index 000000000000..29c3b7b25880
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/hos.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..ceb7c7d17b9e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/icon.png
new file mode 100644
index 000000000000..7823dc9416be
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/medical.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..a1287d3df9e8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/icon.png
new file mode 100644
index 000000000000..4ddc2fee4b8e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/mining.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..6d1a1c972c68
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/icon.png
new file mode 100644
index 000000000000..06e2705adacb
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/science.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..b20667b46841
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/icon.png
new file mode 100644
index 000000000000..d0700e3627a5
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/security.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..a604b061688c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/icon.png
new file mode 100644
index 000000000000..dac19088cfb2
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/standart.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..da165b7d0692
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/icon.png
new file mode 100644
index 000000000000..e5c0789cc127
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..e52200c1a530
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/icon.png
new file mode 100644
index 000000000000..f4125948ec36
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_comma.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/equipped-OUTERCLOTHING.png
new file mode 100644
index 000000000000..e52cd08de88e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/equipped-OUTERCLOTHING.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/icon.png b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/icon.png
new file mode 100644
index 000000000000..4a7b8fc71d0e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/meta.json b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/meta.json
new file mode 100644
index 000000000000..26e5e556b4a6
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/OuterClothing/Modsuit/syndicate_elite.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-OUTERCLOTHING",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..8308fe93e857
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/icon.png
new file mode 100644
index 000000000000..b2c6f6a408ff
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-left.png
new file mode 100644
index 000000000000..afd63f64c94c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-right.png
new file mode 100644
index 000000000000..6ebf3e3c3a15
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/meta.json
new file mode 100644
index 000000000000..c5e1498ae722
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from https://github.com/BlueMoon-Labs/MOLOT-BlueMoon-Station/blob/da8505ca557ffbc038af2cdbcf2943eaa9897de6/icons/obj/clothing/shoes.dmi and https://github.com/BlueMoon-Labs/MOLOT-BlueMoon-Station/blob/da8505ca557ffbc038af2cdbcf2943eaa9897de6/icons/mob/clothing/feet.dmi. Inhands sprites made by Username228 (#serj3428 discord)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..b408d0cedd13
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon-on.png
new file mode 100644
index 000000000000..7fde84a59055
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon.png
new file mode 100644
index 000000000000..7fde84a59055
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-left.png
new file mode 100644
index 000000000000..f73b49b87670
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-right.png
new file mode 100644
index 000000000000..1cd21a6edc0b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/meta.json
new file mode 100644
index 000000000000..9dbcedc4418f
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/meta.json
@@ -0,0 +1,41 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Username228 (#serj3428 discord)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "on-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "on-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..b408d0cedd13
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-left.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-left.png
new file mode 100644
index 000000000000..f73b49b87670
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-left.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-right.png b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-right.png
new file mode 100644
index 000000000000..1cd21a6edc0b
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Boots/jumpboots_syndie.rsi/on-inhand-right.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..a21f5df85769
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon-on.png
new file mode 100644
index 000000000000..ed69bfd3096c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon.png
new file mode 100644
index 000000000000..f62982081c7d
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..722b88e4fc84
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/advanced.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..832450c06844
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon-on.png
new file mode 100644
index 000000000000..b9ecda2369f4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon.png
new file mode 100644
index 000000000000..eb5a52a3f79c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..722b88e4fc84
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/atmospheric.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..5f82798fe3ee
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon-on.png
new file mode 100644
index 000000000000..c0735dcb0b91
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon.png
new file mode 100644
index 000000000000..c0735dcb0b91
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/meta.json
new file mode 100644
index 000000000000..ffbea6aeda07
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..5f82798fe3ee
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/bso.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..655e5e3404c0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon-on.png
new file mode 100644
index 000000000000..98aa01b84443
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon.png
new file mode 100644
index 000000000000..98aa01b84443
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/meta.json
new file mode 100644
index 000000000000..51141f6e7131
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..655e5e3404c0
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/cience.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..5d48808337e4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon-on.png
new file mode 100644
index 000000000000..c00ff89f4924
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon.png
new file mode 100644
index 000000000000..c00ff89f4924
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/meta.json
new file mode 100644
index 000000000000..ffbea6aeda07
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..5d48808337e4
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/clown.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..86df6f332b54
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon-on.png
new file mode 100644
index 000000000000..b9009f358e12
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon.png
new file mode 100644
index 000000000000..25aef5edd007
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..1f6a354c1959
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/engineering.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..fdcbd4643913
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon-on.png
new file mode 100644
index 000000000000..2b347456f8d3
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon.png
new file mode 100644
index 000000000000..4270dae97c98
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/meta.json
new file mode 100644
index 000000000000..ffbea6aeda07
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by tamioki, meow",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..239126ed666f
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/hos.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..6b21ad92af51
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon-on.png
new file mode 100644
index 000000000000..d7bbf5797d31
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon.png
new file mode 100644
index 000000000000..d7bbf5797d31
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..6b21ad92af51
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/medical.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..917ecb634e62
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon-on.png
new file mode 100644
index 000000000000..4f79a07fd10a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon.png
new file mode 100644
index 000000000000..4f79a07fd10a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..917ecb634e62
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/mining.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..d2c2ae81c51a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon-on.png
new file mode 100644
index 000000000000..c9f91fa9fd2c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon.png
new file mode 100644
index 000000000000..c9f91fa9fd2c
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..d2c2ae81c51a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/security.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..fe4ec2495e4a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon-on.png
new file mode 100644
index 000000000000..da7e85dacef8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon.png
new file mode 100644
index 000000000000..da7e85dacef8
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..fe4ec2495e4a
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/standart.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..ccd818178e95
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon-on.png
new file mode 100644
index 000000000000..c4aff8580d42
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon.png
new file mode 100644
index 000000000000..c4aff8580d42
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..ccd818178e95
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..1f4f3273eb21
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon-on.png
new file mode 100644
index 000000000000..dd7a8817e371
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon.png
new file mode 100644
index 000000000000..dd7a8817e371
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..ccd818178e95
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_comma.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/equipped-FEET.png
new file mode 100644
index 000000000000..f66693f2336e
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon-on.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon-on.png
new file mode 100644
index 000000000000..b9d7c4a87870
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon-on.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon.png
new file mode 100644
index 000000000000..80dea9e9c4ed
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/meta.json
new file mode 100644
index 000000000000..c275fb39511b
--- /dev/null
+++ b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5bce3744f0dffbb34f8f51ced71d3b188867862f",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "on-equipped-FEET",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-on"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/on-equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/on-equipped-FEET.png
new file mode 100644
index 000000000000..ede3381e2642
Binary files /dev/null and b/Resources/Textures/ADT/Clothing/Shoes/Modsuit/syndicate_elite.rsi/on-equipped-FEET.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/meta.json b/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/meta.json
new file mode 100644
index 000000000000..8ef9480461db
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "from not_so_big_chungus",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "stop_control"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/stop_control.png b/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/stop_control.png
new file mode 100644
index 000000000000..be9ab45b2cd7
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/actions_turret.rsi/stop_control.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_off.png b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_off.png
new file mode 100644
index 000000000000..738f2897e25d
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_off.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_on.png b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_on.png
new file mode 100644
index 000000000000..1dc892425bca
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/icon_on.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/meta.json b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/meta.json
new file mode 100644
index 000000000000..3a50393c5f39
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Actions/mesonvision.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by ratyyy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon_on"
+ },
+ {
+ "name": "icon_off"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/icon.png b/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/icon.png
new file mode 100644
index 000000000000..dd8dcd92faaa
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/meta.json b/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/meta.json
new file mode 100644
index 000000000000..3be02203d933
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Actions/mod_menu.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by descente",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_off.png b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_off.png
new file mode 100644
index 000000000000..a06424bacfd9
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_off.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_on.png b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_on.png
new file mode 100644
index 000000000000..b534c9fe4ddc
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/icon_on.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/meta.json b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/meta.json
new file mode 100644
index 000000000000..3e8c46484fba
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Actions/nightvision.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made ratyyy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon_on"
+ },
+ {
+ "name": "icon_off"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_off.png b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_off.png
new file mode 100644
index 000000000000..c3e522090620
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_off.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_on.png b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_on.png
new file mode 100644
index 000000000000..bb91b8893339
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/icon_on.png differ
diff --git a/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/meta.json b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/meta.json
new file mode 100644
index 000000000000..3a50393c5f39
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Actions/thermalvision.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by ratyyy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon_on"
+ },
+ {
+ "name": "icon_off"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge-empty.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge-empty.png
new file mode 100644
index 000000000000..698883055557
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge-empty.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge0.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge0.png
new file mode 100644
index 000000000000..e0604dae9929
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge0.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge1.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge1.png
new file mode 100644
index 000000000000..fe8100214844
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge1.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge2.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge2.png
new file mode 100644
index 000000000000..381741aba486
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge2.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge3.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge3.png
new file mode 100644
index 000000000000..467cb4133224
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge3.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge4.png b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge4.png
new file mode 100644
index 000000000000..f5ac42a38a59
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/charge4.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/charge.rsi/meta.json b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/meta.json
new file mode 100644
index 000000000000..f378fc6831c3
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Alerts/charge.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Original taken from Yogstation at https://github.com/yogstation13/Yogstation/commit/aaaed39293dd0b9edace6e2fe2017203e7352ef2, resprite by _kote",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "charge0"
+ },
+ {
+ "name": "charge1",
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "charge2"
+ },
+ {
+ "name": "charge3"
+ },
+ {
+ "name": "charge4"
+ },
+ {
+ "name": "charge-empty"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/meta.json b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/meta.json
new file mode 100644
index 000000000000..2687b6079d0f
--- /dev/null
+++ b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/meta.json
@@ -0,0 +1,29 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Taken from TG",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "modpower0"
+ },
+ {
+ "name": "modpower1"
+ },
+ {
+ "name": "modpower2"
+ },
+ {
+ "name": "modpower3"
+ },
+ {
+ "name": "modpower4"
+ },
+ {
+ "name": "modpower5"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower0.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower0.png
new file mode 100644
index 000000000000..2e738ca7e76b
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower0.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower1.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower1.png
new file mode 100644
index 000000000000..62780521b716
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower1.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower2.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower2.png
new file mode 100644
index 000000000000..21d8e7f6e7a9
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower2.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower3.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower3.png
new file mode 100644
index 000000000000..80c0d1dcfca4
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower3.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower4.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower4.png
new file mode 100644
index 000000000000..d6b47c7577c5
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower4.png differ
diff --git a/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower5.png b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower5.png
new file mode 100644
index 000000000000..d6b47c7577c5
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Alerts/modpower.rsi/modpower5.png differ
diff --git a/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/nanotrasen_background.png b/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/nanotrasen_background.png
new file mode 100644
index 000000000000..876190dc07d5
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/nanotrasen_background.png differ
diff --git a/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png b/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png
new file mode 100644
index 000000000000..83233903027d
Binary files /dev/null and b/Resources/Textures/ADT/Interface/Backgrounds/Modsuits/syndie_background.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/atmospheric.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/atmospheric.png
new file mode 100644
index 000000000000..ab7dc19aab80
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/atmospheric.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/boots.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/boots.png
new file mode 100644
index 000000000000..4fb331e787ef
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/boots.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/chestplate.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/chestplate.png
new file mode 100644
index 000000000000..ddfb8b861cc6
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/chestplate.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/cosmohonk.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/cosmohonk.png
new file mode 100644
index 000000000000..6bef04accbfd
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/cosmohonk.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/engineering.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/engineering.png
new file mode 100644
index 000000000000..3d70d09b74db
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/engineering.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/gauntlets.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/gauntlets.png
new file mode 100644
index 000000000000..55129c91152b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/gauntlets.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/helmet.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/helmet.png
new file mode 100644
index 000000000000..f067920bf24e
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/helmet.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/medical.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/medical.png
new file mode 100644
index 000000000000..9548022e6d26
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/medical.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/meta.json
new file mode 100644
index 000000000000..692709483a17
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/meta.json
@@ -0,0 +1,98 @@
+{
+ "copyright" : "Based on tgstation at https://github.com/tgstation/tgstation/blob/adf4605b24258e9c96fa985e1d11912add6aae19/icons/obj/vehicles.dmi and modified by @deltanedas (github)",
+ "license" : "CC-BY-SA-3.0",
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "boots"
+ },
+ {
+ "name": "chestplate"
+ },
+ {
+ "name": "gauntlets"
+ },
+ {
+ "name": "helmet"
+ },
+ {
+ "name": "mod-core-standard",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "modcore0"
+ },
+ {
+ "name": "modcore1",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "modcore2",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "modcore3"
+ },
+ {
+ "name": "modcore4"
+ },
+ {
+ "name": "modcore5"
+ },
+ {
+ "name": "modcore6"
+ },
+ {
+ "name": "modcore7"
+ },
+ {
+ "name": "modcore8"
+ },
+ {
+ "name": "atmospheric"
+ },
+ {
+ "name": "cosmohonk"
+ },
+ {
+ "name": "engineering"
+ },
+ {
+ "name": "medical"
+ },
+ {
+ "name": "security"
+ },
+ {
+ "name": "standard"
+ },
+ {
+ "name": "science"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/mod-core-standard.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/mod-core-standard.png
new file mode 100644
index 000000000000..1d5ec098d7db
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/mod-core-standard.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore0.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore0.png
new file mode 100644
index 000000000000..dacecd62a1ae
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore0.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore1.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore1.png
new file mode 100644
index 000000000000..4b63257d0709
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore1.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore2.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore2.png
new file mode 100644
index 000000000000..6018c4af18ba
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore2.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore3.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore3.png
new file mode 100644
index 000000000000..548cade4b30d
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore3.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore4.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore4.png
new file mode 100644
index 000000000000..52e668d48299
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore4.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore5.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore5.png
new file mode 100644
index 000000000000..b283cc90363c
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore5.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore6.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore6.png
new file mode 100644
index 000000000000..e5d4460bf181
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore6.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore7.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore7.png
new file mode 100644
index 000000000000..78c210f8be38
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore7.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore8.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore8.png
new file mode 100644
index 000000000000..232ce2d66d88
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/modcore8.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/science.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/science.png
new file mode 100644
index 000000000000..f7f6106984e4
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/science.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/security.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/security.png
new file mode 100644
index 000000000000..eb7c323b255f
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/security.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/standard.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/standard.png
new file mode 100644
index 000000000000..79648120ff36
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modcore_construction.rsi/standard.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/adrenaline.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/adrenaline.png
new file mode 100644
index 000000000000..5580b5f96485
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/adrenaline.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/antigrav.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/antigrav.png
new file mode 100644
index 000000000000..7093fe52d1c4
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/antigrav.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/apparatus.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/apparatus.png
new file mode 100644
index 000000000000..871be16cf76b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/apparatus.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/armor_booster.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/armor_booster.png
new file mode 100644
index 000000000000..a0601f012b86
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/armor_booster.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ash_accretion.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ash_accretion.png
new file mode 100644
index 000000000000..b82396318057
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ash_accretion.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bikehorn.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bikehorn.png
new file mode 100644
index 000000000000..47f0fe508138
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bikehorn.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bloon.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bloon.png
new file mode 100644
index 000000000000..f331a3b785ed
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/bloon.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/carry.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/carry.png
new file mode 100644
index 000000000000..e55076f676ee
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/carry.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chameleon.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chameleon.png
new file mode 100644
index 000000000000..c0329d3007ac
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chameleon.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chronogun.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chronogun.png
new file mode 100644
index 000000000000..98de80cab51c
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/chronogun.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp.png
new file mode 100644
index 000000000000..f7c899d38e66
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp_loader.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp_loader.png
new file mode 100644
index 000000000000..6710984a545c
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/clamp_loader.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak.png
new file mode 100644
index 000000000000..3ebbe2aa91ef
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak_ninja.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak_ninja.png
new file mode 100644
index 000000000000..a405a365ef56
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/cloak_ninja.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/constructor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/constructor.png
new file mode 100644
index 000000000000..1893c6a12d25
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/constructor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/criminal_capture.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/criminal_capture.png
new file mode 100644
index 000000000000..92c6e44b5e91
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/criminal_capture.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/defib.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/defib.png
new file mode 100644
index 000000000000..aea647b258f9
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/defib.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/diaghud_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/diaghud_visor.png
new file mode 100644
index 000000000000..817fe31b2b36
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/diaghud_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dispenser.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dispenser.png
new file mode 100644
index 000000000000..ced0d332c0b9
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dispenser.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dnalock.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dnalock.png
new file mode 100644
index 000000000000..3b259322b8eb
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/dnalock.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/drill.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/drill.png
new file mode 100644
index 000000000000..f3cf81ce93fb
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/drill.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/emp_pulse.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/emp_pulse.png
new file mode 100644
index 000000000000..ef3a9f89992f
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/emp_pulse.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/empshield.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/empshield.png
new file mode 100644
index 000000000000..e203c1be4259
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/empshield.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_net.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_net.png
new file mode 100644
index 000000000000..fcd5cf678258
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_net.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_shield.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_shield.png
new file mode 100644
index 000000000000..3bb5ae4b4313
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/energy_shield.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flametrower.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flametrower.png
new file mode 100644
index 000000000000..7f88df573252
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flametrower.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flashlight.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flashlight.png
new file mode 100644
index 000000000000..c976e79c1914
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/flashlight.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/gps.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/gps.png
new file mode 100644
index 000000000000..657da4727d8b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/gps.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/hacker.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/hacker.png
new file mode 100644
index 000000000000..61aecb94604f
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/hacker.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/health.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/health.png
new file mode 100644
index 000000000000..d0a379625743
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/health.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/holster.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/holster.png
new file mode 100644
index 000000000000..bdaee9a27276
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/holster.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/infotrator.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/infotrator.png
new file mode 100644
index 000000000000..8cb3c000a883
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/infotrator.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/injector.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/injector.png
new file mode 100644
index 000000000000..f8ad20e28a3a
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/injector.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/insignia.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/insignia.png
new file mode 100644
index 000000000000..ef8ff448bfd0
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/insignia.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack.png
new file mode 100644
index 000000000000..355e2afbf48a
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack_adv.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack_adv.png
new file mode 100644
index 000000000000..e2906185c147
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/jetpack_adv.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/kinesis.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/kinesis.png
new file mode 100644
index 000000000000..8b89aadc2ecc
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/kinesis.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/longfall.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/longfall.png
new file mode 100644
index 000000000000..fdc2ce46e81d
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/longfall.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mag_harmess.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mag_harmess.png
new file mode 100644
index 000000000000..faa1134ffe2a
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mag_harmess.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/magnet.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/magnet.png
new file mode 100644
index 000000000000..ed34c3a42e13
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/magnet.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/medhud_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/medhud_visor.png
new file mode 100644
index 000000000000..8ada41cd1f01
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/medhud_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/megaphone.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/megaphone.png
new file mode 100644
index 000000000000..007c8ade3afb
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/megaphone.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meson_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meson_visor.png
new file mode 100644
index 000000000000..a30e2a1b55d8
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meson_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meta.json
new file mode 100644
index 000000000000..4030097cbe0e
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/meta.json
@@ -0,0 +1,257 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "done by discord: mnogo_znal",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "defib"
+ },
+ {
+ "name": "diaghud_visor"
+ },
+ {
+ "name": "dispenser"
+ },
+ {
+ "name": "dnalock"
+ },
+ {
+ "name": "drill"
+ },
+ {
+ "name": "emp_pulse"
+ },
+ {
+ "name": "empshield"
+ },
+ {
+ "name": "energy_net"
+ },
+ {
+ "name": "energy_shield"
+ },
+ {
+ "name": "flametrower"
+ },
+ {
+ "name": "flashlight"
+ },
+ {
+ "name": "gps"
+ },
+ {
+ "name": "hacker"
+ },
+ {
+ "name": "health"
+ },
+ {
+ "name": "holster"
+ },
+ {
+ "name": "infotrator"
+ },
+ {
+ "name": "injector"
+ },
+ {
+ "name": "insignia"
+ },
+ {
+ "name": "jetpack"
+ },
+ {
+ "name": "jetpack_adv"
+ },
+ {
+ "name": "kinesis"
+ },
+ {
+ "name": "longfall"
+ },
+ {
+ "name": "mag_harmess"
+ },
+ {
+ "name": "magnet"
+ },
+ {
+ "name": "medhud_visor"
+ },
+ {
+ "name": "megaphone"
+ },
+ {
+ "name": "meson_visor"
+ },
+ {
+ "name": "micriwave_beam"
+ },
+ {
+ "name": "mine_bomb"
+ },
+ {
+ "name": "mister"
+ },
+ {
+ "name": "night_visor"
+ },
+ {
+ "name": "no_baton"
+ },
+ {
+ "name": "noslip"
+ },
+ {
+ "name": "ore"
+ },
+ {
+ "name": "organizer"
+ },
+ {
+ "name": "paper_maker"
+ },
+ {
+ "name": "pathfinder"
+ },
+ {
+ "name": "pathfinder_empty"
+ },
+ {
+ "name": "pepper_shoulder"
+ },
+ {
+ "name": "plate_compression"
+ },
+ {
+ "name": "power_kick"
+ },
+ {
+ "name": "radshield"
+ },
+ {
+ "name": "rare_visor"
+ },
+ {
+ "name": "recall"
+ },
+ {
+ "name": "regulator"
+ },
+ {
+ "name": "rewinder"
+ },
+ {
+ "name": "scanner"
+ },
+ {
+ "name": "sechud_viisor"
+ },
+ {
+ "name": "siaposal"
+ },
+ {
+ "name": "siglang_radio"
+ },
+ {
+ "name": "sphere"
+ },
+ {
+ "name": "springlock"
+ },
+ {
+ "name": "stamp"
+ },
+ {
+ "name": "status"
+ },
+ {
+ "name": "storage"
+ },
+ {
+ "name": "storage_bluespace"
+ },
+ {
+ "name": "storage_case"
+ },
+ {
+ "name": "storage_large"
+ },
+ {
+ "name": "storage_syndi"
+ },
+ {
+ "name": "tanning"
+ },
+ {
+ "name": "teleporter"
+ },
+ {
+ "name": "tether"
+ },
+ {
+ "name": "thermal_visor"
+ },
+ {
+ "name": "tray"
+ },
+ {
+ "name": "welding"
+ },
+ {
+ "name": "welding_camera"
+ },
+ {
+ "name": "adrenaline"
+ },
+ {
+ "name": "antigrav"
+ },
+ {
+ "name": "apparatus"
+ },
+ {
+ "name": "armor_booster"
+ },
+ {
+ "name": "ash_accretion"
+ },
+ {
+ "name": "bikehorn"
+ },
+ {
+ "name": "bloon"
+ },
+ {
+ "name": "carry"
+ },
+ {
+ "name": "chameleon"
+ },
+ {
+ "name": "chronogun"
+ },
+ {
+ "name": "clamp"
+ },
+ {
+ "name": "clamp_loader"
+ },
+ {
+ "name": "cloak"
+ },
+ {
+ "name": "cloak_ninja"
+ },
+ {
+ "name": "constructor"
+ },
+ {
+ "name": "criminal_capture"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/micriwave_beam.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/micriwave_beam.png
new file mode 100644
index 000000000000..10f1372750d2
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/micriwave_beam.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mine_bomb.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mine_bomb.png
new file mode 100644
index 000000000000..b09708c3d033
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mine_bomb.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mister.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mister.png
new file mode 100644
index 000000000000..d0ea217d8edc
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/mister.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/night_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/night_visor.png
new file mode 100644
index 000000000000..c615866f3dbe
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/night_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/no_baton.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/no_baton.png
new file mode 100644
index 000000000000..53e1514c01bc
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/no_baton.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/noslip.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/noslip.png
new file mode 100644
index 000000000000..62ef8c04898b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/noslip.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ore.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ore.png
new file mode 100644
index 000000000000..137ba8b0fc15
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/ore.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/organizer.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/organizer.png
new file mode 100644
index 000000000000..fb7d1838b7d3
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/organizer.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/paper_maker.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/paper_maker.png
new file mode 100644
index 000000000000..282274a048aa
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/paper_maker.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder.png
new file mode 100644
index 000000000000..74cb22b7e3be
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder_empty.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder_empty.png
new file mode 100644
index 000000000000..9a5a0cdf94cf
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pathfinder_empty.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pepper_shoulder.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pepper_shoulder.png
new file mode 100644
index 000000000000..8aa03fcdd81e
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/pepper_shoulder.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/plate_compression.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/plate_compression.png
new file mode 100644
index 000000000000..0c70b33a30ae
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/plate_compression.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/power_kick.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/power_kick.png
new file mode 100644
index 000000000000..8e99406f0f97
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/power_kick.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/radshield.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/radshield.png
new file mode 100644
index 000000000000..8f99360c367b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/radshield.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rare_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rare_visor.png
new file mode 100644
index 000000000000..713cde2ff00e
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rare_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/recall.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/recall.png
new file mode 100644
index 000000000000..70707809c75a
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/recall.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/regulator.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/regulator.png
new file mode 100644
index 000000000000..d13d1180015b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/regulator.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rewinder.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rewinder.png
new file mode 100644
index 000000000000..8727e8cb5bf7
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/rewinder.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/scanner.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/scanner.png
new file mode 100644
index 000000000000..6e982d06f305
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/scanner.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sechud_viisor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sechud_viisor.png
new file mode 100644
index 000000000000..c7b5c8891231
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sechud_viisor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siaposal.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siaposal.png
new file mode 100644
index 000000000000..60521291cdab
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siaposal.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siglang_radio.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siglang_radio.png
new file mode 100644
index 000000000000..c360561ec98e
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/siglang_radio.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sphere.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sphere.png
new file mode 100644
index 000000000000..d3e9760931e5
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/sphere.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/springlock.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/springlock.png
new file mode 100644
index 000000000000..eea4b632cb4e
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/springlock.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/stamp.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/stamp.png
new file mode 100644
index 000000000000..7241794d40f6
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/stamp.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/status.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/status.png
new file mode 100644
index 000000000000..f287ee6e23ac
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/status.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage.png
new file mode 100644
index 000000000000..f7b34ed40cba
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_bluespace.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_bluespace.png
new file mode 100644
index 000000000000..51713dc6a1e4
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_bluespace.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_case.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_case.png
new file mode 100644
index 000000000000..8a3bb1d7bc10
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_case.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_large.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_large.png
new file mode 100644
index 000000000000..ec708561d906
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_large.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_syndi.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_syndi.png
new file mode 100644
index 000000000000..77cddf666563
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/storage_syndi.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tanning.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tanning.png
new file mode 100644
index 000000000000..3b1f711b002d
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tanning.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/teleporter.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/teleporter.png
new file mode 100644
index 000000000000..cdb70eca7ff1
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/teleporter.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tether.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tether.png
new file mode 100644
index 000000000000..f919de515497
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tether.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/thermal_visor.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/thermal_visor.png
new file mode 100644
index 000000000000..85d744dc1d38
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/thermal_visor.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tray.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tray.png
new file mode 100644
index 000000000000..232e8c3194eb
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/tray.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding.png
new file mode 100644
index 000000000000..01ea15c83e46
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding_camera.png b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding_camera.png
new file mode 100644
index 000000000000..f1b34fc38f65
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/Modsuits/modules.rsi/welding_camera.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/bobert.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/bobert.rsi/icon.png
new file mode 100644
index 000000000000..78f7623a3259
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/bobert.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/bobert.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/bobert.rsi/meta.json
new file mode 100644
index 000000000000..c67c26f2b58c
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/bobert.rsi/meta.json
@@ -0,0 +1,22 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by mnogo_znal",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 1,
+ 1,
+ 1,
+ 1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/icon.png
new file mode 100644
index 000000000000..e8e7ba83a4b9
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/meta.json
new file mode 100644
index 000000000000..01610663d509
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/ert_mechuplink.rsi/meta.json
@@ -0,0 +1,23 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by ss13 Paradise Station RU, modified by not_so_big_chungus",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/default.png b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/default.png
new file mode 100644
index 000000000000..65b7d076116b
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/default.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/meta.json
new file mode 100644
index 000000000000..41048a78d142
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/meta.json
@@ -0,0 +1,23 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by discord: not_so_big_chungus",
+ "states": [
+ {
+ "name": "salvage"
+ },
+ {
+ "name": "security"
+ },
+ {
+ "name": "syndicate"
+ },
+ {
+ "name": "default"
+ }
+ ]
+}
diff --git a/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/salvage.png b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/salvage.png
new file mode 100644
index 000000000000..17b97ed4e82c
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/salvage.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/security.png b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/security.png
new file mode 100644
index 000000000000..5147f233e284
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/security.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/syndicate.png b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/syndicate.png
new file mode 100644
index 000000000000..7d14f1e28ce3
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/handheldshuttleconsole.rsi/syndicate.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/icon.png
new file mode 100644
index 000000000000..e66d23ca14a5
Binary files /dev/null and b/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/icon.png differ
diff --git a/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/meta.json
new file mode 100644
index 000000000000..e1d4459c0a4c
--- /dev/null
+++ b/Resources/Textures/ADT/Objects/Specific/hos_voucher.rsi/meta.json
@@ -0,0 +1,23 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Minokaa:discord",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ }
+ ]
+}