Blindly adds partial cross-language intelligibility

This commit is contained in:
Anewbe
2019-01-14 19:28:59 -06:00
parent 7c7829d3e7
commit 58693bcd5c
5 changed files with 43 additions and 13 deletions
+2 -2
View File
@@ -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)
+3
View File
@@ -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",
+33 -10
View File
@@ -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)
+4
View File
@@ -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
+1 -1
View File
@@ -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."