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