diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 78bd491110..dbd9d20b7d 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -10,6 +10,8 @@
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
+ var/derp = 0 //Used for tracking if the syndies actually haul the nuke to the station
+
/datum/game_mode/nuclear/announce()
world << "The current game mode is - Nuclear Emergency!"
world << "A [syndicate_name()] Strike Force is approaching [station_name()]!"
@@ -124,6 +126,9 @@
/datum/game_mode/nuclear/check_win()
if (src.nuke_detonated)
+ if(src.derp)
+ finished = 3
+ return
finished = 1
return
@@ -169,6 +174,14 @@
if ((M.current.client) && !(locate(M) in syndicates))
world << text("[M.current.key] was [M.current.real_name] [M.current.stat == 2 ? "(DEAD)" : ""]")
+ if(3)
+ world << "Neutral Victory"
+ world << "[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!"
+ for(var/datum/mind/M in syndicates)
+ if(!M.current)
+ continue
+ if(M.current.client)
+ world << text("[M.current.key] was [M.current.real_name] [M.current.stat == 2 ? "(DEAD)" : ""]")
return 1
/datum/game_mode/nuclear/proc/get_possible_syndicates()
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 731aeb0ff7..6ade4f3b04 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -139,22 +139,50 @@
*/
enter_allowed = 0
+ var/derp = 0
+ var/area/A = src.loc.loc
+ if (istype( A, /area))
+ if (A.name == "Space")
+ derp = 1
+ if (A.name == "Syndicate Station")
+ derp = 1
+ if (A.name == "Wizard's Den")
+ derp = 1
+ if (!derp)
+ for(var/direction in cardinal)
+ for(var/area/target in get_step(src,direction))
+ if (target.name == "Space")
+ derp = 1
+ if (target.name == "Syndicate Station")
+ derp = 1
+ if (target.name == "Wizard's Den")
+ derp = 1
for(var/mob/M in world)
if(M.client)
spawn(0)
- M.client.station_explosion_cinematic()
+ M.client.station_explosion_cinematic(derp)
if(ticker.mode.name == "nuclear emergency")
ticker.mode:nuke_detonated = 1
ticker.mode.check_win()
+ ticker.mode.declare_completion()
sleep(110)
- world << "Everyone was killed by the nuclear blast! Resetting in 30 seconds!"
+ if (ticker.mode.name != "nuclear emergency" || !derp)
+ world << "Everyone was killed by the nuclear blast! Resetting in 30 seconds!"
- sleep(300)
- log_game("Rebooting due to nuclear destruction of station")
- world.Reboot()
- return
+ sleep(300)
+ log_game("Rebooting due to nuclear destruction of station")
+ world.Reboot()
+ return
+
+ else if (ticker.mode.name == "nuclear emergency" && derp)
+ world << "Resetting in 30 seconds!"
+
+ sleep(300)
+ log_game("Rebooting due to nuclear detonation")
+ world.Reboot()
+ return
/obj/item/weapon/disk/nuclear/Del()
if (ticker.mode && ticker.mode.name == "nuclear emergency")
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4d2de36d9c..5889cfd939 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -2022,7 +2022,7 @@
stat(null, "([x], [y], [z])")
stat(null, "CPU: [world.cpu]")
-/client/proc/station_explosion_cinematic()
+/client/proc/station_explosion_cinematic(var/derp)
if(src.mob)
var/mob/M = src.mob
M.loc = null // HACK, but whatever, this works
@@ -2041,12 +2041,14 @@
sleep(40)
M << sound('explosionfar.ogg')
boom.icon_state = "end"
- flick("explode", boom)
+ if(!derp) flick("explode", boom)
+ else flick("explode2", boom)
sleep(40)
if(ticker)
switch(ticker.mode.name)
if("nuclear emergency")
- boom.icon_state = "loss_nuke"
+ if (!derp) boom.icon_state = "loss_nuke"
+ else boom.icon_state = "loss_nuke2"
if("AI malfunction")
boom.icon_state = "loss_malf"
else