diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 76ea855c77..46d124ee49 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -88,17 +88,50 @@
return
close_machine(target)
-/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
- if(!state_open && !occupant)
- if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
- return
+/obj/machinery/sleeper/screwdriver_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(..())
+ return
+ if(occupant)
+ to_chat(user, "[src] is currently occupied!")
+ return
+ if(state_open)
+ to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
+ return
+ if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
+ return
+ return FALSE
+
+/obj/machinery/sleeper/wrench_act(mob/living/user, obj/item/I)
+ . = ..()
if(default_change_direction_wrench(user, I))
- return
+ return TRUE
+
+/obj/machinery/sleeper/crowbar_act(mob/living/user, obj/item/I)
+ . = ..()
if(default_pry_open(I))
- return
+ return TRUE
if(default_deconstruction_crowbar(I))
+ return TRUE
+
+/obj/machinery/sleeper/default_pry_open(obj/item/I) //wew
+ . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
+ if(.)
+ I.play_tool_sound(src, 50)
+ visible_message("[usr] pries open [src].", "You pry open [src].")
+ open_machine()
+
+/obj/machinery/sleeper/AltClick(mob/user)
+ if(!user.canUseTopic(src, !issilicon(user)))
return
- return ..()
+ if(state_open)
+ close_machine()
+ else
+ open_machine()
+
+/obj/machinery/sleeper/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click [src] to [state_open ? "close" : "open"] it.")
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
@@ -190,7 +223,7 @@
if(inject_chem(chem, usr))
. = TRUE
if(scrambled_chems && prob(5))
- to_chat(usr, "Chem System Re-route detected, results may not be as expected!")
+ to_chat(usr, "Chemical system re-route detected, results may not be as expected!")
/obj/machinery/sleeper/emag_act(mob/user)
. = ..()
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 7895fb8c9f..c9e1e7195b 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -89,11 +89,11 @@
return C
return null
-/obj/machinery/dna_scannernew/close_machine(mob/living/carbon/user)
+/obj/machinery/dna_scannernew/close_machine(atom/movable/target)
if(!state_open)
return FALSE
- ..(user)
+ ..(target)
// search for ghosts, if the corpse is empty and the scanner is connected to a cloner
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
@@ -111,7 +111,7 @@
return TRUE
/obj/machinery/dna_scannernew/open_machine()
- if(state_open)
+ if(state_open || panel_open)
return FALSE
..()
@@ -126,23 +126,48 @@
return
open_machine()
-/obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params)
-
- if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant...
- update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed
+/obj/machinery/dna_scannernew/screwdriver_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(..())
return
+ if(occupant)
+ to_chat(user, "[src] is currently occupied!")
+ return
+ if(state_open)
+ to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
+ return
+ if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) //sent icon_state is irrelevant...
+ update_icon() //..since we're updating the icon here, since the scanner can be unpowered when opened/closed
+ return
+ return FALSE
+/obj/machinery/dna_scannernew/wrench_act(mob/living/user, obj/item/I)
+ . = ..()
+ if(default_change_direction_wrench(user, I))
+ return TRUE
+
+/obj/machinery/dna_scannernew/crowbar_act(mob/living/user, obj/item/I)
+ . = ..()
if(default_pry_open(I))
- return
-
+ return TRUE
if(default_deconstruction_crowbar(I))
- return
+ return TRUE
- return ..()
+/obj/machinery/dna_scannernew/default_pry_open(obj/item/I) //wew
+ . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
+ if(.)
+ I.play_tool_sound(src, 50)
+ visible_message("[usr] pries open [src].", "You pry open [src].")
+ open_machine()
/obj/machinery/dna_scannernew/interact(mob/user)
toggle_open(user)
+/obj/machinery/dna_scannernew/AltClick(mob/user)
+ if(!user.canUseTopic(src, !issilicon(user)))
+ return
+ interact(user)
+
/obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
return
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 1fccadda21..db015eb7c1 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -138,7 +138,7 @@
to_chat(user, "[src] is currently occupied!")
return
if(state_open)
- to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] it's maintenance hatch!")
+ to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
return
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
return