diff --git a/code/datums/spells/magnet.dm b/code/datums/spells/magnet.dm
new file mode 100644
index 00000000000..dbb4b572bbc
--- /dev/null
+++ b/code/datums/spells/magnet.dm
@@ -0,0 +1,122 @@
+/obj/effect/proc_holder/spell/wizard/targeted/magnet
+ name = "Magnetic Pull"
+ desc = "Pulls metalic objects from enemies hands with the power of MAGNETS."
+ charge_type = "recharge"
+ charge_max = 300
+ clothes_req = 0
+ invocation = "UN'LTD P'WAH!"
+ invocation_type = "none"
+ range = 7
+ cooldown_min = 30
+ selection_type = "view"
+ random_target = 1
+ var/energy = 0
+ var/ready = 0
+ var/image/halo = null
+ icon_power_button = "spell_tech"
+
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/Click()
+ if(!ready)
+ if(cast_check())
+ StartChargeup()
+ else
+ if(cast_check(skipcharge=1))
+ choose_targets()
+ return 1
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/StartChargeup(mob/user = usr)
+ ready = 1
+ user << "You start gathering the power."
+ halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
+ user.overlays.Add(halo)
+ spawn(0)
+ while(ready)
+ sleep(1)
+ energy++
+ if(energy >= 100 && ready)
+ Discharge()
+
+obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Reset(mob/user = usr)
+ ready = 0
+ energy = 0
+ if(halo)
+ user.overlays.Remove(halo)
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/revert_cast(mob/user = usr)
+ user << "No target found in range."
+ Reset(user)
+ ..()
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Discharge(mob/user = usr)
+ var/mob/living/M = user
+ //M.electrocute_act(25,"magnet Bolt")
+ M << "You lose control over the power."
+ Reset(user)
+ start_recharge()
+
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/cast(list/targets, mob/user = usr)
+
+ var/mob/living/carbon/target = targets[1]
+
+ if(get_dist(user,target)>range)
+ user << "They are too far away!"
+ Reset(user)
+ return
+
+ user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
+
+ switch(energy)
+ if(0 to 25)
+ if(prob(50))
+ for(var/obj/item/I in target.l_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ else
+ for(var/obj/item/I in target.r_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+ if(25 to 75)
+ for(var/obj/item/I in target.l_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ for(var/obj/item/I in target.r_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+ if(75 to 100)
+ //CHAIN magnet
+ Bolt(user,target,energy,user)
+ Reset(user)
+
+/obj/effect/proc_holder/spell/wizard/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr)
+ origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
+ var/mob/living/carbon/current = target
+ if(bolt_energy < 75)
+ for(var/obj/item/I in target.l_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ for(var/obj/item/I in target.r_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+ else
+ for(var/obj/item/I in target.l_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ for(var/obj/item/I in target.r_hand)
+ if(I.flags & CONDUCT)
+ I.throw_at(user, I.throw_range, 4, target)
+ playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+ var/list/possible_targets = new
+ for(var/mob/living/M in view_or_range(range,target,"view"))
+ if(user == M || target == M && los_check(current,M)) // || origin == M ? Not sure double shockings is good or not
+ continue
+ possible_targets += M
+ if(!possible_targets.len)
+ return
+ var/mob/living/next = pick(possible_targets)
+ if(next)
+ Bolt(current,next,bolt_energy-6,user) // 5 max bounces
\ No newline at end of file
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index dbe8020102f..9f819f9985b 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -168,8 +168,14 @@
/obj/item/clothing/suit/corgisuit/en/process()
if(prob(2))
+ for(var/obj/M in orange(2,src))
if(!M.anchored && (M.flags & CONDUCT))
+ step_towards(M,src)
+ for(var/mob/living/silicon/S in orange(2,src))
if(istype(S, /mob/living/silicon/ai)) continue
+ step_towards(S,src)
+ for(var/mob/living/carbon/human/machine/M in orange(2,src))
+ step_towards(M,src)
/obj/item/clothing/suit/monkeysuit
name = "Monkey Suit"
diff --git a/paradise.dme b/paradise.dme
index 87370cb5516..26da97bd657 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -168,6 +168,7 @@
#include "code\datums\spells\inflict_handler.dm"
#include "code\datums\spells\knock.dm"
#include "code\datums\spells\lightning.dm"
+#include "code\datums\spells\magnet.dm"
#include "code\datums\spells\mind_transfer.dm"
#include "code\datums\spells\projectile.dm"
#include "code\datums\spells\summonitem.dm"