diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 3395edecfea..ab02b33155e 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -175,38 +175,91 @@ /mob/living/carbon/human/proc/commune() set category = "Abilities" set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." + set desc = "Send a telepathic message to a recipient." + + var/obj/item/organ/external/rhand = src.get_organ("r_hand") + var/obj/item/organ/external/lhand = src.get_organ("l_hand") + if((!rhand || !rhand.is_usable()) && (!lhand || !lhand.is_usable())) + to_chat(src,"You can't communicate without the ability to use your hands!") + return + if((lhand.is_stump()) && (rhand.is_stump())) + to_chat(src,"You can't communicate without functioning hands!") + return + if(src.r_hand != null && src.l_hand != null) + to_chat(src,"You can't communicate while your hands are full!") + return + if(stat || paralysis || stunned || weakened || restrained()) + to_chat(src,"You can't communicate while unable to move your hands to your head!") + return + if(last_special > world.time) + to_chat(src,"Your mind requires rest!") + return + + last_special = world.time + 100 + + visible_message("[src] touches their fingers to their temple.") var/list/targets = list() - var/target = null + for(var/mob/living/M in view(client.view, client.eye)) + targets += M + var/mob/living/target = null var/text = null - targets += getmobs() //Fill list, prompt user with list target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - if(!target) return + if(!target) + return text = input("What would you like to say?", "Speak to creature", null, null) text = sanitize(text) - if(!text) return - - var/mob/M = targets[target] - - if(istype(M, /mob/abstract/observer) || M.stat == DEAD) - src << "Not even a [src.species.name] can speak to the dead." + if(!text) return - log_say("[key_name(src)] communed to [key_name(M)]: [text]",ckey=key_name(src)) + if(target.stat == DEAD) + to_chat(src,"Not even a [src.species.name] can speak to the dead.") + return + + if (target.isSynthetic()) + to_chat(src,"This can only be used on living organisms.") + return + + + if (target.is_diona()) + to_chat(src,"The creature's mind is not solid enough and slips through like sand.") + return + + if(!(target in view(client.view, client.eye))) + to_chat(src,"[target] is too far for your mind to grasp!") + return + + log_say("[key_name(src)] communed to [key_name(target)]: [text]",ckey=key_name(src)) + + for (var/mob/M in player_list) + if (istype(M, /mob/abstract/new_player)) + continue + else if(M.stat == DEAD && M.client.prefs.toggles & CHAT_GHOSTEARS) + to_chat(M,"[src] telepathically says to [target]: [text]") + + var/mob/living/carbon/human/H = target + if (/mob/living/carbon/human/proc/commune in target.verbs) + to_chat(H,"You instinctively sense [src] sending their thoughts into your mind, hearing: [text]") + else if(prob(25) && (target.mind && target.mind.assigned_role=="Chaplain")) + to_chat(H,"You sense [src]'s thoughts enter your mind, whispering quietly: [text]") + else + to_chat(H,"You feel pressure behind your eyes as alien thoughts enter your mind: [text]") + if(istype(H)) + if (/mob/living/carbon/human/proc/commune in target.verbs) + return + if(prob(10) && (H.species.flags & NO_BLOOD)) + to_chat(H,"Your nose begins to bleed...") + H.drip(3) + else if(prob(25) && (H.species.flags & NO_PAIN)) + to_chat(H,"Your head hurts...") + else if(prob(50)) + to_chat(H,"Your mind buzzes...") - M << "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]" - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == src.species.name) - return - H << "Your nose begins to bleed..." - H.drip(1) /mob/living/carbon/human/proc/regurgitate() set name = "Regurgitate" diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 39b711bffe2..f631347fb12 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -258,6 +258,10 @@ H.h_style = "Skrell Female Tentacles" H.update_hair() + inherent_verbs = list( + /mob/living/carbon/human/proc/commune + ) + /datum/species/diona name = "Diona" short_name = "dio" diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 731c8c34228..a40372d42fc 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -66,6 +66,8 @@ h1.alert, h2.alert {color: #000000;} .emote {font-style: italic;} +.psychic {color: #56d277;} + /* Game Messages */ .attack {color: #ff0000;} diff --git a/html/changelogs/paradoxspace-chemicalsinthewater.yml b/html/changelogs/paradoxspace-chemicalsinthewater.yml new file mode 100644 index 00000000000..029eda1a707 --- /dev/null +++ b/html/changelogs/paradoxspace-chemicalsinthewater.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +################################# + +# Your name. +author: ParadoxSpace + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds a basic telepathic ability to Skrell."