diff --git a/Content.Client/Chat/ChatManager.cs b/Content.Client/Chat/ChatManager.cs index 0292584fc7..7f935150cf 100644 --- a/Content.Client/Chat/ChatManager.cs +++ b/Content.Client/Chat/ChatManager.cs @@ -202,6 +202,9 @@ namespace Content.Client.Chat case ChatChannel.Server: color = Color.Orange; break; + case ChatChannel.Radio: + color = Color.Green; + break; case ChatChannel.OOC: color = Color.LightSkyBlue; break; diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index 67bcb644c1..d2eaced93c 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -177,7 +177,8 @@ "BlockGameArcade", "KitchenSpike", "Butcherable", - "Rehydratable" + "Rehydratable", + "Headset", }; } } diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index 37689f3d7c..a550199dc6 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -1,14 +1,21 @@ using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Headset; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Observer; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Shared.Chat; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; @@ -37,7 +44,6 @@ namespace Content.Server.Chat //TODO: make prio based? private List _chatTransformHandlers; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; [Dependency] private readonly IServerNetManager _netManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IMoMMILink _mommiLink = default!; @@ -90,16 +96,16 @@ namespace Content.Server.Chat return; } - // Get entity's PlayerSession - IPlayerSession playerSession = source.GetComponent().playerSession; - // Check if message exceeds the character limit if the sender is a player - if (playerSession != null) - if (message.Length > MaxMessageLength) - { - DispatchServerMessage(playerSession, Loc.GetString(MaxLengthExceededMessage, MaxMessageLength)); - return; - } + if (source.TryGetComponent(out IActorComponent actor) && + message.Length > MaxMessageLength) + { + var feedback = Loc.GetString(MaxLengthExceededMessage, MaxMessageLength); + + DispatchServerMessage(actor.playerSession, feedback); + + return; + } foreach (var handler in _chatTransformHandlers) { @@ -107,21 +113,47 @@ namespace Content.Server.Chat message = handler(source, message); } - // Ensure the first letter inside the message string is always a capital letter - message = message[0].ToString().ToUpper() + message.Remove(0,1); + message = message.Trim(); var pos = source.Transform.Coordinates; var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient); + if (message.StartsWith(';')) + { + // Remove semicolon + message = message.Substring(1).TrimStart(); + + // Capitalize first letter + message = message[0].ToString().ToUpper() + + message.Remove(0,1); + + if (source.TryGetComponent(out InventoryComponent inventory) && + inventory.TryGetSlotItem(EquipmentSlotDefines.Slots.EARS, out ItemComponent item) && + item.Owner.TryGetComponent(out HeadsetComponent headset)) + { + headset.RadioRequested = true; + } + else + { + source.PopupMessage(Loc.GetString("You don't have a headset on!")); + } + } + else + { + // Capitalize first letter + message = message[0].ToString().ToUpper() + + message.Remove(0,1); + } + + var listeners = EntitySystem.Get(); + listeners.PingListeners(source, message); + var msg = _netManager.CreateNetMessage(); msg.Channel = ChatChannel.Local; msg.Message = message; - msg.MessageWrap = $"{source.Name} says, \"{{0}}\""; + msg.MessageWrap = Loc.GetString("{0} says, \"{{0}}\"", source.Name); msg.SenderEntity = source.Uid; _netManager.ServerSendToMany(msg, clients.ToList()); - - var listeners = _entitySystemManager.GetEntitySystem(); - listeners.PingListeners(source, pos, message); } public void EntityMe(IEntity source, string action) diff --git a/Content.Server/GameObjects/Components/Headset/HeadsetComponent.cs b/Content.Server/GameObjects/Components/Headset/HeadsetComponent.cs new file mode 100644 index 0000000000..c569e6beeb --- /dev/null +++ b/Content.Server/GameObjects/Components/Headset/HeadsetComponent.cs @@ -0,0 +1,104 @@ +using System.Collections.Generic; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces; +using Content.Shared.Chat; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Containers; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Network; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Headset +{ + [RegisterComponent] + [ComponentReference(typeof(IRadio))] + [ComponentReference(typeof(IListen))] + public class HeadsetComponent : Component, IListen, IRadio, IExamine + { + [Dependency] private readonly IServerNetManager _netManager = default!; + + public override string Name => "Headset"; + + private RadioSystem _radioSystem = default!; + + private List _channels = new List(); + + [ViewVariables(VVAccess.ReadWrite)] + private int BroadcastFrequency { get; set; } + + [ViewVariables(VVAccess.ReadWrite)] + public int ListenRange { get; private set; } + + public IReadOnlyList Channels => _channels; + + public bool RadioRequested { get; set; } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + // Only listens to speech in exact same position + serializer.DataField(this, h => h.ListenRange, "listenRange", 0); + + serializer.DataField(ref _channels, "channels", new List {1459}); + serializer.DataField(this, h => h.BroadcastFrequency, "broadcastChannel", 1459); + } + + public override void Initialize() + { + base.Initialize(); + + _radioSystem = EntitySystem.Get(); + } + + public bool CanListen(string message, IEntity source) + { + return RadioRequested; + } + + public void Receive(string message, int channel, IEntity source) + { + if (ContainerHelpers.TryGetContainer(Owner, out var container)) + { + if (!container.Owner.TryGetComponent(out IActorComponent actor)) + return; + + var playerChannel = actor.playerSession.ConnectedClient; + + var msg = _netManager.CreateNetMessage(); + + msg.Channel = ChatChannel.Radio; + msg.Message = message; + msg.MessageWrap = Loc.GetString("[{0}] {1} says, \"{{0}}\"", channel, source.Name); + _netManager.ServerSendMessage(msg, playerChannel); + } + } + + public void Listen(string message, IEntity speaker) + { + Broadcast(message, speaker); + } + + public void Broadcast(string message, IEntity speaker) + { + _radioSystem.SpreadMessage(this, speaker, message, BroadcastFrequency); + RadioRequested = false; + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddText(Loc.GetString("It is set to broadcast over the {0} frequency.", BroadcastFrequency)); + + message.AddText(Loc.GetString("A small screen on the headset displays the following available frequencies:")); + message.AddText("\n"); + message.AddText(Loc.GetString("Use {0} for the currently tuned frequency.", ";")); + } + } +} diff --git a/Content.Server/GameObjects/Components/ListeningComponent.cs b/Content.Server/GameObjects/Components/ListeningComponent.cs deleted file mode 100644 index 90bfb36ea1..0000000000 --- a/Content.Server/GameObjects/Components/ListeningComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Content.Server.Interfaces; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Server.GameObjects.Components -{ - [RegisterComponent] - public class ListeningComponent : Component - { - - public override string Name => "Listening"; - - public void PassSpeechData(string speech, IEntity source, float distance) - { - - foreach (var listener in Owner.GetAllComponents()) - { - if (distance > listener.GetListenRange()) { continue; } - listener.HeardSpeech(speech, source); - } - } - } -} diff --git a/Content.Server/GameObjects/Components/Radio/HandheldRadioComponent.cs b/Content.Server/GameObjects/Components/Radio/HandheldRadioComponent.cs new file mode 100644 index 0000000000..f5e7f3af62 --- /dev/null +++ b/Content.Server/GameObjects/Components/Radio/HandheldRadioComponent.cs @@ -0,0 +1,126 @@ +using System.Collections.Generic; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces; +using Content.Server.Interfaces.Chat; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Radio +{ + [RegisterComponent] + [ComponentReference(typeof(IRadio))] + [ComponentReference(typeof(IListen))] + public class HandheldRadioComponent : Component, IUse, IListen, IRadio, IActivate, IExamine + { + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + + public override string Name => "Radio"; + + private RadioSystem _radioSystem = default!; + + private bool _radioOn; + private List _channels = new List(); + + [ViewVariables(VVAccess.ReadWrite)] + private int BroadcastFrequency { get; set; } + + [ViewVariables(VVAccess.ReadWrite)] + public int ListenRange { get; private set; } + + [ViewVariables(VVAccess.ReadWrite)] + public bool RadioOn + { + get => _radioOn; + private set + { + _radioOn = value; + Dirty(); + } + } + + [ViewVariables] public IReadOnlyList Channels => _channels; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(this, h => h.ListenRange, "listenRange", 7); + serializer.DataField(ref _channels, "channels", new List {1459}); + serializer.DataField(this, h => h.BroadcastFrequency, "broadcastChannel", 1459); + } + + public override void Initialize() + { + base.Initialize(); + + _radioSystem = EntitySystem.Get(); + + RadioOn = false; + } + + public void Speak(string message) + { + _chatManager.EntitySay(Owner, message); + } + + public bool Use(IEntity user) + { + RadioOn = !RadioOn; + + var message = Loc.GetString($"The radio is now {(RadioOn ? "on" : "off")}."); + Owner.PopupMessage(user, message); + + return true; + } + + public bool UseEntity(UseEntityEventArgs eventArgs) + { + return Use(eventArgs.User); + } + + public bool CanListen(string message, IEntity source) + { + return RadioOn && + Owner.Transform.Coordinates.TryDistance(_entityManager, source.Transform.Coordinates, out var distance) && + distance <= ListenRange; + } + + public void Receive(string message, int channel, IEntity speaker) + { + if (RadioOn) + { + Speak(message); + } + } + + public void Listen(string message, IEntity speaker) + { + Broadcast(message, speaker); + } + + public void Broadcast(string message, IEntity speaker) + { + _radioSystem.SpreadMessage(this, speaker, message, BroadcastFrequency); + } + + public void Activate(ActivateEventArgs eventArgs) + { + Use(eventArgs.User); + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddText(Loc.GetString("It is set to broadcast over the {0} frequency.", BroadcastFrequency)); + } + } +} diff --git a/Content.Server/GameObjects/Components/RadioComponent.cs b/Content.Server/GameObjects/Components/RadioComponent.cs deleted file mode 100644 index 2163ed3012..0000000000 --- a/Content.Server/GameObjects/Components/RadioComponent.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; -using Content.Server.Interfaces.Chat; -using Content.Shared.Interfaces; -using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; - -namespace Content.Server.GameObjects.Components -{ - [RegisterComponent] - class RadioComponent : Component, IUse, IListen - { - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IChatManager _chatManager = default!; - - public override string Name => "Radio"; - - private bool _radioOn; - private int _listenRange = 7; - private RadioSystem _radioSystem = default!; - - [ViewVariables] - public bool RadioOn - { - get => _radioOn; - private set - { - _radioOn = value; - Dirty(); - } - } - - public override void Initialize() - { - base.Initialize(); - - _radioSystem = _entitySystemManager.GetEntitySystem(); - - RadioOn = false; - } - - public void PassOnMessage(string message) - { - if(RadioOn) - { - _radioSystem.SpreadMessage(Owner, message); - } - } - - public void Speaker(string message) - { - _chatManager.EntitySay(Owner, message); - } - - public bool UseEntity(UseEntityEventArgs eventArgs) - { - RadioOn = !RadioOn; - if(RadioOn) - { - Owner.PopupMessage(eventArgs.User, "The radio is now on."); - } - else - { - Owner.PopupMessage(eventArgs.User, "The radio is now off."); - } - return true; - } - - public void HeardSpeech(string speech, IEntity source) - { - PassOnMessage(speech); - } - - public int GetListenRange() - { - return _listenRange; - } - } -} diff --git a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs index 179668dc1e..eb92727745 100644 --- a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs @@ -1,22 +1,22 @@ -using Content.Server.GameObjects.Components; +using Content.Server.Interfaces; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Map; namespace Content.Server.GameObjects.EntitySystems { - internal sealed class ListeningSystem : EntitySystem + [UsedImplicitly] + public class ListeningSystem : EntitySystem { - public void PingListeners(IEntity source, EntityCoordinates sourcePos, string message) + public void PingListeners(IEntity source, string message) { - foreach (var listener in ComponentManager.EntityQuery()) + foreach (var listener in ComponentManager.EntityQuery()) { - if (!sourcePos.TryDistance(EntityManager, listener.Owner.Transform.Coordinates, out var distance)) + // TODO: Map Position distance + if (listener.CanListen(message, source)) { - return; + listener.Listen(message, source); } - - listener.PassSpeechData(message, source, distance); } } } diff --git a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs index ce6be94145..f5696c14f8 100644 --- a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs @@ -1,31 +1,37 @@ -using System.Collections.Generic; -using Content.Server.GameObjects.Components; +using Content.Server.Interfaces; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.GameObjects.EntitySystems { - internal sealed class RadioSystem : EntitySystem + [UsedImplicitly] + public class RadioSystem : EntitySystem { - private readonly List _messages = new List(); + private List _messages; - public void SpreadMessage(IEntity source, string message) + public override void Initialize() { - if (_messages.Contains(message)) - { - return; - } + base.Initialize(); + + _messages = new List(); + } + + public void SpreadMessage(IRadio source, IEntity speaker, string message, int channel) + { + if (_messages.Contains(message)) return; _messages.Add(message); - foreach (var radio in ComponentManager.EntityQuery()) + foreach (var radio in ComponentManager.EntityQuery()) { - if (radio.Owner == source || !radio.RadioOn) + if (radio.Channels.Contains(channel)) { - continue; + //TODO: once voice identity gets added, pass into receiver via source.GetSpeakerVoice() + radio.Receive(message, channel, speaker); } - - radio.Speaker(message); } _messages.Remove(message); diff --git a/Content.Server/Interfaces/IListen.cs b/Content.Server/Interfaces/IListen.cs index 840ceac8e9..b5913dd94a 100644 --- a/Content.Server/Interfaces/IListen.cs +++ b/Content.Server/Interfaces/IListen.cs @@ -1,14 +1,21 @@ using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Map; +using System; +using System.Collections.Generic; +using System.Text; namespace Content.Server.Interfaces { /// - /// Interface for objects such as radios meant to have an effect when speech is heard. + /// Interface for objects such as radios meant to have an effect when speech is + /// heard. Requires component reference. /// - public interface IListen + public interface IListen : IComponent { - void HeardSpeech(string speech, IEntity source); + int ListenRange { get; } - int GetListenRange(); + bool CanListen(string message, IEntity source); + + void Listen(string message, IEntity speaker); } } diff --git a/Content.Server/Interfaces/IRadio.cs b/Content.Server/Interfaces/IRadio.cs new file mode 100644 index 0000000000..510a7723ad --- /dev/null +++ b/Content.Server/Interfaces/IRadio.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Interfaces.GameObjects; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Content.Server.Interfaces +{ + public interface IRadio + { + IReadOnlyList Channels { get; } + + void Receive(string message, int channel, IEntity speaker); + + void Broadcast(string message, IEntity speaker); + } +} diff --git a/Resources/Prototypes/Entities/Clothing/Earpieces/ears.yml b/Resources/Prototypes/Entities/Clothing/Earpieces/ears.yml deleted file mode 100644 index 8f1342e934..0000000000 --- a/Resources/Prototypes/Entities/Clothing/Earpieces/ears.yml +++ /dev/null @@ -1,14 +0,0 @@ -- type: entity - parent: Clothing - id: RadioHeadsetEars - name: headset radio - description: The radio to keep up to date in real time with fun onboard station activities - components: - - type: Sprite - sprite: Clothing/Earpieces/headset.rsi - state: headset - - - type: Clothing - Slots: - - ears - sprite: Clothing/Earpieces/headset.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Earpieces/headsets.yml b/Resources/Prototypes/Entities/Clothing/Earpieces/headsets.yml new file mode 100644 index 0000000000..6bb7f34a3f --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Earpieces/headsets.yml @@ -0,0 +1,123 @@ +- type: entity + parent: Clothing + id: HeadsetBase + name: headset + abstract: true + description: An updated, modular intercom that fits over the head. Takes encryption keys. + components: + - type: Headset + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/base.rsi + + +- type: entity + parent: HeadsetBase + id: HeadsetCargo + name: cargo headset + description: A headset used by the QM and his slaves. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/cargo.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetCentCom + name: centcomm headset + description: A headset used by the upper echelons of Nanotrasen. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/centcom.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetCommand + name: command headset + description: A headset with a commanding channel. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/command.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetEngineering + name: engineering headset + description: When the engineers wish to chat like girls. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/engineering.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetMedical + name: medical headset + description: A headset for the trained staff of the medbay. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/medical.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetMedicalScience + name: medical research headset + description: A headset that is a result of the mating between medical and science. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/medicalscience.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetMining + name: mining headset + description: Headset used by shaft miners. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/mining.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetRobotics + name: robotics headset + description: Made specifically for the roboticists, who cannot decide between departments. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/robotics.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetScience + name: science headset + description: A sciency headset. Like usual. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/science.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetSecurity + name: security headset + description: This is used by your elite security force. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/security.rsi + state: icon + +- type: entity + parent: HeadsetBase + id: HeadsetService + name: service headset + description: Headset used by the service staff, tasked with keeping the station full, happy and clean. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/service.rsi + state: icon diff --git a/Resources/Prototypes/Entities/Clothing/Earpieces/headsets_alt.yml b/Resources/Prototypes/Entities/Clothing/Earpieces/headsets_alt.yml new file mode 100644 index 0000000000..d188fcdc8d --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Earpieces/headsets_alt.yml @@ -0,0 +1,88 @@ +- type: entity + parent: Clothing + id: HeadsetBaseAlt + name: headset + abstract: true + description: An updated, modular intercom that fits over the head. Takes encryption keys. + components: + - type: Headset + + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetCargoAlt + name: cargo overear-headset + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/cargo.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/cargo.rsi + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetCommandAlt + name: command overear-headset + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/command.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/command.rsi + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetEngineeringAlt + name: engineering overear-headset + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/engineering.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/engineering.rsi + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetMedicalAlt + name: medical overear-headset + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/medical.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/medical.rsi + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetSecurityAlt + name: security overear-headset + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/security.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/security.rsi + +- type: entity + parent: HeadsetBaseAlt + id: HeadsetSyndicateAlt + name: syndicate overear-headset + description: A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. + components: + - type: Sprite + sprite: Clothing/Ears/Headsets/syndicate.rsi + state: icon_alt + - type: Clothing + Slots: + - ears + sprite: Clothing/Ears/Headsets/syndicate.rsi diff --git a/Resources/Prototypes/Entities/Objects/radio.yml b/Resources/Prototypes/Entities/Objects/radio.yml index 183416ee9b..567f356004 100644 --- a/Resources/Prototypes/Entities/Objects/radio.yml +++ b/Resources/Prototypes/Entities/Objects/radio.yml @@ -1,16 +1,19 @@ - type: entity - name: "baseradio" + name: radio parent: BaseItem - id: BaseRadio + id: RadioBase abstract: true - type: entity - name: "Handheld Radio" + name: handheld radio description: A handy handheld radio. - parent: BaseRadio - id: handrad + parent: RadioBase + id: RadioHandheld components: - - type: Sprite - texture: Objects/Devices/radio.png - - type: Listening - type: Radio + - type: Sprite + sprite: Objects/Devices/communication.rsi + state: walkietalkie + - type: Icon + sprite: Objects/Devices/communication.rsi + state: walkietalkie diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml index fd044ba811..79a423102c 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml @@ -18,3 +18,4 @@ backpack: BackpackClothingFilled shoes: ShoesBlack idcard: CargoPDA + ears: HeadsetCargo diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml index d70aedb6dc..cb1835e746 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml @@ -16,3 +16,4 @@ backpack: BackpackClothingFilled shoes: ShoesBlack idcard: AssistantPDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml index c53e4a8602..d749f79191 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml @@ -18,3 +18,4 @@ backpack: BackpackClothingFilled shoes: ShoesBlack idcard: BartenderPDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml index c894a616b2..3ae10b42bb 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml @@ -17,3 +17,4 @@ backpack: BackpackClothingFilled shoes: ShoesBlack idcard: ChefPDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index b207def046..8e03c3716a 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -20,3 +20,4 @@ mask: MaskClown pocket1: BikeHorn idcard: ClownPDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml index 6258c02c90..6aabd73d23 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml @@ -18,3 +18,4 @@ shoes: ShoesGaloshes head: HatPurplesoft idcard: JanitorPDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml index ec6e82ead2..0b6c3c83f7 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml @@ -23,3 +23,4 @@ pocket2: Paper mask: MaskMime idcard: MimePDA + ears: HeadsetService diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index d1e7de6324..b00b42de1d 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -35,3 +35,4 @@ gloves: GlovesCaptain outerclothing: OuterclothingCaparmor idcard: CaptainPDA + ears: HeadsetCommand diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index a0d26826f9..7887c7c6bc 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -27,3 +27,4 @@ shoes: ShoesBrown head: HatHopcap idcard: HoPPDA + ears: HeadsetCommand diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index ddff2ce5f9..21675f2475 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -23,3 +23,4 @@ shoes: ShoesBrown idcard: CEPDA belt: UtilityBeltClothingFilled + ears: HeadsetEngineeringAlt diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml index 63a91ba0e1..d0308d7962 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml @@ -21,3 +21,4 @@ outerclothing: OuterclothingHazard idcard: EngineerPDA belt: UtilityBeltClothingFilled + ears: HeadsetEngineering diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index 2e738fb1c1..f506331032 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -23,3 +23,4 @@ shoes: ShoesBrown outerclothing: OuterclothingLabcoatcmo idcard: CMOPDA + ears: HeadsetMedicalAlt diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index db04903106..376f81107e 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -19,3 +19,4 @@ shoes: ShoesWhite outerclothing: OuterclothingLabcoatmedspecopen idcard: MedicalPDA + ears: HeadsetMedical diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index a9b41a2cb1..5bad3c85fc 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -22,3 +22,4 @@ shoes: ShoesBrown outerclothing: OuterclothingLabcoatopen idcard: RnDPDA + ears: HeadsetScienceAlt diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index 787f88037c..3033d51c76 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -19,3 +19,4 @@ shoes: ShoesWhite outerclothing: OuterclothingLabcoat idcard: SciencePDA + ears: HeadsetScience diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index 00293c4e3a..bf44a61ca0 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -24,3 +24,4 @@ eyes: SecGlasses head: HatBeretHoS idcard: HoSPDA + ears: HeadsetSecurityAlt diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 1ee779bce6..1abec1dabd 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -21,3 +21,4 @@ eyes: SecGlasses outerclothing: OuterclothingArmorVest idcard: SecurityPDA + ears: HeadsetSecurity diff --git a/Resources/Textures/Clothing/Earpieces/headset.rsi/headset.png b/Resources/Textures/Clothing/Earpieces/headset.rsi/headset.png deleted file mode 100644 index 059f303dc2..0000000000 Binary files a/Resources/Textures/Clothing/Earpieces/headset.rsi/headset.png and /dev/null differ diff --git a/Resources/Textures/Clothing/Earpieces/headset.rsi/meta.json b/Resources/Textures/Clothing/Earpieces/headset.rsi/meta.json deleted file mode 100644 index 574c1660a1..0000000000 --- a/Resources/Textures/Clothing/Earpieces/headset.rsi/meta.json +++ /dev/null @@ -1 +0,0 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-EARS", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "headset", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Ears/Headsets/base.rsi/cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/cypherkey.png new file mode 100644 index 0000000000..89d59318c5 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/cypherkey.png differ diff --git a/Resources/Textures/Clothing/Earpieces/headset.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/equipped-EARS.png similarity index 100% rename from Resources/Textures/Clothing/Earpieces/headset.rsi/equipped-EARS.png rename to Resources/Textures/Clothing/Ears/Headsets/base.rsi/equipped-EARS.png diff --git a/Resources/Textures/Clothing/Ears/Headsets/base.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/icon.png new file mode 100644 index 0000000000..44e093f26a Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/base.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/meta.json new file mode 100644 index 0000000000..466d4dc4b4 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/base.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/cargo_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/cargo_cypherkey.png new file mode 100644 index 0000000000..f08d625d21 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/cargo_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/equipped-EARS.png new file mode 100644 index 0000000000..f44dc32718 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/icon.png new file mode 100644 index 0000000000..671111e4bc Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/meta.json new file mode 100644 index 0000000000..9b1aa9ebc2 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "cargo_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "qm_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/qm_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/qm_cypherkey.png new file mode 100644 index 0000000000..bebcba755d Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/cargo.rsi/qm_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/cent_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/cent_cypherkey.png new file mode 100644 index 0000000000..63448b3cc0 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/cent_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon.png new file mode 100644 index 0000000000..4ee60687d0 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon_alt.png b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon_alt.png new file mode 100644 index 0000000000..0927232ed5 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/icon_alt.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/meta.json new file mode 100644 index 0000000000..0cf51cc752 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/centcom.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "cent_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon_alt", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/com_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/com_cypherkey.png new file mode 100644 index 0000000000..c2201a0ac5 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/com_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/equipped-EARS.png new file mode 100644 index 0000000000..c002f27486 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/hop_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/hop_cypherkey.png new file mode 100644 index 0000000000..cf75dbf63c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/hop_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon.png new file mode 100644 index 0000000000..30e1697c3c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon_alt.png b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon_alt.png new file mode 100644 index 0000000000..a01e0c6c13 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/icon_alt.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/command.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/meta.json new file mode 100644 index 0000000000..9af41648fc --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/command.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "com_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon_alt", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "hop_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/ce_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/ce_cypherkey.png new file mode 100644 index 0000000000..f36e82b817 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/ce_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/eng_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/eng_cypherkey.png new file mode 100644 index 0000000000..cf84b08e3f Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/eng_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/equipped-EARS.png new file mode 100644 index 0000000000..e6bfcdcd68 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/icon.png new file mode 100644 index 0000000000..d39d3680df Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/meta.json new file mode 100644 index 0000000000..ce6662ce27 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/engineering.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "ce_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "eng_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/cmo_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/cmo_cypherkey.png new file mode 100644 index 0000000000..3f40eb2760 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/cmo_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/equipped-EARS.png new file mode 100644 index 0000000000..f44dc32718 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon.png new file mode 100644 index 0000000000..e18fee6225 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon_alt.png b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon_alt.png new file mode 100644 index 0000000000..1087400c3c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/icon_alt.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/med_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/med_cypherkey.png new file mode 100644 index 0000000000..49952c906c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/med_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/meta.json new file mode 100644 index 0000000000..29e98e138f --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/medical.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "cmo_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "med_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon_alt", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/icon.png new file mode 100644 index 0000000000..5e773624bc Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/medsci_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/medsci_cypherkey.png new file mode 100644 index 0000000000..74e9ea4d7a Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/medsci_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/meta.json new file mode 100644 index 0000000000..6a326bd301 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/medicalscience.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "medsci_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/icon.png new file mode 100644 index 0000000000..cdb552f140 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/meta.json new file mode 100644 index 0000000000..cef2c1df15 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "mine_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/mine_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/mine_cypherkey.png new file mode 100644 index 0000000000..479fb8f0aa Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/mining.rsi/mine_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/icon.png new file mode 100644 index 0000000000..3d247f05be Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/meta.json new file mode 100644 index 0000000000..0d5e02141d --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "rob_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/rob_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/rob_cypherkey.png new file mode 100644 index 0000000000..0cf9315d97 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/robotics.rsi/rob_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/science.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/icon.png new file mode 100644 index 0000000000..e292512c97 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/science.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/meta.json new file mode 100644 index 0000000000..703220a34e --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "rd_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "sci_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/science.rsi/rd_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/rd_cypherkey.png new file mode 100644 index 0000000000..1efdef309c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/rd_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/science.rsi/sci_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/sci_cypherkey.png new file mode 100644 index 0000000000..de7552924e Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/science.rsi/sci_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/equipped-EARS.png new file mode 100644 index 0000000000..e635973b36 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/hos_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/hos_cypherkey.png new file mode 100644 index 0000000000..007b9ef6d1 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/hos_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon.png new file mode 100644 index 0000000000..cced512164 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon_alt.png b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon_alt.png new file mode 100644 index 0000000000..219918544c Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/icon_alt.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/meta.json new file mode 100644 index 0000000000..91b59a17da --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "hos_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "sec_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon_alt", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/security.rsi/sec_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/sec_cypherkey.png new file mode 100644 index 0000000000..fc37f8be5b Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/security.rsi/sec_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/icon.png new file mode 100644 index 0000000000..c1010a58da Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json new file mode 100644 index 0000000000..68e0f1ccf5 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "srv_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srv_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srv_cypherkey.png new file mode 100644 index 0000000000..9b3bfb3999 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srv_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srvsec_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srvsec_cypherkey.png new file mode 100644 index 0000000000..44efb3e19a Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/service.rsi/srvsec_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/meta.json new file mode 100644 index 0000000000..ddf4fb5bc1 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "srvmed_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/srvmed_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/srvmed_cypherkey.png new file mode 100644 index 0000000000..a500d3f076 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/servicemedical.rsi/srvmed_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/icon.png b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/icon.png new file mode 100644 index 0000000000..0b1f751416 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/meta.json new file mode 100644 index 0000000000..84c8977615 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "srvsec_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/srvsec_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/srvsec_cypherkey.png new file mode 100644 index 0000000000..44efb3e19a Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/servicesecurity.rsi/srvsec_cypherkey.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/equipped-EARS.png b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/equipped-EARS.png new file mode 100644 index 0000000000..d1a01d5492 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/equipped-EARS.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/icon_alt.png b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/icon_alt.png new file mode 100644 index 0000000000..f7cddb85c0 Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/icon_alt.png differ diff --git a/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/meta.json b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/meta.json new file mode 100644 index 0000000000..a8c364b264 --- /dev/null +++ b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428/icons/obj/radio.dmi", + "states": [ + { + "name": "equipped-EARS", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "syn_cypherkey", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "icon_alt", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/syn_cypherkey.png b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/syn_cypherkey.png new file mode 100644 index 0000000000..3c7b82497d Binary files /dev/null and b/Resources/Textures/Clothing/Ears/Headsets/syndicate.rsi/syn_cypherkey.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/beacon.png b/Resources/Textures/Objects/Devices/communication.rsi/beacon.png new file mode 100644 index 0000000000..fa3d280d0b Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/beacon.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/beacon_dead.png b/Resources/Textures/Objects/Devices/communication.rsi/beacon_dead.png new file mode 100644 index 0000000000..64e7a30d49 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/beacon_dead.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/meta.json b/Resources/Textures/Objects/Devices/communication.rsi/meta.json new file mode 100644 index 0000000000..433f73954e --- /dev/null +++ b/Resources/Textures/Objects/Devices/communication.rsi/meta.json @@ -0,0 +1,93 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/discordia-space/CEV-Eris/commit/efce5b6c3be75458ce238dcc01510e8f8a653ca6", + "states": [ + { + "name": "beacon", + "directions": 1, + "delays": [ + [ + 1.8, + 0.1 + ] + ] + }, + { + "name": "beacon_dead", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "signaller", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "signaller-inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "signaller-inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "walkietalkie", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "walkietalkie-off", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-left.png b/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-left.png new file mode 100644 index 0000000000..bb01ef1116 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-left.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-right.png b/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-right.png new file mode 100644 index 0000000000..92c6e3cf85 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/signaller-inhand-right.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/signaller.png b/Resources/Textures/Objects/Devices/communication.rsi/signaller.png new file mode 100644 index 0000000000..1b14a3a136 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/signaller.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie-off.png b/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie-off.png new file mode 100644 index 0000000000..70e2b3a2a5 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie-off.png differ diff --git a/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie.png b/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie.png new file mode 100644 index 0000000000..0799b3f9c8 Binary files /dev/null and b/Resources/Textures/Objects/Devices/communication.rsi/walkietalkie.png differ