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."