From 9b0ee745bfc04dcb3f6d872488d95c55077ecd44 Mon Sep 17 00:00:00 2001 From: itseasytosee <55666666+itseasytosee@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:38:42 -0600 Subject: [PATCH] The Nuke kills everyone when it goes off. (#62807) This does not make the nuke explode like it used to. The nuke will now dust you in a similar way to the AI doomsday device when it goes off. This will only happen if the nuke successfully detonated on the station and not on a near miss. Otherwise, it kills everything on the z-level. There has been code in the game for an extended period of time that was supposed to make this happen, but I believe it was bugged and did not properly give the z-level of the nuke in the explosion. It should be noted that gameplay-wise this makes it so antagonists who need to escape will no longer get a free pass for being on the station when the nuke goes off, but they will still be counted as escaped if they are in lavaland/another z-level. I would say that this is only good for the game but I understand if it's controversial. The original code gibbed people on the z-level, although I've considered changing it to dusting. I would like opinions on this or alternative methods of death. fixes #62788 --- code/modules/antagonists/nukeop/equipment/nuclearbomb.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 3d9991161e4..8da56cc267d 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -501,11 +501,13 @@ GLOBAL_VAR(station_nuke_source) SSticker.roundend_check_paused = FALSE /obj/machinery/nuclearbomb/proc/really_actually_explode(off_station) + var/turf/bomb_location = get_turf(src) Cinematic(get_cinematic_type(off_station),world,CALLBACK(SSticker,/datum/controller/subsystem/ticker/proc/station_explosion_detonation,src)) - INVOKE_ASYNC(GLOBAL_PROC,.proc/KillEveryoneOnZLevel, z) + if(off_station != NUKE_NEAR_MISS) // Don't kill people in the station if the nuke missed, even if we are technically on the same z-level + INVOKE_ASYNC(GLOBAL_PROC,.proc/KillEveryoneOnZLevel, bomb_location.z) /obj/machinery/nuclearbomb/proc/get_cinematic_type(off_station) - if(off_station < 2) + if(off_station < NUKE_NEAR_MISS) return CINEMATIC_SELFDESTRUCT else return CINEMATIC_SELFDESTRUCT_MISS @@ -595,6 +597,7 @@ GLOBAL_VAR(station_nuke_source) return for(var/_victim in GLOB.mob_living_list) var/mob/living/victim = _victim + to_chat(victim, span_userdanger("You are shredded to atoms!")) if(victim.stat != DEAD && victim.z == z) victim.gib()