diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index 1aa414d505..1bd0d13c88 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -380,6 +380,7 @@ public sealed class ChatUIController : UIController return; } + msg.Message = FormattedMessage.RemoveMarkup(msg.Message); EnqueueSpeechBubble(ent, msg, speechType); } diff --git a/Content.Server/Chat/FunnyFontsChatSystem.cs b/Content.Server/Chat/FunnyFontsChatSystem.cs new file mode 100644 index 0000000000..a86e720c49 --- /dev/null +++ b/Content.Server/Chat/FunnyFontsChatSystem.cs @@ -0,0 +1,24 @@ +using Content.Server.Chat.Systems; +using Content.Server.VoiceMask; +using Content.Shared.Interaction.Components; + +namespace Content.Server.Chat; + +public sealed class FunnyFontsChatSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnEntitySpeak); + } + + private void OnEntitySpeak(SpeechTransformedEvent ev) + { + if(TryComp(ev.Sender, out VoiceMaskComponent? mask) && mask.Enabled) return; + + if (TryComp(ev.Sender, out _)) + { + ev.Message = $"[font=\"ComicSansMS\"]{ev.Message}[/font]"; + } + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 9218c0df34..021a426c9f 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -310,6 +310,14 @@ public sealed partial class ChatSystem : SharedChatSystem } } + + public string AfterSpeechTransformed(EntityUid sender, string message) + { + var ev = new SpeechTransformedEvent(sender, message); + RaiseLocalEvent(ev); + return ev.Message; + } + #region Announcements /// @@ -396,6 +404,8 @@ public sealed partial class ChatSystem : SharedChatSystem if (message.Length == 0) return; + message = AfterSpeechTransformed(source, message); + // get the entity's apparent name (if no override provided). string name; if (nameOverride != null) @@ -418,7 +428,7 @@ public sealed partial class ChatSystem : SharedChatSystem //WD-EDIT var wrappedMessage = Loc.GetString("chat-manager-entity-say-wrap-message", - ("entityName", name), ("message", FormattedMessage.EscapeText(message))); + ("entityName", name), ("message", message)); SendInVoiceRange(ChatChannel.Local, message, wrappedMessage, source, range); @@ -469,6 +479,8 @@ public sealed partial class ChatSystem : SharedChatSystem if (message.Length == 0) return; + message = AfterSpeechTransformed(source, message); + var obfuscatedMessage = ObfuscateMessageReadability(message, 0.2f); // get the entity's name by visual identity (if no override provided). @@ -488,13 +500,13 @@ public sealed partial class ChatSystem : SharedChatSystem name = FormattedMessage.EscapeText(name); var wrappedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message", - ("entityName", name), ("message", FormattedMessage.EscapeText(message))); + ("entityName", name), ("message", message)); var wrappedobfuscatedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message", - ("entityName", nameIdentity), ("message", FormattedMessage.EscapeText(obfuscatedMessage))); + ("entityName", nameIdentity), ("message", obfuscatedMessage)); var wrappedUnknownMessage = Loc.GetString("chat-manager-entity-whisper-unknown-wrap-message", - ("message", FormattedMessage.EscapeText(obfuscatedMessage))); + ("message", obfuscatedMessage)); foreach (var (session, data) in GetRecipients(source, WhisperMuffledRange)) @@ -975,6 +987,19 @@ public class SetSpeakerColorEvent Name = name; } } + +public sealed class SpeechTransformedEvent : EntityEventArgs +{ + public EntityUid Sender; + public string Message; + + public SpeechTransformedEvent(EntityUid sender, string message) + { + Sender = sender; + Message = message; + } +} + //WD-EDIT /// diff --git a/Content.Server/Radio/EntitySystems/HeadsetSystem.cs b/Content.Server/Radio/EntitySystems/HeadsetSystem.cs index adaad492dc..92831b9a7c 100644 --- a/Content.Server/Radio/EntitySystems/HeadsetSystem.cs +++ b/Content.Server/Radio/EntitySystems/HeadsetSystem.cs @@ -52,7 +52,7 @@ public sealed class HeadsetSystem : SharedHeadsetSystem && TryComp(component.Headset, out EncryptionKeyHolderComponent? keys) && keys.Channels.Contains(args.Channel.ID)) { - _radio.SendRadioMessage(uid, args.Message, args.Channel, component.Headset); + _radio.SendRadioMessage(uid, args.Message, args.Channel, component.Headset, false); args.Channel = null; // prevent duplicate messages from other listeners. } } diff --git a/Resources/Fonts/ComicSans/ComicSansMS-Bold.ttf b/Resources/Fonts/ComicSans/ComicSansMS-Bold.ttf new file mode 100644 index 0000000000..31a1e3fd2a Binary files /dev/null and b/Resources/Fonts/ComicSans/ComicSansMS-Bold.ttf differ diff --git a/Resources/Fonts/ComicSans/ComicSansMS-BoldItalic.ttf b/Resources/Fonts/ComicSans/ComicSansMS-BoldItalic.ttf new file mode 100644 index 0000000000..178d991469 Binary files /dev/null and b/Resources/Fonts/ComicSans/ComicSansMS-BoldItalic.ttf differ diff --git a/Resources/Fonts/ComicSans/ComicSansMS-Italic.ttf b/Resources/Fonts/ComicSans/ComicSansMS-Italic.ttf new file mode 100644 index 0000000000..9bba567d85 Binary files /dev/null and b/Resources/Fonts/ComicSans/ComicSansMS-Italic.ttf differ diff --git a/Resources/Fonts/ComicSans/ComicSansMS.ttf b/Resources/Fonts/ComicSans/ComicSansMS.ttf new file mode 100644 index 0000000000..b3237a8de9 Binary files /dev/null and b/Resources/Fonts/ComicSans/ComicSansMS.ttf differ diff --git a/Resources/Prototypes/fonts.yml b/Resources/Prototypes/fonts.yml index b1ca1fba96..78f7223e92 100644 --- a/Resources/Prototypes/fonts.yml +++ b/Resources/Prototypes/fonts.yml @@ -41,3 +41,7 @@ - type: font id: Monospace path: /EngineFonts/NotoSans/NotoSansMono-Regular.ttf + +- type: font + id: ComicSansMS + path: /Fonts/ComicSans/ComicSansMS.ttf