From a05dad6397aad11c48bceb602b03b1abffe27f51 Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Wed, 23 Mar 2011 09:56:01 +0000 Subject: [PATCH] Fixed hearing in lockers (and pipes, i-cards, etc). Added verb Ghost Ears. Dead people and observers can now select if they do not want to hear every word said on the world. Fixed electronic blink toy sprite. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1243 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/toy.dm | 2 +- code/game/objects/items/helper_procs.dm | 9 ------ code/game/objects/object_procs.dm | 16 ++++++++++ code/modules/mob/living/say.dm | 41 +++++++++++++++++++------ code/modules/mob/mob.dm | 13 ++++---- 5 files changed, 55 insertions(+), 26 deletions(-) diff --git a/code/defines/obj/toy.dm b/code/defines/obj/toy.dm index c4503481efc..6d3573cd9f2 100644 --- a/code/defines/obj/toy.dm +++ b/code/defines/obj/toy.dm @@ -7,7 +7,7 @@ obj/item/toy/blink name = "electronic blink toy game" desc = "Blink. Blink. Blink. Ages 8 and up." - icon = 'device.dmi' + icon = 'radio.dmi' icon_state = "beacon" item_state = "signaler" diff --git a/code/game/objects/items/helper_procs.dm b/code/game/objects/items/helper_procs.dm index 58abbdfb227..c3d85aef249 100644 --- a/code/game/objects/items/helper_procs.dm +++ b/code/game/objects/items/helper_procs.dm @@ -65,15 +65,6 @@ else return -/obj/proc/hear_talk(mob/M as mob, text) -/* - var/mob/mo = locate(/mob) in src - if(mo) - var/rendered = "[M.name]: [text]" - mo.show_message(rendered, 2) - */ - return - /proc/is_type_in_list(var/atom/A, var/list/L) for(var/type in L) if(isnull(type)) diff --git a/code/game/objects/object_procs.dm b/code/game/objects/object_procs.dm index 3bd03ef2446..92e48974f4a 100644 --- a/code/game/objects/object_procs.dm +++ b/code/game/objects/object_procs.dm @@ -23,3 +23,19 @@ if(istype(M) && M.client && M.machine == src) src.attack_self(M) + +/obj/proc/alter_health() + return 1 + +/obj/proc/hide(h) + return + + +/obj/proc/hear_talk(mob/M as mob, text) +/* + var/mob/mo = locate(/mob) in src + if(mo) + var/rendered = "[M.name]: [text]" + mo.show_message(rendered, 2) + */ + return \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 47400af1473..b71513cfbc5 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -210,12 +210,8 @@ italics = 1 /////SPECIAL HEADSETS END - for (var/obj/O in view(message_range, src)) - spawn (0) - if (O) - O.hear_talk(src, message) - var/list/listening +/* if(istype(src.loc, /obj/item/device/aicard)) // -- TLE var/obj/O = src.loc if(istype(O.loc, /mob)) @@ -226,8 +222,33 @@ else listening = hearers(message_range, src) - listening -= src - listening += src + for (var/obj/O in view(message_range, src)) + for (var/mob/M in O) + listening += M // maybe need to check if M can hear src + spawn (0) + if (O) + O.hear_talk(src, message) + + if (!(src in listening)) + listening += src + +*/ + var/turf/T = get_turf(src) + listening = hearers(message_range, T) + var/list/V = view(message_range, T) + //find mobs in lockers, cryo and intellycards + for (var/mob/M in world) + if (isturf(M.loc)) + continue //if M can hear us it is already was found by hearers() + if (!M.client) + continue //skip monkeys and leavers + if (get_turf(M) in V) //this slow, but I don't think we'd have a lot of wardrobewhores every round --rastaf0 + listening+=M + + for (var/obj/O in V) + spawn (0) + if (O) + O.hear_talk(src, message) var/list/heard_a = list() // understood us var/list/heard_b = list() // didn't understand us @@ -252,14 +273,14 @@ for (var/mob/M in heard_a) M.show_message(rendered, 2) - +/* for(var/obj/O in M) // This is terribly costly for such a unique circumstance, should probably do this a different way in the future -- TLE if(istype(O, /obj/item/device/aicard)) for(var/mob/M2 in O) M2.show_message(rendered, 2) break break - +*/ if (length(heard_b)) var/message_b @@ -289,7 +310,7 @@ for (var/mob/M in world) if (istype(M, /mob/new_player)) continue - if (M.stat >= 2 && !(M in heard_a)) + if (M.stat >= 2 && !(M in heard_a) && M.ghost_ears) M.show_message(rendered, 2) log_say("[src.name]/[src.key] : [message]") \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3302e5c00f7..ed7d74ca04f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -269,15 +269,9 @@ return 1 return 0 -/obj/proc/alter_health() - return 1 - /atom/proc/relaymove() return -/obj/proc/hide(h) - return - /obj/item/weapon/grab/proc/throw() if(src.affecting) var/grabee = src.affecting @@ -1365,6 +1359,13 @@ src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss src << "\blue You have given up life and succumbed to death." +/mob/var/ghost_ears = 1 +/mob/verb/toggle_ghost_ears() + set name = "Ghost ears" + set category = "OOC" + set desc = "Hear talks from everywhere" + src.ghost_ears = !src.ghost_ears + /mob/verb/observe() set name = "Observe" set category = "OOC"