diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 1e5056db492..5811476ad77 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -1,6 +1,6 @@
// At minimum every mob has a hear_say proc.
-/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
+/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
if(!client)
return
@@ -44,6 +44,9 @@
src << "[speaker_name][alt_name] talks but you cannot hear \him."
else
src << "[speaker_name][alt_name] [track][verb], \"[message]\""
+ if (speech_sound)
+ var/turf/source = speaker? get_turf(speaker) : get_turf(src)
+ src.playsound_local(source, speech_sound, sound_vol, 1)
/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 465bf7adc26..462e4e015c9 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -121,23 +121,14 @@
else if(r_ear && istype(r_ear,/obj/item/device/radio))
r_ear.talk_into(src,message, message_mode, verb, speaking)
used_radios += r_ear
-
-
- if(used_radios.len)
- italics = 1
- message_range = 1
-
- var/datum/gas_mixture/environment = loc.return_air()
- if(environment)
- var/pressure = environment.return_pressure()
- if(pressure < SAY_MINIMUM_PRESSURE)
- italics = 1
- message_range =1
-
+
+ var/sound/speech_sound
+ var/sound_vol
if((species.name == "Vox" || species.name == "Vox Armalis") && prob(20))
- playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1)
-
- ..(message, speaking, verb, alt_name, italics, message_range, used_radios)
+ speech_sound = sound('sound/voice/shriek1.ogg')
+ sound_vol = 50
+
+ ..(message, speaking, verb, alt_name, italics, message_range, used_radios, speech_sound, sound_vol) //ohgod we should really be passing a datum here.
/mob/living/carbon/human/say_understands(var/mob/other,var/datum/language/speaking = null)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 98d64231ec0..627882ab47a 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -81,9 +81,30 @@ var/list/department_radio_keys = list(
if(!istype(dongle)) return
if(dongle.translate_binary) return 1
-/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/italics=0, var/message_range = world.view, var/list/used_radios = list())
+/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/italics=0, var/message_range = world.view, var/list/used_radios = list(), var/sound/speech_sound, var/sound_vol)
var/turf/T = get_turf(src)
+
+ if(used_radios.len)
+ italics = 1
+ message_range = 1
+
+ for(var/mob/living/M in hearers(5, src))
+ if(M != src)
+ M.show_message("[src] talks into [used_radios.len ? used_radios[1] : "radio"]")
+ if (speech_sound)
+ var/turf/source = speaker? get_turf(speaker) : get_turf(src)
+ src.playsound_local(source, speech_sound, sound_vol * 0.5, 1)
+
+ var/datum/gas_mixture/environment = T.return_air()
+ if(environment)
+ var/pressure = environment.return_pressure()
+ if(pressure < SAY_MINIMUM_PRESSURE)
+ italics = 1
+ message_range = 1
+
+ if (speech_sound)
+ sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
var/list/listening = list()
if(T)
@@ -120,15 +141,9 @@ var/list/department_radio_keys = list(
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
spawn(30) del(speech_bubble)
- if(used_radios.len)
- for(var/mob/living/M in hearers(5, src))
- if(M != src)
- M.show_message("[src] talks into [used_radios.len ? used_radios[1] : "radio"]")
-
-
for(var/mob/M in listening)
M << speech_bubble
- M.hear_say(message,verb,speaking,alt_name, italics, src)
+ M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
log_say("[name]/[key] : [message]")