From 1907ecc399dd262a68cd66d836cdc5e3b051fe78 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sun, 29 Dec 2024 16:00:55 +0300 Subject: [PATCH] Loudspeaker --- Content.Server/Chat/FunnyFontsChatSystem.cs | 9 ++- .../_White/HopSpeaker/HopSpeakerComponent.cs | 17 +++++ .../_White/HopSpeaker/HopSpeakerSystem.cs | 39 ++++++++++++ .../HopSpeaker/PapersSpeechComponent.cs | 10 +++ .../Audio/White/Effects/dynamicNEXT_.ogg | Bin 0 -> 22618 bytes .../BureaucracyPixel/BureaucracyPixel.ttf | Bin 0 -> 52597 bytes Resources/Locale/ru-RU/_white/hop-speaker.ftl | 3 + .../Structures/Wallmounts/speaker.yml | 58 ++++++++++++++++++ Resources/Prototypes/fonts.yml | 4 ++ .../Wallmounts/speaker.rsi/meta.json | 14 +++++ .../Wallmounts/speaker.rsi/speaker.png | Bin 0 -> 372 bytes 11 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 Content.Server/_White/HopSpeaker/HopSpeakerComponent.cs create mode 100644 Content.Server/_White/HopSpeaker/HopSpeakerSystem.cs create mode 100644 Content.Server/_White/HopSpeaker/PapersSpeechComponent.cs create mode 100644 Resources/Audio/White/Effects/dynamicNEXT_.ogg create mode 100644 Resources/Fonts/BureaucracyPixel/BureaucracyPixel.ttf create mode 100644 Resources/Locale/ru-RU/_white/hop-speaker.ftl create mode 100644 Resources/Prototypes/_White/Entities/Structures/Wallmounts/speaker.yml create mode 100644 Resources/Textures/White/Structures/Wallmounts/speaker.rsi/meta.json create mode 100644 Resources/Textures/White/Structures/Wallmounts/speaker.rsi/speaker.png diff --git a/Content.Server/Chat/FunnyFontsChatSystem.cs b/Content.Server/Chat/FunnyFontsChatSystem.cs index a86e720c49..330206e77e 100644 --- a/Content.Server/Chat/FunnyFontsChatSystem.cs +++ b/Content.Server/Chat/FunnyFontsChatSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Chat.Systems; using Content.Server.VoiceMask; using Content.Shared.Interaction.Components; +using Content.Server._White.HopSpeaker; namespace Content.Server.Chat; @@ -14,11 +15,17 @@ public sealed class FunnyFontsChatSystem : EntitySystem private void OnEntitySpeak(SpeechTransformedEvent ev) { - if(TryComp(ev.Sender, out VoiceMaskComponent? mask) && mask.Enabled) return; + if (TryComp(ev.Sender, out VoiceMaskComponent? mask) && mask.Enabled) return; if (TryComp(ev.Sender, out _)) { ev.Message = $"[font=\"ComicSansMS\"]{ev.Message}[/font]"; } + // WD EDIT START + if (TryComp(ev.Sender, out _)) + { + ev.Message = $"[font=\"BureaucracyPixel\"]{ev.Message}[/font]"; + } + // WD EDIT END } } diff --git a/Content.Server/_White/HopSpeaker/HopSpeakerComponent.cs b/Content.Server/_White/HopSpeaker/HopSpeakerComponent.cs new file mode 100644 index 0000000000..9fbd8120d0 --- /dev/null +++ b/Content.Server/_White/HopSpeaker/HopSpeakerComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Audio; + +namespace Content.Server._White.HopSpeaker; + +[RegisterComponent] +public sealed partial class HopSpeakerComponent : Component +{ + [DataField("delay")] + public TimeSpan Delay = TimeSpan.FromSeconds(5); + + [ViewVariables(VVAccess.ReadOnly)] + public TimeSpan DelayEnd = TimeSpan.Zero; + + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/White/Effects/dynamicNEXT_.ogg"); +} + diff --git a/Content.Server/_White/HopSpeaker/HopSpeakerSystem.cs b/Content.Server/_White/HopSpeaker/HopSpeakerSystem.cs new file mode 100644 index 0000000000..9920bcc5ad --- /dev/null +++ b/Content.Server/_White/HopSpeaker/HopSpeakerSystem.cs @@ -0,0 +1,39 @@ +using Content.Server.Explosion.EntitySystems; +using Content.Server.Chat.Systems; +using Content.Server.Power.Components; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Timing; + +namespace Content.Server._White.HopSpeaker; + +public sealed partial class HopSpeakerSystem : EntitySystem +{ + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(HandleChatOnTrigger); + } + + private void HandleChatOnTrigger(EntityUid uid, HopSpeakerComponent component, TriggerEvent args) + { + if (component.DelayEnd > _gameTiming.CurTime) + return; + + if (!TryComp(uid, out var receiverComponent) || !receiverComponent.Powered) + return; + + _chat.TrySendInGameICMessage(uid, Loc.GetString("hopspeaker-next"), InGameICChatType.Speak, + ChatTransmitRange.Normal); + _audio.PlayEntity(component.Sound, Filter.Local(), uid, false, AudioParams.Default.WithVolume(-2f)); + + component.DelayEnd = _gameTiming.CurTime + component.Delay; + } +} diff --git a/Content.Server/_White/HopSpeaker/PapersSpeechComponent.cs b/Content.Server/_White/HopSpeaker/PapersSpeechComponent.cs new file mode 100644 index 0000000000..71ccf34fa5 --- /dev/null +++ b/Content.Server/_White/HopSpeaker/PapersSpeechComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Server._White.HopSpeaker; + +/// +/// Entity with this component will have a pixel font while speaking. +/// +[RegisterComponent] +public sealed partial class PapersSpeechComponent : Component +{ + +} diff --git a/Resources/Audio/White/Effects/dynamicNEXT_.ogg b/Resources/Audio/White/Effects/dynamicNEXT_.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e7dfd96e9b93f4ac88a8db022c587e49a43817f9 GIT binary patch literal 22618 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 literal 0 HcmV?d00001 diff --git a/Resources/Locale/ru-RU/_white/hop-speaker.ftl b/Resources/Locale/ru-RU/_white/hop-speaker.ftl new file mode 100644 index 0000000000..e845c49149 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/hop-speaker.ftl @@ -0,0 +1,3 @@ +hopspeaker-next = СЛЕДУЮЩИЙ! +ent-HOPSpeaker = громкоговоритель + .desc = Особо экстравагантный способ продвинуть очередь. diff --git a/Resources/Prototypes/_White/Entities/Structures/Wallmounts/speaker.yml b/Resources/Prototypes/_White/Entities/Structures/Wallmounts/speaker.yml new file mode 100644 index 0000000000..06d1c378a9 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Structures/Wallmounts/speaker.yml @@ -0,0 +1,58 @@ +- type: entity + id: HOPSpeaker + name: loudspeaker + description: An especially extravagant way to move the queue. + placement: + mode: SnapgridCenter + snap: + - Wallmount + components: + - type: HopSpeaker + - type: PapersSpeech + - type: Speech + - type: Transform + anchored: true + - type: WallMount + arc: 360 + - type: InteractionOutline + - type: Clickable + - type: Appearance + - type: Sprite + drawdepth: WallMountedItems + sprite: White/Structures/Wallmounts/speaker.rsi + state: speaker + noRot: true + - type: TriggerOnSignal + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: BasicDevice + - type: WirelessNetworkConnection + range: 200 + - type: DeviceLinkSink + ports: + - Trigger + - type: ApcPowerReceiver + powerLoad: 500 + needsPower: true + - type: Electrified + enabled: false + usesApcPower: true + - type: ExtensionCableReceiver + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/smash.ogg" diff --git a/Resources/Prototypes/fonts.yml b/Resources/Prototypes/fonts.yml index bfcebb10f1..c0095dc65a 100644 --- a/Resources/Prototypes/fonts.yml +++ b/Resources/Prototypes/fonts.yml @@ -61,3 +61,7 @@ - type: font id: Emoji path: /Fonts/NotoEmoji.ttf + +- type: font # WD + id: BureaucracyPixel + path: /Fonts/BureaucracyPixel/BureaucracyPixel.ttf diff --git a/Resources/Textures/White/Structures/Wallmounts/speaker.rsi/meta.json b/Resources/Textures/White/Structures/Wallmounts/speaker.rsi/meta.json new file mode 100644 index 0000000000..b819f3b4bc --- /dev/null +++ b/Resources/Textures/White/Structures/Wallmounts/speaker.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Nickel", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "speaker" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Structures/Wallmounts/speaker.rsi/speaker.png b/Resources/Textures/White/Structures/Wallmounts/speaker.rsi/speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bb46cd0fe881ca8a22985b69c83e2ac76b8ca4 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DX&fq{|7 z)5S3)qV?^xz3W;O1X|DE)j4_La>RvSCSPn8@AXek1j2M46_M{@IoC8EpP!UdXnFRC z!e`mzoXi1V?th&ewc*;oXDp_^n@?BC<(y*LeogJVTqK9QMrK0fv>X9F@!#A%hBtkd zOv!O#Sn;~*a>ro<2QSX&ck)8KazB;CPJgmNRKTgBgMr~*^_SZ7hvpW~SjHI|y7pUP z((DgfHpdEO;vdX-Jgw3CgRQW