--- /dev/null
+using Content.Shared.Overlays;
+using Content.Shared.StatusIcon.Components;
+using Content.Shared.NukeOps;
+using Content.Shared.StatusIcon;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client.Overlays;
+public sealed class ShowSyndicateIconsSystem : EquipmentHudSystem<ShowSyndicateIconsComponent>
+{
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<NukeOperativeComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
+ }
+
+ private void OnGetStatusIconsEvent(EntityUid uid, NukeOperativeComponent nukeOperativeComponent, ref GetStatusIconsEvent args)
+ {
+ if (!IsActive || args.InContainer)
+ {
+ return;
+ }
+
+ var healthIcons = SyndicateIcon(uid, nukeOperativeComponent);
+
+ args.StatusIcons.AddRange(healthIcons);
+ }
+
+ private IReadOnlyList<StatusIconPrototype> SyndicateIcon(EntityUid uid, NukeOperativeComponent nukeOperativeComponent)
+ {
+ var result = new List<StatusIconPrototype>();
+
+ if (_prototype.TryIndex<StatusIconPrototype>(nukeOperativeComponent.SyndStatusIcon, out var syndicateicon))
+ {
+ result.Add(syndicateicon);
+ }
+
+ return result;
+ }
+}
+
+++ /dev/null
-using Robust.Shared.Audio;
-
-namespace Content.Server.GameTicking.Rules.Components;
-
-/// <summary>
-/// This is used for tagging a mob as a nuke operative.
-/// </summary>
-[RegisterComponent]
-public sealed partial class NukeOperativeComponent : Component
-{
- /// <summary>
- /// Path to antagonist alert sound.
- /// </summary>
- [DataField("greetSoundNotification")]
- public SoundSpecifier GreetSoundNotification = new SoundPathSpecifier("/Audio/Ambience/Antag/nukeops_start.ogg");
-}
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowSecurityIconsComponent>>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowHungerIconsComponent>>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowThirstIconsComponent>>(RelayInventoryEvent);
+ SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowSyndicateIconsComponent>>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
}
--- /dev/null
+using Robust.Shared.Audio;
+using Content.Shared.StatusIcon;
+using Robust.Shared.Prototypes;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Shared.NukeOps;
+
+/// <summary>
+/// This is used for tagging a mob as a nuke operative.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class NukeOperativeComponent : Component
+{
+ /// <summary>
+ /// Path to antagonist alert sound.
+ /// </summary>
+ [DataField("greetSoundNotification")]
+ public SoundSpecifier GreetSoundNotification = new SoundPathSpecifier("/Audio/Ambience/Antag/nukeops_start.ogg");
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataField("syndStatusIcon", customTypeSerializer: typeof(PrototypeIdSerializer<StatusIconPrototype>))]
+ public string SyndStatusIcon = "SyndicateFaction";
+}
--- /dev/null
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Overlays;
+
+/// <summary>
+///
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ShowSyndicateIconsComponent : Component {}
- id: ClothingUniformJumpsuitOperative
- id: ClothingUniformJumpskirtOperative
- id: ClothingHeadsetAltSyndicate
+ - id: ClothingEyesHudSyndicate
- type: entity
id: ClosetEmergencyFilledRandom
- type: Clothing
sprite: Clothing/Eyes/Hud/medsecengi.rsi
- type: ShowSecurityIcons
+ - type: ShowSyndicateIcons
- type: entity
parent: ClothingEyesBase
- type: ShowSecurityIcons
- type: ShowHungerIcons
- type: ShowThirstIcons
+ - type: ShowSyndicateIcons
+
+- type: entity
+ parent: ClothingEyesBase
+ id: ClothingEyesHudSyndicate
+ name: syndicate visor
+ description: The syndicate's professional head-up display, designed for better detection of humanoids and their subsequent elimination.
+ components:
+ - type: Sprite
+ sprite: Clothing/Eyes/Hud/synd.rsi
+ - type: Clothing
+ sprite: Clothing/Eyes/Hud/synd.rsi
+ - type: ShowSyndicateIcons
+ - type: ShowSecurityIcons
+
jumpsuit: ClothingUniformJumpsuitOperative
back: ClothingBackpackDuffelSyndicateOperative
mask: ClothingMaskGasSyndicate
- # eyes: Night Vision Goggles whenever they're made
- eyes: ClothingEyesGlassesMeson
+ eyes: ClothingEyesHudSyndicate
ears: ClothingHeadsetAltSyndicate
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitSyndie
jumpsuit: ClothingUniformJumpsuitOperative
back: ClothingBackpackDuffelSyndicateOperative
mask: ClothingMaskGasSyndicate
- # eyes: Night Vision Goggles whenever they're made
- eyes: ClothingEyesGlassesMeson
+ eyes: ClothingEyesHudSyndicate
ears: ClothingHeadsetAltSyndicate
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitSyndieCommander
jumpsuit: ClothingUniformJumpsuitOperative
back: ClothingBackpackDuffelSyndicateOperativeMedic
mask: ClothingMaskGasSyndicate
- eyes: ClothingEyesHudMedical
+ eyes: ClothingEyesHudSyndicate
ears: ClothingHeadsetAltSyndicate
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitMedic
icon:
sprite: Interface/Misc/job_icons.rsi
state: HeadRevolutionary
+
+- type: statusIcon
+ id: SyndicateFaction
+ priority: 0
+ locationPreference: Left
+ icon:
+ sprite: Interface/Misc/job_icons.rsi
+ state: Syndicate
--- /dev/null
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by IntegerTempest",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
},
{
"name": "HeadRevolutionary"
+ },
+ {
+ "name": "Syndicate"
}
]
}