Maybe Perhaps Last Major Technomancer PR

Adds ability to sort the spells section of the catalog into categories.  The categories available are 'All', 'Offensive', 'Defensive', 'Utility', and 'Support'.
Removes preset section on catalog as it was unused.
Projectile spells now have a sound when fired.
Haste lasts five seconds instead of three.
Repel Missiles lasts for five minutes instead of two.
All healing spells work five times as fast, healing in five seconds instead of twenty five seconds.  The amount of instability and healing done has been multiplied to remain consistent.
Passwall can now be used on more than just walls, if there's something dense on the same tile.
Force Missile is now 25% cheaper to cast, and has a cooldown of .5 seconds instead of one second, and does 5 more damage.
Beam's damage is increased by 10, and energy cost decreased by 25%.
Lightning's warm-up time is now one second instead of two.
Overload now costs 10% of total energy instead of 15%, and damage scaled with 4% of their current energy reserves, and 5% with the Scepter, instead of 3%/4%.  Additionally, instability per shot is lowered to 12 from 15.
Track now costs 25 points instead of 30 in the catalog, because roundness.
Fire Aura should look more impressive without a Scepter.
Fixes bug where shooting Lightning made you motionless for twenty seconds.
This commit is contained in:
Neerti
2016-08-19 19:21:55 -04:00
parent 6085e1a2d4
commit 515ba0677a
53 changed files with 185 additions and 136 deletions

View File

@@ -1,8 +1,13 @@
#define ALL_SPELLS "All"
#define OFFENSIVE_SPELLS "Offensive"
#define DEFENSIVE_SPELLS "Defensive"
#define UTILITY_SPELLS "Utility"
#define SUPPORT_SPELLS "Support"
var/list/all_technomancer_spells = typesof(/datum/technomancer/spell) - /datum/technomancer/spell var/list/all_technomancer_spells = typesof(/datum/technomancer/spell) - /datum/technomancer/spell
var/list/all_technomancer_equipment = typesof(/datum/technomancer/equipment) - /datum/technomancer/equipment var/list/all_technomancer_equipment = typesof(/datum/technomancer/equipment) - /datum/technomancer/equipment
var/list/all_technomancer_consumables = typesof(/datum/technomancer/consumable) - /datum/technomancer/consumable var/list/all_technomancer_consumables = typesof(/datum/technomancer/consumable) - /datum/technomancer/consumable
var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - /datum/technomancer/assistance var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - /datum/technomancer/assistance
var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datum/technomancer/presets
/datum/technomancer /datum/technomancer
var/name = "technomancer thing" var/name = "technomancer thing"
@@ -13,6 +18,9 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
var/obj_path = null var/obj_path = null
var/ability_icon_state = null var/ability_icon_state = null
/datum/technomancer/spell
var/category = ALL_SPELLS
/obj/item/weapon/technomancer_catalog /obj/item/weapon/technomancer_catalog
name = "catalog" name = "catalog"
desc = "A \"book\" featuring a holographic display, metal cover, and miniaturized teleportation device, allowing the user to \ desc = "A \"book\" featuring a holographic display, metal cover, and miniaturized teleportation device, allowing the user to \
@@ -27,8 +35,8 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
var/list/equipment_instances = list() var/list/equipment_instances = list()
var/list/consumable_instances = list() var/list/consumable_instances = list()
var/list/assistance_instances = list() var/list/assistance_instances = list()
var/list/preset_instances = list()
var/tab = 0 var/tab = 0
var/spell_tab = ALL_SPELLS
var/show_scepter_text = 0 var/show_scepter_text = 0
/obj/item/weapon/technomancer_catalog/apprentice /obj/item/weapon/technomancer_catalog/apprentice
@@ -72,15 +80,23 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
if(!assistance_instances.len) if(!assistance_instances.len)
for(var/A in all_technomancer_assistance) for(var/A in all_technomancer_assistance)
assistance_instances += new A() assistance_instances += new A()
if(!preset_instances.len)
for(var/P in all_technomancer_presets)
preset_instances += new P()
/obj/item/weapon/technomancer_catalog/apprentice/set_up() /obj/item/weapon/technomancer_catalog/apprentice/set_up()
..() ..()
for(var/datum/technomancer/assistance/apprentice/A in assistance_instances) for(var/datum/technomancer/assistance/apprentice/A in assistance_instances)
assistance_instances.Remove(A) assistance_instances.Remove(A)
// Proc: show_categories()
// Parameters: 1 (category - the category link to display)
// Description: Shows an href link to go to a spell subcategory if the category is not already selected, otherwise is bold, to reduce
// code duplicating.
/obj/item/weapon/technomancer_catalog/proc/show_categories(var/category)
if(category)
if(spell_tab != category)
return "<a href='byond://?src=\ref[src];spell_category=[category]'>[category]</a>"
else
return "<b>[category]</b>"
// Proc: attack_self() // Proc: attack_self()
// Parameters: 1 (user - the mob clicking on the catelog) // Parameters: 1 (user - the mob clicking on the catelog)
// Description: Shows an HTML window, to buy equipment and spells, if the user is the legitimate owner. Otherwise it cannot be used. // Description: Shows an HTML window, to buy equipment and spells, if the user is the legitimate owner. Otherwise it cannot be used.
@@ -100,13 +116,17 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
dat += "<align='center'><b>Functions</b> | " dat += "<align='center'><b>Functions</b> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Presets</a></align><br>"
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>" dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
dat += "<a href='byond://?src=\ref[src];refund_functions=1'>Refund Functions</a><br><br>" dat += "<a href='byond://?src=\ref[src];refund_functions=1'>Refund Functions</a><br><br>"
for(var/datum/technomancer/spell in spell_instances)
dat += "[show_categories(ALL_SPELLS)] | [show_categories(OFFENSIVE_SPELLS)] | [show_categories(DEFENSIVE_SPELLS)] | \
[show_categories(UTILITY_SPELLS)] | [show_categories(SUPPORT_SPELLS)]<br>"
for(var/datum/technomancer/spell/spell in spell_instances)
if(spell.hidden) if(spell.hidden)
continue continue
if(spell_tab != ALL_SPELLS && spell.category != spell_tab)
continue
dat += "<b>[spell.name]</b><br>" dat += "<b>[spell.name]</b><br>"
dat += "<i>[spell.desc]</i><br>" dat += "<i>[spell.desc]</i><br>"
if(show_scepter_text) if(show_scepter_text)
@@ -123,8 +143,7 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | " dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
dat += "<b>Equipment</b> | " dat += "<b>Equipment</b> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Presets</a></align><br>"
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>" dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
for(var/datum/technomancer/equipment/E in equipment_instances) for(var/datum/technomancer/equipment/E in equipment_instances)
dat += "<b>[E.name]</b><br>" dat += "<b>[E.name]</b><br>"
@@ -141,8 +160,7 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | " dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
dat += "<b>Consumables</b> | " dat += "<b>Consumables</b> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Presets</a></align><br>"
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>" dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
for(var/datum/technomancer/consumable/C in consumable_instances) for(var/datum/technomancer/consumable/C in consumable_instances)
dat += "<b>[C.name]</b><br>" dat += "<b>[C.name]</b><br>"
@@ -159,8 +177,7 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | " dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | " dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
dat += "<b>Assistance</b> | " dat += "<b>Assistance</b></align><br>"
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Presets</a></align><br>"
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>" dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
for(var/datum/technomancer/assistance/A in assistance_instances) for(var/datum/technomancer/assistance/A in assistance_instances)
dat += "<b>[A.name]</b><br>" dat += "<b>[A.name]</b><br>"
@@ -171,24 +188,6 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
dat += "<font color='red'><b>Cannot afford!</b></font><br><br>" dat += "<font color='red'><b>Cannot afford!</b></font><br><br>"
user << browse(dat, "window=radio") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")
if(4) //Presets
var/dat = ""
user.set_machine(src)
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
dat += "<b>Presets</b></align><br>"
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
for(var/datum/technomancer/presets/P in preset_instances)
dat += "<b>[P.name]</b><br>"
dat += "<i>[P.desc]</i><br>"
if(P.cost <= budget)
dat += "<a href='byond://?src=\ref[src];spell_choice=[P.name]'>Purchase</a> ([P.cost])<br><br>"
else
dat += "<font color='red'><b>Cannot afford!</b></font><br><br>"
user << browse(dat, "window=radio")
onclose(user, "radio")
// Proc: Topic() // Proc: Topic()
// Parameters: 2 (href - don't know, href_list - the choice that the person using the interface above clicked on.) // Parameters: 2 (href - don't know, href_list - the choice that the person using the interface above clicked on.)
@@ -210,6 +209,8 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
H.set_machine(src) H.set_machine(src)
if(href_list["tab_choice"]) if(href_list["tab_choice"])
tab = text2num(href_list["tab_choice"]) tab = text2num(href_list["tab_choice"])
if(href_list["spell_category"])
spell_tab = href_list["spell_category"]
if(href_list["spell_choice"]) if(href_list["spell_choice"])
var/datum/technomancer/new_spell = null var/datum/technomancer/new_spell = null
//Locate the spell. //Locate the spell.
@@ -269,4 +270,4 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
budget += spell_datum.cost budget += spell_datum.cost
core.remove_spell(spell) core.remove_spell(spell)
break break
attack_self(H) attack_self(H)

View File

@@ -212,4 +212,4 @@
outgoing_instability = outgoing_instability * armor_factor outgoing_instability = outgoing_instability * armor_factor
H.adjust_instability(outgoing_instability) H.adjust_instability(outgoing_instability)
set_light(distance, distance, l_color = "#C26DDE") set_light(distance, distance * 2, l_color = "#C26DDE")

View File

@@ -4,6 +4,7 @@
far away from the caster. Failing that, it may inhibit those entities in some form." far away from the caster. Failing that, it may inhibit those entities in some form."
cost = 40 cost = 40
obj_path = /obj/item/weapon/spell/abjuration obj_path = /obj/item/weapon/spell/abjuration
category = UTILITY_SPELLS
/obj/item/weapon/spell/abjuration /obj/item/weapon/spell/abjuration
name = "abjuration" name = "abjuration"

View File

@@ -4,6 +4,7 @@
will grab them automatically." will grab them automatically."
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/apportation obj_path = /obj/item/weapon/spell/apportation
category = UTILITY_SPELLS
/obj/item/weapon/spell/apportation /obj/item/weapon/spell/apportation
name = "apportation" name = "apportation"

View File

@@ -6,6 +6,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/audible_deception obj_path = /obj/item/weapon/spell/audible_deception
ability_icon_state = "tech_audibledeception" ability_icon_state = "tech_audibledeception"
category = UTILITY_SPELLS
/obj/item/weapon/spell/audible_deception /obj/item/weapon/spell/audible_deception
name = "audible deception" name = "audible deception"

View File

@@ -4,6 +4,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/aura/biomed obj_path = /obj/item/weapon/spell/aura/biomed
ability_icon_state = "tech_biomedaura" ability_icon_state = "tech_biomedaura"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/aura/biomed /obj/item/weapon/spell/aura/biomed
name = "restoration aura" name = "restoration aura"

View File

@@ -7,6 +7,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/aura/fire obj_path = /obj/item/weapon/spell/aura/fire
ability_icon_state = "tech_fireaura" ability_icon_state = "tech_fireaura"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/aura/fire /obj/item/weapon/spell/aura/fire
name = "Fire Storm" name = "Fire Storm"
@@ -20,7 +21,6 @@
qdel(src) qdel(src)
var/list/nearby_things = range(4,owner) var/list/nearby_things = range(4,owner)
var/fire_prob = 10
var/temp_change = 25 var/temp_change = 25
var/temp_cap = 500 var/temp_cap = 500
var/fire_power = 2 var/fire_power = 2
@@ -28,7 +28,6 @@
if(check_for_scepter()) if(check_for_scepter())
temp_change = 50 temp_change = 50
temp_cap = 700 temp_cap = 700
fire_prob = 25
fire_power = 4 fire_power = 4
for(var/mob/living/carbon/human/H in nearby_things) for(var/mob/living/carbon/human/H in nearby_things)
if(is_ally(H)) if(is_ally(H))
@@ -41,16 +40,11 @@
turf_check: turf_check:
for(var/turf/simulated/T in nearby_things) for(var/turf/simulated/T in nearby_things)
if(prob(fire_prob)) if(prob(30))
for(var/mob/living/carbon/human/H in T) for(var/mob/living/carbon/human/H in T)
if(is_ally(H)) if(is_ally(H))
continue turf_check continue turf_check
T.hotspot_expose(1000, 50, 1) T.hotspot_expose(1000, 50, 1)
T.create_fire(fire_power) T.create_fire(fire_power)
// //We use hotspot_expose() to allow firesuits to protect from this aura.
// var/turf/location = get_turf(H)
// location.hotspot_expose(1000, 50, 1)
owner.adjust_instability(1) owner.adjust_instability(1)

View File

@@ -6,6 +6,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/aura/frost obj_path = /obj/item/weapon/spell/aura/frost
ability_icon_state = "tech_frostaura" ability_icon_state = "tech_frostaura"
category = DEFENSIVE_SPELLS // Scepter-less frost aura is nonlethal.
/obj/item/weapon/spell/aura/frost /obj/item/weapon/spell/aura/frost
name = "chilling aura" name = "chilling aura"
@@ -35,8 +36,4 @@
var/cold_factor = abs(protection - 1) var/cold_factor = abs(protection - 1)
H.bodytemperature = max( (H.bodytemperature - temp_change) * cold_factor, temp_cap) H.bodytemperature = max( (H.bodytemperature - temp_change) * cold_factor, temp_cap)
// //We use hotspot_expose() to allow firesuits to protect from this aura.
// var/turf/location = get_turf(H)
// location.hotspot_expose(1, 50, 1)
owner.adjust_instability(1) owner.adjust_instability(1)

View File

@@ -4,6 +4,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/aura/shock obj_path = /obj/item/weapon/spell/aura/shock
ability_icon_state = "tech_shockaura" ability_icon_state = "tech_shockaura"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/aura/shock /obj/item/weapon/spell/aura/shock
name = "electric aura" name = "electric aura"

View File

@@ -5,6 +5,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/aura/unstable obj_path = /obj/item/weapon/spell/aura/unstable
ability_icon_state = "tech_unstableaura" ability_icon_state = "tech_unstableaura"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/aura/unstable /obj/item/weapon/spell/aura/unstable
name = "degen aura" name = "degen aura"

View File

@@ -5,6 +5,7 @@
enhancement_desc = "Blink distance is increased greatly." enhancement_desc = "Blink distance is increased greatly."
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/blink obj_path = /obj/item/weapon/spell/blink
category = UTILITY_SPELLS
/obj/item/weapon/spell/blink /obj/item/weapon/spell/blink
name = "blink" name = "blink"

View File

@@ -4,6 +4,7 @@
useful to trick someone into believing you're casting a different spell, or perhaps just for fun." useful to trick someone into believing you're casting a different spell, or perhaps just for fun."
cost = 25 cost = 25
obj_path = /obj/item/weapon/spell/chroma obj_path = /obj/item/weapon/spell/chroma
category = UTILITY_SPELLS
/obj/item/weapon/spell/chroma /obj/item/weapon/spell/chroma
name = "chroma" name = "chroma"

View File

@@ -5,6 +5,7 @@
ability_icon_state = "tech_condensation" ability_icon_state = "tech_condensation"
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/condensation obj_path = /obj/item/weapon/spell/condensation
category = UTILITY_SPELLS
/obj/item/weapon/spell/condensation /obj/item/weapon/spell/condensation
name = "condensation" name = "condensation"

View File

@@ -7,6 +7,7 @@
around the entity is merely a hologram used to allow the user to know if the creature is safe or not." around the entity is merely a hologram used to allow the user to know if the creature is safe or not."
cost = 200 cost = 200
obj_path = /obj/item/weapon/spell/control obj_path = /obj/item/weapon/spell/control
category = UTILITY_SPELLS
/mob/living/carbon/human/proc/technomancer_control() /mob/living/carbon/human/proc/technomancer_control()
place_spell_in_hand(/obj/item/weapon/spell/control) place_spell_in_hand(/obj/item/weapon/spell/control)

View File

@@ -6,6 +6,7 @@
cost = 25 cost = 25
obj_path = /obj/item/weapon/spell/dispel obj_path = /obj/item/weapon/spell/dispel
ability_icon_state = "tech_dispel" ability_icon_state = "tech_dispel"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/dispel /obj/item/weapon/spell/dispel
name = "dispel" name = "dispel"

View File

@@ -7,6 +7,7 @@
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/energy_siphon obj_path = /obj/item/weapon/spell/energy_siphon
ability_icon_state = "tech_energysiphon" ability_icon_state = "tech_energysiphon"
category = UTILITY_SPELLS
/obj/item/weapon/spell/energy_siphon /obj/item/weapon/spell/energy_siphon
name = "energy siphon" name = "energy siphon"

View File

@@ -4,6 +4,7 @@
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/flame_tongue obj_path = /obj/item/weapon/spell/flame_tongue
ability_icon_state = "tech_flametongue" ability_icon_state = "tech_flametongue"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/flame_tongue /obj/item/weapon/spell/flame_tongue
name = "flame tongue" name = "flame tongue"

View File

@@ -4,6 +4,7 @@
ability_icon_state = "tech_gambit" ability_icon_state = "tech_gambit"
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/gambit obj_path = /obj/item/weapon/spell/gambit
category = UTILITY_SPELLS
/var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/weapon/spell) - list( /var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/weapon/spell) - list(
/obj/item/weapon/spell, /obj/item/weapon/spell,

View File

@@ -5,6 +5,7 @@
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/illusion obj_path = /obj/item/weapon/spell/illusion
ability_icon_state = "tech_illusion" ability_icon_state = "tech_illusion"
category = UTILITY_SPELLS
/obj/item/weapon/spell/illusion /obj/item/weapon/spell/illusion
name = "illusion" name = "illusion"

View File

@@ -5,6 +5,7 @@
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/insert/corona obj_path = /obj/item/weapon/spell/insert/corona
ability_icon_state = "tech_corona" ability_icon_state = "tech_corona"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/corona /obj/item/weapon/spell/insert/corona
name = "corona" name = "corona"

View File

@@ -1,10 +1,11 @@
/datum/technomancer/spell/haste /datum/technomancer/spell/haste
name = "Haste" name = "Haste"
desc = "Allows the target to run at speeds that should not be possible for an ordinary being. For three seconds, the target \ desc = "Allows the target to run at speeds that should not be possible for an ordinary being. For five seconds, the target \
runs extremly fast, and cannot be slowed by any means." runs extremly fast, and cannot be slowed by any means."
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/insert/haste obj_path = /obj/item/weapon/spell/insert/haste
ability_icon_state = "tech_haste" ability_icon_state = "tech_haste"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/haste /obj/item/weapon/spell/insert/haste
name = "haste" name = "haste"
@@ -22,7 +23,7 @@
L.force_max_speed = 1 L.force_max_speed = 1
L << "<span class='notice'>You suddenly find it much easier to move.</span>" L << "<span class='notice'>You suddenly find it much easier to move.</span>"
L.adjust_instability(10) L.adjust_instability(10)
spawn(3 SECONDS) spawn(5 SECONDS)
if(src) if(src)
on_expire() on_expire()

View File

@@ -5,6 +5,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_burns obj_path = /obj/item/weapon/spell/insert/mend_burns
ability_icon_state = "tech_mendburns" ability_icon_state = "tech_mendburns"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_burns /obj/item/weapon/spell/insert/mend_burns
name = "mend burns" name = "mend burns"
@@ -19,10 +20,10 @@
spawn(1) spawn(1)
if(ishuman(host)) if(ishuman(host))
var/mob/living/carbon/human/H = host var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
H.adjustFireLoss(-1) H.adjustFireLoss(-5)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(10)
on_expire() on_expire()

View File

@@ -4,6 +4,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_metal obj_path = /obj/item/weapon/spell/insert/mend_metal
ability_icon_state = "tech_mendwounds" ability_icon_state = "tech_mendwounds"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_metal /obj/item/weapon/spell/insert/mend_metal
name = "mend metal" name = "mend metal"
@@ -18,14 +19,14 @@
spawn(1) spawn(1)
if(ishuman(host)) if(ishuman(host))
var/mob/living/carbon/human/H = host var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
for(var/obj/item/organ/external/O in H.organs) for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only. if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue continue
O.heal_damage(1, 0, internal = 1, robo_repair = 1) O.heal_damage(5, 0, internal = 1, robo_repair = 1)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(1 SECOND)
on_expire() on_expire()

View File

@@ -5,6 +5,7 @@
cost = 75 cost = 75
obj_path = /obj/item/weapon/spell/insert/mend_organs obj_path = /obj/item/weapon/spell/insert/mend_organs
ability_icon_state = "tech_mendwounds" ability_icon_state = "tech_mendwounds"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_organs /obj/item/weapon/spell/insert/mend_organs
name = "mend organs" name = "mend organs"
@@ -19,13 +20,13 @@
spawn(1) spawn(1)
if(ishuman(host)) if(ishuman(host))
var/mob/living/carbon/human/H = host var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
for(var/obj/item/organ/O in H.internal_organs) for(var/obj/item/organ/O in H.internal_organs)
if(O.damage > 0) if(O.damage > 0)
O.damage = max(O.damage - 0.2, 0) O.damage = max(O.damage - 1, 0)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(1 SECOND)
on_expire() on_expire()

View File

@@ -5,6 +5,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_wires obj_path = /obj/item/weapon/spell/insert/mend_wires
ability_icon_state = "tech_mendwounds" ability_icon_state = "tech_mendwounds"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_wires /obj/item/weapon/spell/insert/mend_wires
name = "mend wires" name = "mend wires"
@@ -19,14 +20,14 @@
spawn(1) spawn(1)
if(ishuman(host)) if(ishuman(host))
var/mob/living/carbon/human/H = host var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
for(var/obj/item/organ/external/O in H.organs) for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only. if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue continue
O.heal_damage(0, 1, internal = 1, robo_repair = 1) O.heal_damage(0, 5, internal = 1, robo_repair = 1)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(10)
on_expire() on_expire()

View File

@@ -5,6 +5,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_wounds obj_path = /obj/item/weapon/spell/insert/mend_wounds
ability_icon_state = "tech_mendwounds" ability_icon_state = "tech_mendwounds"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_wounds /obj/item/weapon/spell/insert/mend_wounds
name = "mend wounds" name = "mend wounds"
@@ -19,10 +20,10 @@
spawn(1) spawn(1)
if(ishuman(host)) if(ishuman(host))
var/mob/living/carbon/human/H = host var/mob/living/carbon/human/H = host
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
H.adjustBruteLoss(-1) H.adjustBruteLoss(-5)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(1 SECOND)
on_expire() on_expire()

View File

@@ -1,10 +1,11 @@
/datum/technomancer/spell/purify /datum/technomancer/spell/purify
name = "Purify" name = "Purify"
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, and such. \ desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such. \
Instability is split between the target and technomancer, if seperate." Instability is split between the target and technomancer, if seperate."
cost = 25 cost = 25
obj_path = /obj/item/weapon/spell/insert/purify obj_path = /obj/item/weapon/spell/insert/purify
ability_icon_state = "tech_purify" ability_icon_state = "tech_purify"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/purify /obj/item/weapon/spell/insert/purify
name = "purify" name = "purify"
@@ -23,12 +24,12 @@
H.disabilities = 0 H.disabilities = 0
// for(var/datum/disease/D in H.viruses) // for(var/datum/disease/D in H.viruses)
// D.cure() // D.cure()
for(var/i = 0, i<25,i++) for(var/i = 0, i<5,i++)
if(H) if(H)
H.adjustToxLoss(-1) H.adjustToxLoss(-5)
H.adjustCloneLoss(-1) H.adjustCloneLoss(-5)
H.radiation = max(host.radiation - 2, 0) H.radiation = max(host.radiation - 10, 0)
H.adjust_instability(0.5) H.adjust_instability(2.5)
origin.adjust_instability(0.5) origin.adjust_instability(2.5)
sleep(10) sleep(1 SECOND)
on_expire() on_expire()

View File

@@ -1,10 +1,11 @@
/datum/technomancer/spell/repel_missiles /datum/technomancer/spell/repel_missiles
name = "Repel Missiles" name = "Repel Missiles"
desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 30% less likely \ desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 30% less likely \
to hit you. The field lasts for two minutes and can be granted to yourself or an ally." to hit you. The field lasts for five minutes and can be granted to yourself or an ally."
cost = 60 cost = 60
obj_path = /obj/item/weapon/spell/insert/repel_missiles obj_path = /obj/item/weapon/spell/insert/repel_missiles
ability_icon_state = "tech_repelmissiles" ability_icon_state = "tech_repelmissiles"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/repel_missiles /obj/item/weapon/spell/insert/repel_missiles
name = "repel missiles" name = "repel missiles"
@@ -21,7 +22,7 @@
var/mob/living/L = host var/mob/living/L = host
L.evasion += 2 L.evasion += 2
L << "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>" L << "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>"
spawn(2 MINUTES) spawn(5 MINUTES)
if(src) if(src)
on_expire() on_expire()

View File

@@ -5,6 +5,7 @@
cost = 120 cost = 120
obj_path = /obj/item/weapon/spell/instability_tap obj_path = /obj/item/weapon/spell/instability_tap
ability_icon_state = "tech_instabilitytap" ability_icon_state = "tech_instabilitytap"
category = UTILITY_SPELLS
/obj/item/weapon/spell/instability_tap /obj/item/weapon/spell/instability_tap
name = "instability tap" name = "instability tap"

View File

@@ -6,6 +6,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/mark obj_path = /obj/item/weapon/spell/mark
ability_icon_state = "tech_mark" ability_icon_state = "tech_mark"
category = UTILITY_SPELLS
//The object to teleport to when Recall is used. //The object to teleport to when Recall is used.
/obj/effect/mark_spell /obj/effect/mark_spell
@@ -52,6 +53,7 @@
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/recall obj_path = /obj/item/weapon/spell/recall
ability_icon_state = "tech_recall" ability_icon_state = "tech_recall"
category = UTILITY_SPELLS
/obj/item/weapon/spell/recall /obj/item/weapon/spell/recall
name = "recall" name = "recall"

View File

@@ -5,6 +5,7 @@
cost = 70 cost = 70
obj_path = /obj/item/weapon/spell/oxygenate obj_path = /obj/item/weapon/spell/oxygenate
ability_icon_state = "oxygenate" ability_icon_state = "oxygenate"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/oxygenate /obj/item/weapon/spell/oxygenate
name = "oxygenate" name = "oxygenate"

View File

@@ -6,6 +6,7 @@
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/passwall obj_path = /obj/item/weapon/spell/passwall
ability_icon_state = "tech_passwall" ability_icon_state = "tech_passwall"
category = UTILITY_SPELLS
/obj/item/weapon/spell/passwall /obj/item/weapon/spell/passwall
name = "passwall" name = "passwall"
@@ -21,53 +22,55 @@
if(!allowed_to_teleport()) if(!allowed_to_teleport())
user << "<span class='warning'>You can't teleport here!</span>" user << "<span class='warning'>You can't teleport here!</span>"
return 0 return 0
if(isturf(hit_atom)) // if(isturf(hit_atom))
var/turf/T = hit_atom //Turf we touched.
var/turf/our_turf = get_turf(user) //Where we are. var/turf/T = get_turf(hit_atom) //Turf we touched.
if(!T.density) var/turf/our_turf = get_turf(user) //Where we are.
user << "<span class='warning'>Perhaps you should try using passWALL on a wall.</span>" if(!T.density)
if(!T.check_density())
user << "<span class='warning'>Perhaps you should try using passWALL on a wall, or other solid object.</span>"
return 0 return 0
var/direction = get_dir(our_turf, T) var/direction = get_dir(our_turf, T)
var/total_cost = 0 var/total_cost = 0
var/turf/checked_turf = T //Turf we're currently checking for density in the loop below. var/turf/checked_turf = T //Turf we're currently checking for density in the loop below.
var/turf/found_turf = null //Our destination, if one is found. var/turf/found_turf = null //Our destination, if one is found.
var/i = maximum_distance var/i = maximum_distance
visible_message("<span class='info'>[user] rests a hand on \the [T].</span>") visible_message("<span class='info'>[user] rests a hand on \the [hit_atom].</span>")
busy = 1 busy = 1
var/datum/effect/effect/system/spark_spread/spark_system = PoolOrNew(/datum/effect/effect/system/spark_spread) var/datum/effect/effect/system/spark_spread/spark_system = PoolOrNew(/datum/effect/effect/system/spark_spread)
spark_system.set_up(5, 0, our_turf) spark_system.set_up(5, 0, our_turf)
while(i) while(i)
checked_turf = get_step(checked_turf, direction) //Advance in the given direction checked_turf = get_step(checked_turf, direction) //Advance in the given direction
total_cost += check_for_scepter() ? 400 : 800 //Phasing through matter's expensive, you know. total_cost += check_for_scepter() ? 400 : 800 //Phasing through matter's expensive, you know.
i-- i--
if(!checked_turf.density) //If we found a destination (a non-dense turf), then we can stop. if(!checked_turf.density) //If we found a destination (a non-dense turf), then we can stop.
var/dense_objs_on_turf = 0 var/dense_objs_on_turf = 0
for(var/atom/movable/stuff in checked_turf.contents) //Make sure nothing dense is where we want to go, like an airlock or window. for(var/atom/movable/stuff in checked_turf.contents) //Make sure nothing dense is where we want to go, like an airlock or window.
if(stuff.density) if(stuff.density)
dense_objs_on_turf = 1 dense_objs_on_turf = 1
if(!dense_objs_on_turf) //If we found a non-dense turf with nothing dense on it, then that's our destination. if(!dense_objs_on_turf) //If we found a non-dense turf with nothing dense on it, then that's our destination.
found_turf = checked_turf found_turf = checked_turf
break break
sleep(10) sleep(10)
if(found_turf) if(found_turf)
if(user.loc != our_turf) if(user.loc != our_turf)
user << "<span class='warning'>You need to stand still in order to phase through the wall.</span>" user << "<span class='warning'>You need to stand still in order to phase through \the [hit_atom].</span>"
return 0 return 0
if(pay_energy(total_cost) && !user.incapacitated() ) if(pay_energy(total_cost) && !user.incapacitated() )
visible_message("<span class='warning'>[user] appears to phase through \the [T]!</span>") visible_message("<span class='warning'>[user] appears to phase through \the [hit_atom]!</span>")
user << "<span class='info'>You find a destination on the other side of \the [T], and phase through it.</span>" user << "<span class='info'>You find a destination on the other side of \the [hit_atom], and phase through it.</span>"
spark_system.start() spark_system.start()
user.forceMove(found_turf) user.forceMove(found_turf)
qdel(src) qdel(src)
return 1 return 1
else
user << "<span class='warning'>You don't have enough energy to phase through these walls!</span>"
busy = 0
else else
user << "<span class='info'>You weren't able to find an open space to go to.</span>" user << "<span class='warning'>You don't have enough energy to phase through these walls!</span>"
busy = 0 busy = 0
else
user << "<span class='info'>You weren't able to find an open space to go to.</span>"
busy = 0

View File

@@ -4,6 +4,7 @@
draining your powercell." draining your powercell."
cost = 80 cost = 80
obj_path = /obj/item/weapon/spell/phase_shift obj_path = /obj/item/weapon/spell/phase_shift
category = DEFENSIVE_SPELLS
/obj/item/weapon/spell/phase_shift /obj/item/weapon/spell/phase_shift
name = "phase shift" name = "phase shift"

View File

@@ -4,6 +4,7 @@
cost = 150 cost = 150
ability_icon_state = "tech_beam" ability_icon_state = "tech_beam"
obj_path = /obj/item/weapon/spell/projectile/beam obj_path = /obj/item/weapon/spell/projectile/beam
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/beam /obj/item/weapon/spell/projectile/beam
name = "beam" name = "beam"
@@ -12,12 +13,13 @@
cast_methods = CAST_RANGED cast_methods = CAST_RANGED
aspect = ASPECT_LIGHT aspect = ASPECT_LIGHT
spell_projectile = /obj/item/projectile/beam/blue spell_projectile = /obj/item/projectile/beam/blue
energy_cost_per_shot = 500 energy_cost_per_shot = 400
instability_per_shot = 3 instability_per_shot = 3
cooldown = 10 cooldown = 10
fire_sound = 'sound/weapons/Laser.ogg'
/obj/item/projectile/beam/blue /obj/item/projectile/beam/blue
damage = 20 damage = 30
muzzle_type = /obj/effect/projectile/laser_blue/muzzle muzzle_type = /obj/effect/projectile/laser_blue/muzzle
tracer_type = /obj/effect/projectile/laser_blue/tracer tracer_type = /obj/effect/projectile/laser_blue/tracer

View File

@@ -5,6 +5,7 @@
strike up to four targets, including yourself if conditions allow it to occur." strike up to four targets, including yourself if conditions allow it to occur."
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/projectile/chain_lightning obj_path = /obj/item/weapon/spell/projectile/chain_lightning
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/chain_lightning /obj/item/weapon/spell/projectile/chain_lightning
name = "chain lightning" name = "chain lightning"
@@ -16,6 +17,7 @@
energy_cost_per_shot = 3000 energy_cost_per_shot = 3000
instability_per_shot = 10 instability_per_shot = 10
cooldown = 20 cooldown = 20
fire_sound = 'sound/weapons/gauss_shoot.ogg'
/obj/item/projectile/beam/chain_lightning /obj/item/projectile/beam/chain_lightning
name = "lightning" name = "lightning"

View File

@@ -4,6 +4,7 @@
that armor designed to protect from blunt force will mitigate this function as well." that armor designed to protect from blunt force will mitigate this function as well."
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/projectile/force_missile obj_path = /obj/item/weapon/spell/projectile/force_missile
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/force_missile /obj/item/weapon/spell/projectile/force_missile
name = "force missile" name = "force missile"
@@ -12,13 +13,14 @@
cast_methods = CAST_RANGED cast_methods = CAST_RANGED
aspect = ASPECT_FORCE aspect = ASPECT_FORCE
spell_projectile = /obj/item/projectile/force_missile spell_projectile = /obj/item/projectile/force_missile
energy_cost_per_shot = 400 energy_cost_per_shot = 300
instability_per_shot = 2 instability_per_shot = 2
cooldown = 10 cooldown = 5
fire_sound = 'sound/weapons/wave.ogg'
/obj/item/projectile/force_missile /obj/item/projectile/force_missile
name = "force missile" name = "force missile"
icon_state = "force_missile" icon_state = "force_missile"
damage = 20 damage = 25
damage_type = BRUTE damage_type = BRUTE
check_armour = "melee" check_armour = "melee"

View File

@@ -5,6 +5,7 @@
strike." strike."
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/projectile/lightning obj_path = /obj/item/weapon/spell/projectile/lightning
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/lightning /obj/item/weapon/spell/projectile/lightning
name = "lightning strike" name = "lightning strike"
@@ -16,7 +17,8 @@
energy_cost_per_shot = 2500 energy_cost_per_shot = 2500
instability_per_shot = 10 instability_per_shot = 10
cooldown = 20 cooldown = 20
pre_shot_delay = 20 pre_shot_delay = 10
fire_sound = 'sound/weapons/gauss_shoot.ogg'
/obj/item/projectile/beam/lightning /obj/item/projectile/beam/lightning
name = "lightning" name = "lightning"

View File

@@ -4,6 +4,7 @@
This energy pierces all known armor." This energy pierces all known armor."
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/projectile/overload obj_path = /obj/item/weapon/spell/projectile/overload
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/overload /obj/item/weapon/spell/projectile/overload
name = "overload" name = "overload"
@@ -13,9 +14,10 @@
aspect = ASPECT_UNSTABLE aspect = ASPECT_UNSTABLE
spell_projectile = /obj/item/projectile/overload spell_projectile = /obj/item/projectile/overload
energy_cost_per_shot = 0 // Handled later energy_cost_per_shot = 0 // Handled later
instability_per_shot = 15 instability_per_shot = 12
cooldown = 10 cooldown = 10
pre_shot_delay = 4 pre_shot_delay = 4
fire_sound = 'sound/effects/supermatter.ogg'
/obj/item/projectile/overload /obj/item/projectile/overload
name = "overloaded bolt" name = "overloaded bolt"
@@ -25,15 +27,15 @@
armor_penetration = 100 armor_penetration = 100
/obj/item/weapon/spell/projectile/overload/on_ranged_cast(atom/hit_atom, mob/living/user) /obj/item/weapon/spell/projectile/overload/on_ranged_cast(atom/hit_atom, mob/living/user)
energy_cost_per_shot = round(core.max_energy * 0.15) energy_cost_per_shot = round(core.max_energy * 0.10)
var/energy_before_firing = core.energy var/energy_before_firing = core.energy
if(set_up(hit_atom, user)) if(set_up(hit_atom, user))
var/obj/item/projectile/overload/P = new spell_projectile(get_turf(user)) var/obj/item/projectile/overload/P = new spell_projectile(get_turf(user))
P.launch(hit_atom) P.launch(hit_atom)
if(check_for_scepter()) if(check_for_scepter())
P.damage = round(energy_before_firing * 0.003) // 3% of their current energy pool. P.damage = round(energy_before_firing * 0.004) // 4% of their current energy pool.
else else
P.damage = round(energy_before_firing * 0.002) // 2% of their current energy pool. P.damage = round(energy_before_firing * 0.003) // 3% of their current energy pool.
owner.adjust_instability(instability_per_shot) owner.adjust_instability(instability_per_shot)
return 1 return 1

View File

@@ -7,12 +7,15 @@
var/energy_cost_per_shot = 0 var/energy_cost_per_shot = 0
var/instability_per_shot = 0 var/instability_per_shot = 0
var/pre_shot_delay = 0 var/pre_shot_delay = 0
var/fire_sound = null
/obj/item/weapon/spell/projectile/on_ranged_cast(atom/hit_atom, mob/living/user) /obj/item/weapon/spell/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
var/turf/T = get_turf(hit_atom) var/turf/T = get_turf(hit_atom)
if(set_up(hit_atom, user)) if(set_up(hit_atom, user))
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user)) var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
new_projectile.launch(T) new_projectile.launch(T)
if(fire_sound)
playsound(get_turf(src), fire_sound, 75, 1)
owner.adjust_instability(instability_per_shot) owner.adjust_instability(instability_per_shot)
return 1 return 1
return 0 return 0
@@ -23,7 +26,7 @@
if(pre_shot_delay) if(pre_shot_delay)
var/image/target_image = image(icon = 'icons/obj/spells.dmi', loc = get_turf(hit_atom), icon_state = "target") var/image/target_image = image(icon = 'icons/obj/spells.dmi', loc = get_turf(hit_atom), icon_state = "target")
user << target_image user << target_image
user.Stun(pre_shot_delay) user.Stun(pre_shot_delay / 10)
sleep(pre_shot_delay) sleep(pre_shot_delay)
qdel(target_image) qdel(target_image)
return 1 return 1

View File

@@ -3,6 +3,7 @@
desc = "Causes you to be very radiant, glowing brightly in visible light, thermal energy, and deadly ionizing radiation." desc = "Causes you to be very radiant, glowing brightly in visible light, thermal energy, and deadly ionizing radiation."
cost = 180 cost = 180
obj_path = /obj/item/weapon/spell/radiance obj_path = /obj/item/weapon/spell/radiance
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/radiance /obj/item/weapon/spell/radiance
name = "radiance" name = "radiance"

View File

@@ -4,6 +4,7 @@
cost = 120 cost = 120
obj_path = /obj/item/weapon/spell/reflect obj_path = /obj/item/weapon/spell/reflect
ability_icon_state = "tech_reflect" ability_icon_state = "tech_reflect"
category = DEFENSIVE_SPELLS
/obj/item/weapon/spell/reflect /obj/item/weapon/spell/reflect
name = "\proper reflect shield" name = "\proper reflect shield"

View File

@@ -6,6 +6,7 @@
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/resurrect obj_path = /obj/item/weapon/spell/resurrect
ability_icon_state = "tech_resurrect" ability_icon_state = "tech_resurrect"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/resurrect /obj/item/weapon/spell/resurrect
name = "resurrect" name = "resurrect"

View File

@@ -3,6 +3,7 @@
desc = "One of the few functions able to adjust instability, this allows you to take someone else's instability." desc = "One of the few functions able to adjust instability, this allows you to take someone else's instability."
cost = 50 cost = 50
obj_path = /obj/item/weapon/spell/shared_burden obj_path = /obj/item/weapon/spell/shared_burden
category = SUPPORT_SPELLS
/obj/item/weapon/spell/shared_burden /obj/item/weapon/spell/shared_burden
name = "shared burden" name = "shared burden"

View File

@@ -5,6 +5,7 @@
cost = 120 cost = 120
obj_path = /obj/item/weapon/spell/shield obj_path = /obj/item/weapon/spell/shield
ability_icon_state = "tech_shield" ability_icon_state = "tech_shield"
category = DEFENSIVE_SPELLS
/obj/item/weapon/spell/shield /obj/item/weapon/spell/shield
name = "\proper energy shield" name = "\proper energy shield"

View File

@@ -3,6 +3,7 @@
desc = "Disrupts photons moving in a local area, causing darkness to shroud yourself or a position of your choosing." desc = "Disrupts photons moving in a local area, causing darkness to shroud yourself or a position of your choosing."
cost = 30 cost = 30
obj_path = /obj/item/weapon/spell/spawner/darkness obj_path = /obj/item/weapon/spell/spawner/darkness
category = UTILITY_SPELLS
/obj/item/weapon/spell/spawner/darkness /obj/item/weapon/spell/spawner/darkness
name = "darkness" name = "darkness"

View File

@@ -4,6 +4,7 @@
sure to not be close to the disturbance yourself." sure to not be close to the disturbance yourself."
cost = 175 cost = 175
obj_path = /obj/item/weapon/spell/spawner/fire_blast obj_path = /obj/item/weapon/spell/spawner/fire_blast
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/spawner/fire_blast /obj/item/weapon/spell/spawner/fire_blast
name = "fire blast" name = "fire blast"

View File

@@ -3,6 +3,7 @@
desc = "Emits electronic pulses to destroy, disable, or otherwise harm devices and machines. Be sure to not hit yourself with this." desc = "Emits electronic pulses to destroy, disable, or otherwise harm devices and machines. Be sure to not hit yourself with this."
cost = 150 cost = 150
obj_path = /obj/item/weapon/spell/spawner/pulsar obj_path = /obj/item/weapon/spell/spawner/pulsar
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/spawner/pulsar /obj/item/weapon/spell/spawner/pulsar
name = "pulsar" name = "pulsar"

View File

@@ -8,6 +8,7 @@
enhancement_desc = "Summoned entities will never harm their summoner." enhancement_desc = "Summoned entities will never harm their summoner."
cost = 200 cost = 200
obj_path = /obj/item/weapon/spell/summon/summon_creature obj_path = /obj/item/weapon/spell/summon/summon_creature
category = UTILITY_SPELLS
/obj/item/weapon/spell/summon/summon_creature /obj/item/weapon/spell/summon/summon_creature
name = "summon creature" name = "summon creature"

View File

@@ -5,6 +5,7 @@
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees." enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees."
cost = 100 cost = 100
obj_path = /obj/item/weapon/spell/summon/summon_ward obj_path = /obj/item/weapon/spell/summon/summon_ward
category = UTILITY_SPELLS
/obj/item/weapon/spell/summon/summon_ward /obj/item/weapon/spell/summon/summon_ward
name = "summon ward" name = "summon ward"

View File

@@ -5,6 +5,7 @@
cost = 150 cost = 150
ability_icon_state = "tech_targetingmatrix" ability_icon_state = "tech_targetingmatrix"
obj_path = /obj/item/weapon/spell/targeting_matrix obj_path = /obj/item/weapon/spell/targeting_matrix
category = UTILITY_SPELLS
/obj/item/weapon/spell/targeting_matrix /obj/item/weapon/spell/targeting_matrix
name = "targeting matrix" name = "targeting matrix"

View File

@@ -3,9 +3,10 @@
desc = "Acts as directional guidance towards an object that belongs to you or your team. It can also point towards your allies. \ desc = "Acts as directional guidance towards an object that belongs to you or your team. It can also point towards your allies. \
Wonderful if you're worried someone will steal your valuables, like a certain shiny Scepter..." Wonderful if you're worried someone will steal your valuables, like a certain shiny Scepter..."
enhancement_desc = "You will be able to track most other entities in addition to your belongings and allies." enhancement_desc = "You will be able to track most other entities in addition to your belongings and allies."
cost = 30 cost = 25
obj_path = /obj/item/weapon/spell/track obj_path = /obj/item/weapon/spell/track
ability_icon_state = "tech_track" ability_icon_state = "tech_track"
category = UTILITY_SPELLS
// This stores a ref to all important items that belong to a Technomancer, in case of theft. Used by the spell below. // This stores a ref to all important items that belong to a Technomancer, in case of theft. Used by the spell below.
// I feel dirty for adding yet another global list used by one thing, but the only alternative is to loop through world, and yeahhh. // I feel dirty for adding yet another global list used by one thing, but the only alternative is to loop through world, and yeahhh.

View File

@@ -4,6 +4,7 @@
cost = 200 cost = 200
obj_path = /obj/item/weapon/spell/warp_strike obj_path = /obj/item/weapon/spell/warp_strike
ability_icon_state = "tech_warpstrike" ability_icon_state = "tech_warpstrike"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/warp_strike /obj/item/weapon/spell/warp_strike
name = "warp strike" name = "warp strike"

View File

@@ -418,7 +418,6 @@
#include "code\game\gamemodes\technomancer\core_obj.dm" #include "code\game\gamemodes\technomancer\core_obj.dm"
#include "code\game\gamemodes\technomancer\equipment.dm" #include "code\game\gamemodes\technomancer\equipment.dm"
#include "code\game\gamemodes\technomancer\instability.dm" #include "code\game\gamemodes\technomancer\instability.dm"
#include "code\game\gamemodes\technomancer\presets.dm"
#include "code\game\gamemodes\technomancer\spell_objs.dm" #include "code\game\gamemodes\technomancer\spell_objs.dm"
#include "code\game\gamemodes\technomancer\spell_objs_helpers.dm" #include "code\game\gamemodes\technomancer\spell_objs_helpers.dm"
#include "code\game\gamemodes\technomancer\technomancer.dm" #include "code\game\gamemodes\technomancer\technomancer.dm"