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