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
This commit is contained in:
itseasytosee
2021-11-15 17:38:42 +00:00
committed by GitHub
parent 76ad72651f
commit 9b0ee745bf
@@ -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()