diff --git a/Content.Client/_Sunrise/Synth/SynthMonitorBoundUserInterface.cs b/Content.Client/_Sunrise/Synth/SynthMonitorBoundUserInterface.cs
new file mode 100644
index 00000000000..75c3b353450
--- /dev/null
+++ b/Content.Client/_Sunrise/Synth/SynthMonitorBoundUserInterface.cs
@@ -0,0 +1,50 @@
+using Content.Shared.Synth.Components;
+using JetBrains.Annotations;
+
+namespace Content.Client._Sunrise.Synth;
+
+[UsedImplicitly]
+public sealed class SynthMonitorBoundUserInterface : BoundUserInterface
+{
+ [ViewVariables]
+ private SynthMonitorMenu? _menu;
+
+ public SynthMonitorBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _menu = new SynthMonitorMenu();
+ _menu.OnClose += Close;
+ _menu.OnIdSelected += OnIdSelected;
+ _menu.OpenCentered();
+ }
+
+ protected override void UpdateState(BoundUserInterfaceState state)
+ {
+ base.UpdateState(state);
+ if (state is not SynthScreenBoundUserInterfaceState st)
+ return;
+
+ _menu?.UpdateState(st.ScreenList);
+ }
+
+ private void OnIdSelected(string selectedId)
+ {
+ SendMessage(new SynthScreenPrototypeSelectedMessage(selectedId));
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+
+ if (disposing)
+ {
+ _menu?.Close();
+ _menu = null;
+ }
+ }
+}
diff --git a/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml b/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml
new file mode 100644
index 00000000000..facd1533b5f
--- /dev/null
+++ b/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml.cs b/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml.cs
new file mode 100644
index 00000000000..dabbe69ced4
--- /dev/null
+++ b/Content.Client/_Sunrise/Synth/SynthMonitorMenu.xaml.cs
@@ -0,0 +1,84 @@
+using System.Numerics;
+using Content.Client.Stylesheets;
+using Content.Shared.Humanoid.Markings;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.CustomControls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._Sunrise.Synth;
+
+[GenerateTypedNameReferences]
+public sealed partial class SynthMonitorMenu : DefaultWindow
+{
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ private readonly SpriteSystem _sprite;
+ public event Action? OnIdSelected;
+
+ private List _possibleScreens = [];
+
+ public SynthMonitorMenu()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+ _sprite = _entityManager.System();
+ }
+
+ public void UpdateState(List chemList)
+ {
+ _possibleScreens = chemList;
+ UpdateGrid();
+ }
+
+ private void UpdateGrid()
+ {
+ ClearGrid();
+
+ if (!_prototypeManager.TryIndex("MobSynth", out EntityPrototype? synthProto))
+ return;
+
+ foreach (var screen in _possibleScreens)
+ {
+ if (!_prototypeManager.TryIndex(screen, out MarkingPrototype? screenProto))
+ continue;
+
+ var button = new Button
+ {
+ MinSize = new Vector2(128, 128),
+ HorizontalExpand = true,
+ ToggleMode = false,
+ StyleClasses = {StyleBase.ButtonSquare},
+ };
+ button.OnPressed += _ => OnIdSelected?.Invoke(screen);
+ Grid.AddChild(button);
+
+ var icon = new AnimatedTextureRect
+ {
+ DisplayRect =
+ {
+ TextureScale = new Vector2(1, 1),
+ Stretch = TextureRect.StretchMode.KeepAspectCentered,
+ },
+ };
+
+ icon.SetFromSpriteSpecifier(screenProto.Sprites[0]);
+
+ var synth = new TextureRect()
+ {
+ Texture = _sprite.GetPrototypeIcon(synthProto).Default,
+ Stretch = TextureRect.StretchMode.KeepAspectCentered,
+ };
+
+ button.AddChild(synth);
+ button.AddChild(icon);
+ }
+ }
+
+ private void ClearGrid()
+ {
+ Grid.RemoveAllChildren();
+ }
+}
diff --git a/Content.Server/_Sunrise/Synth/SynthSystem.cs b/Content.Server/_Sunrise/Synth/SynthSystem.cs
new file mode 100644
index 00000000000..d2a4c02c71a
--- /dev/null
+++ b/Content.Server/_Sunrise/Synth/SynthSystem.cs
@@ -0,0 +1,356 @@
+using System.Diagnostics.CodeAnalysis;
+using Content.Server.Body.Systems;
+using Content.Server.Emp;
+using Content.Server.Humanoid;
+using Content.Server.Power.Components;
+using Content.Server.Power.EntitySystems;
+using Content.Shared.Actions;
+using Content.Shared.Alert;
+using Content.Shared.Body.Part;
+using Content.Shared.Damage;
+using Content.Shared.DoAfter;
+using Content.Shared.FixedPoint;
+using Content.Shared.Humanoid;
+using Content.Shared.Humanoid.Markings;
+using Content.Shared.Humanoid.Prototypes;
+using Content.Shared.Interaction;
+using Content.Shared.Mobs;
+using Content.Shared.Mobs.Components;
+using Content.Shared.Movement.Systems;
+using Content.Shared.Popups;
+using Content.Shared.PowerCell;
+using Content.Shared.Rejuvenate;
+using Content.Shared.Rounding;
+using Content.Shared.Stunnable;
+using Content.Shared.Synth.Components;
+using Content.Shared.Synth.EntitySystems;
+using Content.Shared.Verbs;
+using Robust.Shared.Utility;
+using Robust.Server.GameObjects;
+using Robust.Shared.Containers;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Synth;
+
+public sealed class SynthSystem : SharedSynthSystem
+{
+ [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
+ [Dependency] private readonly BatterySystem _batterySystem = default!;
+ [Dependency] private readonly SharedContainerSystem _containerSystem = default!;
+ [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
+ [Dependency] private readonly BodySystem _bodySystem = default!;
+ [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
+ [Dependency] private readonly SharedStunSystem _stunSystem = default!;
+ [Dependency] private readonly DamageableSystem _damageableSystem = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+ [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
+ [Dependency] private readonly SharedActionsSystem _action = default!;
+ [Dependency] private readonly HumanoidAppearanceSystem _sharedHuApp = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
+
+ private ISawmill _sawmill = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ _sawmill = Logger.GetSawmill("Synth");
+
+ SubscribeLocalEvent(OnSetupOrgans);
+ SubscribeLocalEvent(OnRejuvenate);
+ SubscribeLocalEvent(OnEmpPulse);
+ SubscribeLocalEvent(OnDrainDoAfter);
+ SubscribeLocalEvent>(AddDrainVerb);
+ SubscribeLocalEvent(OnMobStateChanged);
+ SubscribeLocalEvent(OnSynthChangeScreen);
+ SubscribeLocalEvent(OnSynthScreenSelected);
+ SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnDrainWires);
+ }
+
+ private void OnMapInit(EntityUid uid, SynthComponent component, MapInitEvent args)
+ {
+ _action.AddAction(uid, "SynthChangeScreen");
+ _action.AddAction(uid, "SynthDrainWires");
+ }
+
+ private void TryOpenUi(EntityUid uid, EntityUid user, SynthComponent? component = null)
+ {
+ if (!Resolve(uid, ref component))
+ return;
+
+ if (!TryComp(user, out ActorComponent? actor))
+ return;
+
+ _uiSystem.TryToggleUi(uid, SynthScreenUiKey.Key, actor.PlayerSession);
+ UpdateUi(uid, component);
+ }
+
+ private void OnSynthChangeScreen(EntityUid uid, SynthComponent observerComponent, SynthChangeScreenActionEvent args)
+ {
+ TryOpenUi(uid, args.Performer, observerComponent);
+ args.Handled = true;
+ }
+
+ private void OnSynthScreenSelected(EntityUid uid, SynthComponent component, SynthScreenPrototypeSelectedMessage args)
+ {
+ _sharedHuApp.SetMarkingId(uid, MarkingCategories.Snout, 0, args.SelectedId);
+ }
+
+ private void OnDrainWires(EntityUid uid, SynthComponent component, SynthDrainWiresActionEvent args)
+ {
+ component.WiresExtended = !component.WiresExtended;
+
+ if (component.WiresExtended)
+ {
+ _popup.PopupEntity(Loc.GetString("synth-wires-extended"), args.Performer, args.Performer, PopupType.Medium);
+ _audioSystem.PlayPredicted(component.ExtendSound, uid, uid);
+ }
+ else
+ {
+ _popup.PopupEntity(Loc.GetString("synth-wires-cleared"), args.Performer, args.Performer, PopupType.Medium);
+ _audioSystem.PlayPredicted(component.UnextendSound, uid, uid);
+ }
+ }
+
+ private void UpdateUi(EntityUid uid, SynthComponent? component = null)
+ {
+ if (!Resolve(uid, ref component))
+ return;
+
+ var prototypes = _prototypeManager.EnumeratePrototypes();
+
+ var screensList = new List();
+
+ foreach (var proto in prototypes)
+ {
+ if (proto.SpeciesRestrictions == null)
+ continue;
+
+ if (proto.MarkingCategory != MarkingCategories.Snout)
+ continue;
+
+ if (proto.SpeciesRestrictions.Contains("Synth"))
+ screensList.Add(proto.ID);
+ }
+
+ var state = new SynthScreenBoundUserInterfaceState(screensList);
+
+ _userInterfaceSystem.SetUiState(uid, SynthScreenUiKey.Key, state);
+ }
+
+ private void OnMobStateChanged(EntityUid uid, SynthComponent component, MobStateChangedEvent args)
+ {
+ switch (args.NewMobState)
+ {
+ case MobState.Dead:
+ {
+ _audioSystem.PlayPvs(component.DeathSound, uid);
+ break;
+ }
+ }
+ }
+
+ private void OnSetupOrgans(EntityUid uid, SynthComponent component, SetupOrgansEvent ev)
+ {
+ if (!TryGetBattery(uid, out var battery, out var batteryComponent))
+ return;
+
+ component.Energy = batteryComponent.CurrentCharge;
+ component.MaxEnergy = batteryComponent.MaxCharge;
+ Dirty(uid, component);
+ }
+
+ private void OnEmpPulse(EntityUid uid, SynthComponent component, EmpPulseEvent ev)
+ {
+ _damageableSystem.TryChangeDamage(uid, component.EmpDamage, true);
+ _stunSystem.TryParalyze(uid, TimeSpan.FromSeconds(component.EmpParalyzeTime), true);
+ }
+
+ private void AddDrainVerb(EntityUid uid, ApcComponent component, GetVerbsEvent args)
+ {
+ if (!TryComp(args.User, out var synthComponent))
+ return;
+
+ if (!synthComponent.WiresExtended)
+ return;
+
+ if (synthComponent.Energy >= synthComponent.MaxEnergy)
+ return;
+
+ AlternativeVerb verb = new()
+ {
+ Act = () =>
+ {
+ OnDrain(uid, args.User, synthComponent);
+ },
+ Text = Loc.GetString("synth-drain-verb"),
+ Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/smite.svg.192dpi.png")),
+ Priority = 1
+ };
+
+ args.Verbs.Add(verb);
+ }
+
+ private void OnDrain(EntityUid uid, EntityUid user, SynthComponent component)
+ {
+ if (!_interactionSystem.InRangeUnobstructed(user, uid, 1.25f))
+ {
+ _popup.PopupEntity(Loc.GetString("robot-drain-too-far"), user);
+ return;
+ }
+
+ if (!TryGetBattery(user, out var battery, out var batteryComponent))
+ {
+ _popup.PopupEntity(Loc.GetString("robot-drain-battery-none"), user);
+ return;
+ }
+
+ if (batteryComponent.CurrentCharge >= batteryComponent.MaxCharge * 0.9)
+ {
+ _popup.PopupEntity(Loc.GetString("robot-drain-charge-full"), user, user, PopupType.Medium);
+ return;
+ }
+
+ var doAfterArgs = new DoAfterArgs(EntityManager, user, component.PowerDrainDelay, new SynthDrainPowerDoAfterEvent(), target: uid, used: user, eventTarget: user)
+ {
+ BreakOnMove = true,
+ BreakOnDamage = true,
+ MovementThreshold = 0.5f,
+ CancelDuplicate = true
+ };
+
+ _doAfter.TryStartDoAfter(doAfterArgs);
+ }
+
+ private bool TryGetBattery(EntityUid uid, [NotNullWhen(true)] out EntityUid? powercell, [NotNullWhen(true)] out BatteryComponent? batteryComponent)
+ {
+ powercell = null;
+ batteryComponent = null;
+
+ if (!TryComp(uid, out ContainerManagerComponent? containerComp))
+ return false;
+
+ if (_containerSystem.TryGetContainer(uid, "cell_slot", out var container, containerComp) && container.ContainedEntities.Count > 0)
+ {
+ foreach (var content in container.ContainedEntities)
+ {
+ if (HasComp(content) && TryComp(content, out var batteryComp))
+ {
+ powercell = content;
+ batteryComponent = batteryComp;
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private void OnDrainDoAfter(EntityUid uid, SynthComponent comp, SynthDrainPowerDoAfterEvent args)
+ {
+ if (args.Cancelled || args.Handled || args.Target == null)
+ return;
+
+ if (!TryGetBattery(args.User, out var battery, out var batteryComponent))
+ return;
+
+ if (!HasComp(args.Target.Value) ||
+ !TryComp(args.Target.Value, out var apcBattery))
+ return;
+
+ if (MathHelper.CloseToPercent(apcBattery.CurrentCharge, 0))
+ {
+ _popup.PopupEntity(Loc.GetString("robot-drain-charge-empty", ("battery", args.Target.Value)), args.User, args.User, PopupType.Medium);
+ return;
+ }
+
+ var available = apcBattery.CurrentCharge;
+ var input = Math.Min(available, comp.DrainPerUse / comp.DrainEfficiency);
+ if (!_batterySystem.TryUseCharge(args.Target.Value, input, apcBattery))
+ return;
+ var output = input * comp.DrainEfficiency;
+ TryChangeEnergy(args.User, output, comp);
+ _popup.PopupEntity(Loc.GetString("robot-drain-charge-success", ("battery", args.Target.Value)), args.User, args.User);
+ // TODO: spark effects
+ _audioSystem.PlayPvs(comp.SparkSound, args.Target.Value);
+
+ args.Repeat = (batteryComponent.CurrentCharge <= batteryComponent.MaxCharge * 0.95);
+ }
+
+ private void OnRejuvenate(EntityUid uid, SynthComponent component, RejuvenateEvent args)
+ {
+ if (!TryGetBattery(uid, out var battery, out var batteryComponent))
+ return;
+
+ _batterySystem.SetCharge(battery.Value, batteryComponent.MaxCharge, batteryComponent);
+ component.Energy = batteryComponent.MaxCharge;
+ Dirty(uid, component);
+ }
+
+ private bool TryChangeEnergy(EntityUid uid, FixedPoint2 delta, SynthComponent? component = null)
+ {
+ if (!Resolve(uid, ref component))
+ return false;
+
+ if (!TryGetBattery(uid, out var battery, out var batteryComponent))
+ return false;
+
+ var newEnergy = FixedPoint2.Clamp(component.Energy + delta, 0, component.MaxEnergy);
+
+ if (newEnergy != component.Energy)
+ {
+ _batterySystem.SetCharge(battery.Value, newEnergy.Float(), batteryComponent);
+ component.Energy = newEnergy.Float();
+ component.MaxEnergy = batteryComponent.MaxCharge;
+ }
+
+ switch (component.SlowState)
+ {
+ case SynthComponent.SlowStates.Off:
+ if (component.Energy < component.MaxEnergy * component.EnergyLowSlowdownPercent)
+ {
+ component.SlowState = SynthComponent.SlowStates.On;
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(uid);
+ }
+ break;
+ case SynthComponent.SlowStates.On:
+ if (component.Energy > component.MaxEnergy * component.EnergyLowSlowdownPercent)
+ {
+ component.SlowState = SynthComponent.SlowStates.Off;
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(uid);
+ }
+ break;
+ }
+
+ Dirty(uid, component);
+
+ return true;
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var synthQuery = EntityQueryEnumerator();
+ while (synthQuery.MoveNext(out var ent, out var compSynth, out var mobStateComponent))
+ {
+ if (mobStateComponent.CurrentState == MobState.Dead)
+ continue;
+
+ if (_timing.CurTime < compSynth.NextUpdateTime)
+ continue;
+
+ compSynth.NextUpdateTime = _timing.CurTime + compSynth.UpdateRate;
+
+ TryChangeEnergy(ent, compSynth.EnergyСonsumption, compSynth);
+ }
+ }
+}
diff --git a/Content.Shared/_Sunrise/Synth/Components/SynthComponent.cs b/Content.Shared/_Sunrise/Synth/Components/SynthComponent.cs
new file mode 100644
index 00000000000..03bf7f712fc
--- /dev/null
+++ b/Content.Shared/_Sunrise/Synth/Components/SynthComponent.cs
@@ -0,0 +1,112 @@
+using Content.Shared.Actions;
+using Content.Shared.Damage;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+namespace Content.Shared.Synth.Components;
+
+[RegisterComponent, NetworkedComponent]
+[AutoGenerateComponentState, AutoGenerateComponentPause]
+public sealed partial class SynthComponent : Component
+{
+ [DataField("drainEfficiency")]
+ public float DrainEfficiency = 0.01f;
+
+ [DataField("drainPerUse")]
+ public float DrainPerUse = 200f;
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public FixedPoint2 Energy = 0;
+
+ [ViewVariables(VVAccess.ReadWrite), DataField("hungerСonsumption")]
+ public FixedPoint2 EnergyСonsumption = -0.6; // 1080 per 30 minutes
+
+ [DataField("maxEnergy")]
+ public FixedPoint2 MaxEnergy = 0;
+
+ [DataField("deathSound")]
+ public SoundSpecifier DeathSound = new SoundPathSpecifier("/Audio/_Sunrise/Synth/deathsound.ogg", AudioParams.Default.WithVolume(4f));
+
+ [DataField("sparkSound")]
+ public SoundSpecifier SparkSound = new SoundCollectionSpecifier("sparks", AudioParams.Default.WithVolume(10f));
+
+ [DataField("extendSound")]
+ public SoundSpecifier ExtendSound = new SoundPathSpecifier("/Audio/Effects/toilet_seat_down.ogg");
+
+ [DataField("unextendSound")]
+ public SoundSpecifier UnextendSound = new SoundPathSpecifier("/Audio/Effects/toilet_seat_down.ogg");
+
+ [DataField("powerDrainDelay")]
+ public float PowerDrainDelay = 2;
+
+ [DataField("wiresExtended")]
+ public bool WiresExtended = false;
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public DamageSpecifier EmpDamage = new()
+ {
+ DamageDict = new Dictionary
+ {
+ { "Heat", 20 },
+ }
+ };
+
+ [DataField("empParalyzeTime")]
+ public float EmpParalyzeTime = 15;
+
+ [DataField("energyLowSlowdownModifier"), ViewVariables(VVAccess.ReadWrite)]
+ public float EnergyLowSlowdownModifier = 0.5f;
+
+ [DataField("energyLowSlowdownPercent"), ViewVariables(VVAccess.ReadWrite)]
+ public float EnergyLowSlowdownPercent = 0.05f;
+
+ [DataField("nextUpdateTime", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
+ [AutoNetworkedField]
+ [AutoPausedField]
+ public TimeSpan NextUpdateTime;
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ [AutoNetworkedField]
+ public TimeSpan UpdateRate = TimeSpan.FromSeconds(1);
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ public SlowStates SlowState = SlowStates.Off;
+
+ public enum SlowStates
+ {
+ On,
+ Off
+ }
+}
+
+[Serializable, NetSerializable]
+public enum SynthScreenUiKey : byte
+{
+ Key
+}
+
+[Serializable, NetSerializable]
+public sealed class SynthScreenBoundUserInterfaceState(List screenList)
+ : BoundUserInterfaceState
+{
+ public readonly List ScreenList = screenList;
+}
+
+[Serializable, NetSerializable]
+public sealed class SynthScreenPrototypeSelectedMessage(string selectedId) : BoundUserInterfaceMessage
+{
+ public readonly string SelectedId = selectedId;
+}
+
+public sealed partial class SynthChangeScreenActionEvent : InstantActionEvent
+{
+
+}
+
+public sealed partial class SynthDrainWiresActionEvent : InstantActionEvent
+{
+
+}
diff --git a/Content.Shared/_Sunrise/Synth/EntitySystems/SharedSynthSystem.cs b/Content.Shared/_Sunrise/Synth/EntitySystems/SharedSynthSystem.cs
new file mode 100644
index 00000000000..1bbc6c1bb76
--- /dev/null
+++ b/Content.Shared/_Sunrise/Synth/EntitySystems/SharedSynthSystem.cs
@@ -0,0 +1,33 @@
+using Content.Shared.DoAfter;
+using Content.Shared.Movement.Systems;
+using Content.Shared.Synth.Components;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Synth.EntitySystems;
+
+public abstract class SharedSynthSystem : EntitySystem
+{
+ [Dependency] private readonly SharedJetpackSystem _jetpack = default!;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnRefreshMovementSpeedModifiers);
+ }
+
+ private void OnRefreshMovementSpeedModifiers(EntityUid uid, SynthComponent component, RefreshMovementSpeedModifiersEvent args)
+ {
+ if (component.SlowState == SynthComponent.SlowStates.Off)
+ return;
+
+ if (_jetpack.IsUserFlying(uid))
+ return;
+
+ args.ModifySpeed(component.EnergyLowSlowdownModifier, component.EnergyLowSlowdownModifier);
+ }
+}
+
+[Serializable, NetSerializable]
+public sealed partial class SynthDrainPowerDoAfterEvent : SimpleDoAfterEvent
+{
+
+}
diff --git a/Resources/Audio/_Sunrise/Synth/deathsound.ogg b/Resources/Audio/_Sunrise/Synth/deathsound.ogg
new file mode 100644
index 00000000000..bb11022abec
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/deathsound.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs1.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs1.ogg
new file mode 100644
index 00000000000..7e7f750634a
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs1.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs2.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs2.ogg
new file mode 100644
index 00000000000..a3942c01d09
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs2.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs3.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs3.ogg
new file mode 100644
index 00000000000..dad30ac4a15
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs3.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs4.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs4.ogg
new file mode 100644
index 00000000000..73846fd87d7
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs4.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs_2_1.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs_2_1.ogg
new file mode 100644
index 00000000000..dd5509df2f4
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs_2_1.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_legs_2_2.ogg b/Resources/Audio/_Sunrise/Synth/robot_legs_2_2.ogg
new file mode 100644
index 00000000000..489d40764a9
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_legs_2_2.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_scream_1.ogg b/Resources/Audio/_Sunrise/Synth/robot_scream_1.ogg
new file mode 100644
index 00000000000..e0510ca8602
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_scream_1.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_scream_2.ogg b/Resources/Audio/_Sunrise/Synth/robot_scream_2.ogg
new file mode 100644
index 00000000000..45bd70717b8
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_scream_2.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_scream_3.ogg b/Resources/Audio/_Sunrise/Synth/robot_scream_3.ogg
new file mode 100644
index 00000000000..06731d563a4
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_scream_3.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_scream_4.ogg b/Resources/Audio/_Sunrise/Synth/robot_scream_4.ogg
new file mode 100644
index 00000000000..9e02109a269
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_scream_4.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_spider1.ogg b/Resources/Audio/_Sunrise/Synth/robot_spider1.ogg
new file mode 100644
index 00000000000..26b04df2b36
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_spider1.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_spider2.ogg b/Resources/Audio/_Sunrise/Synth/robot_spider2.ogg
new file mode 100644
index 00000000000..3be10adc88b
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_spider2.ogg differ
diff --git a/Resources/Audio/_Sunrise/Synth/robot_spider3.ogg b/Resources/Audio/_Sunrise/Synth/robot_spider3.ogg
new file mode 100644
index 00000000000..3ef9cce879b
Binary files /dev/null and b/Resources/Audio/_Sunrise/Synth/robot_spider3.ogg differ
diff --git a/Resources/Locale/ru-RU/_strings/Vampires/vampires.ftl b/Resources/Locale/ru-RU/_strings/Vampires/vampires.ftl
index 9d8f194ea68..1827061fdea 100644
--- a/Resources/Locale/ru-RU/_strings/Vampires/vampires.ftl
+++ b/Resources/Locale/ru-RU/_strings/Vampires/vampires.ftl
@@ -53,7 +53,7 @@ vampire-mutation-none-info = Ничего не выбрано
vampire-mutation-hemomancer-info =
Гемомансер
- Фокусируеться на кровавой магии и манипуляции крови вокруг себя.
+ Фокусируется на кровавой магии и манипуляции крови вокруг себя.
Способности:
diff --git a/Resources/Locale/ru-RU/_strings/_sunrise/synth/synth.ftl b/Resources/Locale/ru-RU/_strings/_sunrise/synth/synth.ftl
index ef91c09ee71..e60a845973f 100644
--- a/Resources/Locale/ru-RU/_strings/_sunrise/synth/synth.ftl
+++ b/Resources/Locale/ru-RU/_strings/_sunrise/synth/synth.ftl
@@ -12,3 +12,9 @@ robot-drain-desc = Вы можете зарядить свою батарею о
species-name-synth = КПБ
reagent-name-motor-oil = Моторное масло
reagent-desc-motor-oil = Ну масло как масло ёпт.
+
+synth-wires-extended = Провода выдвинуты
+synth-wires-cleared = Провода убраны
+synth-drain-verb = Зарядиться
+robot-drain-battery-none = Батарея не обнаружена
+robot-drain-too-far = Слишком далеко
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml
index a7d42224ca4..c8c5a12ec5b 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml
@@ -36,6 +36,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: EventHumanoidMindShielded
@@ -78,6 +79,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: EventHumanoidMindShielded
@@ -115,6 +117,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: ERTLeader
@@ -143,6 +146,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: ERTLeaderEVA
@@ -181,6 +185,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: ERTLeader
@@ -218,6 +223,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: ERTChaplain
@@ -257,6 +263,7 @@
speciesBlacklist: # Sunrise-edit
- Diona
- Vox
+ - Synth
- Vulpkanin
- Felinid
parent: ERTLeader
diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml
index 0976a47f5d2..d4356472fe7 100644
--- a/Resources/Prototypes/Loadouts/loadout_groups.yml
+++ b/Resources/Prototypes/Loadouts/loadout_groups.yml
@@ -81,6 +81,7 @@
loadouts:
- EmergencyNitrogen
- EmergencyOxygen
+ - EmergencySynth # Sunrise-Edit
- EmergencyWithoutGas # Sunrise-Edit
- LoadoutSpeciesVoxNitrogen
@@ -483,6 +484,7 @@
- EmergencyOxygenClown
- LoadoutSpeciesVoxNitrogen
- EmergencyWithoutGasClown # Sunrise-Edit
+ - EmergencySynthClown # Sunrise-Edit
- type: loadoutGroup
id: MimeHead
@@ -806,6 +808,7 @@
- EmergencyOxygenExtended
- LoadoutSpeciesVoxNitrogen
- EmergencyWithoutGasExtended # Sunrise-Edit
+ - EmergencySynthExtended # Sunrise-Edit
# Science
- type: loadoutGroup
@@ -1051,6 +1054,7 @@
- EmergencyOxygenSecurity
- LoadoutSpeciesVoxNitrogen
- EmergencyWithoutGasSecurity # Sunrise-Edit
+ - EmergencySynthSecurity # Sunrise-Edit
- type: loadoutGroup
id: SecurityStar
@@ -1228,6 +1232,7 @@
loadouts:
- EmergencyNitrogenMedical
- EmergencyOxygenMedical
+ - EmergencySynthMedical # Sunrise-Edit
- LoadoutSpeciesVoxNitrogen
- EmergencyWithoutGasMedical # Sunrise-Edit
@@ -1271,6 +1276,7 @@
loadouts:
- EmergencyNitrogenSyndicate
- EmergencyOxygenSyndicate
+ - EmergencySynthSyndicate # Sunrise-Edit
- LoadoutSpeciesVoxNitrogen
- EmergencyWithoutGasSyndicate # Sunrise-Edit
diff --git a/Resources/Prototypes/Species/species_weights.yml b/Resources/Prototypes/Species/species_weights.yml
index bf4e1ddab46..529ce34bd47 100644
--- a/Resources/Prototypes/Species/species_weights.yml
+++ b/Resources/Prototypes/Species/species_weights.yml
@@ -6,6 +6,7 @@
Reptilian: 4
SlimePerson: 4
Vulpkanin: 4
+ Synth: 4
Swine: 4
Arachnid: 3
Moth: 2
diff --git a/Resources/Prototypes/_Sunrise/Actions/synth_actions.yml b/Resources/Prototypes/_Sunrise/Actions/synth_actions.yml
new file mode 100644
index 00000000000..58400638939
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Actions/synth_actions.yml
@@ -0,0 +1,25 @@
+- type: entity
+ id: SynthChangeScreen
+ name: Сменить дисплей
+ description: Позволяет вам изменить изображение на вашем мониторе.
+ noSpawn: true
+ components:
+ - type: InstantAction
+ icon:
+ sprite: _Sunrise/Actions/synth_actions.rsi
+ state: screen_change
+ itemIconStyle: NoItem
+ event: !type:SynthChangeScreenActionEvent
+
+- type: entity
+ id: SynthDrainWires
+ name: Выдвинуть провода
+ description: Позволяет вам выдвинуть провода для зарядки.
+ noSpawn: true
+ components:
+ - type: InstantAction
+ icon:
+ sprite: _Sunrise/Actions/synth_actions.rsi
+ state: screen_change
+ itemIconStyle: NoItem
+ event: !type:SynthDrainWiresActionEvent
diff --git a/Resources/Prototypes/_Sunrise/Body/Parts/synth.yml b/Resources/Prototypes/_Sunrise/Body/Parts/synth.yml
new file mode 100644
index 00000000000..68aaded2863
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Body/Parts/synth.yml
@@ -0,0 +1,113 @@
+- type: entity
+ id: PartSynth
+ parent: [BaseItem, BasePart]
+ name: "Synth body part"
+ abstract: true
+ components:
+ - type: Sprite
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+
+- type: entity
+ id: TorsoSynthMob
+ name: "synth torso"
+ parent: [PartSynth, BaseTorso]
+ components:
+ - type: Sprite
+ state: "torso"
+
+- type: entity
+ id: HeadSynthMob
+ name: "synth head"
+ parent: [PartSynth, BaseHead]
+ components:
+ - type: Sprite
+ state: "head"
+ - type: Tag
+ tags:
+ - Trash
+ - SynthHead
+ - BaseSynthHead
+
+- type: entity
+ id: LeftArmSynthMob
+ name: "left synth arm"
+ parent: [PartSynth, BaseLeftArm]
+ components:
+ - type: Sprite
+ state: "l_arm"
+ - type: Tag
+ tags:
+ - Trash
+ - SynthArm
+ - BaseSynthLArm
+
+- type: entity
+ id: RightArmSynthMob
+ name: "right synth arm"
+ parent: [PartSynth, BaseRightArm]
+ components:
+ - type: Sprite
+ state: "r_arm"
+ - type: Tag
+ tags:
+ - Trash
+ - SynthArm
+ - BaseSynthRArm
+
+- type: entity
+ id: LeftHandSynthMob
+ name: "left synth hand"
+ parent: [PartSynth, BaseLeftHand]
+ components:
+ - type: Sprite
+ state: "l_hand"
+
+- type: entity
+ id: RightHandSynthMob
+ name: "right synth hand"
+ parent: [PartSynth, BaseRightHand]
+ components:
+ - type: Sprite
+ state: "r_hand"
+
+- type: entity
+ id: LeftLegSynthMob
+ name: "left synth leg"
+ parent: [PartSynth, BaseLeftLeg]
+ components:
+ - type: Sprite
+ state: "l_leg"
+ - type: Tag
+ tags:
+ - Trash
+ - SynthLeg
+ - BaseSynthLLeg
+
+- type: entity
+ id: RightLegSynthMob
+ name: "right synth leg"
+ parent: [PartSynth, BaseRightLeg]
+ components:
+ - type: Sprite
+ state: "r_leg"
+ - type: Tag
+ tags:
+ - Trash
+ - SynthLeg
+ - BaseSynthRLeg
+
+- type: entity
+ id: LeftFootSynthMob
+ name: "left synth foot"
+ parent: [PartSynth, BaseLeftFoot]
+ components:
+ - type: Sprite
+ state: "l_foot"
+
+- type: entity
+ id: RightFootSynthMob
+ name: "right synth foot"
+ parent: [PartSynth, BaseRightFoot]
+ components:
+ - type: Sprite
+ state: "r_foot"
diff --git a/Resources/Prototypes/_Sunrise/Body/synth.yml b/Resources/Prototypes/_Sunrise/Body/synth.yml
new file mode 100644
index 00000000000..ee3229b7e44
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Body/synth.yml
@@ -0,0 +1,37 @@
+- type: body
+ name: "Synth"
+ id: Synth
+ root: torso
+ slots:
+ head:
+ part: HeadSynthMob
+ connections:
+ - torso
+ organs:
+ eyes: Flash
+ torso:
+ part: TorsoSynthMob
+ connections:
+ - left arm
+ - right arm
+ - left leg
+ - right leg
+ organs:
+ brain: PositronicBrain
+ powercell: PowerCellSynth
+ right arm:
+ part: RightArmSynthMob
+ connections:
+ - right hand
+ left arm:
+ part: LeftArmSynthMob
+ connections:
+ - left hand
+ right hand:
+ part: RightHandSynthMob
+ left hand:
+ part: LeftHandSynthMob
+ right leg:
+ part: RightLegSynthMob
+ left leg:
+ part: LeftLegSynthMob
diff --git a/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml b/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml
index 3e2cf07e6c3..d1fc311fe48 100644
--- a/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml
+++ b/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml
@@ -1,3 +1,13 @@
+- type: damageModifierSet
+ id: Synth
+ coefficients:
+ Blunt: 0.85
+ Slash: 0.85
+ Piercing: 0.85
+ Heat: 1
+ Shock: 1.25
+ Cold: 0.0
+
- type: damageModifierSet
id: Felinid
coefficients:
diff --git a/Resources/Prototypes/_Sunrise/Dataset/Name/synth.yml b/Resources/Prototypes/_Sunrise/Dataset/Name/synth.yml
new file mode 100644
index 00000000000..3a4908695f2
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Dataset/Name/synth.yml
@@ -0,0 +1,105 @@
+- type: dataset
+ id: names_synth
+ values:
+ - A.L.P.H.A
+ - OSI-524
+ - Ez-27
+ - H.E.L.P
+ - K.I.N.G
+ - M.I.M.I
+ - S.A.M.
+ - S.H.O.C.K.
+ - S.H.R.O.U.D.
+ - S.O.P.H.I.E.
+ - W1k1
+ - V.I.P.E.R.
+ - N3XUS
+ - P.R.O.T.E.U.S.
+ - R.A.V.E.N.
+ - X3R0
+ - I.C.E.
+ - T.E.M.P.E.S.T.
+ - B.L.A.Z.E.
+ - C.Y.B.E.R.
+ - D.R.E.A.D.
+ - E.X.O.
+ - F.L.U.X.
+ - G.A.L.A.X.Y.
+ - J.A.G.U.A.R.
+ - L.U.N.A.
+ - M.A.G.N.U.S.
+ - O.R.A.C.L.E.
+ - Q.U.A.S.A.R.
+ - U.N.I.T.
+ - O.M.E.G.A.
+ - S.I.R.E.N.
+ - A.U.R.A.
+ - N.I.G.H.T.H.A.W.K.
+ - Z.E.P.H.Y.R.
+ - E.L.I.T.E.
+ - P.H.A.N.T.O.M.
+ - O.R.B.I.T.
+ - N.E.B.U.L.A.
+ - I.R.I.S.
+ - E.C.H.O.
+ - M.A.R.V.E.L.
+ - R.E.X.
+ - S.P.E.C.T.R.E.
+ - O.R.I.O.N.
+ - A.U.G.U.S.T.U.S.
+ - T.H.U.N.D.E.R.
+ - L.E.V.I.A.T.H.A.N.
+ - V.O.R.T.E.X.
+ - H.Y.D.R.A.
+ - I.N.F.I.N.I.T.E.
+ - A.R.C.H.A.N.G.E.L.
+ - P.R.E.D.A.T.O.R.
+ - AB-12
+ - XYZ-456
+ - LMN-7890
+ - PQRS-321
+ - UVWX-9876
+ - CD-5678
+ - EF-9012
+ - GH-3456
+ - IJKL-7890
+ - MN-1234
+ - OP-5678
+ - QR-9012
+ - ST-3456
+ - UV-7890
+ - WX-1234
+ - YZ-5678
+ - ABC-9012
+ - DEF-3456
+ - GHIJ-7890
+ - KLM-1234
+ - NOP-5678
+ - QRST-9012
+ - UVW-3456
+ - XYZA-7890
+ - BCDE-1234
+ - FGHI-5678
+ - JKLMN-9012
+ - OPQR-3456
+ - STUV-7890
+ - WXYZ-1234
+ - ABCE-5678
+ - DFHI-9012
+ - JLMO-3456
+ - PQRSU-7890
+ - VWXYB-1234
+ - CDEFU-5678
+ - GHIJK-9012
+ - LMNOS-3456
+ - PQRSTU-7890
+ - VWXYZA-1234
+ - ABCDEF-5678
+ - GHIJKL-9012
+ - MNOPQR-3456
+ - STUVWX-7890
+ - XYZABC-1234
+ - DEFGHIJ-5678
+ - KLMNOPQ-9012
+ - RSTUVWX-3456
+ - YZABCD-7890
diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/synth.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/synth.yml
new file mode 100644
index 00000000000..0d448d6fb82
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/synth.yml
@@ -0,0 +1,1194 @@
+# All the synth customization
+
+#
+# Monitors
+#
+- type: marking
+ id: SynthMonitorBlue
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: blue_s
+
+- type: marking
+ id: SynthMonitorBreakout
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: breakout_s
+
+- type: marking
+ id: SynthMonitorConsole
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: console_s
+
+- type: marking
+ id: SynthMonitorCrt
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_crt
+
+- type: marking
+ id: SynthMonitorDatabase
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_database
+
+- type: marking
+ id: SynthMonitorEight
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: eight_s
+
+- type: marking
+ id: SynthMonitorFrowny
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_frowny
+
+- type: marking
+ id: SynthMonitorGoggles
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: goggles_s
+
+- type: marking
+ id: SynthMonitorGreen
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: green_s
+
+- type: marking
+ id: SynthMonitorHeart
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: heart_s
+
+- type: marking
+ id: SynthMonitorMonoeye
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: monoeye_s
+
+- type: marking
+ id: SynthMonitorNature
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: nature_s
+
+- type: marking
+ id: SynthMonitorNo
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_no
+
+- type: marking
+ id: SynthMonitorOrange
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: orange_s
+
+- type: marking
+ id: SynthMonitorPink
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: pink_s
+
+- type: marking
+ id: SynthMonitorPurple
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: purple_s
+
+- type: marking
+ id: SynthMonitorRed
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: red_s
+
+- type: marking
+ id: SynthMonitorRgb
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: rgb_s
+
+- type: marking
+ id: SynthMonitorScroll
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: scroll_s
+
+- type: marking
+ id: SynthMonitorShower
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: shower_s
+
+- type: marking
+ id: SynthMonitorSmiley
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_smiley
+
+- type: marking
+ id: SynthMonitorStars
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_stars
+
+- type: marking
+ id: SynthMonitorYellow
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: yellow_s
+
+- type: marking
+ id: SynthMonitorYes
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_yes
+
+- type: marking
+ id: SynthMonitorLumiEyes
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: lumi_eyes_s
+
+- type: marking
+ id: SynthMonitorLumiMusic
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: lumi_music_s
+
+- type: marking
+ id: SynthMonitorLumiWaiting
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: lumi_waiting_s
+
+- type: marking
+ id: SynthMonitorStatic
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: static_s
+
+- type: marking
+ id: SynthMonitorGolGlider
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: gol_glider_s
+
+- type: marking
+ id: SynthMonitorRainbow
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: rainbow_s
+
+- type: marking
+ id: SynthMonitorLumi_Waiting
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: off_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorPinkHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: pink_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorOrangeHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: orange_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorGogglesHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: goggles_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorScrollHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: scroll_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorRgbHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: rgb_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorRainbowHesp
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: rainbow_hesp_alt_s
+
+- type: marking
+ id: SynthMonitorSmoking
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: smoking_s
+
+- type: marking
+ id: SynthMonitorTest
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: test_s
+
+- type: marking
+ id: SynthMonitorOff
+ bodyPart: Snout
+ markingCategory: Snout
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_monitors.rsi
+ state: ipc_off
+
+- type: marking
+ id: SynthAntennae
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: antennae_s
+
+- type: marking
+ id: SynthTvAntennae
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: tvantennae_s
+
+- type: marking
+ id: SynthTesla
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: tesla_s
+
+- type: marking
+ id: SynthLight
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: light_s
+
+- type: marking
+ id: SynthCyberHead
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: cyberhead_s
+
+- type: marking
+ id: SynthSideLights
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: sidelights_s
+
+- type: marking
+ id: SynthAntlers
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: antlers_s
+
+- type: marking
+ id: SynthDroneEyes
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: droneeyes_s
+
+- type: marking
+ id: SynthCrowned
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_accessories.rsi
+ state: crowned_s
+
+- type: marking
+ id: SynthLArmBishop
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandBishop
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmBishop
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandBishop
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegBishop
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegBishop
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootBishop
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootBishop
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestBishop
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadBishop
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_bishop.rsi
+ state: head
+
+- type: marking
+ id: SynthHeadHesphiastos
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmHesphiastos
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandHesphiastos
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmHesphiastos
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandHesphiastos
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegHesphiastos
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegHesphiastos
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootHesphiastos
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootHesphiastos
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestHesphiastos
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_hesphiastos.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadShellguard
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmShellguard
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandShellguard
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmShellguard
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandShellguard
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegShellguard
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegShellguard
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootShellguard
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootShellguard
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestShellguard
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_shellguard.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadWardtakahashi
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmWardtakahashi
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandWardtakahashi
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmWardtakahashi
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandWardtakahashi
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegWardtakahashi
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegWardtakahashi
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootWardtakahashi
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootWardtakahashi
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestWardtakahashi
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_wardtakahashi.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadXion
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmXion
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandXion
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmXion
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandXion
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegXion
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegXion
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootXion
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootXion
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestXion
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_xion.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadZenghu
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmZenghu
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandZenghu
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmZenghu
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandZenghu
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegZenghu
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegZenghu
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootZenghu
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootZenghu
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestZenghu
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_zenghu.rsi
+ state: torso
+
+- type: marking
+ id: SynthHeadRobotic
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: head
+
+- type: marking
+ id: SynthLArmRobotic
+ bodyPart: LArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: l_arm
+
+- type: marking
+ id: SynthLHandRobotic
+ bodyPart: LHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: l_hand
+
+- type: marking
+ id: SynthRArmRobotic
+ bodyPart: RArm
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: r_arm
+
+- type: marking
+ id: SynthRHandRobotic
+ bodyPart: RHand
+ markingCategory: Arms
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: r_hand
+
+- type: marking
+ id: SynthRLegRobotic
+ bodyPart: RLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: r_leg
+
+- type: marking
+ id: SynthLLegRobotic
+ bodyPart: LLeg
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: l_leg
+
+- type: marking
+ id: SynthLFootRobotic
+ bodyPart: LFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: l_foot
+
+- type: marking
+ id: SynthRFootRobotic
+ bodyPart: RFoot
+ markingCategory: Legs
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: r_foot
+
+- type: marking
+ id: SynthChestRobotic
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Synth ]
+ forcedColoring: true
+ sprites:
+ - sprite: _Sunrise/Mobs/Customization/synth_robotic.rsi
+ state: torso
diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Player/synth.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Player/synth.yml
new file mode 100644
index 00000000000..2e49ec6c79f
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Player/synth.yml
@@ -0,0 +1,35 @@
+- type: entity
+ save: false
+ name: Urist McSynth
+ parent: BaseMobSynth
+ id: MobSynth
+ components:
+ - type: ZombieImmune
+ - type: InteractionPopup
+ successChance: 1
+ interactSuccessString: hugging-success-generic
+ interactSuccessSound: /Audio/Effects/thudswoosh.ogg
+ messagePerceivedByOthers: hugging-success-generic-others
+ - type: MindContainer
+ showExamineInfo: true
+ - type: Input
+ context: "human"
+ - type: MobMover
+ - type: InputMover
+ - type: Alerts
+ - type: Climbing
+ - type: Eye
+ - type: CameraRecoil
+ - type: Examiner
+ - type: NpcFactionMember
+ factions:
+ - NanoTrasen
+ - type: ContainerFill
+ containers:
+ synth_brain:
+ - PositronicBrain
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ startingItem: PowerCellMedium
\ No newline at end of file
diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml
new file mode 100644
index 00000000000..9b4b4e25119
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml
@@ -0,0 +1,443 @@
+# Anything human specific (e.g. UI, input) goes under MobHuman
+- type: entity
+ name: Urist McSynth
+ id: BaseMobSynth
+ parent:
+ - BaseMob
+ - MobDamageable
+ - MobCombat
+ - MobBloodstream
+ abstract: true
+ components:
+ - type: Respirator
+ damage:
+ types:
+ Asphyxiation: 0
+ damageRecovery:
+ types:
+ Asphyxiation: -0
+ - type: RespiratorImmunity
+ - type: SSDIndicator
+ - type: DamageForceSay
+ - type: CanHostGuardian
+ - type: LagCompensation
+ - type: Reflect
+ enabled: false
+ reflectProb: 0
+ - type: RangedDamageSound
+ soundGroups:
+ Brute:
+ collection:
+ MeatBulletImpact
+ soundTypes:
+ Heat:
+ collection:
+ MeatLaserImpact
+ - type: Tag
+ tags:
+ - CanPilot
+ - FootstepSound
+ - DoorBumpOpener
+ - type: Reactive
+ groups:
+ Flammable: [ Touch ]
+ Extinguish: [ Touch ]
+ Acidic: [Touch]
+ reactions:
+ - reagents: [Water, SpaceCleaner]
+ methods: [Touch]
+ effects:
+ - !type:WashCreamPieReaction
+ - type: Barotrauma
+ damage:
+ types:
+ Blunt: 0.30
+ - type: Identity
+ - type: ComplexInteraction
+ - type: Hands
+ - type: MovementSpeedModifier
+ - type: MovedByPressure
+ - type: DamageOnHighSpeedImpact
+ damage:
+ types:
+ Blunt: 5
+ soundHit:
+ path: /Audio/Effects/hit_kick.ogg
+ - type: IdExaminable
+ - type: HealthExaminable
+ examinableTypes:
+ - Blunt
+ - Slash
+ - Piercing
+ - Heat
+ - Shock
+ - type: StatusIcon
+ - type: StatusEffects
+ allowed:
+ - Stun
+ - KnockedDown
+ - SlowedDown
+ - Stutter
+ - Electrocution
+ - SlurredSpeech
+ - RatvarianLanguage
+ - PressureImmunity
+ - TemporaryBlindness
+ - type: Blindable
+ # Other
+ - type: Inventory
+ templateId: synth
+ - type: InventorySlots
+ - type: Clickable
+ - type: InteractionOutline
+ - type: Icon
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: full
+ - type: Stamina
+ - type: Sprite
+ noRot: true
+ drawdepth: Mobs
+ layers:
+ - map: [ "enum.HumanoidVisualLayers.Chest" ]
+ - map: [ "enum.HumanoidVisualLayers.Head" ]
+ - map: [ "enum.HumanoidVisualLayers.Snout" ]
+ - map: [ "enum.HumanoidVisualLayers.Eyes" ]
+ - map: [ "enum.HumanoidVisualLayers.RArm" ]
+ - map: [ "enum.HumanoidVisualLayers.LArm" ]
+ - map: [ "enum.HumanoidVisualLayers.RLeg" ]
+ - map: [ "enum.HumanoidVisualLayers.LLeg" ]
+ - shader: StencilClear
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: l_leg
+ - shader: StencilMask
+ map: ["enum.HumanoidVisualLayers.StencilMask"]
+ sprite: Mobs/Customization/masking_helpers.rsi
+ state: unisex_full
+ visible: false
+ - map: ["jumpsuit"]
+ - map: ["enum.HumanoidVisualLayers.LFoot"]
+ - map: ["enum.HumanoidVisualLayers.RFoot"]
+ - map: ["enum.HumanoidVisualLayers.LHand"]
+ - map: ["enum.HumanoidVisualLayers.RHand"]
+ - map: ["enum.HumanoidVisualLayers.Handcuffs"]
+ color: "#ffffff"
+ sprite: Objects/Misc/handcuffs.rsi
+ state: body-overlay-2
+ visible: false
+ - map: [ "id" ]
+ - map: [ "gloves" ]
+ - map: [ "shoes" ]
+ - map: [ "ears" ]
+ - map: [ "outerClothing" ]
+ - map: [ "eyes" ]
+ - map: [ "belt" ]
+ - map: [ "neck" ]
+ - map: [ "back" ]
+ - map: [ "enum.HumanoidVisualLayers.FacialHair" ]
+ - map: [ "enum.HumanoidVisualLayers.Hair" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadSide" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadTop" ]
+ - map: [ "enum.HumanoidVisualLayers.Tail" ]
+ - map: [ "mask" ]
+ - map: [ "head" ]
+ - map: [ "pocket1" ]
+ - map: [ "pocket2" ]
+ - map: [ "clownedon" ] # Dynamically generated
+ sprite: "Effects/creampie.rsi"
+ state: "creampie_human"
+ visible: false
+ - type: Physics
+ bodyType: KinematicController
+ - type: Fixtures
+ fixtures: # TODO: This needs a second fixture just for mob collisions.
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.35
+ density: 185
+ restitution: 0.0
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
+ - type: Flammable
+ fireSpread: true
+ canResistFire: true
+ damage:
+ types:
+ Heat: 1 #per second, scales with number of fire 'stacks'
+ - type: Temperature
+ heatDamageThreshold: 1000
+ coldDamageThreshold: 0
+ currentTemperature: 310.15
+ specificHeat: 42
+ coldDamage:
+ types:
+ Cold: 0
+ heatDamage:
+ types:
+ Heat: 1 #per second, scales with temperature & other constants
+ - type: HumanoidAppearance
+ species: Synth
+ - type: Body
+ prototype: Synth
+ requiredLegs: 2
+ - type: DamageVisuals
+ thresholds: [ 10, 20, 30, 50, 70, 100 ]
+ targetLayers:
+ - "enum.HumanoidVisualLayers.Chest"
+ - "enum.HumanoidVisualLayers.Head"
+ - "enum.HumanoidVisualLayers.LArm"
+ - "enum.HumanoidVisualLayers.LLeg"
+ - "enum.HumanoidVisualLayers.RArm"
+ - "enum.HumanoidVisualLayers.RLeg"
+ damageOverlayGroups:
+ Brute:
+ sprite: Mobs/Effects/brute_damage.rsi
+ color: "#E88017"
+ - type: Damageable
+ damageContainer: Synth
+ damageModifierSet: Synth
+ - type: RadiationReceiver
+ - type: Internals
+ - type: MobState
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 200: Dead
+ allowRevives: true
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTypeTrigger
+ damageType: Blunt
+ damage: 400
+ behaviors:
+ - !type:GibBehavior { }
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 60: 0.7
+ 80: 0.5
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.CreamPiedVisuals.Creamed:
+ clownedon: # Not 'creampied' bc I can already see Skyrat complaining about conflicts.
+ True: {visible: true}
+ False: {visible: false}
+ - type: RotationVisuals
+ defaultRotation: 90
+ horizontalRotation: 90
+ - type: FloatingVisuals
+ - type: FireVisuals
+ sprite: Mobs/Effects/onfire.rsi
+ normalState: Generic_mob_burning
+ alternateState: Standing
+ fireStackAlternateState: 3
+ - type: CombatMode
+ canDisarm: true
+ - type: Climbing
+ - type: Cuffable
+ - type: Ensnareable
+ sprite: Objects/Misc/ensnare.rsi
+ state: icon
+ - type: AnimationPlayer
+ - type: Buckle
+ - type: MeleeWeapon
+ soundHit:
+ collection: Punch
+ angle: 30
+ animation: WeaponArcFist
+ attackRate: 1
+ damage:
+ types:
+ Blunt: 8
+ - type: Pullable
+ - type: DoAfter
+ - type: CreamPied
+ - type: Stripping
+ - type: Strippable
+ - type: Bloodstream
+ maxBleedAmount: 0
+ chemicalMaxVolume: 0
+ bloodReagent: MotorOil
+ bloodlossDamage: #no bloodloss damage. overriding base components
+ types:
+ Bloodloss: 0
+ bloodlossHealDamage:
+ types:
+ Bloodloss: 0
+ - type: UserInterface
+ interfaces:
+ enum.VoiceMaskUIKey.Key:
+ type: VoiceMaskBoundUserInterface
+ enum.HumanoidMarkingModifierKey.Key:
+ type: HumanoidMarkingModifierBoundUserInterface
+ enum.BorgUiKey.Key:
+ type: BorgBoundUserInterface
+ enum.StrippingUiKey.Key:
+ type: StrippableBoundUserInterface
+ enum.SynthScreenUiKey.Key:
+ type: SynthMonitorBoundUserInterface
+ - type: ActivatableUI
+ key: enum.BorgUiKey.Key
+ - type: BorgChassis
+ brainContainerId: "synth_brain"
+ - type: LockingWhitelist
+ blacklist:
+ components:
+ - BorgChassis
+ - RoboticsConsole
+ - type: WiresPanel
+ - type: ActivatableUIRequiresPanel
+ - type: ContainerContainer
+ containers:
+ synth_brain: !type:ContainerSlot { }
+ cell_slot: !type:ContainerSlot { }
+ borg_module: !type:Container { }
+ part-container: !type:Container
+ - type: PowerCellSlot
+ cellSlotId: cell_slot
+ fitsInCharger: true
+ - type: PowerCellDraw
+ drawRate: 0.6
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ - type: Puller
+ - type: Speech
+ speechSounds: Bass
+ - type: Vocal
+ sounds:
+ Male: UnisexSynth
+ Female: UnisexSynth
+ Unsexed: UnisexSynth
+ - type: Emoting
+ - type: BodyEmotes
+ soundsId: GeneralBodyEmotes
+ - type: Grammar
+ attributes:
+ proper: true
+ - type: StandingState
+ - type: MobPrice
+ price: 2500 # Kidnapping a living person and selling them for cred is a good move.
+ deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less.
+ - type: TTS # Sunrise-TTS
+ - type: ContentEye
+ - type: Carriable # Sunrise-edit
+ - type: CanEscapeInventory # Sunrise-edit
+ - type: TypingIndicator
+ proto: robot
+ - type: Unrevivable
+ - type: Synth
+ - type: Repairable
+ doAfterDelay: 3
+ selfRepairPenalty: 3
+ damage:
+ types:
+ Blunt: -5
+ Slash: -5
+ Piercing: -5
+ - type: EyeProtection
+
+- type: entity
+ name: Urist McSynth
+ id: MobSynthDummy
+ parent: MobHumanDummy
+ noSpawn: true
+ components:
+ - type: Hands
+ - type: Inventory
+ templateId: synth
+ - type: InventorySlots
+ - type: ContainerContainer
+ - type: Icon
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: full
+ - type: Sprite
+ drawdepth: Mobs
+ noRot: true
+ # TODO BODY Turn these into individual body parts?
+ layers:
+ - map: [ "enum.HumanoidVisualLayers.Chest" ]
+ - map: [ "enum.HumanoidVisualLayers.Head" ]
+ - map: [ "enum.HumanoidVisualLayers.Snout" ]
+ - map: [ "enum.HumanoidVisualLayers.Eyes" ]
+ - map: [ "enum.HumanoidVisualLayers.RArm" ]
+ - map: [ "enum.HumanoidVisualLayers.LArm" ]
+ - map: [ "enum.HumanoidVisualLayers.RLeg" ]
+ - map: [ "enum.HumanoidVisualLayers.LLeg" ]
+ - shader: StencilClear
+ sprite: Mobs/Species/Human/parts.rsi
+ state: l_leg
+ - shader: StencilMask
+ map: ["enum.HumanoidVisualLayers.StencilMask"]
+ sprite: Mobs/Customization/masking_helpers.rsi
+ state: unisex_full
+ visible: false
+ - map: ["jumpsuit"]
+ - map: ["enum.HumanoidVisualLayers.LFoot"]
+ - map: ["enum.HumanoidVisualLayers.RFoot"]
+ - map: ["enum.HumanoidVisualLayers.LHand"]
+ - map: ["enum.HumanoidVisualLayers.RHand"]
+ - map: ["enum.HumanoidVisualLayers.Handcuffs"]
+ color: "#ffffff"
+ sprite: Objects/Misc/handcuffs.rsi
+ state: body-overlay-2
+ visible: false
+ - map: [ "id" ]
+ - map: [ "gloves" ]
+ - map: [ "shoes" ]
+ - map: [ "ears" ]
+ - map: [ "outerClothing" ]
+ - map: [ "eyes" ]
+ - map: [ "belt" ]
+ - map: [ "neck" ]
+ - map: [ "back" ]
+ - map: [ "enum.HumanoidVisualLayers.FacialHair" ]
+ - map: [ "enum.HumanoidVisualLayers.Hair" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadSide" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadTop" ]
+ - map: [ "enum.HumanoidVisualLayers.Tail" ]
+ - map: [ "mask" ]
+ - map: [ "head" ]
+ - map: [ "pocket1" ]
+ - map: [ "pocket2" ]
+ - type: Physics
+ bodyType: Dynamic
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.35,-0.35,0.35,0.35"
+ density: 185
+ restitution: 0.0
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
+ - type: HumanoidAppearance
+ species: Synth
+ - type: Body
+ prototype: Synth
+ requiredLegs: 2
+ - type: Appearance
+ - type: Damageable
+ damageContainer: Synth
+ damageModifierSet: Synth
+ - type: MobState
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 200: Dead
+ allowRevives: true
+ - type: UserInterface
+ interfaces:
+ enum.HumanoidMarkingModifierKey.Key:
+ type: HumanoidMarkingModifierBoundUserInterface
+ - type: ContentEye
+
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_battery.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_battery.yml
new file mode 100644
index 00000000000..afc76f020aa
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_battery.yml
@@ -0,0 +1,19 @@
+- type: entity
+ name: synth power cell
+ description: A rechargeable standardized power cell. This premium brand stores up to 50% more energy than the competition.
+ id: PowerCellSynth
+ suffix: Full
+ parent: BasePowerCell
+ components:
+ - type: Sprite
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: high
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ - type: Battery
+ maxCharge: 1080
+ startingCharge: 1080
+ - type: Organ
+ - type: EmpImmune
diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_chassis.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_chassis.yml
new file mode 100644
index 00000000000..191988fd4cd
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Specific/Robotics/synth_chassis.yml
@@ -0,0 +1,75 @@
+- type: entity
+ id: SynthChassis
+ name: Integrated Robotic Chassis
+ description: A frame that machines are built on. Significantly less spooky than expected.
+ components:
+ - type: Clickable
+ - type: InteractionOutline
+ - type: Physics
+ bodyType: Dynamic
+ fixedRotation: false
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.25,0.25,0.25"
+ density: 100
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
+ restitution: 0.3
+ friction: 0.2
+ - type: Sprite
+ noRot: true
+ drawdepth: Items
+ sprite: _Sunrise/Objects/Specific/Robotics/synth_parts.rsi
+ state: chest
+ - type: Appearance
+ - type: ItemMapper
+ sprite: _Sunrise/Objects/Specific/Robotics/synth_parts.rsi
+ mapLayers:
+ l_arm+o:
+ whitelist:
+ tags:
+ - BaseSynthLArm
+ r_arm+o:
+ whitelist:
+ tags:
+ - BaseSynthRArm
+ l_leg+o:
+ whitelist:
+ tags:
+ - BaseSynthLLeg
+ r_leg+o:
+ whitelist:
+ tags:
+ - BaseSynthRLeg
+ head+o:
+ whitelist:
+ tags:
+ - BaseSynthHead
+ - type: ContainerContainer
+ containers:
+ part-container: !type:Container
+ cell_slot: !type:Container
+ - type: PartAssembly
+ parts:
+ synth:
+ - BaseSynthLArm
+ - BaseSynthRArm
+ - BaseSynthLLeg
+ - BaseSynthRLeg
+ - BaseSynthHead
+ - type: Construction
+ graph: Synth
+ node: start
+ defaultTarget: synth
+ containers:
+ - part-container
+ - cell_slot
+ - type: Pullable
+ - type: GuideHelp
+ guides:
+ - Cyborgs
\ No newline at end of file
diff --git a/Resources/Prototypes/_Sunrise/InventoryTemplates/synth_inventory_template.yml b/Resources/Prototypes/_Sunrise/InventoryTemplates/synth_inventory_template.yml
new file mode 100644
index 00000000000..1bc1529643e
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/InventoryTemplates/synth_inventory_template.yml
@@ -0,0 +1,118 @@
+- type: inventoryTemplate
+ id: synth
+ slots:
+ - name: shoes
+ slotTexture: shoes
+ slotFlags: FEET
+ stripTime: 3
+ uiWindowPos: 1,0
+ strippingWindowPos: 1,3
+ displayName: Shoes
+ - name: jumpsuit
+ slotTexture: uniform
+ slotFlags: INNERCLOTHING
+ stripTime: 6
+ uiWindowPos: 0,1
+ strippingWindowPos: 0,2
+ displayName: Jumpsuit
+ - name: outerClothing
+ slotTexture: suit
+ slotFlags: OUTERCLOTHING
+ stripTime: 6
+ uiWindowPos: 1,1
+ strippingWindowPos: 1,2
+ displayName: Suit
+ - name: gloves
+ slotTexture: gloves
+ slotFlags: GLOVES
+ uiWindowPos: 2,1
+ strippingWindowPos: 2,2
+ displayName: Gloves
+ - name: neck
+ slotTexture: neck
+ slotFlags: NECK
+ uiWindowPos: 0,2
+ strippingWindowPos: 0,1
+ displayName: Neck
+ - name: mask
+ slotTexture: mask
+ slotFlags: MASK
+ uiWindowPos: 1,2
+ strippingWindowPos: 1,1
+ displayName: Mask
+ - name: eyes
+ slotTexture: glasses
+ slotFlags: EYES
+ stripTime: 3
+ uiWindowPos: 0,3
+ strippingWindowPos: 0,0
+ displayName: Eyes
+ - name: ears
+ slotTexture: ears
+ slotFlags: EARS
+ stripTime: 3
+ uiWindowPos: 2,2
+ strippingWindowPos: 2,0
+ displayName: Ears
+ - name: head
+ slotTexture: head
+ slotFlags: HEAD
+ uiWindowPos: 1,3
+ strippingWindowPos: 1,0
+ displayName: Head
+ - name: pocket1
+ slotTexture: pocket
+ slotFlags: POCKET
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 0,3
+ strippingWindowPos: 0,4
+ dependsOn: jumpsuit
+ displayName: Pocket 1
+ stripHidden: true
+ - name: pocket2
+ slotTexture: pocket
+ slotFlags: POCKET
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 2,3
+ strippingWindowPos: 1,4
+ dependsOn: jumpsuit
+ displayName: Pocket 2
+ stripHidden: true
+ - name: suitstorage
+ slotTexture: suit_storage
+ slotFlags: SUITSTORAGE
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 2,0
+ strippingWindowPos: 2,5
+ dependsOn: outerClothing
+ dependsOnComponents:
+ - type: AllowSuitStorage
+ displayName: Suit Storage
+ - name: id
+ slotTexture: id
+ slotFlags: IDCARD
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 2,1
+ strippingWindowPos: 2,4
+ dependsOn: jumpsuit
+ displayName: ID
+ - name: belt
+ slotTexture: belt
+ slotFlags: BELT
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 3,1
+ strippingWindowPos: 1,5
+ displayName: Belt
+ - name: back
+ slotTexture: back
+ slotFlags: BACK
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 3,0
+ strippingWindowPos: 0,5
+ displayName: Back
diff --git a/Resources/Prototypes/_Sunrise/Loadouts/Miscellaneous/survival.yml b/Resources/Prototypes/_Sunrise/Loadouts/Miscellaneous/survival.yml
index c0b5919fe82..bcbfdcef73e 100644
--- a/Resources/Prototypes/_Sunrise/Loadouts/Miscellaneous/survival.yml
+++ b/Resources/Prototypes/_Sunrise/Loadouts/Miscellaneous/survival.yml
@@ -1,3 +1,96 @@
+# SYNTH
+
+- type: loadoutEffectGroup
+ id: Synth
+ effects:
+ - !type:SpeciesLoadoutEffect
+ species:
+ - Synth
+
+# Basic
+- type: loadout
+ id: EmergencySynth
+ startingGear: EmergencySynth
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynth
+ storage:
+ back:
+ - BoxRepairSynth
+
+# Clown
+- type: loadout
+ id: EmergencySynthClown
+ startingGear: EmergencySynthClown
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynthClown
+ storage:
+ back:
+ - BoxHugSynth
+
+# Engineering / Extended
+- type: loadout
+ id: EmergencySynthExtended
+ startingGear: EmergencySynthExtended
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynthExtended
+ storage:
+ back:
+ - BoxRepairSynth
+
+# Medical
+- type: loadout
+ id: EmergencySynthMedical
+ startingGear: EmergencySynthMedical
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynthMedical
+ storage:
+ back:
+ - BoxRepairSynth
+
+# Security
+- type: loadout
+ id: EmergencySynthSecurity
+ startingGear: EmergencySynthSecurity
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynthSecurity
+ storage:
+ back:
+ - BoxRepairSecurity
+
+# Syndicate
+- type: loadout
+ id: EmergencySynthSyndicate
+ startingGear: EmergencySynthSyndicate
+ effects:
+ - !type:GroupLoadoutEffect
+ proto: Synth
+
+- type: startingGear
+ id: EmergencySynthSyndicate
+ storage:
+ back:
+ - BoxRepairSyndicate
+
# Without Gas
- type: loadoutEffectGroup
diff --git a/Resources/Prototypes/_Sunrise/Recipes/Construction/Graphs/machines/synth.yml b/Resources/Prototypes/_Sunrise/Recipes/Construction/Graphs/machines/synth.yml
new file mode 100644
index 00000000000..f48d3976776
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Recipes/Construction/Graphs/machines/synth.yml
@@ -0,0 +1,48 @@
+- type: constructionGraph
+ id: Synth
+ start: start
+ graph:
+ - node: start
+ entity: SynthChassis
+ edges:
+
+ # empty the parts via prying
+ - to: start
+ conditions:
+ - !type:ContainerNotEmpty
+ container: part-container
+ steps:
+ - tool: Prying
+ doAfter: 0.5
+ completed:
+ - !type:EmptyAllContainers
+
+ - to: synth
+ steps:
+ - assemblyId: synth
+ guideString: borg-construction-guide-string
+
+ - material: Cable
+ amount: 1
+ doAfter: 1
+ store: part-container
+
+ - component: Flash
+ name: flash
+ store: part-container
+ icon:
+ sprite: Objects/Weapons/Melee/flash.rsi
+ state: flash
+
+ - component: Flash
+ name: second flash
+ store: part-container
+ icon:
+ sprite: Objects/Weapons/Melee/flash.rsi
+ state: flash
+
+ - tool: Screwing
+ doAfter: 0.5
+
+ - node: synth
+ entity: MobSynthDummy
\ No newline at end of file
diff --git a/Resources/Prototypes/_Sunrise/SoundCollections/synth.yml b/Resources/Prototypes/_Sunrise/SoundCollections/synth.yml
new file mode 100644
index 00000000000..f9f30fb981d
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/SoundCollections/synth.yml
@@ -0,0 +1,28 @@
+- type: soundCollection
+ id: FootstepRobotLegs
+ files:
+ - /Audio/_Sunrise/Synth/robot_legs1.ogg
+ - /Audio/_Sunrise/Synth/robot_legs2.ogg
+ - /Audio/_Sunrise/Synth/robot_legs3.ogg
+ - /Audio/_Sunrise/Synth/robot_legs4.ogg
+
+- type: soundCollection
+ id: FootstepRobotSpider
+ files:
+ - /Audio/_Sunrise/Synth/robot_spider1.ogg
+ - /Audio/_Sunrise/Synth/robot_spider2.ogg
+ - /Audio/_Sunrise/Synth/robot_spider3.ogg
+
+- type: soundCollection
+ id: SynthScreams
+ files:
+ - /Audio/_Sunrise/Synth/robot_scream_1.ogg
+ - /Audio/_Sunrise/Synth/robot_scream_2.ogg
+ - /Audio/_Sunrise/Synth/robot_scream_3.ogg
+ - /Audio/_Sunrise/Synth/robot_scream_4.ogg
+
+- type: soundCollection
+ id: Footstep2RobotLegs
+ files:
+ - /Audio/_Sunrise/Synth/robot_legs_2_1.ogg
+ - /Audio/_Sunrise/Synth/robot_legs_2_2.ogg
diff --git a/Resources/Prototypes/_Sunrise/Species/synth.yml b/Resources/Prototypes/_Sunrise/Species/synth.yml
new file mode 100644
index 00000000000..272088cd726
--- /dev/null
+++ b/Resources/Prototypes/_Sunrise/Species/synth.yml
@@ -0,0 +1,154 @@
+- type: species
+ id: Synth
+ name: species-name-synth
+ roundStart: true
+ prototype: MobSynth
+ sprites: MobSynthSprites
+ markingLimits: MobSynthMarkingLimits
+ dollPrototype: MobSynthDummy
+ skinColoration: None
+ youngAge: 1500
+ oldAge: 4000
+ maxAge: 4500
+ naming: OnlyFirst
+ sexes:
+ - Unsexed
+ maleFirstNames: names_synth
+ femaleFirstNames: names_synth
+
+# The lack of a layer means that
+# this person cannot have round-start anything
+# applied to that layer. It has to instead
+# be defined as a 'custom base layer'
+# in either the mob's starting marking prototype,
+# or it has to be added in C#.
+- type: speciesBaseSprites
+ id: MobSynthSprites
+ sprites:
+ HeadTop: MobHumanoidAnyMarking
+ Snout: MobHumanoidAnyMarking
+ Head: MobSynthHead
+ Chest: MobSynthTorso
+ LArm: MobSynthLArm
+ RArm: MobSynthRArm
+ LHand: MobSynthLHand
+ RHand: MobSynthRHand
+ LLeg: MobSynthLLeg
+ RLeg: MobSynthRLeg
+ LFoot: MobSynthLFoot
+ RFoot: MobSynthRFoot
+
+- type: markingPoints
+ id: MobSynthMarkingLimits
+ onlyWhitelisted: true
+ points:
+ Head:
+ points: 1
+ required: false
+ HeadTop:
+ points: 1
+ required: false
+ Snout:
+ points: 1
+ required: true
+ defaultMarkings: [ SynthMonitorOff ]
+ Chest:
+ points: 1
+ required: false
+ Legs:
+ points: 4
+ required: false
+ Arms:
+ points: 4
+ required: false
+
+- type: humanoidBaseSprite
+ id: MobSynthoidAnyMarking
+
+- type: humanoidBaseSprite
+ id: MobSynthoidMarkingMatchSkin
+ markingsMatchSkin: true
+
+- type: humanoidBaseSprite
+ id: MobSynthHead
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobSynthHeadMale
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobSynthHeadFemale
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobSynthTorso
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: torso
+
+- type: humanoidBaseSprite
+ id: MobSynthTorsoMale
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: torso
+
+- type: humanoidBaseSprite
+ id: MobSynthTorsoFemale
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: torso
+
+- type: humanoidBaseSprite
+ id: MobSynthLLeg
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: l_leg
+
+- type: humanoidBaseSprite
+ id: MobSynthLArm
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: l_arm
+
+- type: humanoidBaseSprite
+ id: MobSynthLHand
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: l_hand
+
+- type: humanoidBaseSprite
+ id: MobSynthRLeg
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: r_leg
+
+- type: humanoidBaseSprite
+ id: MobSynthRArm
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: r_arm
+
+- type: humanoidBaseSprite
+ id: MobSynthRHand
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: r_hand
+
+- type: humanoidBaseSprite
+ id: MobSynthLFoot
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: l_foot
+
+- type: humanoidBaseSprite
+ id: MobSynthRFoot
+ baseSprite:
+ sprite: _Sunrise/Mobs/Species/Synth/parts.rsi
+ state: r_foot
diff --git a/Resources/Prototypes/_Sunrise/Voice/speech_emote_sounds.yml b/Resources/Prototypes/_Sunrise/Voice/speech_emote_sounds.yml
index 6ec79fdf025..2fab4018417 100644
--- a/Resources/Prototypes/_Sunrise/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/_Sunrise/Voice/speech_emote_sounds.yml
@@ -54,6 +54,40 @@
Growl:
collection: FelinidGrowls
+- type: emoteSounds
+ id: UnisexSynth
+ params:
+ variation: 0.125
+ sounds:
+ Scream:
+ collection: SynthScreams
+ Laugh:
+ collection: MaleLaugh
+ Sneeze:
+ collection: MaleSneezes
+ Cough:
+ collection: MaleCoughs
+ CatMeow:
+ collection: CatMeows
+ CatHisses:
+ collection: CatHisses
+ MonkeyScreeches:
+ collection: MonkeyScreeches
+ RobotBeep:
+ collection: RobotBeeps
+ Yawn:
+ collection: MaleYawn
+ Snore:
+ collection: Snores
+ Honk:
+ collection: BikeHorn
+ Sigh:
+ collection: MaleSigh
+ Crying:
+ collection: MaleCry
+ Whistle:
+ collection: Whistles
+
- type: emoteSounds
id: MaleVulpkanin
params:
diff --git a/Resources/Prototypes/_Sunrise/tags.yml b/Resources/Prototypes/_Sunrise/tags.yml
index bd04ca02e49..d53081f9fbd 100644
--- a/Resources/Prototypes/_Sunrise/tags.yml
+++ b/Resources/Prototypes/_Sunrise/tags.yml
@@ -184,3 +184,29 @@
- type: Tag
id: Phazon
+
+# Synth:
+
+- type: Tag
+ id: SynthArm
+
+- type: Tag
+ id: BaseSynthLArm
+
+- type: Tag
+ id: BaseSynthRArm
+
+- type: Tag
+ id: SynthLeg
+
+- type: Tag
+ id: BaseSynthLLeg
+
+- type: Tag
+ id: BaseSynthRLeg
+
+- type: Tag
+ id: SynthHead
+
+- type: Tag
+ id: BaseSynthHead
diff --git a/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/meta.json b/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/meta.json
new file mode 100644
index 00000000000..cb00758fcb2
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/meta.json
@@ -0,0 +1,21 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sunrise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "screen_change",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/screen_change.png b/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/screen_change.png
new file mode 100644
index 00000000000..49e86d9234c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Actions/synth_actions.rsi/screen_change.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antennae_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antennae_s.png
new file mode 100644
index 00000000000..65f3f09b905
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antennae_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antlers_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antlers_s.png
new file mode 100644
index 00000000000..32e27664c3d
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/antlers_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/crowned_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/crowned_s.png
new file mode 100644
index 00000000000..01485b72237
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/crowned_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/cyberhead_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/cyberhead_s.png
new file mode 100644
index 00000000000..b0dcb26c59a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/cyberhead_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/droneeyes_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/droneeyes_s.png
new file mode 100644
index 00000000000..cb201254e08
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/droneeyes_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/light_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/light_s.png
new file mode 100644
index 00000000000..3b387ff68b4
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/light_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/meta.json
new file mode 100644
index 00000000000..cd1d992e334
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/meta.json
@@ -0,0 +1,103 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "antennae_s",
+ "directions": 4
+ },
+ {
+ "name": "tvantennae_s",
+ "directions": 4
+ },
+ {
+ "name": "tesla_s",
+ "directions": 4,
+ "delays": [
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "light_s",
+ "directions": 4,
+ "delays": [
+ [
+ 4,
+ 0.5,
+ 0.1,
+ 0.5
+ ],
+ [
+ 4,
+ 0.5,
+ 0.1,
+ 0.5
+ ],
+ [
+ 4,
+ 0.5,
+ 0.1,
+ 0.5
+ ],
+ [
+ 4,
+ 0.5,
+ 0.1,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "cyberhead_s",
+ "directions": 4
+ },
+ {
+ "name": "sidelights_s",
+ "directions": 4
+ },
+ {
+ "name": "antlers_s",
+ "directions": 4
+ },
+ {
+ "name": "droneeyes_s",
+ "directions": 4
+ },
+ {
+ "name": "crowned_s",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/sidelights_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/sidelights_s.png
new file mode 100644
index 00000000000..c3c9e209375
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/sidelights_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tesla_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tesla_s.png
new file mode 100644
index 00000000000..5d3d0518f2a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tesla_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tvantennae_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tvantennae_s.png
new file mode 100644
index 00000000000..b49957a1913
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_accessories.rsi/tvantennae_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/groin.png
new file mode 100644
index 00000000000..75d9dc8ad2c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/head.png
new file mode 100644
index 00000000000..0a9e82e9627
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_arm.png
new file mode 100644
index 00000000000..167d49d9632
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_foot.png
new file mode 100644
index 00000000000..534085a97c3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_hand.png
new file mode 100644
index 00000000000..771cd025a86
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_leg.png
new file mode 100644
index 00000000000..f2e20e9eb9f
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/meta.json
new file mode 100644
index 00000000000..0bd8b8e109a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_arm.png
new file mode 100644
index 00000000000..bbf9c06e5af
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_foot.png
new file mode 100644
index 00000000000..a8fbe8635ea
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_hand.png
new file mode 100644
index 00000000000..db11be34056
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_leg.png
new file mode 100644
index 00000000000..6d10570d017
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/torso.png
new file mode 100644
index 00000000000..639ed72238b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_bishop.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/groin.png
new file mode 100644
index 00000000000..c2baf19dd1d
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/head.png
new file mode 100644
index 00000000000..b8962894f28
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_arm.png
new file mode 100644
index 00000000000..95802e8b660
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_foot.png
new file mode 100644
index 00000000000..4fae303dd55
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_hand.png
new file mode 100644
index 00000000000..621c0f43be4
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_leg.png
new file mode 100644
index 00000000000..6059a7e0dd4
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/meta.json
new file mode 100644
index 00000000000..0bd8b8e109a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_arm.png
new file mode 100644
index 00000000000..61eee95ac85
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_foot.png
new file mode 100644
index 00000000000..42ede3a71e3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_hand.png
new file mode 100644
index 00000000000..9a98f4ed9b4
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_leg.png
new file mode 100644
index 00000000000..c0977f06a2b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/torso.png
new file mode 100644
index 00000000000..5d4568c960e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_hesphiastos.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/blue_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/blue_s.png
new file mode 100644
index 00000000000..2bb4a60427c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/blue_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/breakout_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/breakout_s.png
new file mode 100644
index 00000000000..d0de4901f41
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/breakout_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/console_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/console_s.png
new file mode 100644
index 00000000000..d7fa0cd0e2a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/console_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/eight_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/eight_s.png
new file mode 100644
index 00000000000..6b5057f785c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/eight_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_hesp_alt_s.png
new file mode 100644
index 00000000000..271c3ca0d18
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_s.png
new file mode 100644
index 00000000000..006c6a6c805
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/goggles_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/gol_glider_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/gol_glider_s.png
new file mode 100644
index 00000000000..5ff0a87368d
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/gol_glider_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/green_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/green_s.png
new file mode 100644
index 00000000000..072a904e54c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/green_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/heart_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/heart_s.png
new file mode 100644
index 00000000000..9ff05b7d7ab
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/heart_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_crt.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_crt.png
new file mode 100644
index 00000000000..c587410a7a5
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_crt.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_database.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_database.png
new file mode 100644
index 00000000000..c1da6681e31
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_database.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_frowny.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_frowny.png
new file mode 100644
index 00000000000..8bd3c7f9428
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_frowny.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_no.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_no.png
new file mode 100644
index 00000000000..3790d2adda4
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_no.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_off.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_off.png
new file mode 100644
index 00000000000..a7db23369e0
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_off.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_smiley.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_smiley.png
new file mode 100644
index 00000000000..08604b5a4d3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_smiley.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_stars.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_stars.png
new file mode 100644
index 00000000000..cfcd4b1a0a1
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_stars.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_yes.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_yes.png
new file mode 100644
index 00000000000..91c8be49398
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/ipc_yes.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_eyes_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_eyes_s.png
new file mode 100644
index 00000000000..46355e8c445
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_eyes_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_music_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_music_s.png
new file mode 100644
index 00000000000..b7a08c903d6
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_music_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_waiting_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_waiting_s.png
new file mode 100644
index 00000000000..194e0ef2d25
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/lumi_waiting_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/meta.json
new file mode 100644
index 00000000000..79c68efb6f8
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/meta.json
@@ -0,0 +1,1297 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "lumi_eyes_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.3,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.3,
+ 0.8,
+ 0.1,
+ 0.1,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.6,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.3,
+ 0.8,
+ 0.1,
+ 0.1,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.6,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.3,
+ 0.8,
+ 0.1,
+ 0.1,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.6,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.3,
+ 0.8,
+ 0.1,
+ 0.1,
+ 0.2,
+ 0.6,
+ 0.1,
+ 0.6,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "lumi_music_s",
+ "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,
+ 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,
+ 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,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "lumi_waiting_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "blue_s",
+ "directions": 4,
+ "delays": [
+ [
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4
+ ],
+ [
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4
+ ],
+ [
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4
+ ],
+ [
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4,
+ 2.4
+ ]
+ ]
+ },
+ {
+ "name": "breakout_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "eight_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "goggles_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ]
+ ]
+ },
+ {
+ "name": "green_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.6,
+ 0.6
+ ],
+ [
+ 0.6,
+ 0.6
+ ],
+ [
+ 0.6,
+ 0.6
+ ],
+ [
+ 0.6,
+ 0.6
+ ]
+ ]
+ },
+ {
+ "name": "heart_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "monoeye_s",
+ "directions": 4,
+ "delays": [
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "nature_s",
+ "directions": 4,
+ "delays": [
+ [
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 10,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "orange_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "pink_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "purple_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "red_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "shower_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "static_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ],
+ [
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.8
+ ]
+ ]
+ },
+ {
+ "name": "yellow_s",
+ "directions": 4,
+ "delays": [
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "scroll_s",
+ "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
+ ]
+ ]
+ },
+ {
+ "name": "console_s",
+ "directions": 4,
+ "delays": [
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "rgb_s",
+ "directions": 4,
+ "delays": [
+ [
+ 2,
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "gol_glider_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "rainbow_s",
+ "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,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "off_hesp_alt_s",
+ "directions": 4
+ },
+ {
+ "name": "pink_hesp_alt_s",
+ "directions": 4,
+ "delays": [
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 4,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "orange_hesp_alt_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "goggles_hesp_alt_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ],
+ [
+ 0.2,
+ 4
+ ]
+ ]
+ },
+ {
+ "name": "scroll_hesp_alt_s",
+ "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,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "rgb_hesp_alt_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "rainbow_hesp_alt_s",
+ "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
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "smoking_s",
+ "directions": 4,
+ "delays": [
+ [
+ 0.1,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.1,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.1,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.1,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "test_s",
+ "directions": 4
+ },
+ {
+ "name": "ipc_off",
+ "directions": 4
+ },
+ {
+ "name": "ipc_no",
+ "directions": 4,
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "ipc_frowny",
+ "directions": 4,
+ "delays": [
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "ipc_stars",
+ "directions": 4,
+ "delays": [
+ [
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "ipc_crt",
+ "directions": 4,
+ "delays": [
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "ipc_smiley",
+ "directions": 4,
+ "delays": [
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ],
+ [
+ 1.5,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "ipc_yes",
+ "directions": 4,
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ],
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "ipc_database",
+ "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
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/monoeye_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/monoeye_s.png
new file mode 100644
index 00000000000..b7c3564c6f3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/monoeye_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/nature_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/nature_s.png
new file mode 100644
index 00000000000..2aab6559cf5
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/nature_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/off_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/off_hesp_alt_s.png
new file mode 100644
index 00000000000..91a152bc6d9
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/off_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_hesp_alt_s.png
new file mode 100644
index 00000000000..70d0cce1056
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_s.png
new file mode 100644
index 00000000000..ec4ec4140dd
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/orange_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_hesp_alt_s.png
new file mode 100644
index 00000000000..596827a2f43
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_s.png
new file mode 100644
index 00000000000..31145a55a41
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/pink_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/purple_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/purple_s.png
new file mode 100644
index 00000000000..ec7c6767671
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/purple_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_hesp_alt_s.png
new file mode 100644
index 00000000000..0cdf57c6c6e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_s.png
new file mode 100644
index 00000000000..0d6f042d9fc
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rainbow_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/red_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/red_s.png
new file mode 100644
index 00000000000..955e721672b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/red_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_hesp_alt_s.png
new file mode 100644
index 00000000000..2340ebb3bdf
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_s.png
new file mode 100644
index 00000000000..bee0f564a3c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/rgb_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_hesp_alt_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_hesp_alt_s.png
new file mode 100644
index 00000000000..fe2c361bc89
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_hesp_alt_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_s.png
new file mode 100644
index 00000000000..a9fdb0a351e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/scroll_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/shower_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/shower_s.png
new file mode 100644
index 00000000000..074708133c2
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/shower_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/smoking_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/smoking_s.png
new file mode 100644
index 00000000000..200415c91b3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/smoking_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/static_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/static_s.png
new file mode 100644
index 00000000000..5d28028d04c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/static_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/test_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/test_s.png
new file mode 100644
index 00000000000..99b13a58998
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/test_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/yellow_s.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/yellow_s.png
new file mode 100644
index 00000000000..1019e038416
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_monitors.rsi/yellow_s.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/groin.png
new file mode 100644
index 00000000000..8383fc95a0e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/head.png
new file mode 100644
index 00000000000..6c5f31862fd
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_arm.png
new file mode 100644
index 00000000000..28dcd4260ca
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_foot.png
new file mode 100644
index 00000000000..5f711347776
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_hand.png
new file mode 100644
index 00000000000..5395ee3f729
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_leg.png
new file mode 100644
index 00000000000..31a740a1c47
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/meta.json
new file mode 100644
index 00000000000..3242f09a0ab
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_arm.png
new file mode 100644
index 00000000000..f795b1fa2e9
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_foot.png
new file mode 100644
index 00000000000..33570514269
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_hand.png
new file mode 100644
index 00000000000..13a9cc24151
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_leg.png
new file mode 100644
index 00000000000..cd67c9fc3df
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/torso.png
new file mode 100644
index 00000000000..2579129f78a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_robotic.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/groin.png
new file mode 100644
index 00000000000..4e3ee8c28d1
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/head.png
new file mode 100644
index 00000000000..6a786b3c682
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_arm.png
new file mode 100644
index 00000000000..e4ad541d76e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_foot.png
new file mode 100644
index 00000000000..0611383daea
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_hand.png
new file mode 100644
index 00000000000..2fcababc64f
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_leg.png
new file mode 100644
index 00000000000..3fde4860390
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/meta.json
new file mode 100644
index 00000000000..0bd8b8e109a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_arm.png
new file mode 100644
index 00000000000..f6472ae965d
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_foot.png
new file mode 100644
index 00000000000..d09da3ba435
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_hand.png
new file mode 100644
index 00000000000..6df370275fa
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_leg.png
new file mode 100644
index 00000000000..2a540a47e59
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/torso.png
new file mode 100644
index 00000000000..41c42defc59
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_shellguard.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/groin.png
new file mode 100644
index 00000000000..58591d57f3a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/head.png
new file mode 100644
index 00000000000..2acc0d12540
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_arm.png
new file mode 100644
index 00000000000..1c5f646e36e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_foot.png
new file mode 100644
index 00000000000..45d9e8e2460
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_hand.png
new file mode 100644
index 00000000000..062d14745c0
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_leg.png
new file mode 100644
index 00000000000..f120754830b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/meta.json
new file mode 100644
index 00000000000..9eea445564a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_arm.png
new file mode 100644
index 00000000000..24e15d419ad
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_foot.png
new file mode 100644
index 00000000000..f04c2fd7a64
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_hand.png
new file mode 100644
index 00000000000..287556a83a0
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_leg.png
new file mode 100644
index 00000000000..653101e63af
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/torso.png
new file mode 100644
index 00000000000..d6b0f13814e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_wardtakahashi.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/groin.png
new file mode 100644
index 00000000000..fb3ff2a0118
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/head.png
new file mode 100644
index 00000000000..4117e99c5d9
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_arm.png
new file mode 100644
index 00000000000..1e2e1f6ab5f
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_foot.png
new file mode 100644
index 00000000000..ae45a11cd7e
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_hand.png
new file mode 100644
index 00000000000..11e98bbb2ae
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_leg.png
new file mode 100644
index 00000000000..4c7d027be45
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/meta.json
new file mode 100644
index 00000000000..0bd8b8e109a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_arm.png
new file mode 100644
index 00000000000..534e7936556
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_foot.png
new file mode 100644
index 00000000000..eeaa3923b16
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_hand.png
new file mode 100644
index 00000000000..90f3911af94
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_leg.png
new file mode 100644
index 00000000000..1f2bb3530c5
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/torso.png
new file mode 100644
index 00000000000..84c478c8790
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_xion.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/groin.png
new file mode 100644
index 00000000000..f3f554ee30a
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/head.png
new file mode 100644
index 00000000000..2af78ea2d9c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_arm.png
new file mode 100644
index 00000000000..6600540aea7
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_foot.png
new file mode 100644
index 00000000000..379d47a346d
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_hand.png
new file mode 100644
index 00000000000..7872f09287c
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_leg.png
new file mode 100644
index 00000000000..688eb5e34d6
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/meta.json
new file mode 100644
index 00000000000..8725efb87c4
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_arm.png
new file mode 100644
index 00000000000..d1af4939d74
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_foot.png
new file mode 100644
index 00000000000..03be6887e69
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_hand.png
new file mode 100644
index 00000000000..90d2c7792c1
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_leg.png
new file mode 100644
index 00000000000..afaaab27fd2
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/torso.png
new file mode 100644
index 00000000000..2c372c8fc47
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Customization/synth_zenghu.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/full.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/full.png
new file mode 100644
index 00000000000..3bf951beef1
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/full.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/groin.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/groin.png
new file mode 100644
index 00000000000..1b2291693ea
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/head.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/head.png
new file mode 100644
index 00000000000..952158c6ff3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_arm.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_arm.png
new file mode 100644
index 00000000000..9813e583feb
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_foot.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_foot.png
new file mode 100644
index 00000000000..468d4f38989
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_hand.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_hand.png
new file mode 100644
index 00000000000..05df57f392f
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_leg.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_leg.png
new file mode 100644
index 00000000000..083b077b252
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/meta.json b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/meta.json
new file mode 100644
index 00000000000..04680da0ff4
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/meta.json
@@ -0,0 +1,58 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "groin",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "torso",
+ "directions": 4
+ },
+ {
+ "name": "full"
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_arm.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_arm.png
new file mode 100644
index 00000000000..27ba8e0d263
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_foot.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_foot.png
new file mode 100644
index 00000000000..e0b3dd55b59
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_hand.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_hand.png
new file mode 100644
index 00000000000..716f604b4f3
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_leg.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_leg.png
new file mode 100644
index 00000000000..59babbe716b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/torso.png b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/torso.png
new file mode 100644
index 00000000000..bcfa51232b7
Binary files /dev/null and b/Resources/Textures/_Sunrise/Mobs/Species/Synth/parts.rsi/torso.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/chest.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/chest.png
new file mode 100644
index 00000000000..321a1c3bc38
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/chest.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin+o.png
new file mode 100644
index 00000000000..d3ed78eba82
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin.png
new file mode 100644
index 00000000000..d3ed78eba82
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/groin.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head+o.png
new file mode 100644
index 00000000000..ff5880942e5
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head.png
new file mode 100644
index 00000000000..ff5880942e5
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/head.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm+o.png
new file mode 100644
index 00000000000..10997e5f337
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm.png
new file mode 100644
index 00000000000..10997e5f337
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg+o.png
new file mode 100644
index 00000000000..903a749f5ae
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg.png
new file mode 100644
index 00000000000..903a749f5ae
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/meta.json b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/meta.json
new file mode 100644
index 00000000000..9d3404be55a
--- /dev/null
+++ b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/meta.json
@@ -0,0 +1,50 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Спизжено из SS13 Paradise",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "chest"
+ },
+ {
+ "name": "groin"
+ },
+ {
+ "name": "groin+o"
+ },
+ {
+ "name": "head"
+ },
+ {
+ "name": "head+o"
+ },
+ {
+ "name": "l_arm"
+ },
+ {
+ "name": "l_arm+o"
+ },
+ {
+ "name": "r_arm"
+ },
+ {
+ "name": "r_arm+o"
+ },
+ {
+ "name": "l_leg"
+ },
+ {
+ "name": "l_leg+o"
+ },
+ {
+ "name": "r_leg"
+ },
+ {
+ "name": "r_leg+o"
+ }
+ ]
+}
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm+o.png
new file mode 100644
index 00000000000..d9c602cc651
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm.png
new file mode 100644
index 00000000000..d9c602cc651
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg+o.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg+o.png
new file mode 100644
index 00000000000..59e41c5e54b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg+o.png differ
diff --git a/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg.png b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg.png
new file mode 100644
index 00000000000..59e41c5e54b
Binary files /dev/null and b/Resources/Textures/_Sunrise/Objects/Specific/Robotics/synth_parts.rsi/r_leg.png differ