--- /dev/null
+using System.Text.RegularExpressions;
+using Content.Server.Speech.Components;
+
+namespace Content.Server.Speech.EntitySystems;
+
+public sealed class DwarfAccentSystem : EntitySystem
+{
+ // TODO:
+ // these are pretty bad to have as static dicts in systems, ideally these all get moved to prototypes
+ // these can honestly stay unlocalized in prototypes? -- most of these word-replacers make zero sense to localize into other languages
+ // since they're so english-specific
+ // all of the 'word-replacers' should also probably respect capitalization when transformed, so all caps -> all caps
+ // and first letter capitalized -> first letter capitalized, at the very least
+
+ // these specifically mostly come from examples of specific scottish-english (not necessarily scots) verbiage
+ // https://en.wikipedia.org/wiki/Scotticism
+ // https://en.wikipedia.org/wiki/Scottish_English
+ // https://www.cs.stir.ac.uk/~kjt/general/scots.html
+ private static readonly Dictionary<string, string> DirectReplacements = new()
+ {
+ { "girl", "lassie" },
+ { "boy", "laddie" },
+ { "man", "lad" },
+ { "woman", "lass" },
+ { "do", "dae" },
+ { "don't", "dinnae" },
+ { "dont", "dinnae" },
+ { "i'm", "A'm" },
+ { "im", "am"},
+ { "going", "gaun" },
+ { "know", "ken"},
+ { "i", "Ah" },
+ { "you're", "ye're"},
+ { "youre", "yere"},
+ { "you", "ye" },
+ { "i'll", "A'll" },
+ { "ill", "all"},
+ { "of", "ae" },
+ { "was", "wis" },
+ { "can't", "cannae" },
+ { "cant", "cannae" },
+ { "yourself", "yersel" },
+ { "where", "whaur" },
+ { "oh", "ach" },
+ { "little", "wee" },
+ { "small", "wee" },
+ { "shit", "shite" },
+ { "yeah", "aye" },
+ { "yea", "aye"},
+ { "yes", "aye" },
+ { "too", "tae" },
+ { "my", "ma" },
+ { "not", "nae" },
+ { "dad", "da" },
+ { "mom", "maw" },
+ };
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<DwarfAccentComponent, AccentGetEvent>(OnAccentGet);
+ }
+
+ public string Accentuate(string message)
+ {
+ // this is just word replacements right now,
+ // but leaving it open to more intelligent phonotactic manipulations at some point which are probably possible
+ var msg = message;
+
+ foreach (var (first, replace) in DirectReplacements)
+ {
+ msg = Regex.Replace(msg, $@"(?<!\w){first}(?!\w)", replace, RegexOptions.IgnoreCase);
+ }
+
+ return msg;
+ }
+
+ private void OnAccentGet(EntityUid uid, DwarfAccentComponent component, AccentGetEvent args)
+ {
+ args.Message = Accentuate(args.Message);
+ }
+}
--- /dev/null
+- type: entity
+ id: OrganDwarfHeart
+ parent: OrganHumanHeart
+ name: dwarf heart
+ components:
+ - type: Metabolizer
+ metabolizerTypes: [Dwarf]
+
+- type: entity
+ id: OrganDwarfLiver
+ parent: OrganHumanLiver
+ name: dwarf liver
+ components:
+ - type: Metabolizer
+ metabolizerTypes: [Dwarf]
+
+- type: entity
+ id: OrganDwarfStomach
+ parent: OrganHumanStomach
+ name: dwarf stomach
+ components:
+ - type: Sprite
+ state: stomach
+ - type: Organ
+ - type: SolutionContainerManager
+ solutions:
+ stomach:
+ maxVol: 75
+ - type: Stomach
+ - type: Metabolizer
+ # mm very yummy
+ maxReagents: 5
+ metabolizerTypes: [Dwarf]