Nuke resprite revival (#20888)

* nuclear revive

* stage fixes

* allows for the core to show while panel is closed

* adds blob nuke

* oops merge failure

* sirryan review

* grammar fix in comment
This commit is contained in:
Contrabang
2023-05-02 21:28:42 +02:00
committed by GitHub
parent d5567103fd
commit 282f1cb62c
4 changed files with 36 additions and 4 deletions
+35 -3
View File
@@ -14,7 +14,7 @@ GLOBAL_VAR(bomb_set)
/obj/machinery/nuclearbomb
name = "\improper Nuclear Fission Explosive"
desc = "Uh oh. RUN!!!!"
icon = 'icons/obj/stationobjs.dmi'
icon = 'icons/obj/nuclearbomb.dmi'
icon_state = "nuclearbomb0"
density = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -23,13 +23,21 @@ GLOBAL_VAR(bomb_set)
power_state = NO_POWER_USE
requires_power = FALSE
/// Are our bolts *supposed* to be in the floor, may not actually cause anchoring if the bolts are cut
var/extended = TRUE
/// If true, prevents the lights on the nuke
var/lighthack = FALSE
/// Countdown to boom
var/timeleft = 120
/// Are we counting down?
var/timing = FALSE
/// Have we gone boom yet?
var/exploded = FALSE
/// Random code between 10000 and 99999
var/r_code = "ADMIN"
/// Code entered by user
var/code
/// Is the most recently inputted code correct?
var/yes_code = FALSE
var/safety = TRUE
var/obj/item/disk/nuclear/auth = null
@@ -65,6 +73,7 @@ GLOBAL_VAR(bomb_set)
GLOB.poi_list |= src
core = new /obj/item/nuke_core/plutonium(src)
STOP_PROCESSING(SSobj, core) //Let us not irradiate the vault by default.
update_icon(UPDATE_OVERLAYS)
/obj/machinery/nuclearbomb/Destroy()
SStgui.close_uis(wires)
@@ -115,7 +124,22 @@ GLOBAL_VAR(bomb_set)
set_light(1, LIGHTING_MINIMUM_POWER)
if(panel_open)
. += "npanel_open"
. += "hackpanel_open"
if(anchored) // Using anchored due to removal_stage deanchoring having multiple steps
. += "nukebolts"
// Selected stage lets us show the open core, even if the front panel is closed
var/selected_stage = removal_stage
if(removal_stage < NUKE_CORE_EVERYTHING_FINE) // Because we need to show the core
selected_stage = core_stage
switch(selected_stage)
if(NUKE_CORE_PANEL_EXPOSED)
. += "nukecore1"
if(NUKE_CORE_PANEL_UNWELDED)
. += "nukecore2"
if(NUKE_CORE_FULLY_EXPOSED)
. += core ? "nukecore3" : "nukecore4"
/obj/machinery/nuclearbomb/attackby(obj/item/O as obj, mob/user as mob, params)
if(istype(O, /obj/item/disk/nuclear))
@@ -144,6 +168,7 @@ GLOBAL_VAR(bomb_set)
removal_stage = NUKE_CORE_PANEL_UNWELDED
if(core)
STOP_PROCESSING(SSobj, core)
update_icon(UPDATE_OVERLAYS)
return
if(istype(O, /obj/item/stack/sheet/metal) && removal_stage == NUKE_CORE_PANEL_EXPOSED)
var/obj/item/stack/S = O
@@ -157,6 +182,7 @@ GLOBAL_VAR(bomb_set)
user.visible_message("<span class='notice'>[user] repairs [src]'s outer core plate.</span>", \
"<span class='notice'>You repair [src]'s outer core plate.</span>")
removal_stage = NUKE_CORE_EVERYTHING_FINE
update_icon(UPDATE_OVERLAYS)
return
if(istype(O, /obj/item/nuke_core/plutonium) && removal_stage == NUKE_CORE_FULLY_EXPOSED)
if(do_after(user, 2 SECONDS, target = src))
@@ -208,6 +234,7 @@ GLOBAL_VAR(bomb_set)
user.visible_message("[user] crowbars [src] off of the anchors. It can now be moved.", "You jam the crowbar under the nuclear device and lift it off its anchors. You can now move it!")
anchored = FALSE
removal_stage = NUKE_MOBILE
update_icon(UPDATE_OVERLAYS)
/obj/machinery/nuclearbomb/wrench_act(mob/user, obj/item/I)
if(!anchored)
@@ -222,6 +249,7 @@ GLOBAL_VAR(bomb_set)
return
user.visible_message("[user] unwrenches the anchoring bolts on [src].", "You unwrench the anchoring bolts.")
removal_stage = NUKE_UNWRENCHED
update_icon(UPDATE_OVERLAYS)
/obj/machinery/nuclearbomb/multitool_act(mob/user, obj/item/I)
if(!panel_open)
@@ -303,6 +331,7 @@ GLOBAL_VAR(bomb_set)
visible_message("<span class='notice'>[user] cuts apart the anchoring system sealant on [src].</span>",\
"<span class='notice'>You cut apart the anchoring system's sealant.</span></span>")
removal_stage = NUKE_SEALANT_OPEN
update_icon(UPDATE_OVERLAYS)
/obj/machinery/nuclearbomb/attack_ghost(mob/user as mob)
attack_hand(user)
@@ -320,6 +349,7 @@ GLOBAL_VAR(bomb_set)
user.visible_message("<span class='notice'>[user] pulls [core] out of [src]!</span>", "<span class='notice'>You pull [core] out of [src]! Might want to put it somewhere safe.</span>")
core.forceMove(loc)
core = null
update_icon(UPDATE_OVERLAYS)
/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -374,7 +404,7 @@ GLOBAL_VAR(bomb_set)
if(!lighthack)
flick("nuclearbombc", src)
icon_state = "nuclearbomb1"
update_icon(UPDATE_OVERLAYS)
update_icon(UPDATE_OVERLAYS)
extended = TRUE
return
if("auth")
@@ -413,6 +443,7 @@ GLOBAL_VAR(bomb_set)
if("toggle_anchor")
if(removal_stage == NUKE_MOBILE)
anchored = FALSE
update_icon(UPDATE_OVERLAYS)
visible_message("<span class='warning'>[src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.</span>")
return
@@ -425,6 +456,7 @@ GLOBAL_VAR(bomb_set)
return
anchored = !(anchored)
update_icon(UPDATE_OVERLAYS)
if(anchored)
visible_message("<span class='warning'>With a steely snap, bolts slide out of [src] and anchor it to the flooring.</span>")
return