diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 007bfa82703..f98f2775662 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -1,5 +1,3 @@
-GLOBAL_LIST_EMPTY(doppler_arrays)
-
/obj/machinery/doppler_array
name = "tachyon-doppler array"
desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array."
@@ -28,13 +26,13 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array/Initialize(mapload)
. = ..()
- GLOB.doppler_arrays += src
+ RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion))
explosion_target = rand(8, 20)
toxins_tech = new /datum/tech/toxins(src)
/obj/machinery/doppler_array/Destroy()
- GLOB.doppler_arrays -= src
logged_explosions.Cut()
+ UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION)
return ..()
/obj/machinery/doppler_array/attackby(obj/item/I, mob/user, params)
@@ -97,28 +95,28 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
P.info += "
\
Printed at [station_time_timestamp()]."
-/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,
- var/took,var/orig_dev_range,var/orig_heavy_range,var/orig_light_range)
+/obj/machinery/doppler_array/proc/sense_explosion(datum/source, turf/epicenter, devastation_range, heavy_impact_range,
+ light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
if(stat & NOPOWER)
return
- if(z != z0)
+ if(z != epicenter.z)
return
- var/dx = abs(x0-x)
- var/dy = abs(y0-y)
+ var/dx = abs(epicenter.x - x)
+ var/dy = abs(epicenter.y - y)
var/distance
var/direct
var/capped = FALSE
if(dx > dy)
distance = dx
- if(x0 > x)
+ if(epicenter.x > x)
direct = EAST
else
direct = WEST
else
distance = dy
- if(y0 > y)
+ if(epicenter.y > y)
direct = NORTH
else
direct = SOUTH
@@ -128,15 +126,16 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
if(!(direct & dir))
return
+ var/coordinates = "[epicenter.x],[epicenter.y]"
var/list/messages = list("Explosive disturbance detected.", \
- "Epicenter at: grid ([x0],[y0]). Temporal displacement of tachyons: [took] seconds.", \
+ "Epicenter at: grid ([coordinates]). Temporal displacement of tachyons: [took] seconds.", \
"Actual: Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range].")
// If the bomb was capped, say its theoretical size.
if(devastation_range < orig_dev_range || heavy_impact_range < orig_heavy_range || light_impact_range < orig_light_range)
capped = TRUE
messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]."
- logged_explosions.Insert(1, new /datum/explosion_log(station_time_timestamp(), "[x0],[y0]", "[devastation_range], [heavy_impact_range], [light_impact_range]", capped ? "[orig_dev_range], [orig_heavy_range], [orig_light_range]" : "n/a")) //Newer logs appear first
+ logged_explosions.Insert(1, new /datum/explosion_log(station_time_timestamp(), "[coordinates]", "[devastation_range], [heavy_impact_range], [light_impact_range]", capped ? "[orig_dev_range], [orig_heavy_range], [orig_light_range]" : "n/a")) //Newer logs appear first
messages += "Event successfully logged in internal database."
var/miss_by = abs(explosion_target - orig_light_range)
var/tmp_tech = max_toxins_tech - miss_by
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index b1cf0e0af37..80fa25b0f73 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -203,16 +203,7 @@
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
log_world("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.")
- //Machines which report explosions.
- for(var/array in GLOB.doppler_arrays)
- if(!array)
- continue
- if(istype(array, /obj/machinery/doppler_array))
- var/obj/machinery/doppler_array/Array = array
- Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
- if(istype(array, /obj/item/mod/module/reagent_scanner/advanced))
- var/obj/item/mod/module/reagent_scanner/advanced/Mod_Array = array
- Mod_Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
+ SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EXPLOSION, epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
return 1
diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm
index 77d4adf73b6..ad42c96dce3 100644
--- a/code/modules/mod/modules/modules_science.dm
+++ b/code/modules/mod/modules/modules_science.dm
@@ -35,21 +35,21 @@
. = ..()
if(!.)
return
- GLOB.doppler_arrays += src
+ RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion))
/obj/item/mod/module/reagent_scanner/advanced/on_deactivation(display_message = TRUE, deleting = FALSE)
. = ..()
if(!.)
return
- GLOB.doppler_arrays -= src
+ UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION)
-/obj/item/mod/module/reagent_scanner/advanced/proc/sense_explosion(x0, y0, z0, devastation_range, heavy_impact_range,
+/obj/item/mod/module/reagent_scanner/advanced/proc/sense_explosion(datum/source, turf/epicenter, devastation_range, heavy_impact_range,
light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
var/turf/T = get_turf(src)
- var/dx = abs(x0 - T.x)
- var/dy = abs(y0 - T.y)
+ var/dx = abs(epicenter.x - T.x)
+ var/dy = abs(epicenter.y - T.y)
var/distance
- if(T.z != z0)
+ if(T.z != epicenter.z)
return
if(dx > dy)
distance = dx