diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index aa848a1b097..520f2ff4fb7 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -123,6 +123,13 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
rendered = "Holopad received, [name_used] [verb], \"[text]\""
master.show_message(rendered, 2)
return
+
+/obj/machinery/hologram/holopad/hear_message(mob/living/M, text)
+ if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something.
+ var/name_used = M.GetVoice()
+ var/rendered = "Holopad received, [name_used] [text]"
+ master.show_message(rendered, 2)
+ return
/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
hologram = new(T)//Spawn a blank effect at the location.
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 11f706f01ba..6d7c7a26ed6 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -25,28 +25,34 @@
if(spamcheck)
user << "\red \The [src] needs to recharge!"
return
-
- var/message = sanitize(copytext(input(user, "Shout a message?", "Megaphone", null) as text,1,MAX_MESSAGE_LEN))
+
+ var/message = input(user, "Shout a message:", "Megaphone") as text|null
+ if(!message)
+ return
+ message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN))
if(!message)
return
message = capitalize(message)
if ((src.loc == user && usr.stat == 0))
if(emagged)
if(insults)
- for(var/mob/O in (viewers(user)))
- O.show_message("[user] broadcasts, \"[pick(insultmsg)]\"",2) // 2 stands for hearable message
+ saymsg(user, pick(insultmsg))
insults--
else
user << "\red *BZZZZzzzzzt*"
else
- for(var/mob/O in (viewers(user)))
- O.show_message("[user] broadcasts, \"[message]\"",2) // 2 stands for hearable message
+ saymsg(user, message)
spamcheck = 1
spawn(20)
spamcheck = 0
return
+/obj/item/device/megaphone/proc/saymsg(mob/living/user as mob, message)
+ audible_message("[user] broadcasts, \"[message]\"", hearing_distance = 14)
+ for(var/obj/O in oview(14, get_turf(src)))
+ O.hear_talk(user, "[message]")
+
/obj/item/device/megaphone/emag_act(user as mob)
if(!emagged)
user << "\red You overload \the [src]'s voice synthesizer."
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 2ee3d7e88ac..448af414628 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -478,6 +478,11 @@ var/global/list/default_medbay_channels = list(
if(get_dist(src, M) <= canhear_range)
talk_into(M, msg,null,verb,speaking)
+/obj/item/device/radio/hear_message(mob/M as mob, msg)
+ if (broadcasting)
+ if(get_dist(src, M) <= canhear_range)
+ talk_into(M, msg, speaking = new /datum/language/noise)
+
/*
/obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message)
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 89fe2a24232..ebaff840df5 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -93,7 +93,11 @@
mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [M.name] exclaims, \"[msg]\""
return
mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [M.name] says, \"[msg]\""
-
+
+/obj/item/device/taperecorder/hear_message(mob/living/M as mob, msg)
+ if(mytape && recording)
+ mytape.timestamp += mytape.used_capacity
+ mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [M.name] [msg]"
/obj/item/device/taperecorder/verb/record()
set name = "Start Recording"