Files
CHOMPStation2/code/game/gamemodes/technomancer/spells/mark_recall.dm
Neerti 09a57710a2 Technomancer Additions/Fixes
Moves spell HUD so it doesn't cover instability warning.
Makes Instability radiate out towards other humans at sufficently high amounts.  People radiating instability will glow purple light.  It is adviced to keep your distance or you will get instability as well.
Mark can no longer be cast on the admin z-level.
Adds Gambit, a spell which will randomly give you (almost) any spell that exists.
Shield now causes a bit of instability when blocking.
Recall will bring anyone who is grabbed along for the ride when cast.
Disposable Teleporters now function correctly.
Instability decays faster.
2016-07-21 18:22:15 -04:00

107 lines
3.7 KiB
Plaintext

/datum/technomancer/spell/mark
name = "Mark"
desc = "This function places a specific 'mark' beacon under you, which is used by the Recall function as a destination. \
Note that using Mark again will move the destination instead of creating a second destination, and only one destination \
can exist, regardless of who casted Mark."
cost = 50
obj_path = /obj/item/weapon/spell/mark
ability_icon_state = "tech_mark"
//The object to teleport to when Recall is used.
/obj/effect/mark_spell
name = "mark"
desc = "This is a strange looking disturbance."
opacity = 0
density = 0
anchored = 1
//This is global, to avoid looping through a list of all objects, or god forbid, looping through world.
/var/global/obj/effect/mark_spell/mark_spell_ref = null
/obj/item/weapon/spell/mark
name = "mark"
icon_state = "mark"
desc = "Marks a specific location to be used by Recall."
cast_methods = CAST_USE
aspect = ASPECT_TELE
/obj/item/weapon/spell/mark/on_use_cast(mob/living/user)
if(!allowed_to_teleport()) // Otherwise you could teleport back to the admin Z-level.
user << "<span class='warning'>You can't teleport here!</span>"
return 0
if(pay_energy(1000))
if(!mark_spell_ref)
mark_spell_ref = new(get_turf(user))
user << "<span class='notice'>You mark \the [get_turf(user)] under you.</span>"
else
mark_spell_ref.forceMove(get_turf(user))
user << "<span class='notice'>Your mark is moved from its old position to \the [get_turf(user)] under you.</span>"
owner.adjust_instability(5)
return 1
else
user << "<span class='warning'>You can't afford the energy cost!</span>"
return 0
//Recall
/datum/technomancer/spell/recall
name = "Recall"
desc = "This function teleports you to where you placed a mark using the Mark function. Without the Mark function, this \
function is useless. Note that teleporting takes three seconds. Being incapacitated while teleporting will cancel it."
enhancement_desc = "Recall takes two seconds instead of three."
cost = 50
obj_path = /obj/item/weapon/spell/recall
ability_icon_state = "tech_recall"
/obj/item/weapon/spell/recall
name = "recall"
icon_state = "recall"
desc = "This will bring you to your Mark."
cast_methods = CAST_USE
aspect = ASPECT_TELE
/obj/item/weapon/spell/recall/on_use_cast(mob/living/user)
if(pay_energy(3000))
if(!mark_spell_ref)
user << "<span class='danger'>There's no Mark!</span>"
return 0
else
visible_message("<span class='warning'>\The [user] starts glowing!</span>")
var/light_intensity = 2
var/time_left = 3
if(check_for_scepter())
time_left = 2
while(time_left)
if(user.incapacitated())
visible_message("<span class='notice'>\The [user]'s glow fades.</span>")
user << "<span class='danger'>You cannot Recall while incapacitated!</span>"
return 0
light_intensity++
set_light(light_intensity, light_intensity, l_color = "#006AFF")
time_left--
sleep(1 SECOND)
var/turf/target_turf = get_turf(mark_spell_ref)
var/turf/old_turf = get_turf(user)
for(var/obj/item/weapon/grab/G in user.contents) // People the Technomancer is grabbing come along for the ride.
if(G.affecting)
G.affecting.forceMove(locate( target_turf.x+rand(-1,1), target_turf.y+rand(-1,1), target_turf.z))
G.affecting << "<span class='warning'>You are teleported along with [user]!</span>"
user.forceMove(target_turf)
user << "<span class='notice'>You are teleported to your Mark.</span>"
playsound(target_turf, 'sound/effects/phasein.ogg', 25, 1)
playsound(target_turf, 'sound/effects/sparks2.ogg', 50, 1)
playsound(old_turf, 'sound/effects/sparks2.ogg', 50, 1)
owner.adjust_instability(25)
qdel(src)
return 1
else
user << "<span class='warning'>You can't afford the energy cost!</span>"
return 0