Technomancer Additions Yet Again

Adds cores and other belongings to the tracking list for Track.
Cores worn or held by nontechnomancers cause instability buildup.
Frost Aura glow is now blue and not red.
Illusions can now do emotes as well as talk.
Illusion talking shouldn't be ruined due to double sanitize.
Phase Shift should work properly now.
Freedom and explosive implants can be bought in the catalog.
This commit is contained in:
Neerti
2016-07-28 01:06:33 -04:00
parent 31ec93f447
commit a0b46a79ee
10 changed files with 62 additions and 19 deletions

View File

@@ -41,7 +41,9 @@ var/datum/antagonist/technomancer/technomancers
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/disposable_teleporter/free(technomancer_mob), slot_r_store)
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_catalog(technomancer_mob), slot_l_store)
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
var/obj/item/weapon/technomancer_core/core = new /obj/item/weapon/technomancer_core(technomancer_mob)
technomancer_mob.equip_to_slot_or_del(core, slot_back)
technomancer_belongings.Add(core) // So it can be Tracked.
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/master(technomancer_mob), slot_head)
@@ -59,7 +61,9 @@ var/datum/antagonist/technomancer/technomancers
technomancer_mob.equip_to_slot_or_del(catalog, slot_l_store)
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
var/obj/item/weapon/technomancer_core/core = new /obj/item/weapon/technomancer_core(technomancer_mob)
technomancer_mob.equip_to_slot_or_del(core, slot_back)
technomancer_belongings.Add(core) // So it can be Tracked.
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/apprentice(technomancer_mob), slot_head)

View File

@@ -247,7 +247,8 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
if(desired_object.cost <= budget)
budget -= desired_object.cost
H << "<span class='notice'>You have just bought \a [desired_object.name].</span>"
new desired_object.obj_path(get_turf(H))
var/obj/O = new desired_object.obj_path(get_turf(H))
technomancer_belongings.Add(O) // Used for the Track spell.
else //Can't afford.
H << "<span class='danger'>You can't afford that!</span>"

View File

@@ -83,6 +83,9 @@
energy_delta = energy - old_energy
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.
wearer.adjust_instability(20)
/obj/item/weapon/technomancer_core/proc/regenerate()
energy = min(max(energy + regen_rate, 0), max_energy)

View File

@@ -0,0 +1,11 @@
/datum/technomancer/consumable/freedom_implant
name = "Freedom Implant"
desc = "A hidden implant which allows one to escape bindings such as handcuffs."
cost = 50
obj_path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
/datum/technomancer/consumable/explosive_implant
name = "Explosive Implant"
desc = "A hidden implant which will explode if it hears a passphrase."
cost = 150
obj_path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive

View File

@@ -205,6 +205,11 @@
var/radius = max(get_dist(H, src), 1)
// People next to the source take a third of the instability. Further distance decreases the amount absorbed.
var/outgoing_instability = (instability / 3) * ( 1 / (radius**2) )
// Energy armor like from the AMI RIG can protect from this.
var/armor = getarmor(null, "energy")
var/armor_factor = abs( (armor - 100) / 100)
outgoing_instability = outgoing_instability * armor_factor
H.adjust_instability(outgoing_instability)
set_light(distance, distance, l_color = "#C26DDE")

View File

@@ -13,7 +13,7 @@
icon_state = "generic"
cast_methods = null
aspect = ASPECT_FROST
glow_color = "#FF6A00"
glow_color = "#00B3FF"
/obj/item/weapon/spell/aura/frost/process()
if(!pay_energy(100))

View File

@@ -46,10 +46,19 @@
/obj/item/weapon/spell/illusion/on_use_cast(mob/user)
if(illusion)
var/what_to_say = input(user, "What do you want \the [illusion] to say?","Illusion Speak") as null|text
what_to_say = sanitize(what_to_say)
if(what_to_say)
illusion.say(what_to_say)
var/choice = alert(user, "Would you like to have \the [illusion] speak, or do an emote?", "Illusion", "Speak","Emote","Cancel")
switch(choice)
if("Cancel")
return
if("Speak")
var/what_to_say = input(user, "What do you want \the [illusion] to say?","Illusion Speak") as null|text
//what_to_say = sanitize(what_to_say) //Sanitize occurs inside say() already.
if(what_to_say)
illusion.say(what_to_say)
if("Emote")
var/what_to_emote = input(user, "What do you want \the [illusion] to do?","Illusion Emote") as null|text
if(what_to_emote)
illusion.emote(what_to_emote)
/obj/item/weapon/spell/illusion/Destroy()
if(illusion)

View File

@@ -33,15 +33,24 @@
AM.forceMove(get_turf(src))
..()
/obj/effect/phase_shift/relaymove(mob/user as mob)
if(user.stat)
return
user << "<span class='notice'>You step out of the rift.</span>"
user.forceMove(get_turf(src))
qdel(src)
/obj/item/weapon/spell/phase_shift/on_use_cast(mob/user)
if(isturf(user.loc)) //Check if we're not already in a rift.
var/obj/effect/phase_shift/PS = new(get_turf(user))
visible_message("<span class='warning'>[user] vanishes into a pink rift!</span>")
user << "<span class='info'>You create an unstable rift, and go through it. Be sure to not stay too long.</span>"
user.forceMove(PS)
else //We're already in a rift, time to get out.
if(istype(loc, /obj/effect/phase_shift))
var/obj/effect/phase_shift/PS = user.loc
qdel(PS) //Ejecting is handled in Destory()
visible_message("<span class='warning'>[user] reappears from the rift as it collapses.</span>")
if(pay_energy(2000))
var/obj/effect/phase_shift/PS = new(get_turf(user))
visible_message("<span class='warning'>[user] vanishes into a pink rift!</span>")
user << "<span class='info'>You create an unstable rift, and go through it. Be sure to not stay too long.</span>"
user.forceMove(PS)
adjust_instability(10)
qdel(src)
else
user << "<span class='warning'>You don't have enough energy to make a rift!</span>"
else //We're already in a rift or something like a closet.
user << "<span class='warning'>Making a rift here would probably be a bad idea.</span>"

View File

@@ -58,9 +58,9 @@ var/list/technomancer_belongings = list()
icon_state = "track_unknown"
else
set_dir(get_dir(src,tracked))
set_dir(get_dir(src,get_turf(tracked)))
switch(get_dist(src,tracked))
switch(get_dist(src,get_turf(tracked)))
if(0)
icon_state = "track_direct"
if(1 to 8)

View File

@@ -421,6 +421,7 @@
#include "code\game\gamemodes\technomancer\devices\disposable_teleporter.dm"
#include "code\game\gamemodes\technomancer\devices\gloves_of_regen.dm"
#include "code\game\gamemodes\technomancer\devices\hypos.dm"
#include "code\game\gamemodes\technomancer\devices\implants.dm"
#include "code\game\gamemodes\technomancer\devices\shield_armor.dm"
#include "code\game\gamemodes\technomancer\devices\tesla_armor.dm"
#include "code\game\gamemodes\technomancer\spells\abjuration.dm"