diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index b023aaa4dd0..74453f47c62 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -67,6 +67,9 @@
if(modifiers["shift"] && modifiers["alt"])
AltShiftClickOn(A)
return
+ if(modifiers["shift"] && modifiers["middle"])
+ ShiftMiddleClickOn(A)
+ return
if(modifiers["middle"])
MiddleClickOn(A)
if(controlled_mech) //Are we piloting a mech? Placed here so the modifiers are not overridden.
@@ -128,6 +131,8 @@
A.AICtrlShiftClick(src)
/mob/living/silicon/ai/AltShiftClickOn(atom/A)
A.AIAltShiftClick(src)
+/mob/living/silicon/ai/ShiftMiddleClickOn(atom/A)
+ A.AIShiftMiddleClick(src)
/mob/living/silicon/ai/ShiftClickOn(atom/A)
A.AIShiftClick(src)
/mob/living/silicon/ai/CtrlClickOn(atom/A)
@@ -148,6 +153,9 @@
/atom/proc/AIAltShiftClick()
return
+/atom/proc/AIShiftMiddleClick()
+ return
+
/atom/proc/AIShiftClick(mob/living/user) // borgs use this too
if(user.client)
user.examinate(src)
@@ -215,3 +223,8 @@
if(!ai_control_check(user))
return
toggle_light(user)
+
+/obj/machinery/door/airlock/AIShiftMiddleClick(mob/user) // Toggles door timings.
+ if(!ai_control_check(user))
+ return
+ toggle_speed(user)
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 77a4ae192f1..cb483601e26 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -363,9 +363,11 @@
A.AltShiftClick(src)
return
-/atom/proc/AltShiftClick(mob/user)
+/mob/proc/ShiftMiddleClickOn(atom/A)
return
+/atom/proc/AltShiftClick(mob/user)
+ return
/*
Misc helpers
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 40fcfc82671..706c9304e20 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -30,6 +30,9 @@
if(modifiers["middle"] && modifiers["ctrl"])
CtrlMiddleClickOn(A)
return
+ if(modifiers["shift"] && modifiers["middle"])
+ ShiftMiddleClickOn(A)
+ return
if(modifiers["middle"])
MiddleClickOn(A)
return
@@ -126,7 +129,8 @@
A.BorgCtrlShiftClick(src)
/mob/living/silicon/robot/AltShiftClickOn(atom/A)
A.BorgAltShiftClick(src)
-
+/mob/living/silicon/robot/ShiftMiddleClickOn(atom/A)
+ A.BorgShiftMiddleClick(src)
/atom/proc/BorgShiftClick(mob/user)
if(user.client && user.client.eye == user)
@@ -148,6 +152,8 @@
/atom/proc/BorgAltShiftClick()
return
+/atom/proc/BorgShiftMiddleClick()
+ return
// AIRLOCKS
@@ -163,6 +169,8 @@
/obj/machinery/door/airlock/BorgAltShiftClick(mob/living/silicon/robot/user) // Enables emergency override on doors! Forwards to AI code.
AIAltShiftClick(user)
+/obj/machinery/door/airlock/BorgShiftMiddleClick(mob/living/silicon/robot/user) //Toggles door timing. Forwards to AI code.
+ AIShiftMiddleClick(user)
// APC
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index c7cb8b18031..7b2890d97da 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -814,12 +814,7 @@ About the new airlock wires panel:
safe = 1
to_chat(usr, "The door safeties have been enabled.")
if("speed-toggle")
- if(wires.is_cut(WIRE_SPEED))
- to_chat(usr, "The timing wire is cut - Cannot alter timing.")
- else if(normalspeed)
- normalspeed = 0
- else
- normalspeed = 1
+ toggle_speed(usr)
if("open-close")
open_close(usr)
else
@@ -870,6 +865,17 @@ About the new airlock wires panel:
to_chat(user, "Emergency access has been disabled.")
update_icon()
+/obj/machinery/door/airlock/proc/toggle_speed(mob/user)
+ if(wires.is_cut(WIRE_SPEED))
+ to_chat(user, "The timing wire has been cut - Cannot alter timing.")
+ return
+ normalspeed = !normalspeed
+
+ if(normalspeed)
+ to_chat(user, "The door is now in normal mode.")
+ else
+ to_chat(user, "The door is now in fast mode.")
+
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
add_fingerprint(user)
if(!headbutt_shock_check(user))