diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index 03b76789d3..8dc41eced3 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -137,8 +137,8 @@ namespace Content.Server.GameObjects.Components.Mobs if (!HasMind) { var aliveText = - $"[color=red]{Loc.GetString("{0:They} {0:are} totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner)}[/color]"; - var deadText = $"[color=purple]{Loc.GetString("{0:Their} soul has departed.", Owner)}[/color]"; + $"[color=purple]{Loc.GetString("comp-mind-examined-catatonic", ("ent", Owner))}[/color]"; + var deadText = $"[color=red]{Loc.GetString("comp-mind-examined-dead", ("ent", Owner))}[/color]"; message.AddMarkup(dead ? deadText : aliveText); } @@ -147,7 +147,7 @@ namespace Content.Server.GameObjects.Components.Mobs if (dead) return; var text = - $"[color=yellow]{Loc.GetString("{0:They} {0:have} a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner)}[/color]"; + $"[color=yellow]{Loc.GetString("comp-mind-examined-ssd", ("ent", Owner))}[/color]"; message.AddMarkup(text); } diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedHumanoidAppearanceComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedHumanoidAppearanceComponent.cs index 67d740aea9..3cdcfd41d2 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedHumanoidAppearanceComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedHumanoidAppearanceComponent.cs @@ -4,6 +4,7 @@ using Content.Shared.Preferences; using Content.Shared.Preferences.Appearance; using Robust.Shared.Enums; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Localization; using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager.Attributes; @@ -65,6 +66,12 @@ namespace Content.Shared.GameObjects.Components.Mobs set { _gender = value; + + if (Owner.TryGetComponent(out GrammarComponent? g)) + { + g.Gender = value; + } + Dirty(); } } diff --git a/Resources/Locale/en-US/_lib.ftl b/Resources/Locale/en-US/_lib.ftl index 4a68a5e964..666505b621 100644 --- a/Resources/Locale/en-US/_lib.ftl +++ b/Resources/Locale/en-US/_lib.ftl @@ -12,6 +12,58 @@ zzzz-fmt-pressure = { TOSTRING($divided, "G3") } { $places -> # Used internally by the THE() function. zzzz-the = { PROPER($ent) -> - *[false] the - [true] {""} - } { $ent } + *[false] the { $ent } + [true] { $ent } + } + +# Used internally by the SUBJECT() function. +zzzz-subject-pronoun = { GENDER($ent) -> + [male] he + [female] she + [epicene] they + *[neuter] it + } + +# Used internally by the OBJECT() function. +zzzz-object-pronoun = { GENDER($ent) -> + [male] him + [female] her + [epicene] them + *[neuter] it + } + +# Used internally by the POSS-PRONOUN() function. +zzzz-possessive-pronoun = { GENDER($ent) -> + [male] his + [female] hers + [epicene] theirs + *[neuter] its + } + +# Used internally by the POSS-ADJ() function. +zzzz-possessive-adjective = { GENDER($ent) -> + [male] his + [female] her + [epicene] their + *[neuter] its + } + +# Used internally by the REFLEXIVE() function. +zzzz-reflexive-pronoun = { GENDER($ent) -> + [male] himself + [female] herself + [epicene] themselves + *[neuter] itself + } + +# Used internally by the CONJUGATE-BE() function. +zzzz-conjugate-be = { GENDER($ent) -> + [epicene] are + *[other] is + } + +# Used internally by the CONJUGATE-HAVE() function. +zzzz-conjugate-have = { GENDER($ent) -> + [epicene] have + *[other] has + } diff --git a/Resources/Locale/en-US/components/climbable-component.ftl b/Resources/Locale/en-US/components/climbable-component.ftl index c043d57079..b614e66915 100644 --- a/Resources/Locale/en-US/components/climbable-component.ftl +++ b/Resources/Locale/en-US/components/climbable-component.ftl @@ -7,16 +7,16 @@ comp-climbable-verb-climb = Vault ### Interaction Messages # Shown to you when your character climbs on $climbable -comp-climbable-user-climbs = You jump onto {$climbable}! +comp-climbable-user-climbs = You jump onto { THE($climbable) }! # Shown to others when $user climbs on $climbable -comp-climbable-user-climbs-other = {$user} jumps onto {$climbable}! +comp-climbable-user-climbs-other = { CAPITALIZE(THE($user)) } jumps onto { THE($climbable) }! # Shown to you when your character force someone to climb on $climbable -comp-climbable-user-climbs-force = You force {$moved-user} onto {$climbable}! +comp-climbable-user-climbs-force = You force { CAPITALIZE(THE($moved-user)) } onto { THE($climbable) }! # Shown to others when someone force other $moved-user to climb on $climbable -comp-climbable-user-climbs-force-other = {$user} forces {$moved-user} onto {$climbable}! +comp-climbable-user-climbs-force-other = { CAPITALIZE(THE($user)) } forces { THE($moved-user) } onto { THE($climbable) }! # Shown to you when your character is far away from climbable comp-climbable-cant-reach = You can't reach there! diff --git a/Resources/Locale/en-US/components/kitchen-spike-component.ftl b/Resources/Locale/en-US/components/kitchen-spike-component.ftl index 453e28eb30..d0d45be805 100644 --- a/Resources/Locale/en-US/components/kitchen-spike-component.ftl +++ b/Resources/Locale/en-US/components/kitchen-spike-component.ftl @@ -1,13 +1,13 @@ -comp-kitchen-spike-deny-collect = { THE($this) } already has something on it, finish collecting its meat first! -comp-kitchen-spike-deny-butcher = { THE($victim) } can't be butchered on { THE($this) }. -comp-kitchen-spike-deny-not-dead = { THE($victim) } can't be butchered. { THE($victim) } is not dead!. +comp-kitchen-spike-deny-collect = { CAPITALIZE(THE($this)) } already has something on it, finish collecting its meat first! +comp-kitchen-spike-deny-butcher = { CAPITALIZE(THE($victim)) } can't be butchered on { THE($this) }. +comp-kitchen-spike-deny-not-dead = { CAPITALIZE(THE($victim)) } can't be butchered. { CAPITALIZE(SUBJECT($victim)) } { CONJUGATE-BE($victim) } is not dead! comp-kitchen-spike-begin-hook-victim = { THE($user) } begins dragging you onto { THE($this) }! comp-kitchen-spike-begin-hook-self = You begin dragging yourself onto { THE($this) }! -comp-kitchen-spike-kill = { THE($user) } has forced { THE($victim) } onto the spike, killing them instantly! +comp-kitchen-spike-kill = { CAPITALIZE(THE($user)) } has forced { THE($victim) } onto the spike, killing them instantly! -comp-kitchen-spike-suicide-other = { THE($victim) } has thrown themselves on a meat spike! +comp-kitchen-spike-suicide-other = { CAPITALIZE(THE($victim)) } has thrown themselves on a meat spike! comp-kitchen-spike-suicide-self = You throw yourself on a meat spike! comp-kitchen-spike-remove-meat = You remove some meat from { THE($victim) }. diff --git a/Resources/Locale/en-US/components/mind-component.ftl b/Resources/Locale/en-US/components/mind-component.ftl new file mode 100644 index 0000000000..ef042522c5 --- /dev/null +++ b/Resources/Locale/en-US/components/mind-component.ftl @@ -0,0 +1,6 @@ +# MindComponent localization + +## Messages displayed when a body is examined and in a certain state +comp-mind-examined-catatonic = { CAPITALIZE(SUBJECT($ent)) } { CONJUGATE-BE($ent) } totally catatonic. The stresses of life in deep-space must have been too much for { OBJECT($ent) }. Any recovery is unlikely. +comp-mind-examined-dead = { CAPITALIZE(POSS-ADJ($ent)) } soul has departed. +comp-mind-examined-ssd = { CAPITALIZE(SUBJECT($ent)) } { CONJUGATE-HAVE($ent) } a blank, absent-minded stare and appears completely unresponsive to anything. { CAPITALIZE(SUBJECT($ent)) } may snap out of it soon. diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index f7bed216dc..b3ab345ca7 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -233,6 +233,10 @@ safe: false - type: Speech - type: Emoting + - type: Grammar + attributes: + proper: true + - type: entity save: false