From bfb997f3d2e97a1380b8a927c97acd7b30642652 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 7 May 2015 20:51:47 -0400 Subject: [PATCH] Gave EN a prototype magnetic spell --- code/datums/spells/magnet.dm | 122 +++++++++++++++++++ code/modules/clothing/suits/miscellaneous.dm | 6 + paradise.dme | 1 + 3 files changed, 129 insertions(+) create mode 100644 code/datums/spells/magnet.dm 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"