diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm
index 8f96e5e619..8a08232859 100644
--- a/code/game/objects/items/implants/implant_hijack.dm
+++ b/code/game/objects/items/implants/implant_hijack.dm
@@ -10,6 +10,7 @@
var/eye_color
var/stealthmode = FALSE
var/stealthcooldown = 0
+ var/hijacking = FALSE
/obj/item/implant/hijack/activate()
. = ..()
@@ -84,14 +85,17 @@
return TRUE
/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
- if (apc.hijacker)
+ if (apc.hijacker || hijacking)
return FALSE //can't remotely hijack an already hijacked APC
+ hijacking = TRUE
to_chat(imp_in, "Establishing remote connection with APC.")
if (!do_after(imp_in, 4 SECONDS,target=apc))
to_chat(imp_in, "Aborting.")
+ hijacking = FALSE
return TRUE
if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
to_chat(src,"You are connected to too many APCs! Too many more will fry your brain.")
+ hijacking = FALSE
return TRUE
imp_in.light_power = 2
imp_in.light_range = 2
@@ -109,6 +113,7 @@
toggle_eyes()
else
to_chat(imp_in, "Aborting.")
+ hijacking = FALSE
imp_in.light_power = 0
imp_in.light_range = 0
imp_in.light_color = COLOR_YELLOW
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 6ad2cf5ec9..b15b701272 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1081,26 +1081,33 @@
if (!istype(L))
return
if (hijacker && hijacker != L)
+ var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.")
+ H.hijacking = TRUE
if (do_after(L,20 SECONDS,target=src))
hijacker.toggleSiliconAccessArea(area)
if (L.toggleSiliconAccessArea(area))
hijacker = L
update_icon()
set_hijacked_lighting()
+ H.hijacking = FALSE
return
else
to_chat(L, "Aborting.")
+ H.hijacking = FALSE
return
to_chat(L, "Beginning hijack of APC.")
var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
+ H.hijacking = TRUE
if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src))
if (L.toggleSiliconAccessArea(area))
hijacker = L
update_icon()
set_hijacked_lighting()
+ H.hijacking = FALSE
else
to_chat(L, "Aborting.")
+ H.hijacking = FALSE
return
/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf)