From 82651eec28f61650607d4afa9da866c53ed0581d Mon Sep 17 00:00:00 2001 From: Adri <33333517+Miraviel@users.noreply.github.com> Date: Mon, 13 Mar 2023 23:30:00 +0100 Subject: [PATCH] Adds detailed examine to the nuclear fission explosive (#20534) * Adds detailed examine to the nuclear bomb * Adds missing screwdriver action to examine * Better examine logic * Removes outdated comment --- code/game/gamemodes/nuclear/nuclearbomb.dm | 49 ++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 645041c4c35..f2205b0ce44 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -45,7 +45,8 @@ GLOBAL_VAR(bomb_set) var/anchor_stage = NUKE_INTACT ///This is so that we can check if the internal components are sealed up properly when the outer hatch is closed. var/core_stage = NUKE_CORE_EVERYTHING_FINE - + ///How many sheets of various metals we need to fix it + var/sheets_to_fix = 5 /obj/machinery/nuclearbomb/syndicate is_syndicate = TRUE @@ -79,6 +80,30 @@ GLOBAL_VAR(bomb_set) INVOKE_ASYNC(src, PROC_REF(explode)) return +/obj/machinery/nuclearbomb/examine(mob/user) + . = ..() + if(!panel_open) + . += "The outer panel is screwed shut." + switch(removal_stage) + if(NUKE_INTACT) + . += "The anchoring bolt covers are welded shut." + if(NUKE_COVER_OFF) + . += "The cover plate is pried into place." + if(NUKE_COVER_OPEN) + . += "The anchoring system sealant is welded shut." + if(NUKE_SEALANT_OPEN) + . += "The bolts are wrenched in place." + if(NUKE_UNWRENCHED) + . += "The device can be pried off its anchors." + if(NUKE_CORE_EVERYTHING_FINE) + . += "The outer panel can be pried open or it can be screwed back on." + if(NUKE_CORE_PANEL_EXPOSED) + . += "The outer plate can be fixed by [sheets_to_fix] metal sheets, while the inner core plate is welded shut." + if(NUKE_CORE_PANEL_UNWELDED) + . += "The inner core plate can be welded shut or it can be pried open." + if(NUKE_CORE_FULLY_EXPOSED) + . += "The inner core plate can be fixed by [sheets_to_fix] titanium sheets, [core ? "or the plutonium core can be removed" : "though the plutonium core is missing"]." + /obj/machinery/nuclearbomb/update_overlays() . = ..() underlays.Cut() @@ -105,23 +130,31 @@ GLOBAL_VAR(bomb_set) to_chat(user, "You need to deploy [src] first.") return if(istype(O, /obj/item/stack/sheet/mineral/titanium) && removal_stage == NUKE_CORE_FULLY_EXPOSED) + var/obj/item/stack/S = O + if(S.get_amount() < sheets_to_fix) + to_chat(user, "You need at least [sheets_to_fix] sheets of titanium to repair [src]'s inner core plate!") + return if(do_after(user, 2 SECONDS, target = src)) - var/obj/item/stack/S = O - if(!loc || !S || S.get_amount() < 5) + if(!loc || !S || S.get_amount() < sheets_to_fix) return - S.use(5) - user.visible_message("[user] repairs [src]'s inner core plate.", "You repair [src]'s inner core plate. The radiation is contained.") + S.use(sheets_to_fix) + user.visible_message("[user] repairs [src]'s inner core plate.", \ + "You repair [src]'s inner core plate. The radiation is contained.") removal_stage = NUKE_CORE_PANEL_UNWELDED if(core) STOP_PROCESSING(SSobj, core) return if(istype(O, /obj/item/stack/sheet/metal) && removal_stage == NUKE_CORE_PANEL_EXPOSED) var/obj/item/stack/S = O + if(S.get_amount() < sheets_to_fix) + to_chat(user, "You need at least [sheets_to_fix] sheets of metal to repair [src]'s outer core plate!") + return if(do_after(user, 2 SECONDS, target = src)) - if(!loc || !S || S.get_amount() < 5) + if(!loc || !S || S.get_amount() < sheets_to_fix) return - S.use(5) - user.visible_message("[user] repairs [src]'s outer core plate.", "You repair [src]'s outer core plate.") + S.use(sheets_to_fix) + user.visible_message("[user] repairs [src]'s outer core plate.", \ + "You repair [src]'s outer core plate.") removal_stage = NUKE_CORE_EVERYTHING_FINE return if(istype(O, /obj/item/nuke_core/plutonium) && removal_stage == NUKE_CORE_FULLY_EXPOSED)