diff --git a/code/modules/client/preference_setup/loadout/items/augments.dm b/code/modules/client/preference_setup/loadout/items/augments.dm
index 0a0e8754d66..ca6c13a90aa 100644
--- a/code/modules/client/preference_setup/loadout/items/augments.dm
+++ b/code/modules/client/preference_setup/loadout/items/augments.dm
@@ -237,3 +237,13 @@
path = /obj/item/organ/internal/augment/head_fluff/lhand_fluff
flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION
whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_SKRELL, SPECIES_SKRELL_AXIORI, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_BREEDER, SPECIES_UNATHI)
+
+/datum/gear/augment/skrell_language
+ display_name = "Zeng-Hu Nral'malic language processor"
+ description = "An augmentation developed by Zeng-Hu Pharmaceuticals' Nralakk Division to enable the recipient to understand the complex and inaudible tones of Nral'malic."
+ path = /obj/item/organ/internal/augment/language/zeng
+ whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD)
+ faction = "Zeng-Hu Pharmaceuticals"
+ allowed_roles = list("Physician", "Surgeon", "Chief Medical Officer", "Pharmacist", "First Responder", "Psychiatrist", "Medical Intern", "Corporate Liaison", "Research Director","Scientist", "Xenobiologist", "Xenobotanist", "Xenoarchaeologist", "Lab Assistant", "Assistant", "Off-Duty Crew Member", "Captain")
+ cost = 3
+
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index 647b85ab148..fe034fe5604 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -180,6 +180,16 @@
/datum/language/proc/handle_message_mode(var/message_mode)
return list(src, message_mode)
+/**
+ * Checks if a language with special physical requirements can be spoken by a mob
+ * Returns `TRUE` if allowed to, `FALSE` otherwise
+ *
+ * * speaker - A `mob` to check for the ability to speak the language
+ */
+/datum/language/proc/check_speech_restrict(mob/speaker)
+ SHOULD_NOT_SLEEP(TRUE)
+ return TRUE
+
// Language handling.
/mob/proc/add_language(var/language)
var/datum/language/new_language
@@ -210,7 +220,7 @@
// Can we speak this language, as opposed to just understanding it?
/mob/proc/can_speak(datum/language/speaking)
- return (universal_speak || (speaking && speaking.flags & INNATE) || (speaking in src.languages))
+ return (speaking.check_speech_restrict(src) && (universal_speak || (speaking && speaking.flags & INNATE) || (speaking in src.languages)))
/mob/proc/get_language_prefix()
if(client && client.prefs.language_prefixes && client.prefs.language_prefixes.len)
@@ -251,8 +261,10 @@
if(!(L.flags & NONGLOBAL))
if(L == default_language)
dat += "[L.name] ([get_language_prefix()][L.key]) - default - reset
[L.desc]
"
- else
+ else if(can_speak(L))
dat += "[L.name] ([get_language_prefix()][L.key]) - set default
[L.desc]
"
+ else
+ dat += "[L.name] ([get_language_prefix()][L.key]) - cannot speak!
[L.desc]
"
if(L.written_style)
dat += "You can write in this language on papers by writing \[lang=[L.key]\]YourTextHere\[/lang\].
"
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index d6fc731a55c..8a282746a55 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -179,6 +179,17 @@
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
allow_accents = TRUE
+/datum/language/skrell/check_speech_restrict(mob/speaker)
+ if(!ishuman(speaker))
+ return FALSE
+ var/mob/living/carbon/human/H = speaker
+ var/obj/item/organ/internal/augment/language/zeng/aug = H.internal_organs_by_name[BP_AUG_LANGUAGE]
+ if(istype(aug) && !isskrell(H))
+ to_chat(speaker, SPAN_WARNING("You are not capable of speaking Nral'malic!"))
+ return FALSE
+ else
+ return TRUE
+
/datum/language/skrell/get_random_name()
var/new_name = ""
var/suff = ""
diff --git a/code/modules/organs/subtypes/augment.dm b/code/modules/organs/subtypes/augment.dm
index f3fe61ed4fc..0a7c8d5c0e1 100644
--- a/code/modules/organs/subtypes/augment.dm
+++ b/code/modules/organs/subtypes/augment.dm
@@ -470,6 +470,10 @@
name = "Zino language processor"
augment_languages = list(LANGUAGE_GUTTER)
+/obj/item/organ/internal/augment/language/zeng
+ name = "Zeng-Hu Nral'malic language processor"
+ augment_languages = list(LANGUAGE_SKRELLIAN)
+
/obj/item/organ/internal/augment/gustatorial
name = "gustatorial centre"
action_button_name = "Activate Gustatorial Centre (tongue)"
diff --git a/html/changelogs/RustingWithYou - warble.yml b/html/changelogs/RustingWithYou - warble.yml
new file mode 100644
index 00000000000..18492ec2302
--- /dev/null
+++ b/html/changelogs/RustingWithYou - warble.yml
@@ -0,0 +1,41 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: RustingWithYou
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds a Nral'malic language implant for Zeng-Hu employees."