diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 4a8b4f2d3c..4ad8d06a5a 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -46,6 +46,8 @@
return
if(default_part_replacement(user, O))
return
+ if(default_unfasten_wrench(user, O, 40))
+ return
if(istype(O, /obj/item/weapon/reagent_containers/glass))
if(beaker)
user << "]The [src] is already loaded."
diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm
index 7a4e5e3ab6..0a43acb172 100644
--- a/code/game/machinery/bioprinter.dm
+++ b/code/game/machinery/bioprinter.dm
@@ -44,6 +44,8 @@
return
if(default_part_replacement(user, O))
return
+ if(default_unfasten_wrench(user, O, 20))
+ return
return ..()
/obj/machinery/organ_printer/update_icon()
diff --git a/code/game/machinery/computer3/lapvend.dm b/code/game/machinery/computer3/lapvend.dm
index 4aa5d318f4..e1e70ca3a7 100644
--- a/code/game/machinery/computer3/lapvend.dm
+++ b/code/game/machinery/computer3/lapvend.dm
@@ -29,6 +29,9 @@
/obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob)
var/obj/item/weapon/card/id/I = W.GetID()
+ if(default_unfasten_wrench(user, W, 20))
+ return
+
if(vendmode == 1 && I)
scan_id(I, W)
vendmode = 0
diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/game/machinery/kitchen/cooking_machines/_cooker.dm
index 26b21c9a13..9f43092942 100644
--- a/code/game/machinery/kitchen/cooking_machines/_cooker.dm
+++ b/code/game/machinery/kitchen/cooking_machines/_cooker.dm
@@ -50,6 +50,9 @@
user << "\The [src] is running!"
return
+ if(default_unfasten_wrench(user, I, 20))
+ return
+
// We are trying to cook a grabbed mob.
var/obj/item/weapon/grab/G = I
if(istype(G))
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index f3d4e69611..9b6b503237 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -92,6 +92,9 @@
/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
var/obj/item/weapon/grab/G = W
+ if(default_unfasten_wrench(user, W, 40))
+ return
+
if(!istype(G))
return ..()
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index d51a170658..fa81ff1620 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -95,6 +95,8 @@
return
else if(default_deconstruction_crowbar(user, O))
return
+ else if(default_unfasten_wrench(user, O, 10))
+ return
else if(src.dirty==100) // The microwave is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 86b481b31b..a2f5c00ad1 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -22,6 +22,7 @@
var/locked = 0
var/scan_id = 1
var/is_secure = 0
+ var/wrenchable = 0
var/datum/wires/smartfridge/wires = null
/obj/machinery/smartfridge/secure
@@ -128,6 +129,7 @@
/obj/machinery/smartfridge/drying_rack
name = "\improper Drying Rack"
desc = "A machine for drying plants."
+ wrenchable = 1
icon_state = "drying_rack"
icon_on = "drying_rack_on"
icon_off = "drying_rack"
@@ -217,6 +219,9 @@
nanomanager.update_uis(src)
return
+ if(wrenchable && default_unfasten_wrench(user, O, 20))
+ return
+
if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters))
if(panel_open)
attack_hand(user)
diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm
index c7d6b7c514..ac88069151 100644
--- a/code/game/machinery/seed_extractor.dm
+++ b/code/game/machinery/seed_extractor.dm
@@ -40,4 +40,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
user << "You extract some seeds from the grass tile."
new /obj/item/seeds/grassseed(loc)
+ else if(default_unfasten_wrench(user, O, 20))
+ return
+
return
\ No newline at end of file
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index f245682861..309c9cf2a4 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -88,6 +88,8 @@
return
if(default_deconstruction_crowbar(user, W))
return
+ if(default_unfasten_wrench(user, W, 40))
+ return
/*if(istype(W,/obj/item/weapon/screwdriver))
panel = !panel
user << "You [panel ? "open" : "close"] the [src]'s maintenance panel"*/
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index a8b7d1fde1..1ac48546f5 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -68,6 +68,10 @@
user.drop_item()
B.loc = src
user << "You add \the [loaded_pill_bottle] into the dispenser slot!"
+
+ else if(default_unfasten_wrench(user, B, 20))
+ return
+
return
/obj/machinery/chem_master/attack_hand(mob/user as mob)
diff --git a/code/modules/virus2/analyser.dm b/code/modules/virus2/analyser.dm
index 1bd3b3053c..af17836409 100644
--- a/code/modules/virus2/analyser.dm
+++ b/code/modules/virus2/analyser.dm
@@ -11,7 +11,10 @@
var/obj/item/weapon/virusdish/dish = null
/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/O as obj, var/mob/user as mob)
- if(!istype(O,/obj/item/weapon/virusdish)) return
+ if(default_unfasten_wrench(user, O, 20))
+ return
+
+ else if(!istype(O,/obj/item/weapon/virusdish)) return
if(dish)
user << "\The [src] is already loaded."
diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm
index f6cf9fe390..026bea5e5d 100644
--- a/code/modules/virus2/centrifuge.dm
+++ b/code/modules/virus2/centrifuge.dm
@@ -13,6 +13,9 @@
if(istype(O, /obj/item/weapon/screwdriver))
return ..(O,user)
+ if(default_unfasten_wrench(user, O, 20))
+ return
+
if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial))
if(sample)
user << "\The [src] is already loaded."
diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm
index 298dc49f27..d9a875050d 100644
--- a/code/modules/virus2/diseasesplicer.dm
+++ b/code/modules/virus2/diseasesplicer.dm
@@ -15,6 +15,9 @@
if(istype(I, /obj/item/weapon/screwdriver))
return ..(I,user)
+ if(default_unfasten_wrench(user, I, 20))
+ return
+
if(istype(I,/obj/item/weapon/virusdish))
var/mob/living/carbon/c = user
if (dish)
diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm
index e5204ccedc..c94370cebd 100644
--- a/code/modules/virus2/dishincubator.dm
+++ b/code/modules/virus2/dishincubator.dm
@@ -15,6 +15,9 @@
var/toxins = 0
/obj/machinery/disease2/incubator/attackby(var/obj/O as obj, var/mob/user as mob)
+ if(default_unfasten_wrench(user, O, 20))
+ return
+
if(istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/syringe))
if(beaker)
diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm
index 6a27d2f17d..d992a9c99b 100644
--- a/code/modules/virus2/isolator.dm
+++ b/code/modules/virus2/isolator.dm
@@ -28,7 +28,10 @@
icon_state = "isolator"
/obj/machinery/disease2/isolator/attackby(var/obj/O as obj, var/mob/user)
- if(!istype(O,/obj/item/weapon/reagent_containers/syringe)) return
+ if(default_unfasten_wrench(user, O, 20))
+ return
+
+ else if(!istype(O,/obj/item/weapon/reagent_containers/syringe)) return
var/obj/item/weapon/reagent_containers/syringe/S = O
if(sample)
diff --git a/html/changelogs/PrismaticGynoid-movethosemachines.yml b/html/changelogs/PrismaticGynoid-movethosemachines.yml
new file mode 100644
index 0000000000..b7e06c916f
--- /dev/null
+++ b/html/changelogs/PrismaticGynoid-movethosemachines.yml
@@ -0,0 +1,4 @@
+author: PrismaticGynoid
+delete-after: True
+changes:
+ - rscadd: "A lot more machines can now be moved with a wrench, mostly kitchen, hydroponics, and virology machines."