From f39649be577040c789cdbbeb3914c19c29e2a28d Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 13 Dec 2015 04:36:41 -0500 Subject: [PATCH] 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)