From 58693bcd5ce206952dced9fa2a2d9bd508b354fe Mon Sep 17 00:00:00 2001 From: Anewbe Date: Mon, 14 Jan 2019 19:28:59 -0600 Subject: [PATCH] Blindly adds partial cross-language intelligibility --- code/modules/mob/hear_say.dm | 4 +-- code/modules/mob/language/generic.dm | 3 ++ code/modules/mob/language/language.dm | 43 ++++++++++++++++++++------- code/modules/mob/language/monkey.dm | 4 +++ code/modules/mob/language/station.dm | 2 +- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index e7c097c2b3..9de188fad9 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -33,7 +33,7 @@ if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages if(!say_understands(speaker,language)) if(language) - message = language.scramble(message) + message = language.scramble(message, languages) else message = stars(message) @@ -165,7 +165,7 @@ if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages if(!say_understands(speaker,language)) if(language) - message = language.scramble(message) + message = language.scramble(message, languages) else message = stars(message) diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index 7cb7cd08e5..32a1726bdb 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -29,6 +29,7 @@ syllables = list( "vol", "zum", "coo","zoo","bi","do","ooz","ite","og","re","si","ite","ish", "ar","at","on","ee","east","ma","da", "rim") + partial_understanding = list(LANGUAGE_SKRELLIAN = 30, LANGUAGE_SOL_COMMON = 30) //TODO flag certain languages to use the mob-type specific say_quote and then get rid of these. /datum/language/common/get_spoken_verb(var/msg_end) @@ -61,6 +62,7 @@ colour = "terminus" key = "4" flags = WHITELISTED + partial_understanding = list(LANGUAGE_SOL_COMMON = 20) syllables = list (".a", "spa", "pan", "blaif", "stra", "!u", "!ei", "!am", "by", ".y", "gry", "zbly", "!y", "fl", "sm", "rn", "cpi", "ku", "koi", "pr", "glau", "stu", "ved", "ki", "tsa", "xau", "jbu", "sny", "stro", "nu", "uan", "ju", "!i", "ge", "luk", "an", "ar", "at", "es", "et", "bel", "ki", "jaa", "ch", "ki", "gh", "ll", "uu", "wat") @@ -73,6 +75,7 @@ colour = "rough" key = "3" space_chance = 45 + partial_understanding = list(LANGUAGE_GALCOM = 10, LANGUAGE_TRADEBAND = 20, LANGUAGE_SOL_COMMON = 20) syllables = list ( "gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra", "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index e84b569ff6..5ba36dcbe1 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -19,6 +19,7 @@ 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/machine_understands = 1 // Whether machines can parse and understand this language + var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word /datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2) if(!syllables || !syllables.len) @@ -41,8 +42,38 @@ /datum/language var/list/scramble_cache = list() -/datum/language/proc/scramble(var/input) +/datum/language/proc/scramble(var/input, var/list/known_languages) + var/understand_chance = 0 + for(var/datum/language/L in known_languages) + if(partial_understanding && partial_understanding[L.name]) + understand_chance += partial_understanding[L.name] + if(L.partial_understanding && L.partial_understanding[name]) + understand_chance += L.partial_understanding[name] * 0.5 + var/scrambled_text = "" + var/list/words = splittext(input, " ") + for(var/w in words) + if(prob(understand_chance)) + scrambled_text += " [w] " + else + var/nword = scramble_word(w) + var/ending = copytext(scrambled_text, length(scrambled_text)-1) + if(findtext(ending,".")) + nword = capitalize(nword) + scrambled_text += nword + scrambled_text = replacetext(scrambled_text," "," ") + scrambled_text = capitalize(scrambled_text) + scrambled_text = trim(scrambled_text) + var/ending = copytext(scrambled_text, length(scrambled_text)) + if(ending == ".") + scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) + var/input_ending = copytext(input, length(input)) + if(input_ending in list("!","?",".")) + scrambled_text += input_ending + + return scrambled_text + +/datum/language/proc/scramble_word(var/input) if(!syllables || !syllables.len) return stars(input) @@ -55,7 +86,7 @@ var/input_size = length(input) var/scrambled_text = "" - var/capitalize = 1 + var/capitalize = 0 while(length(scrambled_text) < input_size) var/next = pick(syllables) @@ -70,14 +101,6 @@ else if(chance > 5 && chance <= space_chance) scrambled_text += " " - scrambled_text = trim(scrambled_text) - var/ending = copytext(scrambled_text, length(scrambled_text)) - if(ending == ".") - scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) - var/input_ending = copytext(input, input_size) - if(input_ending in list("!","?",".")) - scrambled_text += input_ending - // Add it to cache, cutting old entries if the list is too long scramble_cache[input] = scrambled_text if(scramble_cache.len > SCRAMBLE_CACHE_LEN) diff --git a/code/modules/mob/language/monkey.dm b/code/modules/mob/language/monkey.dm index c6024d346b..782c5bcf24 100644 --- a/code/modules/mob/language/monkey.dm +++ b/code/modules/mob/language/monkey.dm @@ -5,24 +5,28 @@ ask_verb = "chimpers" exclaim_verb = "screeches" key = "6" + syllables = list("ook","eek") machine_understands = 0 /datum/language/skrell/monkey name = "Neaera" desc = "Squik squik squik." key = "8" + syllables = list("hiss","gronk") machine_understands = 0 /datum/language/unathi/monkey name = "Stok" desc = "Hiss hiss hiss." key = "7" + syllables = list("squick","croak") machine_understands = 0 /datum/language/tajaran/monkey name = "Farwa" desc = "Meow meow meow." key = "9" + syllables = list("meow","mew") machine_understands = 0 /datum/language/corgi diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 47cb3b8de0..220086ab98 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -137,7 +137,7 @@ var/list/first_names = file2list('config/names/first_name_skrell.txt') var/list/last_names = file2list('config/names/last_name_skrell.txt') return "[pick(first_names)] [pick(last_names)]" - + /datum/language/human name = LANGUAGE_SOL_COMMON desc = "A bastardized hybrid of many languages, including Chinese, English, French, and more; it is the common language of the Sol system."