diff --git a/Content.Server/Speech/Components/ArchaicAccentComponent.cs b/Content.Server/Speech/Components/ArchaicAccentComponent.cs new file mode 100644 index 0000000000..9975f97bf6 --- /dev/null +++ b/Content.Server/Speech/Components/ArchaicAccentComponent.cs @@ -0,0 +1,21 @@ +using Content.Server.Speech.EntitySystems; + +namespace Content.Server.Speech.Components; + +[RegisterComponent] +[Access(typeof(ArchaicAccentSystem))] +public sealed class ArchaicAccentComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + [DataField("forsoothChance")] + public readonly float ForsoothChance = 0.15f; + + [ViewVariables] + public readonly List ArchaicWords = new() + { + "accent-archaic-prefix-1", + "accent-archaic-prefix-2", + "accent-archaic-prefix-3", + "accent-archaic-prefix-4" + }; +} diff --git a/Content.Server/Speech/EntitySystems/ArchaicAccentSystem.cs b/Content.Server/Speech/EntitySystems/ArchaicAccentSystem.cs new file mode 100644 index 0000000000..35297eae18 --- /dev/null +++ b/Content.Server/Speech/EntitySystems/ArchaicAccentSystem.cs @@ -0,0 +1,46 @@ +using Content.Server.Speech.Components; +using Robust.Shared.Random; +using System.Text.RegularExpressions; + +namespace Content.Server.Speech.EntitySystems; + +public sealed class ArchaicAccentSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAccentGet); + } + + // converts left word when typed into the right word. For example typing you becomes ye. + public string Accentuate(string message, ArchaicAccentComponent component) + { + var msg = message; + + msg = _replacement.ApplyReplacements(msg, "archaic"); + + // Changes words like "Looked" to "Look'd" + msg = Regex.Replace(msg, "ed", "'d"); + // "LOOKED" to "LOOK'D" + msg = Regex.Replace(msg, "ED", "'D"); + + if (!_random.Prob(component.ForsoothChance)) + return msg; + + var pick = _random.Pick(component.ArchaicWords); + + // Reverse sanitize capital + msg = msg[0].ToString().ToLower() + msg.Remove(0, 1); + msg = Loc.GetString(pick) + " " + msg; + return msg; + } + + private void OnAccentGet(EntityUid uid, ArchaicAccentComponent component, AccentGetEvent args) + { + args.Message = Accentuate(args.Message, component); + } +} diff --git a/Resources/Locale/en-US/accent/archaic.ftl b/Resources/Locale/en-US/accent/archaic.ftl new file mode 100644 index 0000000000..5fed0a0036 --- /dev/null +++ b/Resources/Locale/en-US/accent/archaic.ftl @@ -0,0 +1,314 @@ +# taken from common knowledge and examples of early modern english/archaic english and many different websites. Just google a word and you'll get its meaning. +# https://en.wikipedia.org/wiki/Early_Modern_English +# https://en.wiktionary.org/wiki/Category:English_archaic_terms + +accent-archaic-prefix-1 = Forsooth, +accent-archaic-prefix-2 = Hark, +accent-archaic-prefix-3 = Beseech me, +accent-archaic-prefix-4 = Take heed, + +accent-archaic-replaced-1 = are +accent-archaic-replacement-1 = art + +accent-archaic-replaced-2 = you +accent-archaic-replacement-2 = thou + +accent-archaic-replaced-3 = my +accent-archaic-replacement-3 = mine + +accent-archaic-replaced-4 = very +accent-archaic-replacement-4 = most + +accent-archaic-replaced-5 = stupid +accent-archaic-replacement-5 = foolish + +accent-archaic-replaced-6 = your +accent-archaic-replacement-6 = thy + +accent-archaic-replaced-7 = have +accent-archaic-replacement-7 = hath + +accent-archaic-replaced-8 = yourself +accent-archaic-replacement-8 = thyself + +accent-archaic-replaced-9 = for +accent-archaic-replacement-9 = f'r + +accent-archaic-replaced-10 = would +accent-archaic-replacement-10 = woudlst + +accent-archaic-replaced-11 = it was +accent-archaic-replacement-11 = 'twas + +accent-archaic-replaced-12 = here +accent-archaic-replacement-12 = hither + +accent-archaic-replaced-13 = do +accent-archaic-replacement-13 = doth + +accent-archaic-replaced-14 = listen +accent-archaic-replacement-14 = hark + +accent-archaic-replaced-15 = idiot +accent-archaic-replacement-15 = fool + +accent-archaic-replaced-16 = wonderful +accent-archaic-replacement-16 = wonderous + +accent-archaic-replaced-17 = yay +accent-archaic-replacement-17 = hurrah + +accent-archaic-replaced-18 = hooray +accent-archaic-replacement-18 = hurrah + +accent-archaic-replaced-19 = may +accent-archaic-replacement-19 = mayest + +accent-archaic-replaced-20 = would +accent-archaic-replacement-20 = wouldst + +accent-archaic-replaced-21 = certainly +accent-archaic-replacement-21 = certes + +accent-archaic-replaced-22 = woke up +accent-archaic-replacement-22 = arose + +accent-archaic-replaced-23 = wake up +accent-archaic-replacement-23 = arise + +accent-archaic-replaced-24 = no +accent-archaic-replacement-24 = nay + +accent-archaic-replaced-25 = janicart +accent-archaic-replacement-25 = cleaning steed + +accent-archaic-replaced-26 = shall +accent-archaic-replacement-26 = shalt + +accent-archaic-replaced-27 = there +accent-archaic-replacement-27 = thither + +accent-archaic-replaced-28 = after this +accent-archaic-replacement-28 = hereafter + +accent-archaic-replaced-29 = after that +accent-archaic-replacement-29 = thereafter + +accent-archaic-replaced-30 = please +accent-archaic-replacement-30 = prithee + +accent-archaic-replaced-31 = old +accent-archaic-replacement-31 = olde + +accent-archaic-replaced-32 = soon +accent-archaic-replacement-32 = anon + +accent-archaic-replaced-33 = right now +accent-archaic-replacement-33 = forthwith + +accent-archaic-replaced-34 = between +accent-archaic-replacement-34 = betwixt + +accent-archaic-replaced-35 = said +accent-archaic-replacement-35 = quoth + +accent-archaic-replaced-36 = yes +accent-archaic-replacement-36 = yea + +accent-archaic-replaced-37 = captain +accent-archaic-replacement-37 = lord + +accent-archaic-replaced-38 = fuck +accent-archaic-replacement-38 = zounds + +accent-archaic-replaced-39 = sir +accent-archaic-replacement-39 = sire + +accent-archaic-replaced-40 = boss +accent-archaic-replacement-40 = sire + +accent-archaic-replaced-41 = speak +accent-archaic-replacement-41 = speaketh + +accent-archaic-replaced-42 = talk +accent-archaic-replacement-42 = talketh + +accent-archaic-replaced-43 = chemist +accent-archaic-replacement-43 = alchemist + +accent-archaic-replaced-44 = doctor +accent-archaic-replacement-44 = physician + +accent-archaic-replaced-45 = tomorrow +accent-archaic-replacement-45 = morrow + +accent-archaic-replaced-46 = clown +accent-archaic-replacement-46 = jester + +accent-archaic-replaced-47 = shit +accent-archaic-replacement-47 = gadzooks + +accent-archaic-replaced-48 = truly +accent-archaic-replacement-48 = verily + +accent-archaic-replaced-49 = when +accent-archaic-replacement-49 = whence + +accent-archaic-replaced-50 = why +accent-archaic-replacement-50 = wherefore + +accent-archaic-replaced-51 = outside +accent-archaic-replacement-51 = abroad + +accent-archaic-replaced-52 = before +accent-archaic-replacement-52 = afore + +accent-archaic-replaced-53 = ago +accent-archaic-replacement-53 = agone + +accent-archaic-replaced-54 = below +accent-archaic-replacement-54 = alow + +accent-archaic-replaced-55 = look +accent-archaic-replacement-55 = looketh + +accent-archaic-replaced-56 = observe +accent-archaic-replacement-56 = behold + +accent-archaic-replaced-57 = probably +accent-archaic-replacement-57 = belike + +accent-archaic-replaced-58 = truly +accent-archaic-replacement-58 = verily + +accent-archaic-replaced-59 = librarian +accent-archaic-replacement-59 = clerk + +accent-archaic-replaced-60 = immediately +accent-archaic-replacement-60 = forthwith + +accent-archaic-replaced-61 = from now +accent-archaic-replacement-61 = hence + +accent-archaic-replaced-62 = fight +accent-archaic-replacement-62 = duel + +accent-archaic-replaced-63 = from now +accent-archaic-replacement-63 = hence + +accent-archaic-replaced-64 = write +accent-archaic-replacement-64 = inscribe + +accent-archaic-replaced-65 = draw +accent-archaic-replacement-65 = inscribe + +accent-archaic-replaced-66 = from now +accent-archaic-replacement-66 = hence + +accent-archaic-replaced-67 = liar +accent-archaic-replacement-67 = knave + +accent-archaic-replaced-68 = i believe +accent-archaic-replacement-68 = methinks + +accent-archaic-replaced-69 = i think +accent-archaic-replacement-69 = methinks + +accent-archaic-replaced-70 = thanks +accent-archaic-replacement-70 = prithee + +accent-archaic-replaced-71 = one time +accent-archaic-replacement-71 = once + +accent-archaic-replaced-72 = two times +accent-archaic-replacement-72 = twice + +accent-archaic-replaced-73 = three times +accent-archaic-replacement-73 = thrice + +accent-archaic-replaced-74 = certainly +accent-archaic-replacement-74 = verily + +accent-archaic-replaced-75 = from now +accent-archaic-replacement-75 = hence + +accent-archaic-replaced-76 = lathe +accent-archaic-replacement-76 = smithy + +accent-archaic-replaced-77 = autolathe +accent-archaic-replacement-77 = autosmithy + +accent-archaic-replaced-78 = protolathe +accent-archaic-replacement-78 = protosmithy + +accent-archaic-replaced-79 = security officer +accent-archaic-replacement-79 = guardsman + +accent-archaic-replaced-80 = sec off +accent-archaic-replacement-80 = guardsman + +accent-archaic-replaced-81 = bar +accent-archaic-replacement-81 = tavern + +accent-archaic-replaced-82 = scientist +accent-archaic-replacement-82 = artificer + +accent-archaic-replaced-83 = sec +accent-archaic-replacement-83 = the guard + +accent-archaic-replaced-84 = security +accent-archaic-replacement-84 = the guard + +accent-archaic-replaced-85 = warden +accent-archaic-replacement-85 = jailer + +accent-archaic-replaced-86 = brig +accent-archaic-replacement-86 = dungeon + +accent-archaic-replaced-87 = passenger +accent-archaic-replacement-87 = peasant + +accent-archaic-replaced-88 = you're +accent-archaic-replacement-88 = thou'rt + +accent-archaic-replaced-89 = permabrig +accent-archaic-replacement-89 = permadungeon + +accent-archaic-replaced-90 = bartender +accent-archaic-replacement-90 = tavernkeep + +accent-archaic-replaced-91 = chemistry +accent-archaic-replacement-91 = alchemy + +accent-archaic-replaced-92 = from now +accent-archaic-replacement-92 = hence + +accent-archaic-replaced-93 = chem +accent-archaic-replacement-93 = alchemy + +accent-archaic-replaced-94 = yours +accent-archaic-replacement-94 = thine + +accent-archaic-replaced-95 = hi +accent-archaic-replacement-95 = greetings + +accent-archaic-replaced-96 = hello +accent-archaic-replacement-96 = salutations + +accent-archaic-replaced-97 = hey +accent-archaic-replacement-97 = greetings + +accent-archaic-replaced-98 = heya +accent-archaic-replacement-98 = greetings + +accent-archaic-replaced-99 = yep +accent-archaic-replacement-99 = yea + +accent-archaic-replaced-100 = yeah +accent-archaic-replacement-100 = yea + +accent-archaic-replaced-101 = yup +accent-archaic-replacement-101 = yea + +accent-archaic-replaced-102 = nope +accent-archaic-replacement-102 = nay diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index c4e8825e75..a7c7d46f72 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -1,4 +1,4 @@ -trait-blindness-name = Blindness +trait-blindness-name = Blindness trait-blindness-desc = You lack vision trait-narcolepsy-name = Narcolepsy @@ -22,3 +22,6 @@ trait-uncloneable-desc = Cannot be cloned trait-pirate-accent-name = Pirate Accent trait-pirate-accent-desc = You can't stop speaking like a pirate! + +trait-archaic-accent-name = Archaic Accent +trait-archaic-accent-desc = You speak in a way that many others find outdated diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index d49ae0b4c1..e777f2c1de 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -1,4 +1,4 @@ -# Accents that work off of word replacements. +# Accents that work off of word replacements. # this is kind of dumb but localization demands it. # i guess you could just specify the prefix ('mobster') and count and let the system fill it @@ -210,3 +210,112 @@ accent-pirate-replaced-30: accent-pirate-replacement-30 accent-pirate-replaced-31: accent-pirate-replacement-31 accent-pirate-replaced-32: accent-pirate-replacement-32 + +- type: accent + id: archaic + wordReplacements: + accent-archaic-replaced-1: accent-archaic-replacement-1 + accent-archaic-replaced-2: accent-archaic-replacement-2 + accent-archaic-replaced-3: accent-archaic-replacement-3 + accent-archaic-replaced-4: accent-archaic-replacement-4 + accent-archaic-replaced-5: accent-archaic-replacement-5 + accent-archaic-replaced-6: accent-archaic-replacement-6 + accent-archaic-replaced-7: accent-archaic-replacement-7 + accent-archaic-replaced-8: accent-archaic-replacement-8 + accent-archaic-replaced-9: accent-archaic-replacement-9 + accent-archaic-replaced-10: accent-archaic-replacement-10 + accent-archaic-replaced-11: accent-archaic-replacement-11 + accent-archaic-replaced-12: accent-archaic-replacement-12 + accent-archaic-replaced-13: accent-archaic-replacement-13 + accent-archaic-replaced-14: accent-archaic-replacement-14 + accent-archaic-replaced-15: accent-archaic-replacement-15 + accent-archaic-replaced-16: accent-archaic-replacement-16 + accent-archaic-replaced-17: accent-archaic-replacement-17 + accent-archaic-replaced-18: accent-archaic-replacement-18 + accent-archaic-replaced-19: accent-archaic-replacement-19 + accent-archaic-replaced-20: accent-archaic-replacement-20 + accent-archaic-replaced-21: accent-archaic-replacement-21 + accent-archaic-replaced-22: accent-archaic-replacement-22 + accent-archaic-replaced-23: accent-archaic-replacement-23 + accent-archaic-replaced-24: accent-archaic-replacement-24 + accent-archaic-replaced-25: accent-archaic-replacement-25 + accent-archaic-replaced-26: accent-archaic-replacement-26 + accent-archaic-replaced-27: accent-archaic-replacement-27 + accent-archaic-replaced-28: accent-archaic-replacement-28 + accent-archaic-replaced-29: accent-archaic-replacement-29 + accent-archaic-replaced-30: accent-archaic-replacement-30 + accent-archaic-replaced-31: accent-archaic-replacement-31 + accent-archaic-replaced-32: accent-archaic-replacement-32 + accent-archaic-replaced-33: accent-archaic-replacement-33 + accent-archaic-replaced-34: accent-archaic-replacement-34 + accent-archaic-replaced-35: accent-archaic-replacement-35 + accent-archaic-replaced-36: accent-archaic-replacement-36 + accent-archaic-replaced-37: accent-archaic-replacement-37 + accent-archaic-replaced-38: accent-archaic-replacement-38 + accent-archaic-replaced-39: accent-archaic-replacement-39 + accent-archaic-replaced-40: accent-archaic-replacement-40 + accent-archaic-replaced-41: accent-archaic-replacement-41 + accent-archaic-replaced-42: accent-archaic-replacement-42 + accent-archaic-replaced-43: accent-archaic-replacement-43 + accent-archaic-replaced-44: accent-archaic-replacement-44 + accent-archaic-replaced-45: accent-archaic-replacement-45 + accent-archaic-replaced-46: accent-archaic-replacement-46 + accent-archaic-replaced-47: accent-archaic-replacement-47 + accent-archaic-replaced-48: accent-archaic-replacement-48 + accent-archaic-replaced-49: accent-archaic-replacement-49 + accent-archaic-replaced-50: accent-archaic-replacement-50 + accent-archaic-replaced-51: accent-archaic-replacement-51 + accent-archaic-replaced-52: accent-archaic-replacement-52 + accent-archaic-replaced-53: accent-archaic-replacement-53 + accent-archaic-replaced-54: accent-archaic-replacement-54 + accent-archaic-replaced-55: accent-archaic-replacement-55 + accent-archaic-replaced-56: accent-archaic-replacement-56 + accent-archaic-replaced-57: accent-archaic-replacement-57 + accent-archaic-replaced-58: accent-archaic-replacement-58 + accent-archaic-replaced-59: accent-archaic-replacement-59 + accent-archaic-replaced-60: accent-archaic-replacement-60 + accent-archaic-replaced-61: accent-archaic-replacement-61 + accent-archaic-replaced-62: accent-archaic-replacement-62 + accent-archaic-replaced-63: accent-archaic-replacement-63 + accent-archaic-replaced-64: accent-archaic-replacement-64 + accent-archaic-replaced-65: accent-archaic-replacement-65 + accent-archaic-replaced-66: accent-archaic-replacement-66 + accent-archaic-replaced-67: accent-archaic-replacement-67 + accent-archaic-replaced-68: accent-archaic-replacement-68 + accent-archaic-replaced-69: accent-archaic-replacement-69 + accent-archaic-replaced-70: accent-archaic-replacement-70 + accent-archaic-replaced-71: accent-archaic-replacement-71 + accent-archaic-replaced-72: accent-archaic-replacement-72 + accent-archaic-replaced-73: accent-archaic-replacement-73 + accent-archaic-replaced-74: accent-archaic-replacement-74 + accent-archaic-replaced-75: accent-archaic-replacement-75 + accent-archaic-replaced-76: accent-archaic-replacement-76 + accent-archaic-replaced-77: accent-archaic-replacement-77 + accent-archaic-replaced-78: accent-archaic-replacement-78 + accent-archaic-replaced-79: accent-archaic-replacement-79 + accent-archaic-replaced-80: accent-archaic-replacement-80 + accent-archaic-replaced-81: accent-archaic-replacement-81 + accent-archaic-replaced-82: accent-archaic-replacement-82 + accent-archaic-replaced-83: accent-archaic-replacement-83 + accent-archaic-replaced-84: accent-archaic-replacement-84 + accent-archaic-replaced-85: accent-archaic-replacement-85 + accent-archaic-replaced-86: accent-archaic-replacement-86 + accent-archaic-replaced-87: accent-archaic-replacement-87 + accent-archaic-replaced-88: accent-archaic-replacement-88 + accent-archaic-replaced-89: accent-archaic-replacement-89 + accent-archaic-replaced-90: accent-archaic-replacement-90 + accent-archaic-replaced-91: accent-archaic-replacement-91 + accent-archaic-replaced-92: accent-archaic-replacement-92 + accent-archaic-replaced-93: accent-archaic-replacement-93 + accent-archaic-replaced-94: accent-archaic-replacement-94 + accent-archaic-replaced-95: accent-archaic-replacement-95 + accent-archaic-replaced-96: accent-archaic-replacement-96 + accent-archaic-replaced-97: accent-archaic-replacement-97 + accent-archaic-replaced-98: accent-archaic-replacement-98 + accent-archaic-replaced-99: accent-archaic-replacement-99 + accent-archaic-replaced-100: accent-archaic-replacement-100 + accent-archaic-replaced-101: accent-archaic-replacement-101 + accent-archaic-replaced-102: accent-archaic-replacement-102 + + + diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index fd9ff85d96..88d09cfe4c 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -4,3 +4,10 @@ description: trait-pirate-accent-desc components: - type: PirateAccent + +- type: trait + id: ArchaicAccent + name: trait-archaic-accent-name + description: trait-archaic-accent-desc + components: + - type: ArchaicAccent