Merge pull request #7245 from VOREStation/aro-technomark

2 Technomancer things
This commit is contained in:
Aronai Sieyes
2020-04-13 23:52:51 -04:00
committed by GitHub
5 changed files with 74 additions and 23 deletions
+13 -2
View File
@@ -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
@@ -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.<br>\
The back of the book has <i>'Export Edition'</i> 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()
+18 -2
View File
@@ -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, "<span class='notice'>You [canremove ? "de" : ""]activate the locking mechanism on \the [src].</span>")
to_chat(usr, "<span class='notice'>You [canremove ? "de" : ""]activate the locking mechanism on \the [src].</span>")
//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.<br>\
Under the straps, <i>'Export Edition'</i> 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
@@ -188,7 +188,7 @@
if(core.loc != owner || owner.back != core) //Make sure the core's being worn.
to_chat(owner, "<span class='danger'>You need to be wearing a core on your back!</span>")
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, "<span class='danger'>You can't seem to figure out how to make the machine work properly.</span>")
return 0
return 1
@@ -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, "<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))
to_chat(user, "<span class='notice'>You mark \the [get_turf(user)] under you.</span>")
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, "<span class='notice'>Your mark is moved from its old position to \the [get_turf(user)] under you.</span>")
//They don't have one yet
else
to_chat(user, "<span class='notice'>You mark \the [get_turf(user)] under you.</span>")
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, "<span class='danger'>There's no Mark!</span>")
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.
+7 -1
View File
@@ -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