]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Dwarf minor content (#15082)
authorKara <lunarautomaton6@gmail.com>
Mon, 3 Apr 2023 03:28:49 +0000 (20:28 -0700)
committerGitHub <noreply@github.com>
Mon, 3 Apr 2023 03:28:49 +0000 (22:28 -0500)
* alcohol & body stuff

* vocal changes

* accent

* dumb

Content.Server/Speech/Components/DwarfAccentComponent.cs [new file with mode: 0644]
Content.Server/Speech/EntitySystems/DwarfAccentSystem.cs [new file with mode: 0644]
Resources/Prototypes/Body/Organs/dwarf.yml [new file with mode: 0644]
Resources/Prototypes/Body/Prototypes/dwarf.yml [new file with mode: 0644]
Resources/Prototypes/Chemistry/metabolizer_types.yml
Resources/Prototypes/Entities/Mobs/Species/dwarf.yml
Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
Resources/Prototypes/Voice/speech_emote_sounds.yml

diff --git a/Content.Server/Speech/Components/DwarfAccentComponent.cs b/Content.Server/Speech/Components/DwarfAccentComponent.cs
new file mode 100644 (file)
index 0000000..8760938
--- /dev/null
@@ -0,0 +1,9 @@
+namespace Content.Server.Speech.Components;
+
+/// <summary>
+/// Used for replacing words for dwarves (pseudo-scottish)
+/// </summary>
+[RegisterComponent]
+public sealed class DwarfAccentComponent : Component
+{
+}
diff --git a/Content.Server/Speech/EntitySystems/DwarfAccentSystem.cs b/Content.Server/Speech/EntitySystems/DwarfAccentSystem.cs
new file mode 100644 (file)
index 0000000..4231f26
--- /dev/null
@@ -0,0 +1,83 @@
+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);
+    }
+}
diff --git a/Resources/Prototypes/Body/Organs/dwarf.yml b/Resources/Prototypes/Body/Organs/dwarf.yml
new file mode 100644 (file)
index 0000000..b29296e
--- /dev/null
@@ -0,0 +1,33 @@
+- 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]
diff --git a/Resources/Prototypes/Body/Prototypes/dwarf.yml b/Resources/Prototypes/Body/Prototypes/dwarf.yml
new file mode 100644 (file)
index 0000000..b04b124
--- /dev/null
@@ -0,0 +1,49 @@
+- type: body
+  id: Dwarf
+  name: "dwarf"
+  root: torso
+  slots:
+    head:
+      part: HeadHuman
+      connections:
+      - torso
+      organs:
+        brain: OrganHumanBrain
+        eyes: OrganHumanEyes
+    torso:
+      part: TorsoHuman
+      connections:
+      - left arm
+      - right arm
+      - left leg
+      - right leg
+      organs:
+        heart: OrganDwarfHeart
+        lungs: OrganHumanLungs
+        stomach: OrganDwarfStomach
+        liver: OrganDwarfLiver
+        kidneys: OrganHumanKidneys
+    right arm:
+      part: RightArmHuman
+      connections:
+      - right hand
+    left arm:
+      part: LeftArmHuman
+      connections:
+      - left hand
+    right hand:
+      part: RightHandHuman
+    left hand:
+      part: LeftHandHuman
+    right leg:
+      part: RightLegHuman
+      connections:
+      - right foot
+    left leg:
+      part: LeftLegHuman
+      connections:
+      - left foot
+    right foot:
+      part: RightFootHuman
+    left foot:
+      part: LeftFootHuman
index 262cd6711ae30a5d645630fdb3b3454d20c5c4ab..11242bb7b8adae33dcc96fc1c818817bdf1a0618 100644 (file)
@@ -20,4 +20,7 @@
   id: Rat
 
 - type: metabolizerType
-  id: Plant
\ No newline at end of file
+  id: Plant
+
+- type: metabolizerType
+  id: Dwarf
index 884cf7ce23367ca9e4f994036c5259e252e67e55..15b226ded57066309a10adad6e5494559e4af808 100644 (file)
     drawdepth: Mobs
     scale: 1, 0.8
   - type: Body
-    prototype: Human
+    prototype: Dwarf
     requiredLegs: 2
+  - type: Fixtures
+    fixtures: # TODO: This needs a second fixture just for mob collisions.
+    - shape:
+        !type:PhysShapeCircle
+        radius: 0.35
+      # they r smaller
+      density: 120
+      restitution: 0.0
+      mask:
+      - MobMask
+      layer:
+      - MobLayer
+  - type: Vocal
+    sounds:
+      Male: UnisexDwarf
+      Female: UnisexDwarf
+      Unsexed: UnisexDwarf
+  - type: DwarfAccent
+  - type: Speech
+    speechSounds: Bass
 
 - type: entity
   save: false
index ed78fd1c6983d45de655c00bb24fa77849bee03a..9d7455a015622ef6ee95f9a53874dc19e4f87da6 100644 (file)
         damage:
           types:
             Caustic: 1
+      # dwarves take less toxin damage and heal a marginal amount of brute
+      - !type:HealthChange
+        conditions:
+        - !type:ReagentThreshold
+          min: 5
+        - !type:OrganType
+          type: Dwarf
+        damage:
+          types:
+            Caustic: 0.5
+      - !type:HealthChange
+        conditions:
+        - !type:ReagentThreshold
+          min: 5
+        - !type:OrganType
+          type: Dwarf
+        damage:
+          groups:
+            Brute: -1
       - !type:ChemVomit
         probability: 0.04
         conditions:
         - !type:ReagentThreshold
           reagent: Ethanol
           min: 3
+        # dwarves immune to vomiting from alcohol
+        - !type:OrganType
+          type: Dwarf
+          shouldHave: false
     Alcohol:
       effects:
       - !type:Drunk
index 88306ab8a8e5cc5379ad47aa1bcd3b8c0ff06121..ea9f50237b10a810936c25227016cdebafd06f07 100644 (file)
   params:
     variation: 0.125
 
+- type: emoteSounds
+  id: UnisexDwarf
+  sounds:
+    Scream:
+      collection: MaleScreams
+    Laugh:
+      collection: MaleLaugh
+  params:
+    variation: 0.125
+    pitchscale: 0.75
+
 # body emotes
 - type: emoteSounds
   id: GeneralBodyEmotes