diff --git a/code/modules/smithing/machinery/casting_basin.dm b/code/modules/smithing/machinery/casting_basin.dm
index 9faaf6558a0..27c8d4b5fab 100644
--- a/code/modules/smithing/machinery/casting_basin.dm
+++ b/code/modules/smithing/machinery/casting_basin.dm
@@ -148,6 +148,8 @@
update_icon(UPDATE_OVERLAYS)
/obj/machinery/smithing/casting_basin/attack_hand(mob/user)
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "Access denied.")
if(!we_are_open)
to_chat(user, "You open [src].")
we_are_open = TRUE
diff --git a/code/modules/smithing/machinery/kinetic_assembler.dm b/code/modules/smithing/machinery/kinetic_assembler.dm
index c2aefbc3cf1..cb0064625f6 100644
--- a/code/modules/smithing/machinery/kinetic_assembler.dm
+++ b/code/modules/smithing/machinery/kinetic_assembler.dm
@@ -174,6 +174,9 @@
return ITEM_INTERACT_COMPLETE
/obj/machinery/smithing/kinetic_assembler/attack_hand(mob/user)
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "Access denied.")
+ return FINISH_ATTACK
if(!primary)
to_chat(user, "[src] lacks a primary component!")
return FINISH_ATTACK
@@ -246,6 +249,7 @@
bound_width = 32
bound_y = 0
operation_sound = 'sound/items/welder.ogg'
+ req_one_access = list(ACCESS_TOX, ACCESS_XENOBIOLOGY, ACCESS_SMITH)
/// Slime extract for the egun
var/obj/item/slime_extract/slime_core
/// The gun frame
@@ -351,6 +355,9 @@
return ITEM_INTERACT_COMPLETE
/obj/machinery/smithing/scientific_assembler/attack_hand(mob/user)
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "Access denied.")
+ return FINISH_ATTACK
if(!slime_core)
to_chat(user, "[src] lacks a slime core!")
return FINISH_ATTACK
diff --git a/code/modules/smithing/machinery/lava_furnace.dm b/code/modules/smithing/machinery/lava_furnace.dm
index 1cc5d776e08..edbcd8c7798 100644
--- a/code/modules/smithing/machinery/lava_furnace.dm
+++ b/code/modules/smithing/machinery/lava_furnace.dm
@@ -58,6 +58,9 @@
/obj/machinery/smithing/lava_furnace/attack_hand(mob/user)
. = ..()
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "Access denied.")
+ return FINISH_ATTACK
if(operating)
to_chat(user, "[src] is currently operating!")
return
diff --git a/code/modules/smithing/machinery/power_hammer.dm b/code/modules/smithing/machinery/power_hammer.dm
index af463db6671..ee1f81a9cea 100644
--- a/code/modules/smithing/machinery/power_hammer.dm
+++ b/code/modules/smithing/machinery/power_hammer.dm
@@ -79,6 +79,9 @@
/obj/machinery/smithing/power_hammer/attack_hand(mob/user)
. = ..()
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "Access denied.")
+ return FINISH_ATTACK
if(operating)
to_chat(user, "[src] is currently operating!")
return
diff --git a/code/modules/smithing/smith_machinery.dm b/code/modules/smithing/smith_machinery.dm
index d01456bec2c..3bc35938cf0 100644
--- a/code/modules/smithing/smith_machinery.dm
+++ b/code/modules/smithing/smith_machinery.dm
@@ -12,6 +12,7 @@
anchored = TRUE
density = TRUE
resistance_flags = FIRE_PROOF
+ req_one_access = list(ACCESS_SMITH)
/// How many loops per operation
var/operation_time = 10
/// Is this active
@@ -66,6 +67,14 @@
return ITEM_INTERACT_COMPLETE
return ..()
+/obj/machinery/smithing/emag_act(user as mob)
+ if(!emagged)
+ playsound(get_turf(src), 'sound/effects/sparks4.ogg', 75, 1)
+ req_one_access = list()
+ emagged = TRUE
+ to_chat(user, "You disable the security protocols")
+ return TRUE
+
/obj/machinery/smithing/proc/operate(loops, mob/living/user)
operating = TRUE
update_icon(ALL)
@@ -91,6 +100,9 @@
if(G.state < GRAB_NECK)
to_chat(user, "You need a better grip to do that!")
return FALSE
+ if(!allowed(user) && !isobserver(user))
+ to_chat(user, "You try to shove someone into the machine, but your access is denied!")
+ return FALSE
var/result = special_attack(user, G.affecting)
user.changeNext_move(CLICK_CD_MELEE)
special_attack_on_cooldown = TRUE