diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 52316fe9d8d..d0c4b512b14 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -10,7 +10,6 @@ var/global/list/teleportbeacons = list() //list of all tracking beacons used b
var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacons.
var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons.
var/global/list/nuke_list = list()
-var/global/list/nuke_tiles = list() //list of all turfs that turn to animated red grids when a nuke is triggered
var/global/list/alarmdisplay = list() //list of all machines or programs that can display station alerts
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index f86153f34f0..70dfe4d2ebc 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -6,6 +6,9 @@ var/datum/subsystem/mapping/SSmapping
flags = SS_NO_FIRE
display_order = 50
+ var/list/nuke_tiles = list()
+ var/list/nuke_threats = list()
+
/datum/subsystem/mapping/New()
NEW_SS_GLOBAL(SSmapping)
@@ -40,5 +43,28 @@ var/datum/subsystem/mapping/SSmapping
setup_map_transitions()
..()
+/* Nuke threats, for making the blue tiles on the station go RED
+ Used by the AI doomsday and the self destruct nuke.
+*/
+
+/datum/subsystem/mapping/proc/add_nuke_threat(datum/nuke)
+ nuke_threats[nuke] = TRUE
+ check_nuke_threats()
+
+/datum/subsystem/mapping/proc/remove_nuke_threat(datum/nuke)
+ nuke_threats -= nuke
+ check_nuke_threats()
+
+/datum/subsystem/mapping/proc/check_nuke_threats()
+ for(var/datum/d in nuke_threats)
+ if(!istype(d) || qdeleted(d))
+ nuke_threats -= d
+
+ var/threats = nuke_threats.len
+
+ for(var/N in nuke_tiles)
+ var/turf/open/floor/T = N
+ T.icon_state = (threats ? "rcircuitanim" : T.icon_regular_floor)
+
/datum/subsystem/mapping/Recover()
flags |= SS_NO_INIT
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index fc135de47d1..7f172eadd7f 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -28,10 +28,6 @@
set category = "Malfunction"
set name = "Doomsday Device"
- for(var/N in nuke_tiles)
- var/turf/T = N
- T.icon_state = "rcircuitanim" //This causes all blue "circuit" tiles on the map to change to animated red icon state.
-
src << "Nuclear device armed."
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg')
set_security_level("delta")
@@ -67,6 +63,7 @@
countdown = null
STOP_PROCESSING(SSfastprocess, src)
SSshuttle.clearHostileEnvironment(src)
+ SSmapping.remove_nuke_threat(src)
for(var/A in ai_list)
var/mob/living/silicon/ai/Mlf = A
if(Mlf.doomsday_device == src)
@@ -79,6 +76,7 @@
countdown.start()
START_PROCESSING(SSfastprocess, src)
SSshuttle.registerHostileEnvironment(src)
+ SSmapping.add_nuke_threat(src) //This causes all blue "circuit" tiles on the map to change to animated red icon state.
/obj/machinery/doomsday_device/proc/seconds_remaining()
. = max(0, (round((detonation_timer - world.time) / 10)))
@@ -96,7 +94,6 @@
if(sec_left <= 0)
timing = FALSE
detonate(T.z)
- qdel(src)
else
var/key = num2text(sec_left)
if(!(sec_left % 60) && !(key in milestones))
@@ -114,7 +111,7 @@
continue
if(issilicon(L))
continue
- L << "The blast wave from the [src] tears you atom from atom!"
+ L << "The blast wave from [src] tears you atom from atom!"
L.dust()
world << "The AI cleansed the station of life with the doomsday device!"
ticker.force_ending = 1
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 13d7ab7787d..ec3972a7d96 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -465,22 +465,22 @@ var/bomb_set
This is here to make the tiles around the station mininuke change when it's armed.
*/
-/obj/machinery/nuclearbomb/selfdestruct/proc/SetTurfs()
- if(loc == initial(loc))
- for(var/N in nuke_tiles)
- var/turf/open/floor/T = N
- T.icon_state = (timing ? "rcircuitanim" : T.icon_regular_floor)
-
/obj/machinery/nuclearbomb/selfdestruct/set_anchor()
return
/obj/machinery/nuclearbomb/selfdestruct/set_active()
..()
- SetTurfs()
+ if(timing)
+ SSmapping.add_nuke_threat(src)
+ else
+ SSmapping.remove_nuke_threat(src)
/obj/machinery/nuclearbomb/selfdestruct/set_safety()
..()
- SetTurfs()
+ if(timing)
+ SSmapping.add_nuke_threat(src)
+ else
+ SSmapping.remove_nuke_threat(src)
//==========DAT FUKKEN DISK===============
/obj/item/weapon/disk
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index cd5af132dda..2ed7cacf08e 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -15,10 +15,10 @@
/turf/open/floor/bluegrid/New()
..()
- nuke_tiles += src
+ SSmapping.nuke_tiles += src
/turf/open/floor/bluegrid/Destroy()
- nuke_tiles -= src
+ SSmapping.nuke_tiles -= src
return ..()
/turf/open/floor/greengrid