diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 177d189cb2c..fa5725faf19 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -260,7 +260,7 @@ desc = "The common galactic tongue." speech_verb = "says" whisper_verb = "whispers" - key = "0" + key = "9" flags = RESTRICTED syllables = list("blah","blah","blah","bleh","meh","neh","nah","wah") @@ -468,6 +468,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) @@ -488,4 +494,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/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index c3e0022ff00..3d346f83941 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -65,9 +65,9 @@ return (tally + move_delay_add + config.alien_delay) /mob/living/carbon/alien/humanoid/Process_Spacemove(var/check_drift = 0) - if(..()) + if(..()) return 1 - + return 0 ///mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj) taken care of in living diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 4aeace5be7b..8d2e77a0601 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -16,10 +16,15 @@ return emote(copytext(message,2)) var/datum/language/speaking = parse_language(message) + if(speaking) message = copytext(message,2+length(speaking.key)) else - speaking = all_languages["Xenomorph"] + var/quickcheck = get_default_language() + if(quickcheck) + speaking = get_default_language() + else //because no clue how to actually set xeno's default language since they aren't a species, just do it here + speaking = all_languages["Xenomorph"] var/ending = copytext(message, length(message)) if (speaking) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3584fe94a7f..c52ba708661 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -634,4 +634,4 @@ return 0 /mob/living/carbon/is_muzzled() - return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4448798c28a..68e7d680862 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1397,6 +1397,15 @@ else return 0 +/mob/living/carbon/human/get_default_language() + if(default_language) + return default_language + + if(!species) + return null + return species.default_language ? all_languages[species.default_language] : null + + /mob/living/carbon/human/proc/bloody_doodle() set category = "IC" set name = "Write in blood" diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 1eda618789a..53d6689d36e 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -16,7 +16,7 @@ if(stat == 2) return say_dead(message) return - + if (is_muzzled()) src << "You're muzzled and cannot speak!" return @@ -40,8 +40,8 @@ var/datum/language/speaking = parse_language(message) if(speaking) message = copytext(message,2+length(speaking.key)) - else if(species.default_language) - speaking = all_languages[species.default_language] + else + speaking = get_default_language() var/ending = copytext(message, length(message)) if (speaking) diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm new file mode 100644 index 00000000000..b0de6465aff --- /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 b5ec333f1fa..6d6706a056a 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -64,6 +64,9 @@ proc/get_radio_key_from_channel(var/channel) if(!istype(dongle)) return if(dongle.translate_binary) return 1 +/mob/living/proc/get_default_language() + return default_language + /mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/italics=0, var/message_range = world.view, var/sound/speech_sound, var/sound_vol) var/turf/T = get_turf(src) diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index ba5b0ad4f82..125dc9ea992 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -71,9 +71,15 @@ //parse language key and consume it var/datum/language/speaking = parse_language(message) if (speaking) - verb = speaking.speech_verb - message = trim(copytext(message,2+length(speaking.key))) + message = trim(copytext(message,2+length(speaking.key))) + else + speaking = get_default_language() + + if (speaking) + verb = speaking.speech_verb + // This is broadcast to all mobs with the language, + // irrespective of distance or anything else. if(speaking.flags & HIVEMIND) speaking.broadcast(src,trim(message)) return 1 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index e1dfc6907bb..6d0b1768f03 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -237,9 +237,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 diff --git a/paradise.dme b/paradise.dme index 899cc7bde06..47cb9cbd971 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1148,6 +1148,7 @@ #include "code\modules\mob\dead\observer\say.dm" #include "code\modules\mob\dead\observer\spells.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"