diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 677b5f49d7d4d4..966f3b46b063ef 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -95,6 +95,7 @@ GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name()) continue lang_list[lang_type] = new lang_type() + randomize_crusoes_local(lang_list) // DOPPLER EDIT ADDITION - Randomize Crusoe's Locals' Pidgins return lang_list /proc/init_all_languages() diff --git a/code/_globalvars/~doppler_globalvars/lists/languages.dm b/code/_globalvars/~doppler_globalvars/lists/languages.dm new file mode 100644 index 00000000000000..c65f46e602c920 --- /dev/null +++ b/code/_globalvars/~doppler_globalvars/lists/languages.dm @@ -0,0 +1,48 @@ + +/// List if all language typepaths learnable, i.e. those with keys, sorted by default_priority. +/// Used by the language menu to determine display priority. +GLOBAL_LIST_INIT(all_languages_by_priority, init_all_languages_by_priority()) + +/proc/init_all_languages_by_priority() + var/list/lang_list = list() + for(var/datum/language/lang_type as anything in typesof(/datum/language)) + if(!initial(lang_type.key)) + continue + lang_list += lang_type + sortTim(lang_list, cmp = GLOBAL_PROC_REF(cmp_language_priority_dsc)) + return lang_list + +/// Sorts languages based on their default_priority, in descending order. +/proc/cmp_language_priority_dsc(datum/language/lang_a, datum/language/lang_b) + return lang_b.default_priority - lang_a.default_priority + + +/// Randomizes Crusoe's Locals' Pidgins. +/// We can't run this when making the language, as other language prototypes haven't finished. +/// But our global var handling is before base TG's, so we can't override it easily either. +/// Thus, we non-modularly run this proc in base TG's language prototype init. +/proc/randomize_crusoes_local(list/language_prototypes) + var/datum/language/the_localspeak = language_prototypes[/datum/language/crusoeslocal] + the_localspeak.syllables = list() + var/total_mutual_understanding = counterlist_sum(the_localspeak.mutual_understanding) + + for(var/datum/language/mutual_lang_type as anything in the_localspeak.mutual_understanding) + var/datum/language/mutual_lang = language_prototypes[mutual_lang_type] + var/list/syllables_to_steal = mutual_lang.syllables.Copy() + var/percent_this_language = round((the_localspeak.mutual_understanding[mutual_lang_type] / total_mutual_understanding) * 100, 1) + var/amount_to_steal = min(percent_this_language, length(syllables_to_steal)) + for(var/i = 0, i < amount_to_steal, i++) + var/stolen_syllable = pick(syllables_to_steal) + the_localspeak.syllables.Add(stolen_syllable) + syllables_to_steal.Remove(stolen_syllable) + + var/datum/language/space_chance_lang = language_prototypes[pick_weight(the_localspeak.mutual_understanding)] + the_localspeak.space_chance = space_chance_lang.space_chance + + var/datum/language/sentence_chance_lang = language_prototypes[pick_weight(the_localspeak.mutual_understanding)] + the_localspeak.sentence_chance = sentence_chance_lang.sentence_chance + the_localspeak.between_word_sentence_chance = sentence_chance_lang.between_word_sentence_chance + + var/datum/language/syllable_chance_lang = language_prototypes[pick_weight(the_localspeak.mutual_understanding)] + the_localspeak.additional_syllable_low = syllable_chance_lang.additional_syllable_low + the_localspeak.additional_syllable_high = syllable_chance_lang.additional_syllable_high diff --git a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm index 59406a2e877076..af0ff7c96bb499 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm @@ -53,7 +53,7 @@ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish)) add_speed_buff() owner.mind?.adjust_experience(/datum/skill/fishing, SKILL_EXP_JOURNEYMAN, silent = TRUE) - owner.grant_language(/datum/language/carptongue, ALL, type) + // owner.grant_language(/datum/language/carptongue, ALL, type) // DOPPLER EDIT REMOVAL - carptongue rework, non-carp don't speak it inherently /datum/status_effect/organ_set_bonus/fish/disable_bonus(obj/item/organ/removed_organ) . = ..() @@ -78,7 +78,7 @@ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish)) remove_speed_buff() owner.mind?.adjust_experience(/datum/skill/fishing, -SKILL_EXP_JOURNEYMAN, silent = TRUE) - owner.remove_language(/datum/language/carptongue, ALL, type) + // owner.remove_language(/datum/language/carptongue, ALL, type) // DOPPLER EDIT REMOVAL - carptongue rework, non-carp don't speak it inherently /datum/status_effect/organ_set_bonus/fish/set_organs(new_value, obj/item/organ/organ) . = ..() diff --git a/modular_doppler/carp_infusion/code/carp_organs.dm b/modular_doppler/carp_infusion/code/carp_organs.dm index c842843707c8cd..9a9e46bd449270 100644 --- a/modular_doppler/carp_infusion/code/carp_organs.dm +++ b/modular_doppler/carp_infusion/code/carp_organs.dm @@ -12,6 +12,17 @@ /obj/item/organ/brain/carp cooldown_time = 60 MINUTES // to allow for scenes w/o moodlet grief +/obj/item/organ/brain/carp/on_mob_insert(mob/living/carbon/receiver) + . = ..() + receiver.grant_language(/datum/language/carptongue, ALL, source = type) + to_chat(receiver, span_boldnotice("You gain a new understanding of [/datum/language/carptongue::name].")) + +/obj/item/organ/brain/carp/on_mob_remove(mob/living/carbon/owner) + . = ..() + if(QDELING(owner)) + return + owner.remove_language(/datum/language/carptongue, ALL, source = type) + // only try to bite people if we're not wearing a mask /obj/item/organ/brain/carp/get_attacking_limb(mob/living/carbon/human/target) . = ..() diff --git a/modular_doppler/languages/code/language menu/_language.dm b/modular_doppler/languages/code/language menu/_language.dm index a710403cff9af8..407a23b8874491 100644 --- a/modular_doppler/languages/code/language menu/_language.dm +++ b/modular_doppler/languages/code/language menu/_language.dm @@ -33,16 +33,17 @@ /datum/language/nekomimetic secret = TRUE //...and so it vanished, a whisper in the darkness. -/datum/language/shadowtongue - name = "Shadowtongue" - desc = "TONGUE OF A REALITY PLANE OFFSET FIVE INCHES ABOVE YOURS; the language of Resonance and Magycks, spoken by sorcerers and reality-benders. The language their olden books are oft written in." - -/datum/language/moffic - desc = "Spoken colloquially by the Mothfolk of Va Lumla, the early iteration of Mothic emerged when Fueljacks relied on their receptors for simple, one-worded pheromones to communicate, and navigate the often fatal maintenance tunnels sprawled throughout the fleet. \ - The moths developed gesticulation through antennas and wings to convey deeper intent, with mandibles providing emotional context through clicks and trills. \ - After contact with the Celestial Accord, human speakers managed to achieve a similar effect from clicking their tongue to roof, and steer the tone with the width of their mouth while using their hands in place of antennas. \ - It is informally spoken, deploying many slangs and shorthands from Common. Has phonetic resemblance to Italian." - -/datum/language/uncommon - name = "Xerxian" - desc = "A modernization of the Arabic dialects found on Earth, loosely based on the original MSA (Modern Standardized Arabic). Simplified syntax and a reduced reliance on case-endings and diacritical marks make it easier to learn and read." +/datum/language/buzzwords + secret = TRUE + +/datum/language/monkey + secret = TRUE + +/datum/language/slime + secret = TRUE + +/datum/language/spinwarder + secret = TRUE + +/datum/language/terrum + secret = TRUE diff --git a/modular_doppler/languages/code/language menu/client_languages.dm b/modular_doppler/languages/code/language menu/client_languages.dm index a3accc59e999f6..e02730f8373b90 100644 --- a/modular_doppler/languages/code/language menu/client_languages.dm +++ b/modular_doppler/languages/code/language menu/client_languages.dm @@ -79,7 +79,7 @@ var/list/selected_languages = list() var/list/unselected_languages = list() - for (var/language_name in GLOB.all_languages) + for (var/language_name in GLOB.all_languages_by_priority) var/datum/language/language = GLOB.language_datum_instances[language_name] if(language.secret && !(language.type in species.language_prefs_whitelist)) // For ghostrole species who are able to speak a secret language, e.g. ashwalkers, display it. diff --git a/modular_doppler/languages/code/language menu/language_holder.dm b/modular_doppler/languages/code/language menu/language_holder.dm index 27629b53cf5b20..8a9d9962e3716c 100644 --- a/modular_doppler/languages/code/language menu/language_holder.dm +++ b/modular_doppler/languages/code/language menu/language_holder.dm @@ -115,3 +115,30 @@ GLOBAL_DATUM_INIT(language_holder_adjustor, /datum/language_holder_adjustor, new /datum/language/sylvan = list(LANGUAGE_ATOM), /datum/language/nambuni = list(LANGUAGE_ATOM), ) + +// SPECIES OVERRIDES + +/datum/language_holder/golem + understood_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) + +// Sorry, whimsical inexplicable skeleton language. +/datum/language_holder/skeleton + understood_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) + +/datum/language_holder/jelly + understood_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + ) diff --git a/modular_doppler/languages/code/language_datums.dm b/modular_doppler/languages/code/language_datums.dm index 022d67954ab7bf..9426ca96e4d3f9 100644 --- a/modular_doppler/languages/code/language_datums.dm +++ b/modular_doppler/languages/code/language_datums.dm @@ -1,5 +1,6 @@ /obj/item/organ/tongue/get_possible_languages() var/list/langs = ..() + langs += /datum/language/crusoeslocal langs += /datum/language/konjin langs += /datum/language/gutter langs += /datum/language/movespeak @@ -9,10 +10,21 @@ langs += /datum/language/nambuni return langs -/// ACTUAL LANGUAGES BEGIN HERE +/** + * DOPPLER LANGUAGES + * default_priority here is also used to pick what order these appear in the ingame language menu. + * 100-90 - Common 4CA languages. + * 89-70 - Common other languages. + * 69-20 - Increasingly less common languages. + * 19-0 - Exceptionally uncommon languages. + */ + /datum/language/konjin name = "Konjin" - desc = "This language group formally regarded as Orbital Sino-Tibetan is a result of a genetic relationship between Chinese, Tibetan, Burmese, and other Human languages of similar characteristics that was first proposed in the early 19th century and is extremely popular even in the space age. Originating from Asia, this group of tongues is the second most spoken by Human and Human-derived populations since the birth of Sol Common - and was a primary contender to be the Sol Federation's official language. Many loanwords, idioms, and cultural relics of Japanese, Ryukyuan, Korean, and other societies have managed to persist within it, especially in the daily lives of speakers coming from Martian cities." + desc = "This language group formally regarded as Orbital Sino-Tibetan is a result of a genetic relationship between Chinese, Tibetan, \ + Burmese, and other Human languages of similar characteristics that was first proposed in the early 19th century and is extremely popular even in the space age. \ + Originating from Asia, this group of tongues is the second most spoken by Human and Human-derived populations since contact with the 4CA. \ + Many loanwords, idioms, and cultural relics of Japanese, Ryukyuan, Korean, and other societies have managed to persist within it, especially in the daily lives of speakers coming from Martian cities." key = "Y" flags = TONGUELESS_SPEECH space_chance = 70 @@ -29,13 +41,19 @@ ) icon_state = "hanzi" icon = 'modular_doppler/languages/icons/language.dmi' - default_priority = 94 default_name_syllable_min = 1 default_name_syllable_max = 2 + default_priority = 79 + mutual_understanding = list( + /datum/language/crusoeslocal = 10, + /datum/language/common = 10, + ) /datum/language/gutter name = "Plutonian" - desc = "Plutonian Franco-Castilian is a constructed Romance language that was developed early on in the Sol Federation's colonization history out of necessity for communication between its first Plutonian colonists. It heavily borrows from Spanish and French, with minor influence from other tongues the likes of Italian and Portuguese, despite coming off as elegant it carries a heavy amount of slang and idioms correlated to certain criminal groups. Today, it stands heavily engrained in the planet's culture - and almost every citizen will speak at least some of it on top of Sol." + desc = "Plutonian Franco-Castilian is a constructed Romance language that was developed early on in the Sol system's colonization history out of a desire for less externally readable communications by its first Plutonian colonists. \ + It heavily borrows from Spanish and French, with minor influence from other tongues the likes of Italian and Portuguese, despite coming off as elegant it carries a heavy amount of slang and idioms correlated to certain criminal groups. \ + Today, it stands heavily engrained in the planet's culture - and almost every citizen will speak at least some of it on top of Celestial." key = "G" flags = TONGUELESS_SPEECH syllables = list ( @@ -46,11 +64,12 @@ ) icon_state = "gutter" icon = 'modular_doppler/languages/icons/language.dmi' - default_priority = 40 + default_priority = 78 /datum/language/movespeak name = "Move-Speak" - desc = "A primarily nonverbal language comprised of body movements, gesticulation, and sign language, with only intermittent warbles & other vocalizations. It's almost completely incomprehensible without its somatic components." + desc = "A primarily nonverbal language comprised of body movements, gesticulation, and sign language, with only intermittent warbles & other vocalizations. \ + It's almost completely incomprehensible without its somatic components." key = "M" flags = TONGUELESS_SPEECH space_chance = 30 @@ -59,7 +78,7 @@ ) icon = 'modular_doppler/languages/icons/language.dmi' icon_state = "movespeak" - default_priority = 93 + default_priority = 68 default_name_syllable_min = 5 default_name_syllable_max = 10 @@ -76,25 +95,12 @@ return "The [pick(GLOB.ramatan_last)]" -/datum/language/common - name = "Sol Common" - desc = "And when contact was established, the Admiral waved at the screen and said, \"Mi parolas la lingvon de la Homines!\" - I speak the language of Mankind. A simplified mix of Esperanto and Modern Latin, and the only recognized official language of the Sol Federation. This peculiar constructed language became popular during SolFed's earliest days, and was almost entirely overtaken by other popular tongues - it became widespread through heavy-handed political maneuvering with the help of corporate bureaucrats and other undesirables. Nowadays, it's a near-universal tongue and a must-know for any sentient being that plans to leap forward into space." - space_chance = 60 - syllables = list( - "al", "an", "ar", "as", "at", "ed", "er", "ha", "he", "hi", "is", "le", "me", "on", "se", "ti", - "ve", "wa", "ameno", "are", "ent", "for", "had", "hat", "hin", "ch", "be", "abe", "die", "sch", "aus", - "ber", "che", "que", "ait", "men", "ave", "con", "com", "eta", "eur", "est", "ing", "ver", "was", - "hin", "deed", "sed", "ut", "unde", "omnis", "latire", "iste", "natus", "sit", "vol", "totam", "rem", "eaque", - "ipsa", "quae", "ab", "illo", "et", "quasi", "dicta", "dorime", "sunt", "enim", "ipsam", "aut", "odit", "qui", - "amet", "que", "eius", "modi", "inci","ad", "vel", "eum", "iure", "hic", "pa", "mit", "dis", "du", - "di", "tol", "mi", "solari", "ite", "domum" - ) - icon_state = "solcommon" - icon = 'modular_doppler/languages/icons/language.dmi' - /datum/language/nambuni name = "Nambūni" - desc = "Nambūni is the language spoken by most Nambūlites and by extension Deep Spacers. It has no known origin, though it superficially resembles some Austronesian and Khoisan languages in grammatical and phonetic structure despite predating human spaceflight. There are countless dialects, pidgins, and creoles spread throughout the thousands of micronations that compose the greater Nambūni Assembly, making the language a difficult one to master. As it is the official language of the Assembly, it is mandated that all prayer, diplomacy, and trade must be conducted in Nambūni, thus learning the language is one of the greatest hurdles outsider merchants face." + desc = "Nambūni is the language spoken by most Nambūlites and by extension Deep Spacers. \ + It has no known origin, though it superficially resembles some Austronesian and Khoisan languages in grammatical and phonetic structure despite predating human spaceflight. \ + There are countless dialects, pidgins, and creoles spread throughout the thousands of micronations that compose the greater Nambūni Assembly, making the language a difficult one to master. \ + As it is the official language of the Assembly, it is mandated that all prayer, diplomacy, and trade must be conducted in Nambūni, thus learning the language is one of the greatest hurdles outsider merchants face." key = "N" flags = TONGUELESS_SPEECH space_chance = 30 @@ -113,10 +119,212 @@ icon = 'modular_doppler/languages/icons/language.dmi' additional_syllable_low = 1 additional_syllable_high = 3 - default_priority = 67 default_name_syllable_min = 2 default_name_syllable_max = 3 + default_priority = 88 + mutual_understanding = list( // TODO: make this account for most cultural languages. + /datum/language/crusoeslocal = 10, + ) + +/datum/language/crusoeslocal + name = "Crusoe's Locals' Pidgins" + desc = "A collection of unstable pidgin languages originating at the forefront of the frontier, here in Crusoe's Rest. \ + Informal and simplified, it's what you'd hear yelled loudly between colonists in the New Gibraltar markets. \ + A language stone soup, slowly congealing." + secret = TRUE // Special language unavailable outside of its quirk. + + icon = 'modular_doppler/languages/icons/language.dmi' + icon_state = "new_gibby" + + key = "C" + default_priority = 90 + + // We randomize these all based on mutual_understanding languages when initializing language prototypes + syllables = list( + "a", "b", "c", + ) + space_chance = 60 + sentence_chance = 0 + between_word_sentence_chance = 10 + between_word_space_chance = 75 + additional_syllable_low = 0 + additional_syllable_high = 0 + // Except for this one. + special_characters = list("'", "-") + + // We get to have a whole bunch of these due to being THE Crusoe's Rest contact language. + mutual_understanding = list( + /datum/language/sylvan = 80, + /datum/language/common = 60, + /datum/language/uncommon = 60, + /datum/language/draconic = 40, + /datum/language/konjin = 20, + /datum/language/moffic = 20, + /datum/language/nambuni = 10, + ) + + +/** + * LANGUAGE OVERRIDES + */ + +/datum/language/common + name = "Celestial" + desc = "Celestial, one of the common languages of habitual spacefarers and colonists alike under the 4CA as it stands today. \ + Originally constructed by the 3CA as a set of consistent protocols shared between species intended to aid in charting space, \ + the language as it is known today is a creole resulting from 3CA Celestial intertwining and forming pidgins with the various languages of contacted species." + space_chance = 60 + // Is mostly syllables from other languages. + syllables = list( + "ce", "le", "est", "ial", + // Borrowed from Helresa + "e", + "al", "el", "af", "ef", "as", "es", + "eol", "eul", + "be", "re", "ke", "ca", "la", "sa", + "het", "hel", "lak", "rek", "ret", "kes", + "drak", "drek", "dret", + "ath", "eth", "ekh", "skh", + "cala", "kesa", "resa", + // And Helrekesha + "beskh", "shekk", "sha", + // Borrowed from Hillosk + "fii", "sii", "rii", "rel", + "hil", "losk", + // Borrowed from Nomadic + "i", "vii", "vuo", "eil", "tun", "gå", "det", "att", "ok", + // Borrowed from Konjin + "qi", "lao", "gao", "cai", "zun", "xuan", "ai", "feng", + // Borrowed from Plutonian + "l'e", // You get One. The One. Use it well. + // Mixed syllables + "arf", "dråk", "xuån", "fek", "laosk", + ) + special_characters = list("-") + icon_state = "solcommon" + icon = 'modular_doppler/languages/icons/language.dmi' + // We get to have a whole bunch of these due to being a contact language. + mutual_understanding = list( + /datum/language/uncommon = 75, + /datum/language/crusoeslocal = 60, + /datum/language/sylvan = 30, + /datum/language/moffic = 20, + /datum/language/konjin = 10, + ) + +/datum/language/uncommon + name = "Helresa" + desc = "A language family commonly spoken in the 4CA core sectors. \ + Known as 'Helrekesha' at the time of the 2CA and having been used as the foundation for 3CA Celestial, \ + modern Helresa still has a coherent historical throughline despite its age and consequent cultural intermingling." + default_priority = 98 + syllables = list( + // Modern Helresa + "e", + "al", "el", "af", "ef", "as", "es", + "eol", "eul", + "be", "re", "ke", "ca", "la", "sa", + "het", "hel", "lak", "rek", "ret", "kes", + "drak", "drek", "dret", + "ath", "eth", "ekh", "skh", + "cala", "kesa", "resa", + // Archaic Helrekesha still present + "ri", "ha", "ho", "do", + "rie", + "bhe", "dha", "dhe", "cso", + "jha", "jaho", "jhe", "kha", "khe", + "sha", "she", "feh", "fre", + "mazz", "mezz", "mohk", "nett", "nott", "kott", + "takh", "tash", "tesh", "tekh", "vesh", "vekh", + "hesh", "zekh", "rakh", + "beskh", "shekk", + "khet", "ghes", "ghos", + "ar", + "aur", "arh", + "osh", "okh", "esh", + "iash", "iakh", "iokh", "lahk", "lekh", + // These are borrowed from Hillosk + "fii", "sii", "rii", "tol", "tok", "dia", "eres", "aere", + "hil", "losk", + ) + special_characters = list("-") + mutual_understanding = list( + /datum/language/common = 75, + /datum/language/crusoeslocal = 60, + /datum/language/sylvan = 50, + ) + +/datum/language/sylvan + name = "Hillosk Toksii" + desc = "The language family also known as the 'Agricultural Commons', or 'Hillosk' for short, \ + its variations are most commonly spoken in agricultural-focused sectors of the 4CA. \ + Originating as a workers' pidgin on an early agricultural colony, it has since then solidified, \ + brought to use by their now-experts turning it to writing, then propagated between colonies by the movement thereof. \ + In the case of biology and ecology, most scientific names are written in an archaic form of this." + default_priority = 99 + syllables = list( + "fii", "sii", "rii", "rel", "maa", "ala", "san", "tol", "tok", "dia", "eres", + "fal", "tis", "bis", "qel", "aras", "losk", "rasa", "eob", "hil", "tanl", "aere", + "fer", "bal", "pii", "dala", "ban", "foe", "doa", "cii", "uis", "mel", "wex", + "incas", "int", "elc", "ent", "aws", "qip", "nas", "vil", "jens", "dila", "fa", + "la", "re", "do", "ji", "ae", "so", "qe", "ce", "na", "mo", "ha", "yu", + // These are borrowed from Helresa + "eul", "ekh", "skh", + "kesa", "resa", + ) + mutual_understanding = list( + /datum/language/crusoeslocal = 80, + /datum/language/uncommon = 50, + /datum/language/common = 30, + ) + +/datum/language/moffic + name = "Nomadic" + desc = "Spoken colloquially by the Veniri of Grand Nomad Fleet, the early iteration of Nomadic emerged when Fueljacks relied on their receptors for simple, \ + one-worded pheromones to communicate, and navigate the often fatal maintenance tunnels sprawled throughout the fleet. \ + The moths developed gesticulation through antennas and wings to convey deeper intent, with mandibles providing emotional context through clicks and trills. \ + After contact with the Fourth Celestial Alignment, non-lepidoteran speakers managed to achieve a similar effect from clicking their tongue to roof, \ + and steer the tone with the width of their mouth while using their limbs in place of antennas. \ + It is informally spoken, deploying many slangs and shorthands from Celestial. Has phonetic resemblance to Italian." + default_priority = 87 + mutual_understanding = list( + /datum/language/common = 20, + /datum/language/crusoeslocal = 20, + ) /datum/language/draconic name = "Khaishhs" - desc = "Often mispronounced as \"Heesh\" by offworlders and non-lizardfolk, The language can date its origins to Tiziran Pre-History where its abundant use of hisses, rattles, glottal sounds and other harsh consonants made it easily understood at greater distances and the extensive cave systems below the surface of Tizira. Though there are as many dialects as there are Clans, the more common \"Imperial Khaishhs\" was created by Clan Talunan as an effort to unite the people under their rule, and is what used in any and all official dealings with their government. The language itself has gained a bit of infamy in how uncomfortable it is to speak after any extended period for those whom do not use it on a daily basis, or whose biology is non-conducive to the vocals required to properly speak it. " + desc = "Often mispronounced as \"Heesh\" by offworlders and non-lizardfolk, The language can date its origins to Tiziran Pre-History where its abundant use of hisses, \ + rattles, glottal sounds and other harsh consonants made it easily understood at greater distances and the extensive cave systems below the surface of Tizira. \ + Though there are as many dialects as there are Clans, the more common \"Imperial Khaishhs\" was created by Clan Talunan as an effort to unite the people under their rule, \ + and is what used in any and all official dealings with their government. \ + The language itself has gained a bit of infamy in how uncomfortable it is to speak after any extended period for those whom do not use it on a daily basis, \ + or whose biology is non-conducive to the vocals required to properly speak it. " + default_priority = 89 + mutual_understanding = list( + /datum/language/crusoeslocal = 40, + ) + +/datum/language/voltaic + name = "Voltaic" + desc = "The 'staticky' manipulation of electrical discharge used for communication between Ethereals almost universally. \ + Too universal and natural to be named to them, the name 'Voltaic' was rather assigned by the NanoTrasen corporation post-contact." + default_priority = 69 + +/datum/language/machine + // Outside of synths/silicons who start with this selected, most people probably shouldn't. Low priority. + default_priority = 19 + +/datum/language/carptongue + name = "Carptongue" + desc = "Not quite a full language, this is the various fishy vocalizations and gestures that space carp, sharks, and dragons use intuitively to communicate basic concepts. \ + Words for more complex concepts form with the presence of a dragon anchoring them, and subsequently wane with the weaker long-term memory of dragonless carp." + // Niche tongue that probably shouldn't be spoken outside of carp genemodders. + default_priority = 18 + +/datum/language/shadowtongue + name = "Shadowtongue" + desc = "TONGUE OF A REALITY PLANE OFFSET FIVE INCHES ABOVE YOURS; the language of Resonance and Magycks, spoken by sorcerers and reality-benders. \ + The language their olden books are oft written in." + // You should probably not be speaking in this as your standard tongue. + default_priority = 1 diff --git a/modular_doppler/languages/icons/language.dmi b/modular_doppler/languages/icons/language.dmi index 0e3cfcbf2ac33e..5f39bd3d41b093 100644 Binary files a/modular_doppler/languages/icons/language.dmi and b/modular_doppler/languages/icons/language.dmi differ diff --git a/modular_doppler/modular_quirks/crusoes_local/crusoes_local.dm b/modular_doppler/modular_quirks/crusoes_local/crusoes_local.dm new file mode 100644 index 00000000000000..f269cd6c1271f3 --- /dev/null +++ b/modular_doppler/modular_quirks/crusoes_local/crusoes_local.dm @@ -0,0 +1,18 @@ + +/datum/quirk/crusoes_local + name = "Crusoe's Local" + desc = "You've spent enough time living and interacting locally to have developed a sense for the local colonists' attempts to communicate irregardless of language barriers, \ + and consequentially know how to interpret the resulting pidgins." + icon = FA_ICON_ARROWS_DOWN_TO_PEOPLE + value = 0 + gain_text = span_notice("Some of the words of the people around you certainly aren't yours, but together you can make do.") + lose_text = span_notice("You seem to have forgotten the local pidgin language.") + medical_record_text = "Patient seems to have gotten accustomed to the local colonists' pidgins forming in Crusoe's Rest." + +/datum/quirk/crusoes_local/add(client/client_source) + quirk_holder.grant_language(/datum/language/crusoeslocal, source = LANGUAGE_QUIRK) + +/datum/quirk/crusoes_local/remove() + if(QDELING(quirk_holder)) + return + quirk_holder.remove_language(/datum/language/crusoeslocal, source = LANGUAGE_QUIRK) diff --git a/tgstation.dme b/tgstation.dme index ce384007a51406..762d6d0f28bfc1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -655,6 +655,7 @@ #include "code\_globalvars\~doppler_globalvars\regexes.dm" #include "code\_globalvars\~doppler_globalvars\religion.dm" #include "code\_globalvars\~doppler_globalvars\text.dm" +#include "code\_globalvars\~doppler_globalvars\lists\languages.dm" #include "code\_globalvars\~doppler_globalvars\lists\quirks.dm" #include "code\_globalvars\~doppler_globalvars\lists\signature_beacon.dm" #include "code\_globalvars\~doppler_globalvars\lists\synth_stomach.dm" @@ -7426,6 +7427,7 @@ #include "modular_doppler\modular_quirks\breather\nitrogen_breather\nitrogen_tanks.dm" #include "modular_doppler\modular_quirks\breather\water_breather\water_breather.dm" #include "modular_doppler\modular_quirks\convict\convict_quirk.dm" +#include "modular_doppler\modular_quirks\crusoes_local\crusoes_local.dm" #include "modular_doppler\modular_quirks\cybernetic_limb_mounts\cybernetic_limb_mounts.dm" #include "modular_doppler\modular_quirks\entombed\code\entombed.dm" #include "modular_doppler\modular_quirks\entombed\code\entombed_alt_actions.dm"