diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 7c42f8de..11ff6abd 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -232,4 +232,64 @@ /datum/quirk/slimespeaker/remove() var/mob/living/M = quirk_holder - M.remove_language(/datum/language/slime) \ No newline at end of file + M.remove_language(/datum/language/slime) + +/datum/quirk/narsianspeaker + name = "Nar-Sian speaker" + desc = "Obsessed with the inner workings of the blood cult, you've learned how to speak their ancient language." + value = 1 + gain_text = "Your mind feels sensitive to the slurred, ancient language of Nar'Sian cultists." + lose_text = "You forget how to speak Nar'Sian!" + +/datum/quirk/narsianspeaker/add() + var/mob/living/M = quirk_holder + M.grant_language(/datum/language/narsie) + +/datum/quirk/narsianspeaker/remove() + var/mob/living/M = quirk_holder + M.remove_language(/datum/language/narsie) + +/datum/quirk/ratvarianspeaker + name = "Ratvarian speaker" + desc = "Obsessed with forbidden knowledge regarding the clock cult, you've learned how to speak their language." + value = 1 + gain_text = "Your mind feels sensitive to the ancient language of Ratvarian cultists." + lose_text = "You forget how to speak Ratvarian!" + +/datum/quirk/ratvarianspeaker/add() + var/mob/living/M = quirk_holder + M.grant_language(/datum/language/ratvar) + +/datum/quirk/ratvarianspeaker/remove() + var/mob/living/M = quirk_holder + M.remove_language(/datum/language/ratvar) + +/datum/quirk/encodedspeaker + name = "Encoded Audio speaker" + desc = "You've been augmented with language encoders, allowing you to understand encoded audio." + value = 1 + gain_text = "Your mouth feels a little weird for a moment as your language encoder kicks in." + lose_text = "You feel your encoded audio chip malfunction. You can no longer speak or understand the language of fax machines." + +/datum/quirk/encodedspeaker/add() + var/mob/living/M = quirk_holder + M.grant_language(/datum/language/machine) + +/datum/quirk/encodedspeaker/remove() + var/mob/living/M = quirk_holder + M.remove_language(/datum/language/machine) + +/datum/quirk/xenospeaker + name = "Xenocommon speaker" + desc = "Through time observing and interacting with xenos and xeno hybrids, you've learned the intricate hissing patterns of their language." + value = 1 + gain_text = "You feel that you are now able to hiss in the same way xenomorphs do." + lose_text = "You seem to no longer know how to speak xenocommon." + +/datum/quirk/xenospeaker/add() + var/mob/living/M = quirk_holder + M.grant_language(/datum/language/xenocommon) + +/datum/quirk/xenospeaker/remove() + var/mob/living/M = quirk_holder + M.remove_language(/datum/language/xenocommon) diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index 915e85f1..fea6ab43 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -29,10 +29,12 @@ ..() assume_disguise(old_species, H) RegisterSignal(H, COMSIG_MOB_SAY, .proc/handle_speech) + H.grant_language(/datum/language/machine) /datum/species/synth/on_species_loss(mob/living/carbon/human/H) . = ..() UnregisterSignal(H, COMSIG_MOB_SAY) + H.remove_language(/datum/language/machine) /datum/species/synth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.id == "synthflesh") @@ -123,4 +125,4 @@ if (/datum/species/golem/bananium) speech_args[SPEECH_SPANS] |= SPAN_CLOWN if (/datum/species/golem/clockwork) - speech_args[SPEECH_SPANS] |= SPAN_ROBOT \ No newline at end of file + speech_args[SPEECH_SPANS] |= SPAN_ROBOT diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index f09d61e5..8a6bdd92 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -22,6 +22,7 @@ /datum/language/ratvar, /datum/language/aphasia, /datum/language/slime, + /datum/language/xenocommon, )) healing_factor = STANDARD_ORGAN_HEALING*5 //Fast!! decay_factor = STANDARD_ORGAN_DECAY/2 @@ -252,6 +253,12 @@ /obj/item/organ/tongue/robot/can_speak_in_language(datum/language/dt) return ..() || electronics_magic +/obj/item/organ/tongue/robot/Initialize(mapload) + . = ..() + var/static/list/languages_possible_robot = languages_possible_base + typecacheof(list( + /datum/language/machine)) + languages_possible = languages_possible_robot + /obj/item/organ/tongue/robot/handle_speech(datum/source, list/speech_args) speech_args[SPEECH_SPANS] |= SPAN_ROBOT diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index fede1f07..4da77a5d 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -227,6 +227,7 @@ liked_food = MEAT /datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) + C.grant_language(/datum/language/xenocommon) if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") species_traits += DIGITIGRADE if(DIGITIGRADE in species_traits) @@ -234,6 +235,7 @@ . = ..() /datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species) + C.remove_language(/datum/language/xenocommon) if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs") species_traits -= DIGITIGRADE if(DIGITIGRADE in species_traits) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm index 8e866e46..2e0df07e 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -24,12 +24,14 @@ var/datum/action/innate/monitor_change/screen /datum/species/ipc/on_species_gain(mob/living/carbon/human/C) + C.grant_language(/datum/language/machine) if(isipcperson(C) && !screen) screen = new screen.Grant(C) ..() /datum/species/ipc/on_species_loss(mob/living/carbon/human/C) + C.remove_language(/datum/language/machine) if(screen) screen.Remove(C) ..()