diff --git a/code/_onclick/click_override.dm b/code/_onclick/click_override.dm
index 7dfa8020cb8..fe2acfa3023 100644
--- a/code/_onclick/click_override.dm
+++ b/code/_onclick/click_override.dm
@@ -43,26 +43,50 @@
..()
/datum/middleClickOverride/power_gloves
- var/last_shocked = 0
- var/shock_delay = 120
-/datum/middleClickOverride/power_gloves/onClick(var/atom/A, var/mob/living/user)
+/datum/middleClickOverride/power_gloves/onClick(atom/A, mob/living/carbon/human/user)
+ if(A == user || user.a_intent == INTENT_HELP || user.a_intent == INTENT_GRAB)
+ return
if(user.incapacitated())
return
- if(world.time < last_shocked + shock_delay)
+ var/obj/item/clothing/gloves/color/yellow/power/P = user.gloves
+ if(world.time < P.last_shocked + P.shock_delay)
to_chat(user, "The gloves are still recharging.")
return
- if(!isliving(A))
- to_chat(user, "Shocking an inanimate object would be pointless.")
- return
- var/mob/living/L = A
var/turf/T = get_turf(user)
var/obj/structure/cable/C = locate() in T
- if(!C || !istype(C))
- to_chat(user, "There is no cable here to power the gloves.")
- return
- user.visible_message("[user.name] fires an arc of electricity at [L]!", "You fire an arc of electricity at [L]!", "You hear the loud crackle of electricity!")
- playsound(user.loc, 'sound/effects/eleczap.ogg', 75, 1)
- user.Beam(L,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- electrocute_mob(L, C, user)
- last_shocked = world.time
+ if(!P.unlimited_power)
+ if(!C || !istype(C))
+ to_chat(user, "There is no cable here to power the gloves.")
+ return
+ var/turf/target_turf = get_turf(A)
+ target_turf.hotspot_expose(2000, 400)
+ playsound(user.loc, 'sound/effects/eleczap.ogg', 40, 1)
+
+ var/atom/beam_from = user
+ var/atom/target_atom = A
+
+ for(var/i in 0 to 3)
+ beam_from.Beam(target_atom, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 6)
+ if(isliving(target_atom))
+ var/mob/living/L = target_atom
+ if(user.a_intent == INTENT_DISARM)
+ L.Weaken(3)
+ else
+ if(P.unlimited_power)
+ L.electrocute_act(1000, P, 0) //Just kill them
+ else
+ electrocute_mob(L, C, P)
+ break
+ var/list/next_shocked = list()
+ for(var/atom/movable/AM in orange(3, target_atom))
+ if(AM == user || istype(AM, /obj/effect) || isobserver(AM))
+ continue
+ next_shocked.Add(AM)
+
+ beam_from = target_atom
+ target_atom = pick(next_shocked)
+ A = target_atom
+ next_shocked.Cut()
+
+ P.last_shocked = world.time
\ No newline at end of file
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index f7d8fe3ee38..7a65d579b8e 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -12,6 +12,9 @@
description_antag = "These are a pair of power gloves, and can be used to fire bolts of electricity while standing over powered power cables."
var/old_mclick_override
var/datum/middleClickOverride/power_gloves/mclick_override = new /datum/middleClickOverride/power_gloves
+ var/last_shocked = 0
+ var/shock_delay = 40
+ var/unlimited_power = FALSE // Does this really need explanation?
/obj/item/clothing/gloves/color/yellow/power/equipped(mob/user, slot)
if(!ishuman(user))
@@ -21,7 +24,10 @@
if(H.middleClickOverride)
old_mclick_override = H.middleClickOverride
H.middleClickOverride = mclick_override
- to_chat(H, "You feel electricity begin to build up in [src].")
+ if(!unlimited_power)
+ to_chat(H, "You feel electricity begin to build up in [src].")
+ else
+ to_chat(H, "You feel like you have UNLIMITED POWER!!")
/obj/item/clothing/gloves/color/yellow/power/dropped(mob/user, slot)
if(!ishuman(user))
@@ -34,6 +40,12 @@
else
H.middleClickOverride = null
+/obj/item/clothing/gloves/color/yellow/power/unlimited
+ name = "UNLIMITED POWER gloves"
+ desc = "These gloves possess UNLIMITED POWER."
+ shock_delay = 0
+ unlimited_power = TRUE
+
/obj/item/clothing/gloves/color/yellow/fake
desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..."
siemens_coefficient = 1