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))