diff --git a/code/datums/spells/rod_form.dm b/code/datums/spells/rod_form.dm new file mode 100644 index 00000000000..004daf8969e --- /dev/null +++ b/code/datums/spells/rod_form.dm @@ -0,0 +1,43 @@ +/obj/effect/proc_holder/spell/targeted/rod_form + name = "Rod Form" + desc = "Take on the form of an immovable rod, destroying all in your path." + clothes_req = 1 + human_req = 0 + charge_max = 600 + cooldown_min = 200 + range = -1 + include_user = 1 + invocation = "CLANG!" + invocation_type = "shout" + action_icon_state = "immrod" + +/obj/effect/proc_holder/spell/targeted/rod_form/cast(list/targets,mob/user = usr) + for(var/mob/living/M in targets) + var/turf/start = get_turf(M) + var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(M, M.dir, (15 + spell_level * 3))) + W.wizard = M + W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell + W.start_turf = start + M.forceMove(W) + M.notransform = 1 + M.status_flags |= GODMODE + +//Wizard Version of the Immovable Rod + +/obj/effect/immovablerod/wizard + var/max_distance = 13 + var/mob/living/wizard + var/turf/start_turf + notify = FALSE + +/obj/effect/immovablerod/wizard/Move() + if(get_dist(start_turf, get_turf(src)) >= max_distance) + qdel(src) + ..() + +/obj/effect/immovablerod/wizard/Destroy() + if(wizard) + wizard.status_flags &= ~GODMODE + wizard.notransform = 0 + wizard.forceMove(get_turf(src)) + return ..() diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 3c59d47f020..fd554e03c85 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -106,6 +106,11 @@ spell_type = /obj/effect/proc_holder/spell/fireball log_name = "FB" +/datum/spellbook_entry/rod_form + name = "Rod Form" + spell_type = /obj/effect/proc_holder/spell/targeted/rod_form + log_name = "RF" + /datum/spellbook_entry/magicm name = "Magic Missile" spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile @@ -853,7 +858,7 @@ spellname = "disintegrate" icon_state ="bookfireball" desc = "This book feels like it will rip stuff apart." - + /obj/item/weapon/spellbook/oneuse/sacredflame spell = /obj/effect/proc_holder/spell/targeted/sacred_flame spellname = "sacred flame" diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 2dc2c8a17dd..04c9d3be5d4 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -29,14 +29,16 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 anchored = 1 var/z_original = 0 var/destination + var/notify = TRUE /obj/effect/immovablerod/New(atom/start, atom/end) loc = start z_original = z destination = end - notify_ghosts("\A [src] is inbound!", - enter_link="(Click to follow)", - source=src, action=NOTIFY_FOLLOW) + if(notify) + notify_ghosts("\A [src] is inbound!", + enter_link="(Click to follow)", + source=src, action=NOTIFY_FOLLOW) poi_list |= src if(end && end.z==z_original) walk_towards(src, destination, 1) diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 6fa0f18dcf8..3d0c7233c98 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/paradise.dme b/paradise.dme index 297a8d15920..cdcdcb9a6c9 100644 --- a/paradise.dme +++ b/paradise.dme @@ -306,6 +306,7 @@ #include "code\datums\spells\mind_transfer.dm" #include "code\datums\spells\projectile.dm" #include "code\datums\spells\rathens.dm" +#include "code\datums\spells\rod_form.dm" #include "code\datums\spells\shapeshift.dm" #include "code\datums\spells\summonitem.dm" #include "code\datums\spells\touch_attacks.dm"