diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index effec7ca5a2..b0e6253509e 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -115,14 +115,26 @@
return
/obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params)
- if(W.GetID() && electronics && !broken)
+ if(W.GetID() && !broken)
if(allowed(user))
user << "You [open ? "close":"open"] the [src]"
- open = !open
- update_icon()
+ toggle_lock(user)
else
user << "Access denied."
- else if(!alert && istype(W,/obj/item/weapon/crowbar))
+ else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == "help" && !broken)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(obj_integrity < max_integrity && WT.remove_fuel(5, user))
+ user << "You begin repairing [src]."
+ playsound(loc, 'sound/items/Welder.ogg', 40, 1)
+ if(do_after(user, 40/W.toolspeed, target = src))
+ obj_integrity = max_integrity
+ playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
+ update_icon()
+ user << "You repair [src]."
+ else
+ user << "[src] is already in good condition!"
+ return
+ else if(!alert && istype(W,/obj/item/weapon/crowbar)) //Only applies to the lab cage and player made display cases
if(broken)
if(showpiece)
user << "Remove the displayed object first."
@@ -133,8 +145,7 @@
user << "You start to [open ? "close":"open"] the [src]"
if(do_after(user, 20/W.toolspeed, target = src))
user << "You [open ? "close":"open"] the [src]"
- open = !open
- update_icon()
+ toggle_lock(user)
else if(open && !showpiece)
if(user.drop_item())
W.loc = src
@@ -155,6 +166,10 @@
else
return ..()
+/obj/structure/displaycase/proc/toggle_lock(mob/user)
+ open = !open
+ update_icon()
+
/obj/structure/displaycase/attack_paw(mob/user)
return src.attack_hand(user)
@@ -188,7 +203,7 @@
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/weapon/wrench))
+ if(istype(I, /obj/item/weapon/wrench)) //The player can only deconstruct the wooden frame
user << "You start disassembling [src]..."
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 30/I.toolspeed, target = src))
@@ -224,13 +239,16 @@
else
return ..()
-
+//The captains display case requiring specops ID access is intentional.
+//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
alert = 1
start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain
-
+ req_access = list(access_cent_specops)
+
/obj/structure/displaycase/labcage
name = "lab cage"
desc = "A glass lab container for storing interesting creatures."
start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr
-
+ req_access = list(access_rd)
+
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index aa127a88443..8354514d9d7 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -26,6 +26,19 @@
/obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params)
if(iscyborg(user) || istype(I,/obj/item/device/multitool))
toggle_lock(user)
+ else if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == "help" && !broken)
+ var/obj/item/weapon/weldingtool/WT = I
+ if(obj_integrity < max_integrity && WT.remove_fuel(2, user))
+ user << "You begin repairing [src]."
+ playsound(loc, 'sound/items/Welder.ogg', 40, 1)
+ if(do_after(user, 40/I.toolspeed, target = src))
+ obj_integrity = max_integrity
+ playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
+ update_icon()
+ user << "You repair [src]."
+ else
+ user << "[src] is already in good condition!"
+ return
else if(istype(I, /obj/item/stack/sheet/glass) && broken)
var/obj/item/stack/sheet/glass/G = I
if(G.get_amount() < 2)