diff --git a/baystation12.dme b/baystation12.dme
index 915c098b3e3..c7e24dd2606 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1076,6 +1076,7 @@
#include "code\modules\mob\language\station.dm"
#include "code\modules\mob\language\synthetic.dm"
#include "code\modules\mob\living\damage_procs.dm"
+#include "code\modules\mob\living\default_language.dm"
#include "code\modules\mob\living\living.dm"
#include "code\modules\mob\living\living_defense.dm"
#include "code\modules\mob\living\living_defines.dm"
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index d2cb8a82ab4..bf5b51a1b13 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -134,6 +134,12 @@
. = (L in languages)
languages.Remove(L)
+/mob/living/remove_language(rem_language)
+ var/datum/language/L = all_languages[rem_language]
+ if(default_language == L)
+ default_language = null
+ return ..()
+
// Can we speak this language, as opposed to just understanding it?
/mob/proc/can_speak(datum/language/speaking)
@@ -154,4 +160,32 @@
src << browse(dat, "window=checklanguage")
return
+/mob/living/check_languages()
+ var/dat = "Known Languages
"
+
+ if(default_language)
+ dat += "Current default language: [default_language] - reset
"
+
+ for(var/datum/language/L in languages)
+ if(!(L.flags & NONGLOBAL))
+ if(L == default_language)
+ dat += "[L.name] (:[L.key]) - default - reset
[L.desc]
"
+ else
+ dat += "[L.name] (:[L.key]) - set default
[L.desc]
"
+
+ src << browse(dat, "window=checklanguage")
+
+/mob/living/Topic(href, href_list)
+ if(href_list["default_lang"])
+ if(href_list["default_lang"] == "reset")
+ set_default_language(null)
+ else
+ var/datum/language/L = all_languages[href_list["default_lang"]]
+ if(L)
+ set_default_language(L)
+ check_languages()
+ return 1
+ else
+ return ..()
+
#undef SCRAMBLE_CACHE_LEN
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index da10a9ea00d..a3b46d64424 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -456,6 +456,9 @@
return 1
/mob/living/carbon/get_default_language()
+ if(default_language)
+ return default_language
+
if(!species)
return null
return species.default_language ? all_languages[species.default_language] : null
diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm
new file mode 100644
index 00000000000..eb4d3d032f4
--- /dev/null
+++ b/code/modules/mob/living/default_language.dm
@@ -0,0 +1,25 @@
+/mob/living
+ var/datum/language/default_language
+
+/mob/living/verb/set_default_language(language as null|anything in languages)
+ set name = "Set Default Language"
+ set category = "IC"
+
+ if(language)
+ src << "You will now speak [language] if you do not specify a language when speaking."
+ else
+ src << "You will now speak whatever your standard default language is if you do not specify one when speaking."
+ default_language = language
+
+// Silicons can't neccessarily speak everything in their languages list
+/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs)
+ ..()
+
+/mob/living/verb/check_default_language()
+ set name = "Check Default Language"
+ set category = "IC"
+
+ if(default_language)
+ src << "You are currently speaking [default_language] by default."
+ else
+ src << "Your current default language is your species or mob type default."
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 1ce1085648a..6f5a82deba3 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -80,7 +80,7 @@ proc/get_radio_key_from_channel(var/channel)
if(dongle.translate_binary) return 1
/mob/living/proc/get_default_language()
- return null
+ return default_language
/mob/living/proc/handle_speech_problems(var/message, var/verb)
var/list/returns[3]
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 965729b8a8d..b1cc4240ff5 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -210,9 +210,19 @@
var/dat = "Known Languages
"
+ if(default_language)
+ dat += "Current default language: [default_language] - reset
"
+
for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL))
- dat += "[L.name] (:[L.key])
Speech Synthesizer: [(L in speech_synthesizer_langs)? "YES":"NOT SUPPORTED"]
[L.desc]
"
+ var/default_str
+ if(L == default_language)
+ default_str = " - default - reset"
+ else
+ default_str = " - set default"
+
+ var/synth = (L in speech_synthesizer_langs)
+ dat += "[L.name] (:[L.key])[synth ? default_str : null]
Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
[L.desc]
"
src << browse(dat, "window=checklanguage")
return