From 4cfea4302dc005905067b0b2c67ba5a01a838e00 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 11 Apr 2020 18:30:56 -0400 Subject: [PATCH] Technomancer mark sprite --- code/game/gamemodes/technomancer/catalog.dm | 2 +- .../technomancer/spells/mark_recall.dm | 52 +++++++++++++------ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm index f86f89779b..ba8ef86a0d 100644 --- a/code/game/gamemodes/technomancer/catalog.dm +++ b/code/game/gamemodes/technomancer/catalog.dm @@ -25,7 +25,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - /obj/item/weapon/technomancer_catalog name = "catalog" desc = "A \"book\" featuring a holographic display, metal cover, and miniaturized teleportation device, allowing the user to \ - requisition various things from.. where ever they came from." + requisition various things from... wherever they came from." icon = 'icons/obj/storage.dmi' icon_state ="scientology" //placeholder w_class = ITEMSIZE_SMALL diff --git a/code/game/gamemodes/technomancer/spells/mark_recall.dm b/code/game/gamemodes/technomancer/spells/mark_recall.dm index b082a33e3d..0d35bce53a 100644 --- a/code/game/gamemodes/technomancer/spells/mark_recall.dm +++ b/code/game/gamemodes/technomancer/spells/mark_recall.dm @@ -8,16 +8,30 @@ ability_icon_state = "tech_mark" category = UTILITY_SPELLS -//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 +/datum/technomancer_marker + var/weakref/U + var/image/I + var/turf/T + +/datum/technomancer_marker/New(var/mob/user) + U = weakref(user) + T = get_turf(user) + I = image('icons/goonstation/featherzone.dmi', T, "spawn-wall") + I.plane = TURF_PLANE + I.layer = ABOVE_TURF_LAYER + user.client?.images |= I + spawn(23) //That's just how long the animation is + I.icon_state = "spawn-wall-loop" + +/datum/technomancer_marker/Destroy() + var/mob/user = U?.resolve() + user?.client?.images -= I + I?.loc = null + U = T = I = null + return ..() //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 +GLOBAL_LIST_INIT(mark_spells, list()) /obj/item/weapon/spell/mark name = "mark" @@ -26,17 +40,20 @@ cast_methods = CAST_USE aspect = ASPECT_TELE -/obj/item/weapon/spell/mark/on_use_cast(mob/living/user) +/obj/item/weapon/spell/mark/on_use_cast(var/mob/living/user) if(!allowed_to_teleport()) // Otherwise you could teleport back to the admin Z-level. to_chat(user, "You can't teleport here!") return 0 if(pay_energy(1000)) - if(!mark_spell_ref) - mark_spell_ref = new(get_turf(user)) - to_chat(user, "You mark \the [get_turf(user)] under you.") - else - mark_spell_ref.forceMove(get_turf(user)) + var/datum/technomancer_marker/marker = GLOB.mark_spells[weakref(user)] + //They have one in the list + if(istype(marker)) + qdel(marker) to_chat(user, "Your mark is moved from its old position to \the [get_turf(user)] under you.") + //They don't have one yet + else + to_chat(user, "You mark \the [get_turf(user)] under you.") + GLOB.mark_spells[weakref(user)] = new /datum/technomancer_marker(user) adjust_instability(5) return 1 else @@ -62,9 +79,10 @@ cast_methods = CAST_USE aspect = ASPECT_TELE -/obj/item/weapon/spell/recall/on_use_cast(mob/living/user) +/obj/item/weapon/spell/recall/on_use_cast(var/mob/living/user) if(pay_energy(3000)) - if(!mark_spell_ref) + var/datum/technomancer_marker/marker = GLOB.mark_spells[weakref(user)] + if(!istype(marker)) to_chat(user, "There's no Mark!") return 0 else @@ -86,7 +104,7 @@ time_left-- sleep(1 SECOND) - var/turf/target_turf = get_turf(mark_spell_ref) + var/turf/target_turf = marker.T 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.