diff --git a/Content.Server/Speech/Components/SkeletonAccentComponent.cs b/Content.Server/Speech/Components/SkeletonAccentComponent.cs
new file mode 100644
index 0000000000..f533982680
--- /dev/null
+++ b/Content.Server/Speech/Components/SkeletonAccentComponent.cs
@@ -0,0 +1,14 @@
+namespace Content.Server.Speech.Components;
+
+///
+/// Rattle me bones!
+///
+[RegisterComponent]
+public sealed class SkeletonAccentComponent : Component
+{
+ ///
+ /// Chance that the message will be appended with "ACK ACK!"
+ ///
+ [DataField("ackChance")]
+ public float ackChance = 0.3f; // Funnier if it doesn't happen every single time
+}
diff --git a/Content.Server/Speech/EntitySystems/SkeletonAccentSystem.cs b/Content.Server/Speech/EntitySystems/SkeletonAccentSystem.cs
new file mode 100644
index 0000000000..ead9b4382e
--- /dev/null
+++ b/Content.Server/Speech/EntitySystems/SkeletonAccentSystem.cs
@@ -0,0 +1,68 @@
+using System.Text.RegularExpressions;
+using Content.Server.Speech.Components;
+using Robust.Shared.Random;
+
+namespace Content.Server.Speech.EntitySystems;
+
+public sealed class SkeletonAccentSystem : EntitySystem
+{
+ [Dependency] private readonly IRobustRandom _random = default!;
+
+ private static readonly Dictionary DirectReplacements = new()
+ {
+ { "fuck you", "I've got a BONE to pick with you" },
+ { "fucked", "boned"},
+ { "fuck", "RATTLE RATTLE" },
+ { "fck", "RATTLE RATTLE" },
+ { "shit", "RATTLE RATTLE" }, // Capitalize RATTLE RATTLE regardless of original message case.
+ { "definitely", "make no bones about it" },
+ { "absolutely", "make no bones about it" },
+ { "afraid", "rattled"},
+ { "scared", "rattled"},
+ { "spooked", "rattled"},
+ { "shocked", "rattled"},
+ { "killed", "skeletonized"},
+ { "humorous", "humerus"},
+ { "to be a", "tibia"},
+ { "under", "ulna"}
+ };
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnAccentGet);
+ }
+
+ public string Accentuate(string message, SkeletonAccentComponent component)
+ {
+ // Order:
+ // Do character manipulations first
+ // Then direct word/phrase replacements
+ // Then prefix/suffix
+
+ var msg = message;
+
+ // Character manipulations:
+ // At the start of words, any non-vowel + "one" becomes "bone", e.g. tone -> bone ; lonely -> bonely; clone -> clone (remains unchanged).
+ msg = Regex.Replace(msg, @"(?