From f39649be577040c789cdbbeb3914c19c29e2a28d Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 13 Dec 2015 04:36:41 -0500 Subject: [PATCH 1/5] added hear_message, like hear_talk but for audible emotes, voice analyzer & newscaster support --- .../game/objects/items/devices/transfer_valve.dm | 5 +++++ .../items/weapons/grenades/chem_grenade.dm | 4 ++++ code/game/objects/objs.dm | 3 +-- code/modules/assembly/bomb.dm | 3 +++ code/modules/assembly/holder.dm | 6 ++++++ code/modules/assembly/voice.dm | 12 ++++++++++-- code/modules/clothing/suits/storage.dm | 4 ++++ .../clothing/under/accessories/storage.dm | 4 ++++ code/modules/mob/mob.dm | 16 +++++++++++++++- code/modules/paperwork/photography.dm | 12 ++++++++---- .../reagent_containers/glass_containers.dm | 4 ++++ code/modules/reagents/reagent_dispenser.dm | 4 ++++ 12 files changed, 68 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index a533efe0a58..2b256298835 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -68,6 +68,11 @@ for(var/obj/O in contents) O.hear_talk(M, msg) +/obj/item/device/transfer_valve/hear_message(mob/living/M as mob, msg) + ..() + for(var/obj/O in contents) + O.hear_message(M, msg) + /obj/item/device/transfer_valve/attack_self(mob/user as mob) ui_interact(user) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 26dd1849a8a..6007154db66 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -235,6 +235,10 @@ if(nadeassembly) nadeassembly.hear_talk(M, msg) +/obj/item/weapon/grenade/chem_grenade/hear_message(mob/living/M, msg) + if(nadeassembly) + nadeassembly.hear_message(M, msg) + /obj/item/weapon/grenade/chem_grenade/Bump() ..() if(nadeassembly) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a6e8ef3ca57..56aecc16a94 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -149,7 +149,6 @@ /obj/proc/hear_talk(mob/M as mob, text) - if(talking_atom) talking_atom.catchMessage(text, M) @@ -159,8 +158,8 @@ var/rendered = "[M.name]: [text]" mo.show_message(rendered, 2) */ - return +/obj/proc/hear_message(mob/M as mob, text) /obj/proc/multitool_menu(var/mob/user,var/obj/item/device/multitool/P) return "NO MULTITOOL_MENU!" diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index cdad32ee349..dbda18e7b71 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -85,6 +85,9 @@ if(bombassembly) bombassembly.hear_talk(M, msg) +/obj/item/device/onetankbomb/hear_message(mob/living/M as mob, msg) + if(bombassembly) + bombassembly.hear_message(M, msg) // ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ---------- diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index a37eeabcd9b..1d48afde8a5 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -100,6 +100,12 @@ a_left.hear_talk(M, msg) if(a_right) a_right.hear_talk(M, msg) + + hear_message(mob/living/M as mob, msg) + if(a_left) + a_left.hear_message(M, msg) + if(a_right) + a_right.hear_message(M, msg) proc/process_movement() // infrared beams and prox sensors if(a_left && a_right) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 1510c8791de..4c15b5f860e 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -6,6 +6,7 @@ origin_tech = "magnets=1" var/listening = 0 var/recorded = null //the activation message + var/recorded_type = 0 // 0 for say, 1 for emote bomb_name = "voice-activated bomb" @@ -16,15 +17,22 @@ return "[src] is deactivated." hear_talk(mob/living/M as mob, msg) + hear_input(M, msg, 0) + + hear_message(mob/living/M as mob, msg) + hear_input(M, msg, 1) + + proc/hear_input(mob/living/M as mob, msg, type) if(!istype(M,/mob/living)) return if(listening) recorded = msg + recorded_type = type listening = 0 var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("\icon[src] beeps, \"Activation message is '[recorded]'.\"") + T.visible_message("\icon[src] beeps, \"Activation message is [type ? "the sound when one [recorded]" : "'[recorded]'."]\"") else - if(findtext(msg, recorded)) + if(findtext(msg, recorded) && type == recorded_type) pulse(0) var/turf/T = get_turf(src) //otherwise it won't work in hand T.visible_message("\icon[src] \red beeps!") diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 8ff83a239a8..2c2597c0011 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -33,6 +33,10 @@ pockets.hear_talk(M, msg) ..() +/obj/item/clothing/suit/storage/hear_message(mob/M, var/msg) + pockets.hear_message(M, msg) + ..() + /obj/item/clothing/suit/storage/proc/return_inv() var/list/L = list( ) diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 36e59a86eb3..0bf75d5911b 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -40,6 +40,10 @@ hold.hear_talk(M, msg, verb, speaking) ..() +/obj/item/clothing/accessory/storage/hear_message(mob/M, var/msg, verb, datum/language/speaking) + hold.hear_message(M, msg) + ..() + /obj/item/clothing/accessory/storage/proc/return_inv() var/list/L = list( ) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 46a7c80667b..32f92ff0da8 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -106,7 +106,21 @@ for(var/mob/M in get_mobs_in_view(range, src)) if(self_message && M==src) msg = self_message - M.show_message( msg, 2, deaf_message, 1) + M.show_message(msg, 2, deaf_message, 1) + + // based on say code + var/omsg = replacetext(message, "[src] ", "") + var/list/listening_obj = new + for(var/atom/movable/A in view(range, src)) + if(istype(A, /mob)) + var/mob/M = A + for(var/obj/O in M.contents) + listening_obj |= O + else if(istype(A, /obj)) + var/obj/O = A + listening_obj |= O + for(var/obj/O in listening_obj) + O.hear_message(src, omsg) // Show a message to all mobs in earshot of this atom // Use for objects performing audible actions diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 1c3ea26b911..bf8255f4ce1 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -497,7 +497,6 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s var/icon_on = "videocam_on" var/icon_off = "videocam" var/canhear_range = 7 - var/watcherslist = list() /obj/item/device/videocam/attack_self(mob/user) on = !on @@ -523,14 +522,19 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s if(..(user, 1)) user << "This video camera can send live feeds to the entertainment network. It's [camera ? "" : "in"]active." - /obj/item/device/videocam/hear_talk(mob/M as mob, msg) if (camera && on) if(get_dist(src, M) <= canhear_range) talk_into(M, msg) - for(var/mob/living/carbon/human/H in watcherslist) - H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1) + for(var/obj/machinery/computer/security/telescreen/T) + if(T.current == camera) + T.audible_message("(Newscaster) [M] says, '[msg]'", hearing_distance = 2) +/obj/item/device/videocam/hear_message(mob/M as mob, msg) + if (camera && on) + for(var/obj/machinery/computer/security/telescreen/T) + if(T.current == camera) + T.audible_message("(Newscaster) [M] [msg]", hearing_distance = 2) ///hauntings, like hallucinations but more spooky diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 3e64245d2c5..a10e265fecf 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -266,6 +266,10 @@ if(assembly) assembly.hear_talk(M, msg) +/obj/item/weapon/reagent_containers/glass/beaker/hear_message(mob/living/M, msg) + if(assembly) + assembly.hear_message(M, msg) + /obj/item/weapon/reagent_containers/glass/beaker/large name = "large beaker" desc = "A large beaker. Can hold up to 100 units." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 6818390cf98..802c2a5f25d 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -176,6 +176,10 @@ if(rig) rig.hear_talk(M, msg) +/obj/structure/reagent_dispensers/fueltank/hear_message(mob/living/M, msg) + if(rig) + rig.hear_message(M, msg) + /obj/structure/reagent_dispensers/fueltank/Bump() ..() if(rig) From d1fa228b19ab9b909b99f0c80f5cdee9540b467d Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 13 Dec 2015 18:29:27 -0500 Subject: [PATCH 2/5] Fixed hologram hearing, megahones, intercoms&tape recorders picking up emotes in room --- code/game/machinery/hologram.dm | 7 +++++++ code/game/objects/items/devices/megaphone.dm | 18 ++++++++++++------ code/game/objects/items/devices/radio/radio.dm | 5 +++++ .../game/objects/items/devices/taperecorder.dm | 6 +++++- 4 files changed, 29 insertions(+), 7 deletions(-) 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" From f9a65b75328c62b453a9fed6bff679c937860d37 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 13 Dec 2015 18:38:02 -0500 Subject: [PATCH 3/5] added in world by tiger's request --- code/modules/paperwork/photography.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index bf8255f4ce1..a97dc708b75 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -526,13 +526,13 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s if (camera && on) if(get_dist(src, M) <= canhear_range) talk_into(M, msg) - for(var/obj/machinery/computer/security/telescreen/T) + for(var/obj/machinery/computer/security/telescreen/T in world) if(T.current == camera) T.audible_message("(Newscaster) [M] says, '[msg]'", hearing_distance = 2) /obj/item/device/videocam/hear_message(mob/M as mob, msg) if (camera && on) - for(var/obj/machinery/computer/security/telescreen/T) + for(var/obj/machinery/computer/security/telescreen/T in world) if(T.current == camera) T.audible_message("(Newscaster) [M] [msg]", hearing_distance = 2) From 21d04ecfbf4da4796e4b7114e70a9fa73ad0da92 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 13 Dec 2015 20:49:16 -0500 Subject: [PATCH 4/5] removed radio hear_message per fox's request --- code/game/objects/items/devices/radio/radio.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 448af414628..2ee3d7e88ac 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -478,11 +478,6 @@ 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) From 37ec30d75f561f6bd6ea4136e419c8e951ea12eb Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Mon, 14 Dec 2015 01:43:00 -0500 Subject: [PATCH 5/5] made video camera find telescreens via machines rather than world --- code/modules/paperwork/photography.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index a97dc708b75..133018743cc 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -526,13 +526,13 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s if (camera && on) if(get_dist(src, M) <= canhear_range) talk_into(M, msg) - for(var/obj/machinery/computer/security/telescreen/T in world) + for(var/obj/machinery/computer/security/telescreen/T in machines) if(T.current == camera) T.audible_message("(Newscaster) [M] says, '[msg]'", hearing_distance = 2) /obj/item/device/videocam/hear_message(mob/M as mob, msg) if (camera && on) - for(var/obj/machinery/computer/security/telescreen/T in world) + for(var/obj/machinery/computer/security/telescreen/T in machines) if(T.current == camera) T.audible_message("(Newscaster) [M] [msg]", hearing_distance = 2)