diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 5fcbb3948a9..a75cd14e7ae 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -468,101 +468,116 @@ //////////////////////////////////////////////////////////////////////// // WAS: /datum/bioEffect/empath -/datum/dna/gene/basic/grant_verb/empath +/datum/dna/gene/basic/grant_spell/empath name = "Empathic Thought" desc = "The subject becomes able to read the minds of others for certain information." - verbtype = /proc/bioproc_empath + spelltype = /obj/effect/proc_holder/spell/targeted/empath activation_messages = list("You suddenly notice more about others than you did before.") deactivation_messages = list("You no longer feel able to sense intentions.") instability=1 + mutation=M_EMPATH + New() ..() block = EMPATHBLOCK -/proc/bioproc_empath(var/mob/living/carbon/M in range(7,usr)) - set name = "Read Mind" - set desc = "Read the minds of others for information." - set category = "Mutant Abilities" +/obj/effect/proc_holder/spell/targeted/empath + name = "Read Mind" + desc = "Read the minds of others for information." + charge_max = 1800 + clothes_req = 0 + stat_allowed = 0 + invocation_type = "none" + range = -2 + selection_type = "range" - if(!iscarbon(M)) - usr << "\red You may only use this on other organic beings." + icon_power_button = "genetic_empath" + +/obj/effect/proc_holder/spell/targeted/empath/choose_targets(mob/user = usr) + var/list/targets + targets += input("Choose the target to spy on.", "Targeting") as mob in range(7,usr) + +/obj/effect/proc_holder/spell/targeted/empath/cast(list/targets) + if(!ishuman(usr)) return + + + for(var/mob/living/carbon/M in targets) + if(!iscarbon(M)) + usr << "\red You may only use this on other organic beings." + return + + if (M_PSY_RESIST in M.mutations) + usr << "\red You can't see into [M.name]'s mind at all!" + return + + if (M.stat == 2) + usr << "\red [M.name] is dead and cannot have their mind read." + return + if (M.health < 0) + usr << "\red [M.name] is dying, and their thoughts are too scrambled to read." + return + + usr << "\blue Mind Reading of [M.name]:" + var/pain_condition = M.health + // lower health means more pain + var/list/randomthoughts = list("what to have for lunch","the future","the past","money", + "their hair","what to do next","their job","space","amusing things","sad things", + "annoying things","happy things","something incoherent","something they did wrong") + var/thoughts = "thinking about [pick(randomthoughts)]" + if (M.fire_stacks) + pain_condition -= 50 + thoughts = "preoccupied with the fire" + if (M.radiation) + pain_condition -= 25 + + switch(pain_condition) + if (81 to INFINITY) + usr << "\blue Condition: [M.name] feels good." + if (61 to 80) + usr << "\blue Condition: [M.name] is suffering mild pain." + if (41 to 60) + usr << "\blue Condition: [M.name] is suffering significant pain." + if (21 to 40) + usr << "\blue Condition: [M.name] is suffering severe pain." + else + usr << "\blue Condition: [M.name] is suffering excruciating pain." + thoughts = "haunted by their own mortality" + + switch(M.a_intent) + if ("help") + usr << "\blue Mood: You sense benevolent thoughts from [M.name]." + if ("disarm") + usr << "\blue Mood: You sense cautious thoughts from [M.name]." + if ("grab") + usr << "\blue Mood: You sense hostile thoughts from [M.name]." + if ("harm") + usr << "\blue Mood: You sense cruel thoughts from [M.name]." + for(var/mob/living/L in view(7,M)) + if (L == M) + continue + thoughts = "thinking about punching [L.name]" + break + else + usr << "\blue Mood: You sense strange thoughts from [M.name]." + + if (istype(M,/mob/living/carbon/human)) + var/numbers[0] + var/mob/living/carbon/human/H = M + if(H.mind && H.mind.initial_account) + numbers += H.mind.initial_account.account_number + numbers += H.mind.initial_account.remote_access_pin + if(numbers.len>0) + usr << "\blue Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name]." + usr << "\blue Thoughts: [M.name] is currently [thoughts]." + + if (M_EMPATH in M.mutations) + M << "\red You sense [usr.name] reading your mind." + else if (prob(5) || M.mind.assigned_role=="Chaplain") + M << "\red You sense someone intruding upon your thoughts..." return - if(usr.stat) - return - - if (M_PSY_RESIST in M.mutations) - usr << "\red You can't see into [M.name]'s mind at all!" - return - - if (M.stat == 2) - usr << "\red [M.name] is dead and cannot have their mind read." - return - if (M.health < 0) - usr << "\red [M.name] is dying, and their thoughts are too scrambled to read." - return - - usr << "\blue Mind Reading of [M.name]:" - var/pain_condition = M.health - // lower health means more pain - var/list/randomthoughts = list("what to have for lunch","the future","the past","money", - "their hair","what to do next","their job","space","amusing things","sad things", - "annoying things","happy things","something incoherent","something they did wrong") - var/thoughts = "thinking about [pick(randomthoughts)]" - if (M.fire_stacks) - pain_condition -= 50 - thoughts = "preoccupied with the fire" - if (M.radiation) - pain_condition -= 25 - - switch(pain_condition) - if (81 to INFINITY) - usr << "\blue Condition: [M.name] feels good." - if (61 to 80) - usr << "\blue Condition: [M.name] is suffering mild pain." - if (41 to 60) - usr << "\blue Condition: [M.name] is suffering significant pain." - if (21 to 40) - usr << "\blue Condition: [M.name] is suffering severe pain." - else - usr << "\blue Condition: [M.name] is suffering excruciating pain." - thoughts = "haunted by their own mortality" - - switch(M.a_intent) - if ("help") - usr << "\blue Mood: You sense benevolent thoughts from [M.name]." - if ("disarm") - usr << "\blue Mood: You sense cautious thoughts from [M.name]." - if ("grab") - usr << "\blue Mood: You sense hostile thoughts from [M.name]." - if ("harm") - usr << "\blue Mood: You sense cruel thoughts from [M.name]." - for(var/mob/living/L in view(7,M)) - if (L == M) - continue - thoughts = "thinking about punching [L.name]" - break - else - usr << "\blue Mood: You sense strange thoughts from [M.name]." - - if (istype(M,/mob/living/carbon/human)) - var/numbers[0] - var/mob/living/carbon/human/H = M - if(H.mind && H.mind.initial_account) - numbers += H.mind.initial_account.account_number - numbers += H.mind.initial_account.remote_access_pin - if(numbers.len>0) - usr << "\blue Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name]." - usr << "\blue Thoughts: [M.name] is currently [thoughts]." - - if (/datum/dna/gene/basic/grant_verb/empath in M.active_genes) - M << "\red You sense [usr.name] reading your mind." - else if (prob(5) || M.mind.assigned_role=="Chaplain") - M << "\red You sense someone intruding upon your thoughts..." - return - //////////////////////////////////////////////////////////////////////// // WAS: /datum/bioEffect/superfart diff --git a/code/setup.dm b/code/setup.dm index 64568ac149c..0c93f8ceed3 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -389,6 +389,7 @@ var/MAX_EXPLOSION_RANGE = 14 #define M_SOBER 203 // Increased alcohol metabolism #define M_PSY_RESIST 204 // Block remoteview #define M_SUPER_FART 205 // Duh +#define M_EMPATH 206 //Read minds // /vg/ muts #define M_LOUD 208 // CAUSES INTENSE YELLING