diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 3ac0f7b29b..a36503e7c4 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -122,15 +122,7 @@
to_chat(user, "You remove the screws from [src]'s front panel.")
update_icon()
return
- if(NUKESTATE_UNSCREWED)
- if(istype(I, /obj/item/crowbar))
- to_chat(user, "You start removing [src]'s front panel...")
- playsound(loc, I.usesound, 100, 1)
- if(do_after(user,30*I.toolspeed,target=src))
- to_chat(user, "You remove [src]'s front panel.")
- deconstruction_state = NUKESTATE_PANEL_REMOVED
- update_icon()
- return
+
if(NUKESTATE_PANEL_REMOVED)
if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/welder = I
@@ -142,16 +134,6 @@
deconstruction_state = NUKESTATE_WELDED
update_icon()
return
- if(NUKESTATE_WELDED)
- if(istype(I, /obj/item/crowbar))
- to_chat(user, "You start prying off [src]'s inner plate...")
- playsound(loc, I.usesound, 100, 1)
- if(do_after(user,50*I.toolspeed,target=src))
- to_chat(user, "You pry off [src]'s inner plate. You can see the core's green glow!")
- deconstruction_state = NUKESTATE_CORE_EXPOSED
- update_icon()
- START_PROCESSING(SSobj, core)
- return
if(NUKESTATE_CORE_EXPOSED)
if(istype(I, /obj/item/nuke_core_container))
var/obj/item/nuke_core_container/core_box = I
@@ -182,6 +164,27 @@
return
. = ..()
+/obj/machinery/nuclearbomb/crowbar_act(mob/user, obj/item/tool)
+ . = FALSE
+ switch(deconstruction_state)
+ if(NUKESTATE_UNSCREWED)
+ to_chat(user, "You start removing [src]'s front panel...")
+ playsound(loc, tool.usesound, 100, 1)
+ if(do_after(user, 30 * tool.toolspeed, target = src))
+ to_chat(user, "You remove [src]'s front panel.")
+ deconstruction_state = NUKESTATE_PANEL_REMOVED
+ update_icon()
+ return TRUE
+ if(NUKESTATE_WELDED)
+ to_chat(user, "You start prying off [src]'s inner plate...")
+ playsound(loc, tool.usesound, 100, 1)
+ if(do_after(user, 50 * tool.toolspeed, target = src))
+ to_chat(user, "You pry off [src]'s inner plate. You can see the core's green glow!")
+ deconstruction_state = NUKESTATE_CORE_EXPOSED
+ update_icon()
+ START_PROCESSING(SSobj, core)
+ return TRUE
+
/obj/machinery/nuclearbomb/proc/get_nuke_state()
if(exploding)
return NUKE_ON_EXPLODING
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index 5b828af820..1424944633 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -45,14 +45,6 @@
anchored = TRUE
state = 2
return
-
- else if(istype(W, /obj/item/wrench))
- playsound(src.loc, W.usesound, 50, 1)
- to_chat(user, "You unattach the assembly from its place.")
- new /obj/item/wallframe/camera(get_turf(src))
- qdel(src)
- return
-
if(2)
// State 2
if(istype(W, /obj/item/stack/cable_coil))
@@ -73,40 +65,6 @@
anchored = TRUE
return
-
- if(3)
- // State 3
- if(istype(W, /obj/item/screwdriver))
- playsound(src.loc, W.usesound, 50, 1)
-
- var/input = stripped_input(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13")
- if(!input)
- to_chat(user, "No input found, please hang up and try your call again!")
- return
-
- var/list/tempnetwork = splittext(input, ",")
- if(tempnetwork.len < 1)
- to_chat(user, "No network found, please hang up and try your call again!")
- return
-
- state = 4
- var/obj/machinery/camera/C = new(src.loc)
- forceMove(C)
- C.assembly = src
- C.setDir(src.dir)
-
- C.network = tempnetwork
- var/area/A = get_area(src)
- C.c_tag = "[A.name] ([rand(1, 999)])"
-
-
- else if(istype(W, /obj/item/wirecutters))
- new/obj/item/stack/cable_coil(get_turf(src), 2)
- playsound(src.loc, W.usesound, 50, 1)
- to_chat(user, "You cut the wires from the circuits.")
- state = 2
- return
-
// Upgrades!
if(is_type_in_typecache(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already.
if(!user.transferItemToLoc(W, src))
@@ -115,18 +73,62 @@
upgrades += W
return
- // Taking out upgrades
- else if(istype(W, /obj/item/crowbar) && upgrades.len)
- var/obj/U = locate(/obj) in upgrades
- if(U)
- to_chat(user, "You unattach an upgrade from the assembly.")
- playsound(src.loc, W.usesound, 50, 1)
- U.forceMove(drop_location())
- upgrades -= U
- return
-
return ..()
+/obj/structure/camera_assembly/crowbar_act(mob/user, obj/item/tool)
+ if(!upgrades.len)
+ return FALSE
+ var/obj/U = locate(/obj) in upgrades
+ if(U)
+ to_chat(user, "You unattach an upgrade from the assembly.")
+ playsound(src, tool.usesound, 50, 1)
+ U.forceMove(drop_location())
+ upgrades -= U
+ return TRUE
+
+/obj/structure/camera_assembly/screwdriver_act(mob/user, obj/item/tool)
+ if(state != 3)
+ return FALSE
+
+ playsound(src, tool.usesound, 50, 1)
+ var/input = stripped_input(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13")
+ if(!input)
+ to_chat(user, "No input found, please hang up and try your call again!")
+ return
+ var/list/tempnetwork = splittext(input, ",")
+ if(tempnetwork.len < 1)
+ to_chat(user, "No network found, please hang up and try your call again!")
+ return
+ state = 4
+ var/obj/machinery/camera/C = new(src.loc)
+ forceMove(C)
+ C.assembly = src
+ C.setDir(src.dir)
+
+ C.network = tempnetwork
+ var/area/A = get_area(src)
+ C.c_tag = "[A.name] ([rand(1, 999)])"
+ return TRUE
+
+/obj/structure/camera_assembly/wirecutter_act(mob/user, obj/item/tool)
+ if(state != 3)
+ return FALSE
+
+ new /obj/item/stack/cable_coil(get_turf(src), 2)
+ playsound(src, tool.usesound, 50, 1)
+ to_chat(user, "You cut the wires from the circuits.")
+ state = 2
+ return TRUE
+
+/obj/structure/camera_assembly/wrench_act(mob/user, obj/item/tool)
+ if(state != 1)
+ return FALSE
+ playsound(src, tool.usesound, 50, 1)
+ to_chat(user, "You unattach the assembly from its place.")
+ new /obj/item/wallframe/camera(get_turf(src))
+ qdel(src)
+ return TRUE
+
/obj/structure/camera_assembly/proc/weld(obj/item/weldingtool/WT, mob/living/user)
if(!WT.remove_fuel(0, user))
return 0