diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index 8c60b0e4546..77700d9d028 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -11,8 +11,6 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if /datum/wires/syndicatebomb/UpdatePulsed(var/index) var/obj/machinery/syndicatebomb/P = holder - if(P.degutted) - return switch(index) if(WIRE_BOOM) if (P.active) @@ -49,8 +47,6 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if /datum/wires/syndicatebomb/UpdateCut(var/index, var/mended) var/obj/machinery/syndicatebomb/P = holder - if(P.degutted) - return switch(index) if(WIRE_EXPLODE) if(!mended) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index e01e034fcd2..19359a76dd8 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -14,7 +14,7 @@ var/open_panel = 0 //are the wires exposed? var/active = 0 //is the bomb counting down? var/defused = 0 //is the bomb capable of exploding? - var/degutted = 0 //is the bomb even a bomb anymore? + var/obj/item/weapon/syndicatebombcore/payload /obj/machinery/syndicatebomb/process() if(active && !defused && (timer > 0)) //Tick Tock @@ -24,15 +24,17 @@ active = 0 timer = 60 processing_objects.Remove(src) - explosion(src.loc,2,5,11, flame_range = 11) - del(src) + icon_state = "syndicate-bomb-inactive[open_panel ? "-wires" : ""]" + if(payload in src) + payload.detonate() return if(!active || defused) //Counter terrorists win processing_objects.Remove(src) return /obj/machinery/syndicatebomb/New() - wires = new(src) + wires = new(src) + payload = new(src) ..() @@ -69,37 +71,34 @@ user << "You [open_panel ? "open" : "close"] the wire panel." else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) - if(degutted) - user << "The wires aren't connected to anything!" - else if(open_panel) + if(open_panel) wires.Interact(user) else if(istype(I, /obj/item/weapon/crowbar)) - if(open_panel && !degutted && isWireCut(WIRE_BOOM) && isWireCut(WIRE_UNBOLT) && isWireCut(WIRE_DELAY) && isWireCut(WIRE_PROCEED) && isWireCut(WIRE_ACTIVATE)) - user << "You carefully pry out the bomb's payload." - degutted = 1 - new /obj/item/weapon/syndicatebombcore(user.loc) + if(open_panel && isWireCut(WIRE_BOOM) && isWireCut(WIRE_UNBOLT) && isWireCut(WIRE_DELAY) && isWireCut(WIRE_PROCEED) && isWireCut(WIRE_ACTIVATE)) + if(payload) + user << "You carefully pry out [payload]." + payload.loc = user.loc + payload = null + else + user << "There isn't anything in here to remove!" else if (open_panel) user << "The wires conneting the shell to the explosives are holding it down!" - else if (degutted) - user << "The explosives have already been removed." else user << "The cover is screwed on, it won't pry off!" else if(istype(I, /obj/item/weapon/syndicatebombcore)) - if(degutted) - user << "You place the payload into the shell." - degutted = 0 + if(!payload) + payload = I + user << "You place [payload] into [src]." user.drop_item() - del(I) + payload.loc = src else - user << "While a double strength bomb would surely be a thing of terrible beauty, there's just no room for it." + user << "[payload] is already loaded into [src], you'll have to remove it first." else ..() /obj/machinery/syndicatebomb/attack_hand(var/mob/user) - if(degutted) - user << "The bomb's explosives have been removed, the [open_panel ? "wires" : "buttons"] are useless now." - else if(anchored) + if(anchored) if(open_panel) wires.Interact(user) else if(!active) @@ -116,10 +115,8 @@ timer = newtime src.loc.visible_message("\blue \icon[src] timer set for [timer] seconds.") if(alert(usr,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, usr) && isliving(usr)) - if(defused || active || degutted) - if(degutted) - src.loc.visible_message("\blue \icon[src] Device error: Payload missing") - else if(defused) + if(defused || active) + if(defused) src.loc.visible_message("\blue \icon[src] Device error: User intervention required") return else @@ -151,7 +148,10 @@ origin_tech = "syndicate=6;combat=5" /obj/item/weapon/syndicatebombcore/ex_act(severity) //Little boom can chain a big boom - explosion(src.loc,2,5,11, flame_range = 11) + src.detonate() + +/obj/item/weapon/syndicatebombcore/proc/detonate() + explosion(get_turf(src),2,5,11, flame_range = 11) del(src) /obj/item/device/syndicatedetonator