From 4cfea4302dc005905067b0b2c67ba5a01a838e00 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 11 Apr 2020 18:30:56 -0400 Subject: [PATCH 1/3] 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 f86f89779b1..ba8ef86a0da 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 b082a33e3de..0d35bce53a1 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. From da6c649e50fac1e54069319437b0f144419e7b7f Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Mon, 13 Apr 2020 20:20:13 -0400 Subject: [PATCH 2/3] VS: Universal technomancer cores --- code/game/gamemodes/technomancer/catalog.dm | 13 +++++++++++- code/game/gamemodes/technomancer/core_obj.dm | 20 +++++++++++++++++-- .../game/gamemodes/technomancer/spell_objs.dm | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm index ba8ef86a0da..7d0ddc6c2ef 100644 --- a/code/game/gamemodes/technomancer/catalog.dm +++ b/code/game/gamemodes/technomancer/catalog.dm @@ -40,6 +40,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - var/tab = 4 // Info tab, so new players can read it before doing anything. var/spell_tab = ALL_SPELLS var/show_scepter_text = 0 + var/universal = FALSE //VOREStation Add - Allows non-technomancers to use this catalog /obj/item/weapon/technomancer_catalog/apprentice name = "apprentice's catalog" @@ -51,12 +52,22 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - budget = 2000 max_budget = 2000 +//VOREStation Add +/obj/item/weapon/technomancer_catalog/universal + name = "universal catalog" + desc = "A catalog to be used with the KHI 'Universal Core', shamelessly \ + copied by a Kitsuhana designer from some group of 'technomancers' or another.
\ + The back of the book has 'Export Edition' stamped on it." + budget = 700 + max_budget = 700 + universal = TRUE +//VOREStation Add End // Proc: bind_to_owner() // Parameters: 1 (new_owner - mob that the book is trying to bind to) // Description: Links the catalog to hopefully the technomancer, so that only they can access it. /obj/item/weapon/technomancer_catalog/proc/bind_to_owner(var/mob/living/carbon/human/new_owner) - if(!owner && technomancers.is_antagonist(new_owner.mind)) + if(!owner && (technomancers.is_antagonist(new_owner.mind) || universal)) //VOREStation Edit - Universal catalogs owner = new_owner // Proc: New() diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm index e5a2c5902dc..42fb58e6625 100644 --- a/code/game/gamemodes/technomancer/core_obj.dm +++ b/code/game/gamemodes/technomancer/core_obj.dm @@ -35,6 +35,7 @@ var/list/summoned_mobs = list() // Maintained horribly with maintain_summon_list(). var/list/wards_in_use = list() // Wards don't count against the cap for other summons. var/max_summons = 10 // Maximum allowed summoned entities. Some cores will have different caps. + var/universal = FALSE // Allows non-technomancers to use the core - VOREStation Add /obj/item/weapon/technomancer_core/New() ..() @@ -88,7 +89,7 @@ if(world.time % 5 == 0) // Maintaining fat lists is expensive, I imagine. maintain_summon_list() if(wearer && wearer.mind) - if(!(technomancers.is_antagonist(wearer.mind))) // In case someone tries to wear a stolen core. + if(!(technomancers.is_antagonist(wearer.mind)) && !universal) // In case someone tries to wear a stolen core. //VOREStation Edit - Add universal cores wearer.adjust_instability(20) if(!wearer || wearer.stat == DEAD) // Unlock if we're dead or not worn. canremove = TRUE @@ -349,4 +350,19 @@ set desc = "Toggles the locking mechanism on your manipulation core." canremove = !canremove - to_chat(usr, "You [canremove ? "de" : ""]activate the locking mechanism on \the [src].") \ No newline at end of file + to_chat(usr, "You [canremove ? "de" : ""]activate the locking mechanism on \the [src].") + +//For the adminbuse! VOREStation Add +/obj/item/weapon/technomancer_core/universal + name = "universal core" + desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. \ + This one is a copy of a 'technomancer' core, shamelessly ripped off by a Kitsuhana pattern designer \ + for fun, so that he could perform impressive 'magic'. The pack sloshes slightly if you shake it.
\ + Under the straps, 'Export Edition' is printed." + energy = 7000 + max_energy = 7000 + regen_rate = 30 //233 seconds to full + instability_modifier = 0.3 + spell_power_modifier = 0.7 + universal = TRUE +//VOREStation Add End \ No newline at end of file diff --git a/code/game/gamemodes/technomancer/spell_objs.dm b/code/game/gamemodes/technomancer/spell_objs.dm index 6d55f80cb4c..2c80ac39fd9 100644 --- a/code/game/gamemodes/technomancer/spell_objs.dm +++ b/code/game/gamemodes/technomancer/spell_objs.dm @@ -188,7 +188,7 @@ if(core.loc != owner || owner.back != core) //Make sure the core's being worn. to_chat(owner, "You need to be wearing a core on your back!") return 0 - if(!technomancers.is_antagonist(owner.mind)) //Now make sure the person using this is the actual antag. + if(!technomancers.is_antagonist(owner.mind) && !core.universal) //Now make sure the person using this is the actual antag. //VOREStation Edit - Universal cores to_chat(owner, "You can't seem to figure out how to make the machine work properly.") return 0 return 1 From e29f700c9189fe75961fe45e7c9282e0b196ed78 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Mon, 13 Apr 2020 22:39:52 -0400 Subject: [PATCH 3/3] Add UC and UC to aro.dmm --- maps/tether/submaps/om_ships/aro.dmm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/maps/tether/submaps/om_ships/aro.dmm b/maps/tether/submaps/om_ships/aro.dmm index 01469910a79..65903eee224 100644 --- a/maps/tether/submaps/om_ships/aro.dmm +++ b/maps/tether/submaps/om_ships/aro.dmm @@ -3501,6 +3501,12 @@ /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/ship/aro/midshipshangars) +"CT" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/technomancer_core/universal, +/obj/item/weapon/technomancer_catalog/universal, +/turf/simulated/floor/tiled/techfloor, +/area/ship/aro/centralarea) "GH" = ( /obj/effect/floor_decal/techfloor/orange{ icon_state = "techfloororange_edges"; @@ -12705,7 +12711,7 @@ ds bv dG dP -Rs +CT cH si ek