НЕ ТРОГАЙ ЭТУ ХРЕНЬ ИЗ ЯЩИКА!
\
diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
index 59480303a93..c75ca6f45d7 100644
--- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm
+++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
@@ -104,7 +104,7 @@
// Papers
/obj/item/paper/fluff/ruins/oldstation
name = "Cryo Awakening Alert"
- language = "Sol Common"
+ language = LANGUAGE_SOL_COMMON
info = "**WARNING**
Catastrophic damage sustained to station. Powernet exhausted to reawaken crew.
Immediate Objectives
1: Activate emergency power generator
2: Lift station lockdown on the bridge
Please locate the 'Damage Report' on the bridge for a detailed situation report."
/obj/item/paper/fluff/ruins/oldstation/damagereport
@@ -152,7 +152,7 @@
*eep th* *e**l of **m..
The last words completly faded." // yep, the temperature overheat, some players set power to 5 and make the gen to blow up, rip oldstation.
/obj/item/paper/ruins/oldstation
- language = "Sol Common"
+ language = LANGUAGE_SOL_COMMON
/obj/item/paper/ruins/oldstation/protoinventory
name = "Theta RnD Prototype Inventory Secure Storage"
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index f976ade0de9..0f4169430a5 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -140,7 +140,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
var/e_colour = "#000000" //Eye color
var/alt_head = "None" //Alt head style.
var/species = "Human"
- var/language = "None" //Secondary language
+ var/language = "None" //Secondary language for choise.
var/autohiss_mode = AUTOHISS_FULL //Species autohiss level. OFF, BASIC, FULL.
var/tts_seed = null
@@ -309,7 +309,6 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
species = initial(species)
S = GLOB.all_species[species]
random_character()
-
dat += "
"
dat += "Name: "
@@ -1547,6 +1546,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
species = tgui_input_list(user, "Please select a species", "Character Generation", sortTim(new_species, cmp = /proc/cmp_text_asc))
if(!species)
+ species = prev_species
return
var/datum/species/NS = GLOB.all_species[species]
if(!istype(NS)) //The species was invalid. Notify the user and fail out.
@@ -1614,7 +1614,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
alt_head = "None" //No alt heads on species that don't have them.
speciesprefs = 0 //My Vox tank shouldn't change how my future Grey talks.
-
+ language = LANGUAGE_NONE
body_accessory = null //no vulptail on humans damnit
body_accessory = random_body_accessory(NS.name, NS.optional_body_accessory)
@@ -1641,14 +1641,18 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
alert(user, "There are not currently any available secondary languages.")
else
*/
- for(var/L in GLOB.all_languages)
- var/datum/language/lang = GLOB.all_languages[L]
- if(!(lang.flags & RESTRICTED))
- new_languages += lang.name
-
- language = tgui_input_list(user, "Please select a secondary language", "Character Generation", sortTim(new_languages, cmp = /proc/cmp_text_asc))
- if(!language)
+ for(var/language_name in GLOB.all_languages)
+ var/datum/language/lang = GLOB.all_languages[language_name]
+ if(lang.flags & UNIQUE)
+ if(language_name in S.secondary_langs)
+ new_languages += language_name
+ else if(!(lang.flags & RESTRICTED))
+ new_languages += language_name
+
+ var/new_language = tgui_input_list(user, "Please select a secondary language", "Character Generation", sortTim(new_languages, cmp = /proc/cmp_text_asc))
+ if(!new_language)
return
+ language = new_language
if("autohiss_mode")
if(S.autohiss_basic_map)
@@ -2614,6 +2618,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
else if(firstspace == name_length)
real_name += "[character.gender==FEMALE ? pick(GLOB.last_names_female) : pick(GLOB.last_names)]"
+
character.add_language(language)
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index a930408f626..7ee5a2169cc 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -1,35 +1,64 @@
#define SCRAMBLE_CACHE_LEN 20
-
/*
+ When creating new 2 letter language keys, use the following naming scheme:
+ For languages with a compound name, use the first letter of each word whenever possible, for example: Sol Common = "sc".
+ For racial languages, whenever possible, use the first two letters of the race name or use euphony for associative rows, for example: Vulpkanin = "vu" or Canilunzt = "ca".
+ Also don't forget about code/__DEFINES/language.dm
+
+
Datum based languages. Easily editable and modular.
Busy letters for language:
- a b d f g j k o q v x y
- aa as bo db fa fm fn fs vu
+ un ta vu sk vo di tr ki sl gr dr ni
+ xm db wr xh ts ch hs sh ab gl bo bi dt
+ sw gc sc tb gt cl nr mo ne st fa wo
+
+
+ Busy letters by radio(eng):
+ c e h i l m n p r s t u w x
+
- Busy symbols for language:
- 0 1 2 3 4 5 6 7 8 9
- % ? ^
+ Busy letters by radio(rus):
+ б г д е ё з к р с т у ц ч ш ы ь я э
- CAUTION! The key must not repeat the key of the radio channel
- and must not contain prohibited characters
+
+ Busy symbols by radio:
+ ~ , $ _ - + * 1 2 3
+
+ CAUTION! The key must not repeat the key of the radio channel
+ and must not contain prohibited characters!
*/
/datum/language
- var/name = "an unknown language" // Fluff name of language if any.
- var/desc = "A language." // Short description for 'Check Languages'.
- var/speech_verb = "says" // 'says', 'hisses', 'farts'.
- var/ask_verb = "asks" // Used when sentence ends in a ?
- var/list/exclaim_verbs = list("exclaims") // Used when sentence ends in a !
- var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead.
- var/colour = "body" // CSS style to use for strings in this language.
- var/key = "x" // Character used to speak in language eg. :o for Unathi.
- var/flags = 0 // Various language flags.
- var/native // If set, non-native speakers will have trouble speaking.
- var/list/syllables // Used when scrambling text for a non-speaker.
- var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string.
- var/follow = 0 // Applies to HIVEMIND languages - should a follow link be included for dead mobs?
- var/english_names = 0 // Do we want English names by default, no matter what?
+ /// Fluff name of language if any.
+ var/name = "an unknown language"
+ /// Short description for 'Check Languages'.
+ var/desc = "A language."
+ /// 'says', 'hisses', 'farts'.
+ var/speech_verb = "says"
+ /// Used when sentence ends in a '?'.
+ var/ask_verb = "asks"
+ /// Used when sentence ends in a '!'.
+ var/list/exclaim_verbs = list("exclaims")
+ /// Optional. When not specified speech_verb + quietly/softly is used instead.
+ var/whisper_verb
+ /// CSS style to use for strings in this language.
+ var/colour = "body"
+ /// Character used to speak in language eg. '"un"' for Unathi.
+ var/key = "key"
+ /// Various language flags.
+ var/flags = 0
+ /// If set, non-native speakers will have trouble speaking.
+ var/native
+ /// Used when scrambling text for a non-speaker.
+ var/list/syllables
+ /// Likelihood of getting a space in the random scramble string.
+ var/list/space_chance = 55
+ /// Applies to HIVEMIND languages - should a follow link be included for dead mobs?
+ var/follow = FALSE
+ /// Do we want English names by default, no matter what?
+ var/english_names = FALSE
+ /// List that saves sentences spoken in this language, so as not to generate different scrambles of syllables for the same sentences.
var/list/scramble_cache = list()
/// Do we want to override the word-join character for scrambled text? If null, defaults to " " or ". "
var/join_override
@@ -65,20 +94,20 @@
var/input_size = length(input)
var/scrambled_text = ""
- var/capitalize = 1
+ var/capitalize = TRUE
while(length(scrambled_text) < input_size)
var/next = pick(syllables)
if(capitalize)
next = capitalize(next)
- capitalize = 0
+ capitalize = FALSE
scrambled_text += next
var/chance = rand(100)
if(join_override)
scrambled_text += join_override
else if(chance <= 5)
scrambled_text += ". "
- capitalize = 1
+ capitalize = TRUE
else if(chance > 5 && chance <= space_chance)
scrambled_text += " "
@@ -116,7 +145,7 @@
if(!speaker_mask)
speaker_mask = speaker.name
- var/msg = "[name], [speaker_mask] [get_spoken_verb(message)], [format_message(message)]"
+ var/msg = "[name], [speaker_mask] [genderize_decode(speaker, get_spoken_verb(message))], [format_message(message)]"
for(var/mob/player in GLOB.player_list)
if(istype(player,/mob/dead) && follow)
@@ -145,8 +174,7 @@
/datum/language/noise
name = "Noise"
desc = "Noises"
- key = ""
- flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER
+ flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER|NOBABEL
/datum/language/noise/format_message(message)
return " "
@@ -165,7 +193,7 @@
ask_verb = "hisses"
exclaim_verbs = list("roars")
colour = "soghun"
- key = "o"
+ key = "un"
flags = RESTRICTED
syllables = list("za","az","ze","ez","zi","iz","zo","oz","zu","uz","zs","sz","ha","ah","he","eh","hi","ih", \
"ho","oh","hu","uh","hs","sh","la","al","le","el","li","il","lo","ol","lu","ul","ls","sl","ka","ak","ke","ek", \
@@ -186,7 +214,7 @@
ask_verb = "mrowls"
exclaim_verbs = list("yowls")
colour = "tajaran"
- key = "j"
+ key = "ta"
flags = RESTRICTED
syllables = list("rr","rr","tajr","kir","raj","kii","mir","kra","ahk","nal","vah","khaz","jri","ran","darr", \
"mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r", \
@@ -198,7 +226,7 @@
var/list/ru_name_syllables = list("кан","тай","кир","раи","кии","мир","кра","тэк","нал","вар","хар","марр","ран","дарр", \
"мирк","ири","дин","манг","рик","зар","раз","кель","шера","тар","кей","ар","но","маи","зир","кер","нир","ра",\
"ми","рир","сей","эка","гир","ари","нэй","нре","ак","таир","эрай","жин","мра","зур","рин","сар","кин","рид","эра","ри","эна")
- var/apostrophe = "’"
+ var/apostrophe = "'"
var/new_name = ""
var/full_name = ""
@@ -226,7 +254,7 @@
ask_verb = "rurs"
exclaim_verbs = list("barks")
colour = "vulpkanin"
- key = "7"
+ key = "vu"
flags = RESTRICTED
syllables = list("rur","ya","cen","rawr","bar","kuk","tek","qat","uk","wu","vuh","tah","tch","schz","auch", \
"ist","ein","entch","zwichs","tut","mir","wo","bis","es","vor","nic","gro","lll","enem","zandt","tzch","noch", \
@@ -240,7 +268,7 @@
ask_verb = "warbles"
exclaim_verbs = list("warbles")
colour = "skrell"
- key = "k"
+ key = "sk"
flags = RESTRICTED
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
@@ -251,7 +279,7 @@
ask_verb = "creels"
exclaim_verbs = list("loudly skrees")
colour = "vox"
- key = "v"
+ key = "vo"
flags = RESTRICTED | WHITELISTED
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","yi","chi","cha","kah", \
"SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
@@ -273,7 +301,7 @@
ask_verb = "creaks"
exclaim_verbs = list("rustles")
colour = "diona"
- key = "q"
+ key = "di"
flags = RESTRICTED
syllables = list("hs","zt","kr","st","sh")
@@ -289,7 +317,7 @@
ask_verb = "queries"
exclaim_verbs = list("exclaims")
colour = "trinary"
- key = "5"
+ key = "tr"
flags = RESTRICTED | WHITELISTED
syllables = list("0+2+0+1+1","0+1+2+2+2","1+0+1+0+0","1+0+2+1+0","2+1+0+1+2","0+2+0+1+1","2+1+2+0+0","1+0+0+2","2+0+0+1","0+0+0+2","0+0+1+2","0+0+1+2","0+0+0","1+2+0","1+2+1","2+0+1","2+2+0","1+0","1+1","0")
@@ -308,7 +336,7 @@
ask_verb = "rubs their antennae together"
exclaim_verbs = list("rubs their antennae together")
colour = "kidan"
- key = "4"
+ key = "ki"
flags = RESTRICTED | WHITELISTED
syllables = list("click","clack")
@@ -328,7 +356,7 @@
ask_verb = "bubbles and pops"
exclaim_verbs = list("bubbles and pops")
colour = "slime"
- key = "f"
+ key = "sl"
flags = RESTRICTED | WHITELISTED
syllables = list("blob","plop","pop","bop","boop")
@@ -339,7 +367,7 @@
ask_verb = "inquires"
exclaim_verbs = list("imparts")
colour = "abductor"
- key = "^"
+ key = "gr"
flags = RESTRICTED | HIVEMIND
follow = TRUE
@@ -374,7 +402,7 @@
ask_verb = "hums"
exclaim_verbs = list("rumbles")
colour = "drask"
- key = "%"
+ key = "dr"
flags = RESTRICTED | WHITELISTED
syllables = list("hoorb","vrrm","ooorm","urrrum","ooum","ee","ffm","hhh","mn","ongg")
@@ -391,7 +419,7 @@
ask_verb = "flaps"
exclaim_verbs = list("chatters")
colour = "moth"
- key = "#"
+ key = "ni"
flags = RESTRICTED | WHITELISTED
join_override = "-"
syllables = list("år", "i", "går", "sek", "mo", "ff", "ok", "gj", "ø", "gå", "la", "le",
@@ -412,10 +440,10 @@
speech_verb = "says"
exclaim_verbs = list("exclaims", "shouts", "yells")
whisper_verb = "whispers"
- key = "9"
+ key = "gc"
flags = RESTRICTED
syllables = list("blah","blah","blah","bleh","meh","neh","nah","wah")
- english_names = 1
+ english_names = TRUE
/datum/language/human
name = "Sol Common"
@@ -424,10 +452,10 @@
exclaim_verbs = list("exclaims", "shouts", "yells")
whisper_verb = "whispers"
colour = "solcom"
- key = "1"
+ key = "sc"
flags = RESTRICTED
syllables = list("tao","shi","tzu","yi","com","be","is","i","op","vi","ed","lec","mo","cle","te","dis","e")
- english_names = 1
+ english_names = TRUE
// Galactic common languages (systemwide accepted standards).
/datum/language/trader
@@ -435,7 +463,7 @@
desc = "Maintained by the various trading cartels in major systems, this elegant, structured language is used for bartering and bargaining."
speech_verb = "enunciates"
colour = "say_quote"
- key = "2"
+ key = "tb"
space_chance = 100
syllables = list("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit",
"sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore",
@@ -453,7 +481,7 @@
ask_verb = "gnarls"
exclaim_verbs = list("snarls")
colour = "gutter"
- key = "3"
+ key = "gt"
syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh","gra")
/datum/language/clown
@@ -463,7 +491,7 @@
ask_verb = "honks"
exclaim_verbs = list("toots", "wubs", "honks")
colour = "clown"
- key = "0"
+ key = "cl"
syllables = list ("honk","squeak","bonk","toot","narf","zub","wee","wub","norf")
/datum/language/com_srus
@@ -473,9 +501,9 @@
whisper_verb = "mutters"
exclaim_verbs = list("exaggerates")
colour = "com_srus"
- key = "?"
+ key = "nr"
space_chance = 65
- english_names = 1
+ english_names = TRUE
syllables = list("dyen","bar","bota","vyek","tvo","slov","slav","syen","doup","vah","laz","gloz","yet",
"nyet","da","sky","glav","glaz","netz","doomat","zat","moch","boz",
"comy","vrad","vrade","tay","bli","ay","nov","livn","tolv","glaz","gliz",
@@ -493,7 +521,7 @@
ask_verb = "chitters"
exclaim_verbs = list("buzzes")
colour = "alien"
- key = "y"
+ key = "wr"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -513,18 +541,18 @@
speech_verb = "hisses"
ask_verb = "hisses"
exclaim_verbs = list("hisses")
- key = "6"
+ key = "xm"
flags = RESTRICTED
syllables = list("sss","sSs","SSS")
/datum/language/xenos
- name = "Hivemind"
+ name = "Xenomorph Hivemind"
desc = "Xenomorphs have the strange ability to commune over a psychic hivemind."
speech_verb = "hisses"
ask_verb = "hisses"
exclaim_verbs = list("hisses")
colour = "alien"
- key = "a"
+ key = "xh"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -535,17 +563,17 @@
ask_verb = "chitters"
exclaim_verbs = list("chitters")
colour = "terrorspider"
- key = "as"
+ key = "ts"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
/datum/language/ling
- name = "Changeling"
+ name = "Changeling Hivemind"
desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance."
speech_verb = "says"
colour = "changeling"
- key = "g"
+ key = "ch"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -558,11 +586,11 @@
..(speaker,message)
/datum/language/eventling
- name = "Infiltrated changeling"
+ name = "Infiltrated Changeling Hivemind"
desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance."
speech_verb = "says"
colour = "changeling"
- key = "gi"
+ key = "hs"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -579,7 +607,7 @@
desc = "Shadowlings and their thralls are capable of communicating over a psychic hivemind."
speech_verb = "says"
colour = "shadowling"
- key = "8"
+ key = "sh"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -598,7 +626,7 @@
ask_verb = "gibbers"
exclaim_verbs = list("gibbers")
colour = "abductor"
- key = "aa" //doesn't matter, this is their default and only language
+ key = "ab"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
@@ -613,15 +641,21 @@
return TRUE
return FALSE
-/datum/language/abductor/golem
+/datum/language/golem
name = "Golem Mindlink"
desc = "Communicate with other alien alloy golems through a psychic link."
+ speech_verb = "gibbers"
+ ask_verb = "gibbers"
+ exclaim_verbs = list("gibbers")
+ colour = "abductor"
+ key = "gl"
+ flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
-/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
- return TRUE
+/datum/language/golem/broadcast(mob/living/speaker, message, speaker_mask)
+ ..(speaker,message,speaker.real_name)
-/datum/language/corticalborer
+/datum/language/borer
name = "Cortical Link"
desc = "Cortical borers possess a strange link between their tiny minds."
speech_verb = "sings"
@@ -632,7 +666,7 @@
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
-/datum/language/corticalborer/broadcast(mob/living/speaker, message, speaker_mask)
+/datum/language/borer/broadcast(mob/living/speaker, message, speaker_mask)
var/mob/living/simple_animal/borer/B
if(iscarbon(speaker))
@@ -652,7 +686,7 @@
speech_verb = "states"
ask_verb = "queries"
exclaim_verbs = list("declares")
- key = "b"
+ key = "bi"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
var/drone_only
@@ -699,7 +733,7 @@
ask_verb = "transmits"
exclaim_verbs = list("transmits")
colour = "say_quote"
- key = "d"
+ key = "dt"
flags = RESTRICTED | HIVEMIND | NOBABEL
drone_only = TRUE
follow = TRUE
@@ -722,35 +756,44 @@
ask_verb = "tones"
exclaim_verbs = list("tones")
colour = "say_quote"
- key = "as"//Zwarmer...Or Zerg!
+ key = "sw"//Zwarmer...Or Zerg!
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
-// Language handling.
-/mob/proc/add_language(language)
- var/datum/language/new_language = GLOB.all_languages[language]
+/datum/language/human/monkey
+ name = "Chimpanzee"
+ desc = "Ook ook ook."
+ speech_verb = "chimpers"
+ ask_verb = "chimpers"
+ exclaim_verbs = list("screeches")
+ key = "mo"
- if(!istype(new_language) || (new_language in languages))
- return FALSE
+/datum/language/skrell/monkey
+ name = "Neara"
+ desc = "Squik squik squik."
+ key = "ne"
- languages |= new_language
- return TRUE
+/datum/language/unathi/monkey
+ name = "Stok"
+ desc = "Hiss hiss hiss."
+ key = "st"
-/mob/proc/remove_language(rem_language)
- var/datum/language/L = GLOB.all_languages[rem_language]
- . = (L in languages)
- languages.Remove(L)
+/datum/language/tajaran/monkey
+ name = "Farwa"
+ desc = "Meow meow meow."
+ key = "fa"
+
+/datum/language/vulpkanin/monkey
+ name = "Wolpin"
+ desc = "Bark bark bark."
+ key = "wo"
-/mob/living/remove_language(rem_language)
- var/datum/language/L = GLOB.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_language(datum/language/speaking)
return universal_speak || (speaking && speaking.flags & INNATE) || (speaking in languages)
+
//TBD
/mob/proc/check_lang_data()
. = ""
@@ -759,6 +802,7 @@
if(!(L.flags & NONGLOBAL))
. += "[L.name] (:[L.key]) [L.desc] " + /mob/living/check_lang_data() . = "" @@ -770,7 +814,8 @@ if(L == default_language) . += "[L.name] (:[L.key]) - default - reset [L.desc] " else - . += "[L.name] (:[L.key]) - set default [L.desc] " + . += "[L.name] (:[L.key]) - set default [L.desc] " + /mob/verb/check_languages() set name = "Check Known Languages" @@ -781,6 +826,7 @@ popup.set_content(check_lang_data()) popup.open() + /mob/living/Topic(href, href_list) . = ..() if(.) @@ -795,33 +841,43 @@ check_languages() return TRUE -/datum/language/human/monkey - name = "Chimpanzee" - desc = "Ook ook ook." - speech_verb = "chimpers" - ask_verb = "chimpers" - exclaim_verbs = list("screeches") - key = "fm" -/datum/language/skrell/monkey - name = "Neara" - desc = "Squik squik squik." - key = "fn" +// Language handling. +/mob/proc/add_language(language_name) + var/datum/language/new_language = GLOB.all_languages[language_name] + if(new_language in languages) + return FALSE + if(!istype(new_language)) + new_language = GLOB.all_languages[convert_lang_key_to_name(language_name)] + if(!istype(new_language)) + return FALSE -/datum/language/unathi/monkey - name = "Stok" - desc = "Hiss hiss hiss." - key = "fs" + languages |= new_language + return TRUE -/datum/language/tajaran/monkey - name = "Farwa" - desc = "Meow meow meow." - key = "fa" -/datum/language/vulpkanin/monkey - name = "Wolpin" - desc = "Bark bark bark." - key = "vu" +/mob/proc/remove_language(language_name) + var/datum/language/rem_language = GLOB.all_languages[language_name] + if(!istype(rem_language)) + rem_language = GLOB.all_languages[convert_lang_key_to_name(language_name)] + if(!istype(rem_language)) + return FALSE + + . = (rem_language in languages) + languages.Remove(rem_language) + + +/mob/living/remove_language(language_name) + var/datum/language/rem_language = GLOB.all_languages[language_name] + if(!istype(rem_language)) + rem_language = GLOB.all_languages[convert_lang_key_to_name(language_name)] + if(!istype(rem_language)) + return FALSE + + if(default_language == rem_language) + default_language = null + return ..() + /mob/proc/grant_all_babel_languages() for(var/la in GLOB.all_languages) @@ -830,8 +886,19 @@ continue languages |= new_language + /mob/proc/grant_all_languages() for(var/la in GLOB.all_languages) add_language(la) + +/proc/convert_lang_key_to_name(language_key) + var/static/list/language_keys_and_names = list() + if(!language_keys_and_names.len) + for(var/language_name in GLOB.all_languages) + var/datum/language/language = GLOB.all_languages[language_name] + language_keys_and_names[language.key] = language_name + return language_keys_and_names[language_key] + + #undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 102026c0f0b..ee98ba30d46 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -89,7 +89,7 @@ /mob/living/carbon/alien/get_default_language() if(default_language) return default_language - return GLOB.all_languages["Xenomorph"] + return GLOB.all_languages[LANGUAGE_XENOS] /mob/living/carbon/alien/say_quote(var/message, var/datum/language/speaking = null) var/verb = "hisses" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 6517c1543da..209dec3988c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -20,8 +20,8 @@ if(name == "alien") name = text("alien ([rand(1, 1000)])") real_name = name - add_language("Xenomorph") - add_language("Hivemind") + add_language(LANGUAGE_XENOS) + add_language(LANGUAGE_HIVE_XENOS) ..() AddSpell(new /obj/effect/proc_holder/spell/alien_spell/regurgitate) AddComponent(/datum/component/footstep, FOOTSTEP_MOB_CLAW, 0.5, -11) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 715d8f9efe3..a7b92f1a0ab 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -25,8 +25,8 @@ name = "alien larva ([rand(1, 1000)])" real_name = name regenerate_icons() - add_language("Xenomorph") - add_language("Hivemind") + add_language(LANGUAGE_XENOS) + add_language(LANGUAGE_HIVE_XENOS) hide_action = new hide_action.Grant(src) ..() diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 6a1f291fa3c..bbfc5d718fc 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -9,7 +9,7 @@ /mob/living/carbon/brain/New() ..() - add_language("Galactic Common") + add_language(LANGUAGE_GALACTIC_COMMON) /mob/living/carbon/brain/Destroy() diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index ca48bd80510..b1c1e7f3d31 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -132,12 +132,12 @@ "задерживает дыхание!") // Language/culture vars. - var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers. - var/language = "Galactic Common" // Default racial language, if any. - var/secondary_langs = list() // The names of secondary languages that are available to this species. - var/list/speech_sounds // A list of sounds to potentially play when speaking. - var/list/speech_chance // The likelihood of a speech sound playing. - var/scream_verb = "крич%(ит,ат)%" // Special symbols used to apply correct gender. See [/proc/genderize_decode] for more info. + var/default_language = LANGUAGE_GALACTIC_COMMON // Default language is used when 'say' is used without modifiers. + var/language = LANGUAGE_GALACTIC_COMMON // Default racial language, if any. + var/secondary_langs = list() // The keys of secondary languages that are available to this species. + var/list/speech_sounds // A list of sounds to potentially play when speaking. + var/list/speech_chance // The likelihood of a speech sound playing. + var/scream_verb = "крич%(ит,ат)%" // Special symbols used to apply correct gender. See [/proc/genderize_decode] for more info. var/female_giggle_sound = list('sound/voice/giggle_female_1.ogg','sound/voice/giggle_female_2.ogg','sound/voice/giggle_female_3.ogg') var/male_giggle_sound = list('sound/voice/giggle_male_1.ogg','sound/voice/giggle_male_2.ogg') var/male_scream_sound = list('sound/goonstation/voice/male_scream.ogg') diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index c76dfbebea1..326c270790e 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -4,8 +4,8 @@ a = "an" icobase = 'icons/mob/human_races/r_abductor.dmi' deform = 'icons/mob/human_races/r_abductor.dmi' - language = "Abductor Mindlink" - default_language = "Abductor Mindlink" + language = LANGUAGE_HIVE_ABDUCTOR + default_language = LANGUAGE_HIVE_ABDUCTOR eyes = "blank_eyes" has_organ = list( INTERNAL_ORGAN_HEART = /obj/item/organ/internal/heart, @@ -42,8 +42,8 @@ ..() H.gender = NEUTER H.languages.Cut() //Under no condition should you be able to speak any language - H.add_language("Abductor Mindlink") //other than over the abductor's own mindlink - H.add_language("Psionic Communication") // still grey enouhg to speak in psi link + H.add_language(LANGUAGE_HIVE_ABDUCTOR) //other than over the abductor's own mindlink + H.add_language(LANGUAGE_GREY) // still grey enouhg to speak in psi link var/datum/atom_hud/abductor_hud = GLOB.huds[DATA_HUD_ABDUCTOR] abductor_hud.add_hud_to(H) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 2611b5f8a6e..7778d5d34f5 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -3,7 +3,7 @@ name_plural = "Dionaea" icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' - language = "Rootspeak" + language = LANGUAGE_DIONA speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16] speech_chance = 20 unarmed_type = /datum/unarmed_attack/diona diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index 4646a5c7a46..9552da20cbd 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -3,7 +3,7 @@ name_plural = "Drask" icobase = 'icons/mob/human_races/r_drask.dmi' deform = 'icons/mob/human_races/r_drask.dmi' - language = "Orluum" + language = LANGUAGE_DRASK eyes = "drask_eyes_s" speech_sounds = list('sound/voice/drasktalk.ogg') diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 10fb1bb2cec..0d5cb77a5ce 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -412,8 +412,8 @@ name = "Голем из инопланетных сплавов" golem_colour = rgb(51, 51, 51) skinned_type = /obj/item/stack/sheet/mineral/abductor - language = "Golem Mindlink" - default_language = "Golem Mindlink" + language = LANGUAGE_HIVE_GOLEM + default_language = LANGUAGE_HIVE_GOLEM speed_mod = 1 //faster info_text = "Будучи големом из инопланетных сплавов, вы быстрее двигаетесь и со временем регенерируете. Однако, вы можете разговаривать только с големами из того же материала, что и вы." prefix = "Инопланетн" //неполное окончание т.к. гендеризация идет через другую функцию (/datum/species/golem/get_random_name()) @@ -441,8 +441,8 @@ /datum/species/golem/alloy/on_species_gain(mob/living/carbon/human/H) ..() H.languages.Cut() - H.add_language("Golem Mindlink") - H.add_language("Psionic Communication") // still grey enouhg to speak in psi link + H.add_language(LANGUAGE_HIVE_GOLEM) + H.add_language(LANGUAGE_GREY) // still grey enouhg to speak in psi link //Regenerates like dionas, less resistant /datum/species/golem/wood diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index e37bd321c08..3c464c0a042 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -3,7 +3,7 @@ name_plural = "Greys" icobase = 'icons/mob/human_races/r_grey.dmi' deform = 'icons/mob/human_races/r_def_grey.dmi' - language = "Psionic Communication" + language = LANGUAGE_GREY eyes = "grey_eyes_s" butt_sprite = "grey" diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 784a49f2145..f1ff075a0b6 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/r_human.dmi' deform = 'icons/mob/human_races/r_def_human.dmi' primitive_form = /datum/species/monkey - language = "Sol Common" + language = LANGUAGE_SOL_COMMON species_traits = list(LIPS) skinned_type = /obj/item/stack/sheet/animalhide/human clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index 942eafc42cf..33d2da40f10 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -6,7 +6,7 @@ name_plural = "Kidan" icobase = 'icons/mob/human_races/r_kidan.dmi' deform = 'icons/mob/human_races/r_def_kidan.dmi' - language = "Chittin" + language = LANGUAGE_KIDAN unarmed_type = /datum/unarmed_attack/claws brute_mod = 0.8 diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index 76450d06c93..3df1176a6c1 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -10,7 +10,7 @@ icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' - language = "Trinary" + language = LANGUAGE_TRINARY remains_type = /obj/effect/decal/remains/robot skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources! diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 3e0d87ae678..1b1bc2be776 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -8,8 +8,8 @@ damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' - language = "Galactic Common" - default_language = "Chimpanzee" + language = LANGUAGE_GALACTIC_COMMON + default_language = LANGUAGE_MONKEY_HUMAN species_traits = list(NO_EXAMINE) skinned_type = /obj/item/stack/sheet/animalhide/monkey greater_form = /datum/species/human @@ -88,7 +88,7 @@ deform = 'icons/mob/human_races/monkeys/r_farwa.dmi' greater_form = /datum/species/tajaran - default_language = "Farwa" + default_language = LANGUAGE_MONKEY_TAJARAN blood_species = "Tajaran" flesh_color = "#AFA59E" base_color = "#000000" @@ -133,7 +133,7 @@ deform = 'icons/mob/human_races/monkeys/r_wolpin.dmi' greater_form = /datum/species/vulpkanin - default_language = "Wolpin" + default_language = LANGUAGE_MONKEY_VULPKANIN blood_species = "Vulpkanin" flesh_color = "#966464" base_color = "#000000" @@ -177,7 +177,7 @@ deform = 'icons/mob/human_races/monkeys/r_neara.dmi' greater_form = /datum/species/skrell - default_language = "Neara" + default_language = LANGUAGE_MONKEY_SKRELL blood_species = "Skrell" flesh_color = "#8CD7A3" blood_color = "#1D2CBF" @@ -230,7 +230,7 @@ tail = "stoktail" greater_form = /datum/species/unathi - default_language = "Stok" + default_language = LANGUAGE_MONKEY_UNATHI blood_species = "Unathi" flesh_color = "#34AF10" base_color = "#000000" diff --git a/code/modules/mob/living/carbon/human/species/moth.dm b/code/modules/mob/living/carbon/human/species/moth.dm index c4febf4511b..75a2ca4f18e 100644 --- a/code/modules/mob/living/carbon/human/species/moth.dm +++ b/code/modules/mob/living/carbon/human/species/moth.dm @@ -8,7 +8,7 @@ /datum/species/moth name = "Nian" name_plural = "Nianae" - language = "Tkachi" + language = LANGUAGE_MOTH icobase = 'icons/mob/human_races/r_moth.dmi' deform = 'icons/mob/human_races/r_moth.dmi' inherent_factions = list("moth") diff --git a/code/modules/mob/living/carbon/human/species/nucleation.dm b/code/modules/mob/living/carbon/human/species/nucleation.dm index d8e2fd45f43..2953c547869 100644 --- a/code/modules/mob/living/carbon/human/species/nucleation.dm +++ b/code/modules/mob/living/carbon/human/species/nucleation.dm @@ -10,7 +10,7 @@ obselete. Ionizing radiation seems to cause resonance in some of their crystals, which seems to encourage regeneration \ and produces a calming effect on the individual. Nucleations are highly stigmatized, and are treated much in the same \ way as lepers were back on Earth." - language = "Sol Common" + language = LANGUAGE_SOL_COMMON burn_mod = 4 // holy shite, poor guys wont survive half a second cooking smores brute_mod = 2 // damn, double wham, double dam species_traits = list(LIPS, IS_WHITELISTED, NO_BREATHE, NO_BLOOD, NO_PAIN, NO_PAIN_FEEL, NO_SCAN, RADIMMUNE, VIRUSIMMUNE, NO_GERMS) diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm index 73e8bf812ce..26615a8f232 100644 --- a/code/modules/mob/living/carbon/human/species/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/skrell.dm @@ -3,7 +3,7 @@ name_plural = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' deform = 'icons/mob/human_races/r_def_skrell.dmi' - language = "Skrellian" + language = LANGUAGE_SKRELL primitive_form = /datum/species/monkey/skrell blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm index 38662dfe077..718a0877707 100644 --- a/code/modules/mob/living/carbon/human/species/slime.dm +++ b/code/modules/mob/living/carbon/human/species/slime.dm @@ -11,7 +11,7 @@ /datum/species/slime name = "Slime People" name_plural = "Slime People" - language = "Bubblish" + language = LANGUAGE_SLIME icobase = 'icons/mob/human_races/r_slime.dmi' deform = 'icons/mob/human_races/r_slime.dmi' remains_type = /obj/effect/decal/remains/slime diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index 6dc7561b9e7..6653346f4f9 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -3,7 +3,7 @@ name_plural = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi' - language = "Siik'tajr" + language = LANGUAGE_TAJARAN tail = "tajtail" skinned_type = /obj/item/stack/sheet/fur unarmed_type = /datum/unarmed_attack/claws diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index aacb8f8505d..53369bfb68b 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -3,7 +3,7 @@ name_plural = "Unathi" icobase = 'icons/mob/human_races/r_lizard.dmi' deform = 'icons/mob/human_races/r_def_lizard.dmi' - language = "Sinta'unathi" + language = LANGUAGE_UNATHI tail = "sogtail" speech_sounds = list('sound/voice/unathitalk.mp3', 'sound/voice/unathitalk2.mp3', 'sound/voice/unathitalk4.mp3') speech_chance = 33 @@ -152,8 +152,8 @@ blurb = "Пеплоходцы — рептильные гуманоиды, по-видимому, родственные унати. Но кажутся значительно менее развитыми. \ Они бродят по пустошам Лаваленда, поклоняются мёртвому городу и ловят ничего не подозревающих шахтёров." - language = "Sinta'unathi" - default_language = "Sinta'unathi" + language = LANGUAGE_UNATHI + default_language = LANGUAGE_UNATHI speed_mod = -0.80 species_traits = list(NOGUNS, LIPS, PIERCEIMMUNE) diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 75f48ccf266..b37ef8d384d 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/vox/r_vox.dmi' deform = 'icons/mob/human_races/vox/r_def_vox.dmi' dangerous_existence = TRUE - language = "Vox-pidgin" + language = LANGUAGE_VOX tail = "voxtail" speech_sounds = list('sound/voice/shriek1.ogg') speech_chance = 20 diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm index 23acc7ada8f..6df149c451e 100644 --- a/code/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -3,7 +3,7 @@ name_plural = "Vulpkanin" icobase = 'icons/mob/human_races/r_vulpkanin.dmi' deform = 'icons/mob/human_races/r_vulpkanin.dmi' - language = "Canilunzt" + language = LANGUAGE_VULPKANIN primitive_form = /datum/species/monkey/vulpkanin tail = "vulptail" skinned_type = /obj/item/stack/sheet/fur diff --git a/code/modules/mob/living/carbon/human/species/wryn.dm b/code/modules/mob/living/carbon/human/species/wryn.dm index a5d144f9c5b..3e56459e92e 100644 --- a/code/modules/mob/living/carbon/human/species/wryn.dm +++ b/code/modules/mob/living/carbon/human/species/wryn.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/r_wryn.dmi' deform = 'icons/mob/human_races/r_wryn.dmi' blacklisted = TRUE - language = "Wryn Hivemind" + language = LANGUAGE_WRYN tail = "wryntail" punchdamagelow = 0 punchdamagehigh = 1 @@ -180,7 +180,7 @@ user.visible_message("[user] начина[pluralize_ru(user.gender,"ет","ют")] яростно отрывать усики [target].") to_chat(target, "[user] схватил[genderize_ru(user.gender,"","а","о","и")] ваши усики и яростно тян[pluralize_ru(user.gender,"ет","ут")] их!") if(do_mob(user, target, 250)) - target.remove_language("Wryn Hivemind") + target.remove_language(LANGUAGE_WRYN) node.remove(target) node.forceMove(get_turf(target)) to_chat(user, "Вы слышите громкий хруст, когда безжалостно отрываете усики [target].") diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index f6c9c3abc0e..de181396eba 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -6,9 +6,9 @@ set category = "IC" if(language) - to_chat(src, "You will now speak [language] if you do not specify a language when speaking.") + to_chat(src, span_notice("You will now speak [language] if you do not specify a language when speaking.")) else - to_chat(src, "You will now speak whatever your standard default language is if you do not specify one when speaking.") + to_chat(src, span_notice("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 @@ -20,6 +20,6 @@ set category = "IC" if(default_language) - to_chat(src, "You are currently speaking [default_language] by default.") + to_chat(src, span_notice("You are currently speaking [default_language] by default.")) else - to_chat(src, "Your current default language is your species or mob type default.") + to_chat(src, span_notice("Your current default language is your species or mob type default.")) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index cc73ee1149f..3ee7bede863 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -1,26 +1,24 @@ GLOBAL_LIST_INIT(department_radio_keys, list( /* Busy letters by languages: - a b d f g j k o q v x y - aa as bo db fa fm fn fs vu + un ta vu sk vo di tr ki sl gr dr ni + xm db wr xh ts ch hs sh ab gl bo bi dt + sw gc sc tb gt cl nr mo ne st fa wo - Busy symbols by languages: - 0 1 2 3 4 5 6 7 8 9 - % ? ^ ' Busy letters by radio(eng): c e h i l m n p r s t u w x Busy letters by radio(rus): - б г д е ё з к р с т у ц ч ш ы ь я Э + б г д е ё з к р с т у ц ч ш ы ь я э Busy symbols by radio: ~ , $ _ - + * 1 2 3 - CAUTION! The key must not repeat the key of the languages (language.dm) - and must not contain prohibited characters + CAUTION! The key must not repeat the key of the languages (language.dm) + and must not contain prohibited characters! */ // English text lowercase ":r" = "right ear", "#r" = "right ear", "№r" = "right ear", ".r" = "right ear", @@ -213,20 +211,9 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) return say_dead(message) return FALSE - var/message_mode = parse_message_mode(message, "headset") - if(copytext(message, 1, 2) == "*") return emote(copytext(message, 2), intentional = TRUE) - //parse the radio code and consume it - if(message_mode) - if(message_mode == "headset") - message = copytext_char(message, 2) //it would be really nice if the parse procs could do this for us. - else - message = copytext_char(message, 3) - - message = trim_left(message) - var/ending = copytext(message, length(message)) if(!(ending in list("!", "?", ",", ".")) && length(message) != 0) message += "." @@ -238,15 +225,28 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) else message_pieces = parse_languages(message) - if(istype(message_pieces, /datum/multilingual_say_piece)) // Little quirk to just easily deal with HIVEMIND languages - var/datum/multilingual_say_piece/S = message_pieces // Yay BYOND's hilarious typecasting - S.speaking.broadcast(src, S.message) - return TRUE - if(!LAZYLEN(message_pieces)) . = FALSE CRASH("Message failed to generate pieces. [message] - [json_encode(message_pieces)]") + var/datum/multilingual_say_piece/first_piece = message_pieces[1] + + if(first_piece.speaking?.flags & HIVEMIND) + first_piece.speaking.broadcast(src, first_piece.message) + return TRUE + + var/message_mode = parse_message_mode(first_piece.message, "headset") + + //parse the radio code and consume it + if(message_mode) + if(message_mode == "headset") + first_piece.message = copytext_char(first_piece.message, 2) //it would be really nice if the parse procs could do this for us. + else + first_piece.message = copytext_char(first_piece.message, 3) + + first_piece.message = trim_left(first_piece.message) + verb = say_quote(message, first_piece.speaking) + if(message_mode == "cords") if(iscarbon(src)) var/mob/living/carbon/C = src @@ -256,9 +256,6 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) V.speak_with(message) //words come before actions return TRUE - var/datum/multilingual_say_piece/first_piece = message_pieces[1] - verb = say_quote(message, first_piece.speaking) - if(is_muzzled()) var/obj/item/clothing/mask/muzzle/G = wear_mask if(G.mute == MUZZLE_MUTE_ALL) //if the mask is supposed to mute you completely or just muffle you diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 60351913f9f..574e554454b 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -171,24 +171,24 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( add_ai_verbs(src) //Languages - add_language("Robot Talk", 1) - add_language("Galactic Common", 1) - add_language("Sol Common", 1) - add_language("Tradeband", 1) - add_language("Neo-Russkiya", 1) - add_language("Gutter", 1) - add_language("Sinta'unathi", 1) - add_language("Siik'tajr", 1) - add_language("Canilunzt", 1) - add_language("Skrellian", 1) - add_language("Vox-pidgin", 1) - add_language("Orluum", 1) - add_language("Rootspeak", 1) - add_language("Trinary", 1) - add_language("Chittin", 1) - add_language("Bubblish", 1) - add_language("Clownish", 1) - add_language("Tkachi", 1) + add_language(LANGUAGE_BINARY, 1) + add_language(LANGUAGE_GALACTIC_COMMON, 1) + add_language(LANGUAGE_SOL_COMMON, 1) + add_language(LANGUAGE_TRADER, 1) + add_language(LANGUAGE_NEO_RUSSIAN, 1) + add_language(LANGUAGE_GUTTER, 1) + add_language(LANGUAGE_UNATHI, 1) + add_language(LANGUAGE_TAJARAN, 1) + add_language(LANGUAGE_VULPKANIN, 1) + add_language(LANGUAGE_SKRELL, 1) + add_language(LANGUAGE_VOX, 1) + add_language(LANGUAGE_DRASK, 1) + add_language(LANGUAGE_DIONA, 1) + add_language(LANGUAGE_TRINARY, 1) + add_language(LANGUAGE_KIDAN, 1) + add_language(LANGUAGE_SLIME, 1) + add_language(LANGUAGE_CLOWN, 1) + add_language(LANGUAGE_MOTH, 1) if(!safety)//Only used by AIize() to successfully spawn an AI. if(!B)//If there is no player/brain inside. diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 44947315756..63e53a4c169 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -122,11 +122,11 @@ radio_name = name //Default languages without universal translator software - add_language("Galactic Common", 1) - add_language("Sol Common", 1) - add_language("Tradeband", 1) - add_language("Gutter", 1) - add_language("Trinary", 1) + add_language(LANGUAGE_GALACTIC_COMMON, 1) + add_language(LANGUAGE_SOL_COMMON, 1) + add_language(LANGUAGE_TRADER, 1) + add_language(LANGUAGE_GUTTER, 1) + add_language(LANGUAGE_TRINARY, 1) //Verbs for pAI mobile form, chassis and Say flavor text verbs += /mob/living/silicon/pai/proc/choose_chassis diff --git a/code/modules/mob/living/silicon/pai/software/pai_toggles.dm b/code/modules/mob/living/silicon/pai/software/pai_toggles.dm index a83fd1df484..1122585fefc 100644 --- a/code/modules/mob/living/silicon/pai/software/pai_toggles.dm +++ b/code/modules/mob/living/silicon/pai/software/pai_toggles.dm @@ -48,31 +48,31 @@ // Galactic Common, Sol Common, Tradeband, Gutter and Trinary are added with New() and are therefore the current default, always active languages user.translator_on = !user.translator_on if(user.translator_on) - user.add_language("Sinta'unathi") - user.add_language("Siik'tajr") - user.add_language("Canilunzt") - user.add_language("Skrellian") - user.add_language("Vox-pidgin") - user.add_language("Rootspeak") - user.add_language("Chittin") - user.add_language("Bubblish") - user.add_language("Orluum") - user.add_language("Clownish") - user.add_language("Neo-Russkiya") - user.add_language("Tkachi") + user.add_language(LANGUAGE_UNATHI) + user.add_language(LANGUAGE_TAJARAN) + user.add_language(LANGUAGE_VULPKANIN) + user.add_language(LANGUAGE_SKRELL) + user.add_language(LANGUAGE_VOX) + user.add_language(LANGUAGE_DIONA) + user.add_language(LANGUAGE_KIDAN) + user.add_language(LANGUAGE_SLIME) + user.add_language(LANGUAGE_DRASK) + user.add_language(LANGUAGE_CLOWN) + user.add_language(LANGUAGE_NEO_RUSSIAN) + user.add_language(LANGUAGE_MOTH) else - user.remove_language("Sinta'unathi") - user.remove_language("Siik'tajr") - user.remove_language("Canilunzt") - user.remove_language("Skrellian") - user.remove_language("Vox-pidgin") - user.remove_language("Rootspeak") - user.remove_language("Chittin") - user.remove_language("Bubblish") - user.remove_language("Orluum") - user.remove_language("Clownish") - user.remove_language("Neo-Russkiya") - user.remove_language("Tkachi") + user.remove_language(LANGUAGE_UNATHI) + user.remove_language(LANGUAGE_TAJARAN) + user.remove_language(LANGUAGE_VULPKANIN) + user.remove_language(LANGUAGE_SKRELL) + user.remove_language(LANGUAGE_VOX) + user.remove_language(LANGUAGE_DIONA) + user.remove_language(LANGUAGE_KIDAN) + user.remove_language(LANGUAGE_SLIME) + user.remove_language(LANGUAGE_DRASK) + user.remove_language(LANGUAGE_CLOWN) + user.remove_language(LANGUAGE_NEO_RUSSIAN) + user.remove_language(LANGUAGE_MOTH) /datum/pai_software/translator/is_active(mob/living/silicon/pai/user) return user.translator_on diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 72c78236e10..ae7e9a244b8 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -57,10 +57,10 @@ /mob/living/silicon/robot/drone/New() ..() - remove_language("Robot Talk") - remove_language("Galactic Common") - add_language("Drone Talk", 1) - add_language("Drone", 1) + remove_language(LANGUAGE_BINARY) + remove_language(LANGUAGE_GALACTIC_COMMON) + add_language(LANGUAGE_DRONE_BINARY, 1) + add_language(LANGUAGE_DRONE, 1) // Disable the microphone wire on Drones if(radio) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index a5418634b81..226be34b2e3 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -12,5 +12,5 @@ /mob/living/silicon/robot/drone/get_default_language() if(default_language) return default_language - return GLOB.all_languages["Drone"] + return GLOB.all_languages[LANGUAGE_DRONE] diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d0b654d4ee6..cbd1ab7538a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( spark_system.set_up(5, 0, src) spark_system.attach(src) - add_language("Robot Talk", 1) + add_language(LANGUAGE_BINARY, 1) wires = new(src) @@ -561,7 +561,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( for(var/obj/item/borg/upgrade/upgrade in upgrades) //remove all upgrades, cuz we reseting qdel(upgrade) - add_language("Robot Talk", 1) + add_language(LANGUAGE_BINARY, 1) status_flags |= CANPUSH //for borg hotkeys, here module refers to borg inv slot, not core module diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 603efce8a89..ae3d3426064 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -120,23 +120,23 @@ /obj/item/robot_module/proc/add_languages(mob/living/silicon/robot/R) //full set of languages - R.add_language("Galactic Common", 1) - R.add_language("Sol Common", 1) - R.add_language("Tradeband", 1) - R.add_language("Gutter", 0) - R.add_language("Neo-Russkiya", 0) - R.add_language("Sinta'unathi", 0) - R.add_language("Siik'tajr", 0) - R.add_language("Canilunzt", 0) - R.add_language("Skrellian", 0) - R.add_language("Vox-pidgin", 0) - R.add_language("Rootspeak", 0) - R.add_language("Trinary", 1) - R.add_language("Chittin", 0) - R.add_language("Bubblish", 0) - R.add_language("Orluum", 0) - R.add_language("Clownish",0) - R.add_language("Tkachi", 0) + R.add_language(LANGUAGE_GALACTIC_COMMON, 1) + R.add_language(LANGUAGE_SOL_COMMON, 1) + R.add_language(LANGUAGE_TRADER, 1) + R.add_language(LANGUAGE_GUTTER, 0) + R.add_language(LANGUAGE_NEO_RUSSIAN, 0) + R.add_language(LANGUAGE_UNATHI, 0) + R.add_language(LANGUAGE_TAJARAN, 0) + R.add_language(LANGUAGE_VULPKANIN, 0) + R.add_language(LANGUAGE_SKRELL, 0) + R.add_language(LANGUAGE_VOX, 0) + R.add_language(LANGUAGE_DIONA, 0) + R.add_language(LANGUAGE_TRINARY, 1) + R.add_language(LANGUAGE_KIDAN, 0) + R.add_language(LANGUAGE_SLIME, 0) + R.add_language(LANGUAGE_DRASK, 0) + R.add_language(LANGUAGE_CLOWN,0) + R.add_language(LANGUAGE_MOTH, 0) /obj/item/robot_module/proc/add_subsystems_and_actions(mob/living/silicon/robot/R) R.verbs |= subsystems @@ -477,22 +477,23 @@ /obj/item/robot_module/butler/add_languages(var/mob/living/silicon/robot/R) //full set of languages - R.add_language("Galactic Common", 1) - R.add_language("Sol Common", 1) - R.add_language("Tradeband", 1) - R.add_language("Gutter", 1) - R.add_language("Sinta'unathi", 1) - R.add_language("Siik'tajr", 1) - R.add_language("Canilunzt", 1) - R.add_language("Skrellian", 1) - R.add_language("Vox-pidgin", 1) - R.add_language("Rootspeak", 1) - R.add_language("Trinary", 1) - R.add_language("Chittin", 1) - R.add_language("Bubblish", 1) - R.add_language("Clownish",1) - R.add_language("Neo-Russkiya", 1) - R.add_language("Tkachi", 1) + R.add_language(LANGUAGE_GALACTIC_COMMON, 1) + R.add_language(LANGUAGE_SOL_COMMON, 1) + R.add_language(LANGUAGE_TRADER, 1) + R.add_language(LANGUAGE_GUTTER, 1) + R.add_language(LANGUAGE_NEO_RUSSIAN, 1) + R.add_language(LANGUAGE_UNATHI, 1) + R.add_language(LANGUAGE_TAJARAN, 1) + R.add_language(LANGUAGE_VULPKANIN, 1) + R.add_language(LANGUAGE_SKRELL, 1) + R.add_language(LANGUAGE_VOX, 1) + R.add_language(LANGUAGE_DIONA, 1) + R.add_language(LANGUAGE_TRINARY, 1) + R.add_language(LANGUAGE_KIDAN, 1) + R.add_language(LANGUAGE_SLIME, 1) + R.add_language(LANGUAGE_DRASK, 1) + R.add_language(LANGUAGE_CLOWN,1) + R.add_language(LANGUAGE_MOTH, 1) /obj/item/robot_module/butler/handle_death(mob/living/silicon/robot/R, gibbed) var/obj/item/storage/bag/tray/cyborg/T = locate(/obj/item/storage/bag/tray/cyborg) in modules @@ -778,7 +779,7 @@ /obj/item/robot_module/hunter/add_languages(var/mob/living/silicon/robot/R) ..() - R.add_language("xenocommon", 1) + R.add_language(LANGUAGE_XENOS, 1) /obj/item/robot_module/drone name = "Drone" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 7cf2583c3e7..216c5672927 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -39,7 +39,7 @@ /mob/living/silicon/New() GLOB.silicon_mob_list |= src ..() - add_language("Galactic Common") + add_language(LANGUAGE_GALACTIC_COMMON) init_subsystems() RegisterSignal(SSalarm, COMSIG_TRIGGERED_ALARM, PROC_REF(alarm_triggered)) RegisterSignal(SSalarm, COMSIG_CANCELLED_ALARM, PROC_REF(alarm_cancelled)) @@ -283,19 +283,19 @@ //Silicon mob language procs /mob/living/silicon/can_speak_language(datum/language/speaking) - return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language + return universal_speak || (speaking in speech_synthesizer_langs) //need speech synthesizer support to vocalize a language -/mob/living/silicon/add_language(var/language, var/can_speak=1) +/mob/living/silicon/add_language(language, can_speak = TRUE) if(..(language) && can_speak) speech_synthesizer_langs.Add(GLOB.all_languages[language]) - return 1 + return TRUE -/mob/living/silicon/remove_language(var/rem_language) - ..(rem_language) +/mob/living/silicon/remove_language(language_name) + ..(language_name) - for(var/datum/language/L in speech_synthesizer_langs) - if(L.name == rem_language) - speech_synthesizer_langs -= L + for(var/datum/language/language in speech_synthesizer_langs) + if(language.name == language_name) + speech_synthesizer_langs -= language /mob/living/silicon/check_lang_data() . = "" @@ -303,16 +303,16 @@ if(default_language) . += "Current default language: [default_language] - reset " - for(var/datum/language/L in languages) - if(!(L.flags & NONGLOBAL)) + for(var/datum/language/language in languages) + if(!(language.flags & NONGLOBAL)) var/default_str - if(L == default_language) + if(language == default_language) default_str = " - default - reset" else - default_str = " - set default" + default_str = " - set default" - var/synth = (L in speech_synthesizer_langs) - . += "[L.name] (:[L.key])[synth ? default_str : null] Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"] [L.desc] " + var/synth = (language in speech_synthesizer_langs) + . += "[language.name] (:[language.key])[synth ? default_str : null] Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"] [language.desc] " // this function displays the stations manifest in a separate window diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 990d08d0782..363d2068fa6 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -198,12 +198,12 @@ set_custom_texts() Radio = new/obj/item/radio/headset/bot(src) Radio.follow_target = src - add_language("Galactic Common", TRUE) - add_language("Sol Common", TRUE) - add_language("Tradeband", TRUE) - add_language("Gutter", TRUE) - add_language("Trinary", TRUE) - default_language = GLOB.all_languages["Galactic Common"] + add_language(LANGUAGE_GALACTIC_COMMON, TRUE) + add_language(LANGUAGE_SOL_COMMON, TRUE) + add_language(LANGUAGE_TRADER, TRUE) + add_language(LANGUAGE_GUTTER, TRUE) + add_language(LANGUAGE_TRINARY, TRUE) + default_language = GLOB.all_languages[LANGUAGE_GALACTIC_COMMON] bot_core = new bot_core_type(src) addtimer(CALLBACK(src, PROC_REF(add_bot_filter)), 3 SECONDS) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index f3f43bf46df..3842ae4ccc5 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -220,7 +220,7 @@ /mob/living/simple_animal/pet/cat/Syndi/Initialize(mapload) . = ..() - add_language("Galactic Common") + add_language(LANGUAGE_GALACTIC_COMMON) /mob/living/simple_animal/pet/cat/cak name = "Keeki" diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 1d4986ba224..7d20b768b46 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -85,7 +85,7 @@ if(name == initial(name)) //To stop Pun-Pun becoming generic. name = "[name] ([rand(1, 1000)])" real_name = name - add_language("Rootspeak") + add_language(LANGUAGE_DIONA) merge_action.Grant(src) evolve_action.Grant(src) steal_blood_action.Grant(src) diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 1f266fe9fe2..e40266c3d91 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -58,7 +58,7 @@ /mob/living/simple_animal/pet/dog/fox/Syndifox/Initialize(mapload) . = ..() - add_language("Galactic Common") + add_language(LANGUAGE_GALACTIC_COMMON) //Central Command Fox /mob/living/simple_animal/pet/dog/fox/alisa diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 3626dfb15ca..98fa0a940ae 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -237,13 +237,13 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) /mob/living/simple_animal/hostile/poison/terror_spider/New() ..() GLOB.ts_spiderlist += src - add_language("Spider Hivemind") + add_language(LANGUAGE_HIVE_TERRORSPIDER) for(var/spell in special_abillity) src.AddSpell(new spell) if(spider_tier >= TS_TIER_2) - add_language("Galactic Common") - default_language = GLOB.all_languages["Spider Hivemind"] + add_language(LANGUAGE_GALACTIC_COMMON) + default_language = GLOB.all_languages[LANGUAGE_HIVE_TERRORSPIDER] if(web_type) web_action = new() diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 724ddda9db6..d18dd571e88 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -99,7 +99,7 @@ set_colour(new_colour) . = ..() set_nutrition(new_set_nutrition) - add_language("Bubblish") + add_language(LANGUAGE_SLIME) /mob/living/simple_animal/slime/Destroy() for(var/A in actions) diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 3ef9748704e..1f39d5e92b5 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -110,9 +110,8 @@ return TRUE //Language check. - for(var/datum/language/L in languages) - if(speaking.name == L.name) - return TRUE + if(speaking in languages) + return TRUE return FALSE @@ -122,7 +121,7 @@ var/ending = copytext(message, length(message)) if(speaking) - verb = speaking.get_spoken_verb(ending) + verb = genderize_decode(src, speaking.get_spoken_verb(ending)) else if(ending == "!") verb = pick("exclaims", "shouts", "yells") @@ -208,7 +207,7 @@ // Noise language is a snowflake if(copytext(message, 1, 2) == "!" && length(message) > 1) - return list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], trim(strip_prefixes(copytext(message, 2))))) + return list(new /datum/multilingual_say_piece(GLOB.all_languages[LANGUAGE_NOISE], trim(strip_prefixes(copytext(message, 2))))) // Scan the message for prefixes var/list/prefix_locations = find_valid_prefixes(message) @@ -221,8 +220,7 @@ // There are a few things that will make us want to ignore all other languages in - namely, HIVEMIND languages. var/datum/language/L = current[1] if(L && L.flags & HIVEMIND) - . = new /datum/multilingual_say_piece(L, trim(strip_prefixes(message))) - break + return list(new /datum/multilingual_say_piece(L, trim(strip_prefixes(message)))) if(i + 1 > length(prefix_locations)) // We are out of lookaheads, that means the rest of the message is in cur lang var/spoke_message = handle_autohiss(trim(copytext_char(message, current[3])), L) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2e28c860428..36a5fc909ff 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -670,9 +670,9 @@ var/datum/language/chosen_language if(client.prefs.language) chosen_language = GLOB.all_languages[client.prefs.language] - if((chosen_language == null && client.prefs.language != "None") || (chosen_language && chosen_language.flags & RESTRICTED)) + if((!chosen_language && client.prefs.language != LANGUAGE_NONE) || (chosen_language && chosen_language.flags & RESTRICTED)) log_runtime(EXCEPTION("[src] had language [client.prefs.language], though they weren't supposed to. Setting to None."), src) - client.prefs.language = "None" + client.prefs.language = LANGUAGE_NONE /mob/new_player/proc/ViewManifest() GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.always_state) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 3523f3f43a5..710632b7b94 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -31,7 +31,7 @@ var/info_links //A different version of the paper which includes html links at fields and EOF var/stamps //The (text for the) stamps on the paper. var/fields = 0 //Amount of user created fields - var/language = "Galactic Common" //The language of paper. For now using only in case of Thetta + var/language = LANGUAGE_GALACTIC_COMMON //The language of paper. For now using only in case of Thetta var/list/stamped var/list/stamp_overlays var/ico[0] //Icons and @@ -744,7 +744,7 @@ name = "paper" header = " " info = "" - language = "Neo-Russkiya" + language = LANGUAGE_NEO_RUSSIAN /obj/item/paper/solgov name = "paper" diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 689b693a204..be0e48fc05a 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -415,7 +415,7 @@ /obj/item/gun/projectile/automatic/cats/examine(mob/user) . = ..() if(Adjacent(user)) - if(user.say_understands(null, GLOB.all_languages["Sol Common"])) + if(user.say_understands(null, GLOB.all_languages[LANGUAGE_SOL_COMMON])) . += "Вы видите гравировку на прикладе, написанную на Общесолнечном: 'Свобода через тотальное превосходство'" else . += "Вы видите символы на прикладе, но не понимаете что они значат." diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index b5a97d102cb..a953065bd2e 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -2230,7 +2230,7 @@ /datum/reagent/consumable/ethanol/trans_siberian_express/on_mob_life(mob/living/M) . = ..() - var/datum/language/rus_lang = GLOB.all_languages["Neo-Russkiya"] + var/datum/language/rus_lang = GLOB.all_languages[LANGUAGE_NEO_RUSSIAN] if((rus_lang in M.languages) && !(rus_lang in M.temporary_languages)) if(M.default_language != rus_lang) M.default_language = rus_lang diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index a7e149d608d..dbbaca3098d 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -716,5 +716,5 @@ /datum/reagent/monkeylanguage/on_mob_life(mob/living/M) if(volume > 4) - M.add_language("Chimpanzee") + M.add_language(LANGUAGE_MONKEY_HUMAN) return ..() diff --git a/code/modules/ruins/ussp_base.dm b/code/modules/ruins/ussp_base.dm index 1dfc8878033..c1ff55bb4cb 100644 --- a/code/modules/ruins/ussp_base.dm +++ b/code/modules/ruins/ussp_base.dm @@ -61,8 +61,8 @@ return H.rename_character(null, "[pick("Полковник", "Генерал майор", "Генерал лейтенант", "Генерал полковник")] [H.real_name]") - H.add_language("Neo-Russkiya") - H.set_default_language(GLOB.all_languages["Neo-Russkiya"]) + H.add_language(LANGUAGE_NEO_RUSSIAN) + H.set_default_language(GLOB.all_languages[LANGUAGE_NEO_RUSSIAN]) var/obj/item/card/id/I = H.wear_id if(istype(I)) H.sec_hud_set_ID() @@ -124,9 +124,9 @@ return H.rename_character(null, "[pick("Старший сержант", "Старшина", "Прапорщик", "Старший прапорщик")] [H.real_name]") - H.add_language("Neo-Russkiya") - H.remove_language("Galactic Common") - H.set_default_language(GLOB.all_languages["Neo-Russkiya"]) + H.add_language(LANGUAGE_NEO_RUSSIAN) + H.remove_language(LANGUAGE_GALACTIC_COMMON) + H.set_default_language(GLOB.all_languages[LANGUAGE_NEO_RUSSIAN]) var/obj/item/card/id/I = H.wear_id if(istype(I)) H.sec_hud_set_ID() @@ -189,9 +189,9 @@ return H.rename_character(null, "[pick("Сержант", "Старший сержант", "Младший лейтенант")] [H.real_name]") - H.add_language("Neo-Russkiya") - H.remove_language("Galactic Common") - H.set_default_language(GLOB.all_languages["Neo-Russkiya"]) + H.add_language(LANGUAGE_NEO_RUSSIAN) + H.remove_language(LANGUAGE_GALACTIC_COMMON) + H.set_default_language(GLOB.all_languages[LANGUAGE_NEO_RUSSIAN]) var/obj/item/card/id/I = H.wear_id if(istype(I)) H.sec_hud_set_ID() @@ -241,9 +241,9 @@ return H.rename_character(null, "[pick("Прапорщик", "Старший прапорщик", "Младший лейтенант", "Лейтенант")] [H.real_name]") - H.add_language("Neo-Russkiya") - H.remove_language("Galactic Common") - H.set_default_language(GLOB.all_languages["Neo-Russkiya"]) + H.add_language(LANGUAGE_NEO_RUSSIAN) + H.remove_language(LANGUAGE_GALACTIC_COMMON) + H.set_default_language(GLOB.all_languages[LANGUAGE_NEO_RUSSIAN]) var/obj/item/card/id/I = H.wear_id if(istype(I)) H.sec_hud_set_ID() diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index 5b3e0dccd2d..513c6048ac0 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -15,10 +15,10 @@ /obj/item/organ/internal/brain/grey/insert(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) . = ..() - M.add_language("Psionic Communication") + M.add_language(LANGUAGE_GREY) /obj/item/organ/internal/brain/grey/remove(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) - M.remove_language("Psionic Communication") + M.remove_language(LANGUAGE_GREY) . = ..() /obj/item/organ/internal/eyes/grey diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index c3eb12b9ff4..0e4a2218995 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -184,14 +184,14 @@ /obj/item/organ/internal/xenos/hivenode/insert(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) . = ..() M.faction |= "alien" - M.add_language("Hivemind") - M.add_language("Xenomorph") + M.add_language(LANGUAGE_XENOS) + M.add_language(LANGUAGE_HIVE_XENOS) /obj/item/organ/internal/xenos/hivenode/remove(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) M.faction -= "alien" - M.remove_language("Hivemind") - M.remove_language("Xenomorph") + M.remove_language(LANGUAGE_XENOS) + M.remove_language(LANGUAGE_HIVE_XENOS) . = ..() |