From 3555950bb1851ae86385abe2bddaaa6df268558c Mon Sep 17 00:00:00 2001 From: Kurfursten Date: Fri, 1 Oct 2021 20:42:37 -0500 Subject: [PATCH] Fungal Telepathy (#30817) * Mushroom Racials * Revert exoskeleton * telepathy formatting --- code/modules/mob/living/carbon/human/say.dm | 7 +++- code/modules/mob/living/carbon/species.dm | 21 +++++++--- .../mob/living/carbon/species_powers.dm | 39 +++++++++++++++++++ 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 9cc042ecae4..46736198b6d 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -3,8 +3,11 @@ var/muteletter_tries = 3 var/list/muteletters_check = list() -///mob/living/carbon/human/say(var/message) -// ..(message) +/mob/living/carbon/human/say(var/message) + if(species && (species.flags & SPECIES_NO_MOUTH) && !get_message_mode(message)) + species.silent_speech(src,message) + else + ..() // This is obsolete if the human is using a language. // Verbs in such a situation are given in /datum/language/get_spoken_verb(). diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 2b522f162dc..3af4a92ca6f 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -285,6 +285,8 @@ var/global/list/whitelisted_species = list("Human") /datum/species/proc/OutOfCrit(var/mob/living/carbon/human/H) +/datum/species/proc/silent_speech(message) + // -- Outfit datums -- /datum/species/proc/final_equip(var/mob/living/carbon/human/H) @@ -1283,10 +1285,10 @@ var/list/has_died_as_golem = list() primitive = /mob/living/carbon/monkey/mushroom - spells = list(/spell/targeted/genetic/invert_eyes) + spells = list(/spell/targeted/genetic/invert_eyes, /spell/targeted/genetic/fungaltelepathy) - default_mutations=list(M_REMOTE_TALK) - default_block_names=list("REMOTETALK") + + default_mutations=list() //exoskeleton someday... blood_color = MUSHROOM_BLOOD flesh_color = "#D3D3D3" @@ -1309,9 +1311,10 @@ var/list/has_died_as_golem = list() species_intro = "You are a Mushroom Person.
\ You are an odd creature. Your lack of a mouth prevents you from eating, but you can stand or lay on food to absorb it.
\ - You have a resistance to burn and toxin, but a weakness to brute damage. You are adept at seeing in the dark, moreso with your light inversion ability.
\ - Additionally, you cannot speak. Instead you can remotely talk into somebodies mind should you examine them, or they talk to you.
\ + You have a resistance to burn and toxin, but you are vulnerable to brute attacks.
\ + You are adept at seeing in the dark, moreso with your light inversion ability. When you speak, it will only go to the target chosen with your Fungal Telepathy.
\ You also have access to the Sporemind, which allows you to communicate with others on the Sporemind through :~" + var/mob/living/telepathic_target /datum/species/mushroom/makeName() return capitalize(pick(mush_first)) + " " + capitalize(pick(mush_last)) @@ -1320,6 +1323,14 @@ var/list/has_died_as_golem = list() ..() H.default_gib() +/datum/species/mushroom/silent_speech(mob/M, message) + if(istype(telepathic_target) && M.can_mind_interact(telepathic_target)) + telepathic_target.show_message("You feel [M]'s thoughts: [message].") + M.show_message("Projected to [telepathic_target]: [message]") + log_admin("[key_name(M)] mushroom projects his mind towards (believed:[telepathic_target]/actual:[key_name(telepathic_target)]: [message]") + for(var/mob/dead/observer/G in dead_mob_list) + G.show_message("Mushroom telepathy from [M] to [telepathic_target]: [message]") + /datum/species/lich name = "Undead" icobase = 'icons/mob/human_races/r_lich.dmi' diff --git a/code/modules/mob/living/carbon/species_powers.dm b/code/modules/mob/living/carbon/species_powers.dm index 4820ab081d7..5493e5e3791 100644 --- a/code/modules/mob/living/carbon/species_powers.dm +++ b/code/modules/mob/living/carbon/species_powers.dm @@ -21,3 +21,42 @@ var/datum/organ/internal/eyes/mushroom/E = M.internal_organs_by_name["eyes"] if(istype(E)) E.dark_mode = !E.dark_mode + +/spell/targeted/genetic/fungaltelepathy + name = "Fungal telepathy" + desc = "Allows you to remotely speak to another being. You must either hear them speak or examine them to make contact." + panel = "Mutant Powers" + user_type = USER_TYPE_GENETIC + charge_type = Sp_RECHARGE + charge_max = 50 + invocation_type = SpI_NONE + range = GLOBALCAST //the world + max_targets = 1 + selection_type = "view" + spell_flags = SELECTABLE|TALKED_BEFORE + override_base = "genetic" + hud_state = "gen_project" + compatible_mobs = list(/mob/living/carbon/human, /datum/mind) + mind_affecting = 1 + +/spell/targeted/genetic/fungaltelepathy/cast(var/list/targets, mob/living/carbon/human/user) + if(!user || !istype(user)) + return + + if(user.mind.miming) + to_chat(user, "You find yourself unable to convey your thoughts outside of gestures.") + return + + for(var/T in targets) + var/mob/living/target + if (isliving(T)) + target = T + if (istype (T, /datum/mind)) + target = user.can_mind_interact(T) + if(!T || !istype(target) || tinfoil_check(target)) + return + to_chat(user, "You orient your mind toward [target].") + var/datum/species/mushroom/M = user.species + if(!istype(M)) + return + M.telepathic_target = target \ No newline at end of file