Repository: Fansana/floofstation1
Pull request #635: Nēhina, Feroxi Language, and Namelist Cherry-Pick
Author: login: M3739
Labels: name: Changes: Localization
description: Changes any ftl files
name: Changes: YML
description: Changes any yml files
name: Status: Needs Review
description: Someone please review this.
name: Priority 2: Elevated
description: This has a raised priority, signaling that it may get increased attention.
Created: 2025-03-18T23:57:21Z | Merged: 2025-03-22T15:08:33Z

<!--
This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same
Remove these comments before submitting
-->

# Description

<!--
Explain this PR in as much detail as applicable

Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->

Cherry-picks PR number 361 from The Den, by BlitzTheSquishy.

Introducing Nēhina! The native language for the Feroxi. It will join Valyrian Standard as a language that is not only racial, but also can be learned via a trait.

---

# TODO

<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's good to leave future references
-->

- [x] Cherry-pick da PR
- [x] Fine-tune to our codebase
- [x] Confirm functionality
- [x] Cherry-pick the namelists
- [x] Fine-tune if needed
- [x] Confirm functionality
- [x] Remove Trait
---

<!--
This is default collapsed, readers click to expand it and see all your media
The PR media section can get very large at times, so this is a good way to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->

<details><summary><h1>Media</h1></summary>
<p>

![image](https://github.com/user-attachments/assets/a6bd6b26-8478-4b2f-97f5-67daf90521b3)

</p>
</details>

---

# Changelog

<!--
You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->

:cl: BlitzTheSquishy and M3739
- add: Introducing Nēhina, the native language of the Feroxi! It is also learnable via a trait, just like Valyrian Standard.
- add: Feroxis now have their own name list for random generation.



Diff:
diff --git a/Resources/Locale/en-US/_DV/datasets/names/feroxi.ftl b/Resources/Locale/en-US/_DV/datasets/names/feroxi.ftl
new file mode 100644
index 00000000000..c60c82a34ac
--- /dev/null
+++ b/Resources/Locale/en-US/_DV/datasets/names/feroxi.ftl
@@ -0,0 +1,175 @@
+## Floof - M3739 - Delta-V utilizes localized datasets for their codebase, leveraging FTL files to serve as namelists. We lack such implementations, so this is kept for posterity. Cause lets be real, this would be a PAIN to recreate.
+## ## First, Male
+## names-feroxi-first-male-dataset-1 = Aalto
+## names-feroxi-first-male-dataset-2 = Bahari
+## names-feroxi-first-male-dataset-3 = Caspian
+## names-feroxi-first-male-dataset-4 = Correntin
+## names-feroxi-first-male-dataset-5 = Daryan
+## names-feroxi-first-male-dataset-6 = Delfino
+## names-feroxi-first-male-dataset-7 = Erez
+## names-feroxi-first-male-dataset-8 = Ferran
+## names-feroxi-first-male-dataset-9 = Fluvio
+## names-feroxi-first-male-dataset-10 = Goran
+## names-feroxi-first-male-dataset-11 = Gokhan
+## names-feroxi-first-male-dataset-12 = Haruto
+## names-feroxi-first-male-dataset-13 = Ishmael
+## names-feroxi-first-male-dataset-14 = Joris
+## names-feroxi-first-male-dataset-15 = Kael
+## names-feroxi-first-male-dataset-16 = Lir
+## names-feroxi-first-male-dataset-17 = Marin
+## names-feroxi-first-male-dataset-18 = Nereo
+## names-feroxi-first-male-dataset-19 = Ondrej
+## names-feroxi-first-male-dataset-20 = Onda
+## names-feroxi-first-male-dataset-21 = Pleayo
+## names-feroxi-first-male-dataset-22 = Pluvio
+## names-feroxi-first-male-dataset-23 = Renji
+## names-feroxi-first-male-dataset-24 = Struan
+## names-feroxi-first-male-dataset-25 = Taneli
+## names-feroxi-first-male-dataset-26 = Veselin
+## names-feroxi-first-male-dataset-27 = Vesi
+## names-feroxi-first-male-dataset-28 = Zale
+## names-feroxi-first-male-dataset-29 = Awha
+## names-feroxi-first-male-dataset-30 = Hau
+## names-feroxi-first-male-dataset-31 = Kahawai
+## names-feroxi-first-male-dataset-32 = Ngaruru
+## names-feroxi-first-male-dataset-33 = Rere
+## names-feroxi-first-male-dataset-34 = Tai
+## names-feroxi-first-male-dataset-35 = Baiday
+## names-feroxi-first-male-dataset-36 = Gubau
+## names-feroxi-first-male-dataset-37 = Koedal
+## names-feroxi-first-male-dataset-38 = Ngarri
+## names-feroxi-first-male-dataset-39 = Saibai
+## names-feroxi-first-male-dataset-40 = Thabu
+## names-feroxi-first-male-dataset-41 = Waru
+## 
+## ## First, Female
+## names-feroxi-first-female-dataset-1 = Vidhun
+## names-feroxi-first-female-dataset-2 = Bahara
+## names-feroxi-first-female-dataset-3 = Darya
+## names-feroxi-first-female-dataset-4 = Euria
+## names-feroxi-first-female-dataset-5 = Galia
+## names-feroxi-first-female-dataset-6 = Hama
+## names-feroxi-first-female-dataset-7 = Iria
+## names-feroxi-first-female-dataset-8 = Jora
+## names-feroxi-first-female-dataset-9 = Kaia
+## names-feroxi-first-female-dataset-10 = Laguna
+## names-feroxi-first-female-dataset-11 = Maris
+## names-feroxi-first-female-dataset-12 = Nami
+## names-feroxi-first-female-dataset-13 = Ondina
+## names-feroxi-first-female-dataset-14 = Pluvia
+## names-feroxi-first-female-dataset-15 = Riva
+## names-feroxi-first-female-dataset-16 = Seren
+## names-feroxi-first-female-dataset-17 = Talia
+## names-feroxi-first-female-dataset-18 = Zarina
+## names-feroxi-first-female-dataset-19 = Amaya
+## names-feroxi-first-female-dataset-20 = Brisa
+## names-feroxi-first-female-dataset-21 = Coralia
+## names-feroxi-first-female-dataset-22 = Dewi
+## names-feroxi-first-female-dataset-23 = Estela
+## names-feroxi-first-female-dataset-24 = Fiara
+## names-feroxi-first-female-dataset-25 = Isla
+## names-feroxi-first-female-dataset-26 = Marella
+## names-feroxi-first-female-dataset-27 = Zaria
+## names-feroxi-first-female-dataset-28 = Vaida
+## names-feroxi-first-female-dataset-29 = Awha
+## names-feroxi-first-female-dataset-30 = Hikuwai
+## names-feroxi-first-female-dataset-31 = Marama
+## names-feroxi-first-female-dataset-32 = Rere
+## names-feroxi-first-female-dataset-33 = Tai
+## names-feroxi-first-female-dataset-34 = Waiora
+## names-feroxi-first-female-dataset-35 = Gubau
+## names-feroxi-first-female-dataset-36 = Kaiar
+## names-feroxi-first-female-dataset-37 = Maza
+## names-feroxi-first-female-dataset-38 = Ngarri
+## names-feroxi-first-female-dataset-39 = Saibai
+## names-feroxi-first-female-dataset-40 = Sesi
+## names-feroxi-first-female-dataset-41 = Zulai
+## 
+## ## Last
+## names-feroxi-last-dataset-1 = Aguero
+## names-feroxi-last-dataset-2 = Alawi
+## names-feroxi-last-dataset-3 = Alpin
+## names-feroxi-last-dataset-4 = Amadeus
+## names-feroxi-last-dataset-5 = Anastasios
+## names-feroxi-last-dataset-6 = Arenas
+## names-feroxi-last-dataset-7 = Atwood
+## names-feroxi-last-dataset-8 = Anjou
+## names-feroxi-last-dataset-9 = Bach
+## names-feroxi-last-dataset-10 = Bachmann
+## names-feroxi-last-dataset-11 = Baigorri
+## names-feroxi-last-dataset-12 = Baldur
+## names-feroxi-last-dataset-13 = Basil
+## names-feroxi-last-dataset-14 = Bolkiah
+## names-feroxi-last-dataset-15 = Borbon
+## names-feroxi-last-dataset-16 = Caldera
+## names-feroxi-last-dataset-17 = Campbell
+## names-feroxi-last-dataset-18 = Cascata
+## names-feroxi-last-dataset-19 = Cassius
+## names-feroxi-last-dataset-20 = Charkri
+## names-feroxi-last-dataset-21 = Coburg
+## names-feroxi-last-dataset-22 = Cyrus
+## names-feroxi-last-dataset-23 = Darius
+## names-feroxi-last-dataset-24 = Delgato
+## names-feroxi-last-dataset-25 = Delmar
+## names-feroxi-last-dataset-26 = Dlamini
+## names-feroxi-last-dataset-27 = Estevez
+## names-feroxi-last-dataset-28 = Eustace
+## names-feroxi-last-dataset-29 = Ferdinand
+## names-feroxi-last-dataset-30 = Finch
+## names-feroxi-last-dataset-31 = Fluvia
+## names-feroxi-last-dataset-32 = Fosse
+## names-feroxi-last-dataset-33 = Fontana
+## names-feroxi-last-dataset-34 = Garonne
+## names-feroxi-last-dataset-35 = Gotha
+## names-feroxi-last-dataset-36 = Grimaldi
+## names-feroxi-last-dataset-37 = Gualtieri
+## names-feroxi-last-dataset-38 = Gustaf
+## names-feroxi-last-dataset-39 = Hanover
+## names-feroxi-last-dataset-40 = Harald
+## names-feroxi-last-dataset-41 = Hashim
+## names-feroxi-last-dataset-42 = Hidaka
+## names-feroxi-last-dataset-43 = Holstein
+## names-feroxi-last-dataset-44 = Iksander
+## names-feroxi-last-dataset-45 = Iniguez
+## names-feroxi-last-dataset-46 = Jarvinen
+## names-feroxi-last-dataset-47 = Jorda
+## names-feroxi-last-dataset-48 = Kawa
+## names-feroxi-last-dataset-49 = Laghi
+## names-feroxi-last-dataset-50 = Lemoine
+## names-feroxi-last-dataset-51 = Leontius
+## names-feroxi-last-dataset-52 = Leopold
+## names-feroxi-last-dataset-53 = Ludovico
+## names-feroxi-last-dataset-54 = Maximillian
+## names-feroxi-last-dataset-55 = Mizushima
+## names-feroxi-last-dataset-56 = Moreau
+## names-feroxi-last-dataset-57 = Moshesh
+## names-feroxi-last-dataset-58 = Nahyan
+## names-feroxi-last-dataset-59 = Naizivi
+## names-feroxi-last-dataset-60 = Nakamizu
+## names-feroxi-last-dataset-61 = Nassau
+## names-feroxi-last-dataset-62 = Nicodemus
+## names-feroxi-last-dataset-63 = Norodom
+## names-feroxi-last-dataset-64 = Octavius
+## names-feroxi-last-dataset-65 = Ondaatje
+## names-feroxi-last-dataset-66 = Pelayo
+## names-feroxi-last-dataset-67 = Rios
+## names-feroxi-last-dataset-68 = Rinaldi
+## names-feroxi-last-dataset-69 = Rurik
+## names-feroxi-last-dataset-70 = Sabah
+## names-feroxi-last-dataset-71 = Saladin
+## names-feroxi-last-dataset-72 = Samson
+## names-feroxi-last-dataset-73 = Sigismund
+## names-feroxi-last-dataset-74 = Strom
+## names-feroxi-last-dataset-75 = Tariq
+## names-feroxi-last-dataset-76 = Tarquin
+## names-feroxi-last-dataset-77 = Thani
+## names-feroxi-last-dataset-78 = Theodore
+## names-feroxi-last-dataset-79 = Tiberius
+## names-feroxi-last-dataset-80 = Torente
+## names-feroxi-last-dataset-81 = Tudor
+## names-feroxi-last-dataset-82 = Unda
+## names-feroxi-last-dataset-83 = Valerian
+## names-feroxi-last-dataset-84 = Vasquez
+## names-feroxi-last-dataset-85 = Wells
+## names-feroxi-last-dataset-86 = Windsor
+## names-feroxi-last-dataset-87 = York
diff --git a/Resources/Locale/en-US/chat/managers/chat-language.ftl b/Resources/Locale/en-US/chat/managers/chat-language.ftl
index ddf369be68b..d1064d045a7 100644
--- a/Resources/Locale/en-US/chat/managers/chat-language.ftl
+++ b/Resources/Locale/en-US/chat/managers/chat-language.ftl
@@ -16,6 +16,7 @@ chat-language-ValyrianStandard-name = Valyrian
 chat-language-Arachnic-name = Arachnic
 chat-language-Marish-name = Marish
 chat-language-Chittin-name = Chittin
+chat-language-Nehina-name = Nēhina
 
 # Animal Languages
 
diff --git a/Resources/Locale/en-US/language/languages.ftl b/Resources/Locale/en-US/language/languages.ftl
index b8b7aeb7e90..20f17591c78 100644
--- a/Resources/Locale/en-US/language/languages.ftl
+++ b/Resources/Locale/en-US/language/languages.ftl
@@ -75,6 +75,9 @@ language-Chittin-description =
     A language consisting of clicks, buzzes, and some variety of harsh insect sounds.
     Most of what makes up their speech comes from their antennae, making it a near-impossible language for those without to learn.
 
+language-Nehina-name = Nēhina
+language-Nehina-description =  A language spoken by the Feroxi, well adapted to speaking under the waters of ocean planets.
+
 # Animal Languages
 
 language-Cat-name = Cat
diff --git a/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_female.yml b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_female.yml
new file mode 100644
index 00000000000..ad26cd6613f
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_female.yml
@@ -0,0 +1,44 @@
+- type: dataset
+  id: NamesFeroxiFirstFemale
+  values:
+    - Vidhun
+    - Bahara
+    - Darya
+    - Euria
+    - Galia
+    - Hama
+    - Iria
+    - Jora
+    - Kaia
+    - Laguna
+    - Maris
+    - Nami
+    - Ondina
+    - Pluvia
+    - Riva
+    - Seren
+    - Talia
+    - Zarina
+    - Amaya
+    - Brisa
+    - Coralia
+    - Dewi
+    - Estela
+    - Fiara
+    - Isla
+    - Marella
+    - Zaria
+    - Vaida
+    - Awha
+    - Hikuwai
+    - Marama
+    - Rere
+    - Tai
+    - Waiora
+    - Gubau
+    - Kaiar
+    - Maza
+    - Ngarri
+    - Saibai
+    - Sesi
+    - Zulai
diff --git a/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_male.yml b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_male.yml
new file mode 100644
index 00000000000..2819bbc0f96
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_first_male.yml
@@ -0,0 +1,44 @@
+- type: dataset
+  id: NamesFeroxiFirstMale
+  values:
+    - Aalto
+    - Bahari
+    - Caspian
+    - Correntin
+    - Daryan
+    - Delfino
+    - Erez
+    - Ferran
+    - Fluvio
+    - Goran
+    - Gokhan
+    - Haruto
+    - Ishmael
+    - Joris
+    - Kael
+    - Lir
+    - Marin
+    - Nereo
+    - Ondrej
+    - Onda
+    - Pleayo
+    - Pluvio
+    - Renji
+    - Struan
+    - Taneli
+    - Veselin
+    - Vesi
+    - Zale
+    - Awha
+    - Hau
+    - Kahawai
+    - Ngaruru
+    - Rere
+    - Tai
+    - Baiday
+    - Gubau
+    - Koedal
+    - Ngarri
+    - Saibai
+    - Thabu
+    - Waru
diff --git a/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_last.yml b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_last.yml
new file mode 100644
index 00000000000..d7d355a58b0
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Datasets/Names/feroxi_last.yml
@@ -0,0 +1,90 @@
+- type: dataset
+  id: NamesFeroxiLast
+  values:
+    - Aguero
+    - Alawi
+    - Alpin
+    - Amadeus
+    - Anastasios
+    - Arenas
+    - Atwood
+    - Anjou
+    - Bach
+    - Bachmann
+    - Baigorri
+    - Baldur
+    - Basil
+    - Bolkiah
+    - Borbon
+    - Caldera
+    - Campbell
+    - Cascata
+    - Cassius
+    - Charkri
+    - Coburg
+    - Cyrus
+    - Darius
+    - Delgato
+    - Delmar
+    - Dlamini
+    - Estevez
+    - Eustace
+    - Ferdinand
+    - Finch
+    - Fluvia
+    - Fosse
+    - Fontana
+    - Garonne
+    - Gotha
+    - Grimaldi
+    - Gualtieri
+    - Gustaf
+    - Hanover
+    - Harald
+    - Hashim
+    - Hidaka
+    - Holstein
+    - Iksander
+    - Iniguez
+    - Jarvinen
+    - Jorda
+    - Kawa
+    - Laghi
+    - Lemoine
+    - Leontius
+    - Leopold
+    - Ludovico
+    - Maximillian
+    - Mizushima
+    - Moreau
+    - Moshesh
+    - Nahyan
+    - Naizivi
+    - Nakamizu
+    - Nassau
+    - Nicodemus
+    - Norodom
+    - Octavius
+    - Ondaatje
+    - Pelayo
+    - Rios
+    - Rinaldi
+    - Rurik
+    - Sabah
+    - Saladin
+    - Samson
+    - Sigismund
+    - Strom
+    - Tariq
+    - Tarquin
+    - Thani
+    - Theodore
+    - Tiberius
+    - Torente
+    - Tudor
+    - Unda
+    - Valerian
+    - Vasquez
+    - Wells
+    - Windsor
+    - York
diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/feroxi.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/feroxi.yml
index bac01401f9c..a16532221b6 100644
--- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/feroxi.yml
+++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/feroxi.yml
@@ -28,11 +28,6 @@
       Male: MaleFeroxi
       Female: FemaleFeroxi
       Unsexed: MaleFeroxi
-  #- type: LanguageKnowledge # Floof - M3739 - Commented out for convenience when we implement the unique language for Feroxi. For now, it inherits from BaseMobSpeciesOrganic.
-  #  speaks:
-  #    - TauCetiBasic
-  #  understands:
-  #    - TauCetiBasic
   - type: Sprite
     netsync: false
     noRot: true
@@ -103,6 +98,13 @@
     hydratedMetabolizer: Feroxi
     dehydratedMetabolizer: FeroxiDehydrated
     dehydrationThreshold: 150
+  - type: LanguageKnowledge
+    speaks:
+    - TauCetiBasic
+    - Nehina
+    understands:
+    - TauCetiBasic
+    - Nehina
 
 - type: entity
   parent: MobHumanDummy
diff --git a/Resources/Prototypes/DeltaV/Species/feroxi.yml b/Resources/Prototypes/DeltaV/Species/feroxi.yml
index d93ec0e3695..3347021ece3 100644
--- a/Resources/Prototypes/DeltaV/Species/feroxi.yml
+++ b/Resources/Prototypes/DeltaV/Species/feroxi.yml
@@ -8,9 +8,9 @@
   markingLimits: MobFeroxiMarkingLimits
   dollPrototype: MobFeroxiDummy
   skinColoration: Hues
-  maleFirstNames: names_first_male
-  femaleFirstNames: names_first_female
-  lastNames: names_last
+  maleFirstNames: NamesFeroxiFirstMale
+  femaleFirstNames: NamesFeroxiFirstFemale
+  lastNames: NamesFeroxiLast
   customName: true # Floof
 
 - type: speciesBaseSprites
diff --git a/Resources/Prototypes/Language/Species-Specific/feroxi.yml b/Resources/Prototypes/Language/Species-Specific/feroxi.yml
new file mode 100644
index 00000000000..4792887bb66
--- /dev/null
+++ b/Resources/Prototypes/Language/Species-Specific/feroxi.yml
@@ -0,0 +1,73 @@
+# A mess of broken Japanese, spoken by Felinds and Oni
+# TODO: Replace this with a much better language.
+- type: language
+  id: Nehina
+  isVisibleLanguage: true
+  speech:
+    color: "#8DB9D6"
+  obfuscation:
+    !type:SyllableObfuscation
+    minSyllables: 2
+    maxSyllables: 5
+    replacement:
+    - ka
+    - pa
+    - ta
+    - ma
+    - na
+    - ha
+    - wha
+    - ra
+    - ke
+    - pe
+    - te
+    - me
+    - ne
+    - he
+    - whe
+    - re
+    - ki
+    - pi
+    - ti
+    - mi
+    - ni
+    - hi
+    - whi
+    - ri
+    - ko
+    - po
+    - to
+    - mo
+    - no
+    - ho
+    - who
+    - ro
+    - ku
+    - pu
+    - tu
+    - mu
+    - nu
+    - hu
+    - whu
+    - ru
+    - sa
+    - la
+    - wa
+    - ya
+    - ga
+    - ba
+    - da
+    - kla
+    - tra
+    - pra
+    - gra
+    - pla
+    - dra
+    - kal
+    - tar
+    - man
+    - nap
+    - mas
+    - wan
+    - yup
+    - gub


Reviews:
user: login: ShadesMars
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-21T14:19:21Z
user: login: M3739
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-03-21T14:31:45Z
user: login: Memeji
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-03-22T15:07:50Z

Review comments:
path: Resources/Prototypes/CharacterItemGroups/Generic/languageGroups.yml
user: login: ShadesMars
body: I am not sure a "unique" language specie should be in the trait list, but il allow it.
created_at: 2025-03-21T14:18:40Z
author_association: CONTRIBUTOR
path: Resources/Prototypes/CharacterItemGroups/Generic/languageGroups.yml
user: login: M3739
body: I share the same thoughts, but it was kept as it was part of the cherry-pick. It can be removed or fine-tuned at request.

I... have plans or an idea for an overhaul of the language trait system in the future. And this language will be one of many affected by it.
created_at: 2025-03-21T14:31:45Z
author_association: COLLABORATOR

PR comments:
user: login: M3739
created_at: 2025-03-18T23:57:53Z
body: bruh 
![image](https://github.com/user-attachments/assets/d27a81c6-0390-4a1a-92eb-8c4648883d24)

author_association: COLLABORATOR
user: login: github-actions[bot]
created_at: 2025-03-19T02:37:01Z
body: This pull request has conflicts, please resolve those before we can evaluate the pull request.
author_association: CONTRIBUTOR
user: login: M3739
created_at: 2025-03-21T00:13:37Z
body: I will be expanding the scope of this PR to now include the Feroxi namelists as well.
author_association: COLLABORATOR
user: login: M3739
created_at: 2025-03-21T15:53:39Z
body: The executive decision has been made to omit the trait part entirely.
author_association: COLLABORATOR
user: login: M3739
created_at: 2025-03-22T15:55:40Z
body: tfw I forgot to update the changelog to properly reflect the changes
R I P
author_association: COLLABORATOR