diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index c0612149c5b..f8385d0582e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1148,25 +1148,33 @@ B --><-- A return 1 proc/add_to_proximity_list(atom/A, range) - var/list/L = block(locate(A.x - range, A.y - range, A.z), locate(A.x + range, A.y + range, A.z)) + var/turf/T = get_turf(A) + var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z)) for(var/B in L) var/turf/C = B - B.proximity_checkers |= A + C.proximity_checkers |= A + return L proc/remove_from_proximity_list(atom/A, range) - var/list/L = block(locate(A.x - range, A.y - range, A.z), locate(A.x + range, A.y + range, A.z)) + var/turf/T = get_turf(A) + var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z)) for(var/B in L) var/turf/C = B - B.proximity_checkers.Remove(A) + C.proximity_checkers.Remove(A) -proc/shift_proximity(atom/A, range, atom/B, newrange) - var/list/L = block(locate(A.x - range, A.y - range, A.z), locate(A.x + range, A.y + range, A.z)) - var/list/M = block(locate(B.x - newrange, B.y - newrange, B.z), locate(B.x + newrange, B.y + newrange, B.z)) +proc/shift_proximity(atom/checker, atom/A, range, atom/B, newrange) + var/turf/T = get_turf(A) + var/turf/Q = get_turf(B) + if(T == Q && range == newrange) + return 0 + var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z)) + var/list/M = block(locate(Q.x - newrange, Q.y - newrange, Q.z), locate(Q.x + newrange, Q.y + newrange, Q.z)) var/list/N = L - M var/list/O = M - L for(var/C in N) var/turf/D = C - D.proximity_checkers.Remove(A) + D.proximity_checkers.Remove(checker) for(var/E in O) var/turf/F = E - F.proximity_checkers |= A \ No newline at end of file + F.proximity_checkers |= checker + return 1 \ No newline at end of file diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index ce872d554cc..00f5ad0e24b 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -26,7 +26,7 @@ ..() // ..() is EXTREMELY IMPORTANT, never forget to add it bulb = new /obj/item/device/assembly/flash/handheld(src) -/obh/machinery/flasher/Move() +/obj/machinery/flasher/Move() remove_from_proximity_list(src, range) ..() diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 16976759d90..cc54f73b47c 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -319,7 +319,7 @@ Grow() /obj/structure/alien/egg/Destroy() - remove_from_checker_list(src, 1) + remove_from_proximity_list(src, 1) ..() /obj/structure/alien/egg/attack_paw(mob/living/user) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index c454b55d668..3878898e95b 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -10,7 +10,8 @@ var/timing = 0 var/time = 10 var/sensitivity = 1 - var/oldloc + var/atom/oldloc + var/list/turfs_around = list() /obj/item/device/assembly/prox_sensor/proc/toggle_scan() @@ -28,11 +29,11 @@ return "The proximity sensor is arming." return "The proximity sensor is [scanning?"armed":"disarmed"]." -/obj/item/device/assembly/prox_sensor/attach(datum/wires) - handle_move(wires.holder) +/obj/item/device/assembly/prox_sensor/on_attach(datum/wires/w) + handle_move(w.holder) -/obj/item/device/assembly/prox_sensor/detach(datum/wires) - handle_move(wires.holder.loc) +/obj/item/device/assembly/prox_sensor/on_detach(datum/wires/w) + handle_move(w.holder.loc) /obj/item/device/assembly/prox_sensor/activate() if(!..()) return 0//Cooldown check @@ -69,15 +70,14 @@ time-- if(time <= 0) timing = 0 - toggle_scan() + toggle_scan(1) time = initial(time) - if(scanning) - if((x != oldloc.x) || (y != oldloc.y) || (z != oldloc.z)) - handle_move(loc) + handle_move(get_turf(loc)) /obj/item/device/assembly/prox_sensor/dropped() - spawn(0) - sense() + if(scanning) + spawn(0) + sense() /obj/item/device/assembly/prox_sensor/toggle_scan(scan) @@ -87,12 +87,14 @@ add_to_proximity_list(src, sensitivity) else remove_from_proximity_list(src, sensitivity) + oldloc = get_turf(loc) update_icon() /obj/item/device/assembly/prox_sensor/proc/sensitivity_change(value) + var/sense = min(max(sensitivity + value, 0), 5) if(scanning) - shift_proximity(src, sensitinity, src, sensitivity + value) - sensitivity += value + shift_proximity(src, oldloc, sensitivity, loc, sense) + sensitivity = sense /obj/item/device/assembly/prox_sensor/update_icon() overlays.Cut() @@ -109,9 +111,9 @@ /obj/item/device/assembly/prox_sensor/proc/handle_move(atom/newloc) if(scanning) - shift_proximity(oldloc, sensitivity, newloc, sensitivity) - sense() - oldloc = newloc + if(shift_proximity(src, oldloc, sensitivity, newloc, sensitivity)) + sense() + oldloc = newloc /obj/item/device/assembly/prox_sensor/Move(newloc) ..() @@ -123,8 +125,8 @@ var/second = time % 60 var/minute = (time - second) / 60 var/dat = "Proximity Sensor\n[(timing ? "Arming" : "Not Arming")] [minute]:[second]\n- - + +\n" - dat += "
Armed":"0'>Unarmed"] (Movement sensor active when armed!)" - dat += "
Detection range: + [sensitivity] -" + dat += "
Armed":"1'>Unarmed"] (Movement sensor active when armed!)" + dat += "
Detection range: - [sensitivity] +" dat += "

Refresh" dat += "

Close" user << browse(dat, "window=prox") diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index a7dc8d57b1a..71ef85ef8c5 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -39,7 +39,7 @@ listening = 0 say("Activation message is '[recorded]'.") if(3) - recorded = speaker + recorded = speaker.GetVoice() listening = 0 say("Your voice pattern is saved.") if(4) @@ -57,7 +57,7 @@ if(raw_message == recorded) . = 1 if(3) - if(speaker == recorded) + if(speaker.GetVoice() == recorded) . = 1 if(4) if(length(raw_message))