From 23091a262e520e3108952bfe75df15fd10f64551 Mon Sep 17 00:00:00 2001 From: "VivianFoxfoot@gmail.com" Date: Fri, 24 Feb 2012 02:11:24 +0000 Subject: [PATCH] Borg radios now work while they're recharging MMIs/pAIs/lockers in the dark can now hear. This was done by changing the area check for hearing to a range instead of view, and then doing a line of sight calculation for each mob that can't hear naturally and checking if it's clear. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3180 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/procs/gamehelpers.dm | 97 +++++++++++++++++++++----- code/modules/mob/living/say.dm | 112 +++++++++--------------------- html/changelog.html | 10 +++ 3 files changed, 122 insertions(+), 97 deletions(-) diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index 39b05119501..0630f863b5b 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -100,50 +100,113 @@ var/turf/T = get_turf(source) var/list/hear = hearers(R, T) - var/list/V = view(R, T) + var/list/V = range(R, T) // Search for closets: for(var/obj/structure/closet/C in V) for(var/mob/M in C.contents) - if(M.client) - hear += M + if(isInSight(source,C)) + if(M.client) + hear += M // Cryos: for(var/obj/machinery/atmospherics/unary/cryo_cell/C in V) if(C.occupant) - if(C.occupant.client) - hear += C.occupant + if(isInSight(source,C)) + if(C.occupant.client) + hear += C.occupant // Intelicards for(var/obj/item/device/aicard/C in V) for(var/mob/living/silicon/ai/M in C) - if(M.client) - hear += M + if(isInSight(source,C)) + if(M.client) + hear += M // Brains/MMIs/pAIs for(var/mob/living/carbon/brain/C in world) if(get_turf(C) in V) - hear += C + if(isInSight(source,C)) + hear += C for(var/mob/living/silicon/pai/C in world) if(get_turf(C) in V) - hear += C + if(isInSight(source,C)) + hear += C +/* -- Handled above. WHY IS THIS HERE? WHYYYYYYY // Personal AIs for(var/obj/item/device/paicard/C in V) if(C.pai) - if(C.pai.client) - hear += C.pai - + if(isInSight(source,C)) + if(C.pai.client) + hear += C.pai +*/ // Exosuits for(var/obj/mecha/C in V) if(C.occupant) - if(C.occupant.client) - hear += C.occupant + if(isInSight(source,C)) + if(C.occupant.client) + hear += C.occupant // Disposal Machines for(var/obj/machinery/disposal/C in V) for(var/mob/M in C.contents) - if(M.client) - hear += M + if(isInSight(source,C)) + if(M.client) + hear += M - return hear \ No newline at end of file + //Borg rechargers + for(var/obj/machinery/recharge_station/C in V) + if(C.occupant) + if(isInSight(source,C)) + if(C.occupant.client) + hear += C.occupant + + return hear + +#define SIGN(X) ((X<0)?-1:1) + +proc + inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) + var/turf/T + if(X1==X2) + if(Y1==Y2) + return 1 //Light cannot be blocked on same tile + else + var/s = SIGN(Y2-Y1) + Y1+=s + while(Y1!=Y2) + T=locate(X1,Y1,Z) + if(T.opacity) + return 0 + Y1+=s + else + var + m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) + b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles + signX = SIGN(X2-X1) + signY = SIGN(Y2-Y1) + if(X1 +
+

2/23/2012

+

PolymorphBlue updated:

+
    +
  • MMIs/pAIs no longer lip read, and thus can now hear in the dark.
  • +
  • Borg rechargers are no longer Faraday cages, and thus can now receive radio while they're recharging.
  • +
+
+ +

22 February 2012

PolymorphBlue updated: