diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 89755d7acf0..f9bae78c35b 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -448,32 +448,32 @@ proc/checkhtml(var/t)
// Pencode
-/proc/pencode_to_html(text, mob/user, obj/item/weapon/pen/P = null, sign = 1, fields = 1, deffont = PEN_FONT, signfont = SIGNFONT, crayonfont = CRAYON_FONT)
- text = replacetext(text, "\n", "
")
- text = replacetext(text, "\[center\]", "
")
-
+ if(P)
text = "[text]"
-
+ else
+ text = "[text]"
text = copytext(text, 1, MAX_PAPER_MESSAGE_LEN)
return text
diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm
index e159aa44247..32a6a58cbb3 100644
--- a/code/game/dna/genes/vg_powers.dm
+++ b/code/game/dna/genes/vg_powers.dm
@@ -211,11 +211,11 @@
/obj/effect/proc_holder/spell/targeted/remotetalk/choose_targets(mob/user = usr)
var/list/targets = new /list()
var/list/validtargets = new /list()
- for(var/mob/M in view(user.client.view, user))
+ var/turf/T = get_turf(user)
+ for(var/mob/M in range(14, T))
if(M && M.mind)
if(M == user)
continue
-
validtargets += M
if(!validtargets.len)
@@ -237,14 +237,15 @@
if(!say)
return
say = strip_html(say)
+ say = pencode_to_html(say, usr, format = 0, fields = 0)
for(var/mob/living/target in targets)
log_say("Project Mind: [key_name(user)]->[key_name(target)]: [say]")
if(REMOTE_TALK in target.mutations)
- target.show_message("You hear [user.real_name]'s voice: [say]")
+ target.show_message("You hear [user.real_name]'s voice: [say]")
else
- target.show_message("You hear a voice that seems to echo around the room: [say]")
- user.show_message("You project your mind into [target.real_name]: [say]")
+ target.show_message("You hear a voice that seems to echo around the room: [say]")
+ user.show_message("You project your mind into [target.name]: [say]")
for(var/mob/dead/observer/G in player_list)
G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]")
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 36d84b0f72d..d591c8b4a1c 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -96,6 +96,9 @@
return (copytext(message, length(message)) == "!") ? 2 : 1
/datum/language/proc/broadcast(mob/living/speaker, message, speaker_mask)
+ if(!check_can_speak(speaker))
+ return FALSE
+
log_say("[key_name(speaker)]: ([name]) [message]")
if(!speaker_mask)
@@ -114,6 +117,9 @@
/datum/language/proc/check_special_condition(mob/other, mob/living/speaker)
return TRUE
+/datum/language/proc/check_can_speak(mob/living/speaker)
+ return TRUE
+
/datum/language/proc/get_spoken_verb(msg_end)
switch(msg_end)
if("!")
@@ -290,10 +296,30 @@
flags = RESTRICTED | HIVEMIND
/datum/language/grey/broadcast(mob/living/speaker, message, speaker_mask)
+ var/their = "their"
+ if(speaker.gender == "female")
+ their = "her"
+ if(speaker.gender == "male")
+ their = "his"
+
+ speaker.visible_message("[speaker] touches [their] fingers to [their] temple.")
..(speaker,message,speaker.real_name)
+/datum/language/grey/check_can_speak(mob/living/speaker)
+ if(ishuman(speaker))
+ var/mob/living/carbon/human/S = speaker
+ var/obj/item/organ/external/rhand = S.get_organ("r_hand")
+ var/obj/item/organ/external/lhand = S.get_organ("l_hand")
+ if((!rhand || !rhand.is_usable()) && (!lhand || !lhand.is_usable()))
+ to_chat(speaker,"You can't communicate without the ability to use your hands!")
+ return FALSE
+ if(speaker.incapacitated(ignore_lying = 1))
+ to_chat(speaker,"You can't communicate while unable to move your hands to your head!")
+ return FALSE
+ return TRUE
+
/datum/language/grey/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
- if(other in range(7, speaker))
+ if(atoms_share_level(other, speaker))
return TRUE
return FALSE
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index bbe57fa66f9..42bc8ddb87a 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -421,5 +421,5 @@ emp_act
/mob/living/carbon/human/water_act(volume, temperature, source)
..()
- if(temperature >= 330) bodytemperature = bodytemperature + (temperature - bodytemperature)
- if(temperature <= 280) bodytemperature = bodytemperature - (bodytemperature - temperature)
+ species.water_act(src,volume,temperature,source)
+
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index c1d1a169c1d..1d0df9e7664 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -743,3 +743,9 @@ It'll return null if the organ doesn't correspond, so include null checks when u
if(H.see_override) //Override all
H.see_invisible = H.see_override
+
+/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source)
+ if(temperature >= 330)
+ M.bodytemperature = M.bodytemperature + (temperature - M.bodytemperature)
+ if(temperature <= 280)
+ M.bodytemperature = M.bodytemperature - (M.bodytemperature - temperature)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 150f2d647bc..370bd63d466 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -753,6 +753,11 @@
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
..()
+/datum/species/grey/water_act(var/mob/living/carbon/C, volume, temperature, source)
+ ..()
+ C.take_organ_damage(5,min(volume,20))
+ C.emote("scream")
+
/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
var/speech_pref = H.client.prefs.speciesprefs
if(speech_pref)
diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm
index 20c4e92fd98..a868c0958ea 100644
--- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm
@@ -43,7 +43,7 @@
if(!istype(file))
data["error"] = "I/O ERROR: Unable to open file."
else
- data["filedata"] = pencode_to_html(file.stored_data, sign = 0, fields = 0)
+ data["filedata"] = pencode_to_html(file.stored_data, format = 1, sign = 0, fields = 0)
data["filename"] = "[file.filename].[file.filetype]"
else
if(!computer || !HDD)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 250abe3d682..cd5b065b3ca 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -203,7 +203,7 @@
/obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob)
- t = pencode_to_html(t, usr, P, TRUE, TRUE, deffont, signfont, crayonfont)
+ t = pencode_to_html(t, usr, P, TRUE, TRUE, TRUE, deffont, signfont, crayonfont)
//Count the fields
var/laststart = 1
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 70d2a9f76c0..773d03c6006 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -20,10 +20,65 @@
drink_desc = "The father of all refreshments."
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume)
-// Put out fire
if(method == TOUCH)
+ // Put out fire
M.adjust_fire_stacks(-(volume / 10))
M.ExtinguishMob()
+ if(ishuman(M))
+
+ var/mob/living/carbon/human/H = M
+
+ if(H.get_species() != "Grey") //God this is so gross I hate it.
+ return
+
+ if(volume > 25)
+
+ if(H.wear_mask)
+ to_chat(H, "Your mask protects you from the water!")
+ return
+
+ if(H.head)
+ to_chat(H, "Your helmet protects you from the water!")
+ return
+
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(5, 10)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(5,10)
+ else
+ M.take_organ_damage(5,10)
+
+ if(method == INGEST)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ if(H.get_species() != "Grey")
+ return
+
+ if(volume < 10)
+ to_chat(M, "The watery solvent substance stings you, but isn't concentrated enough to harm you!")
+
+ if(volume >=10 && volume <=25)
+ if(!H.unacidable)
+ M.take_organ_damage(0,min(max(volume-10,2)*2,20))
+ M.emote("scream")
+
+
+ if(volume > 25)
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(0, 20)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(0,20)
/datum/reagent/water/reaction_turf(turf/simulated/T, volume)
if(!istype(T))