mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Another Big Technomancer PR
See PR for details.
This commit is contained in:
@@ -97,7 +97,8 @@
|
||||
var/i = 1
|
||||
for(var/obj/screen/ability/ability in ability_objects)
|
||||
ability.update_icon(forced)
|
||||
ability.maptext = "[i]" // Slot number
|
||||
ability.index = i
|
||||
ability.maptext = "[ability.index]" // Slot number
|
||||
i++
|
||||
|
||||
/obj/screen/movable/ability_master/update_icon()
|
||||
@@ -195,6 +196,7 @@
|
||||
maptext_x = 3
|
||||
var/background_base_state = "grey"
|
||||
var/ability_icon_state = null
|
||||
var/index = 0
|
||||
|
||||
// var/spell/spell = null
|
||||
var/obj/screen/movable/ability_master/ability_master
|
||||
@@ -260,6 +262,16 @@
|
||||
// spell.perform(usr)
|
||||
activate()
|
||||
|
||||
/obj/screen/ability/MouseDrop(var/atom/A)
|
||||
if(!A || A == src)
|
||||
return
|
||||
if(istype(A, /obj/screen/ability))
|
||||
var/obj/screen/ability/ability = A
|
||||
if(ability.ability_master && ability.ability_master == src.ability_master)
|
||||
ability_master.ability_objects.Swap(src.index, ability.index)
|
||||
ability_master.toggle_open(2) // To update the UI.
|
||||
|
||||
|
||||
// Makes the ability be triggered. The subclasses of this are responsible for carrying it out in whatever way it needs to.
|
||||
/obj/screen/ability/proc/activate()
|
||||
world << "[src] had activate() called."
|
||||
|
||||
@@ -81,3 +81,25 @@ var/datum/antagonist/technomancer/technomancers
|
||||
feedback_set_details("round_end_result","loss - technomancer killed")
|
||||
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been \
|
||||
killed!</font></span>"
|
||||
|
||||
/datum/antagonist/technomancer/print_player_summary()
|
||||
..()
|
||||
for(var/obj/item/weapon/technomancer_core/core in technomancer_belongings)
|
||||
if(core.wearer)
|
||||
continue // Only want abandoned cores.
|
||||
if(!core.spells.len)
|
||||
continue // Cores containing spells only.
|
||||
world << "Abandoned [core] had [english_list(core.spells)].<br>"
|
||||
|
||||
/datum/antagonist/technomancer/print_player_full(var/datum/mind/player)
|
||||
var/text = print_player_lite(player)
|
||||
|
||||
var/obj/item/weapon/technomancer_core/core
|
||||
if(player.original)
|
||||
core = locate() in player.original
|
||||
if(core)
|
||||
text += "<br>Bought [english_list(core.spells)], and used \a [core]."
|
||||
else
|
||||
text += "<br>They've lost their core."
|
||||
|
||||
return text
|
||||
|
||||
@@ -12,7 +12,6 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
/datum/technomancer
|
||||
var/name = "technomancer thing"
|
||||
var/desc = "If you can see this, something broke."
|
||||
var/enhancement_desc = "No effect."
|
||||
var/cost = 100
|
||||
var/hidden = 0
|
||||
var/obj_path = null
|
||||
@@ -20,6 +19,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
|
||||
/datum/technomancer/spell
|
||||
var/category = ALL_SPELLS
|
||||
var/enhancement_desc = null
|
||||
var/spell_power_desc = null
|
||||
|
||||
/obj/item/weapon/technomancer_catalog
|
||||
name = "catalog"
|
||||
@@ -28,6 +29,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state ="scientology" //placeholder
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
var/budget = 1000
|
||||
var/max_budget = 1000
|
||||
var/mob/living/carbon/human/owner = null
|
||||
@@ -35,7 +37,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
var/list/equipment_instances = list()
|
||||
var/list/consumable_instances = list()
|
||||
var/list/assistance_instances = list()
|
||||
var/tab = 0
|
||||
var/tab = 4 // Info tab, so new players can read it before doing anything.
|
||||
var/spell_tab = ALL_SPELLS
|
||||
var/show_scepter_text = 0
|
||||
|
||||
@@ -116,7 +118,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
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=2'>Consumables</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><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>"
|
||||
|
||||
@@ -129,8 +132,10 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
continue
|
||||
dat += "<b>[spell.name]</b><br>"
|
||||
dat += "<i>[spell.desc]</i><br>"
|
||||
if(show_scepter_text)
|
||||
dat += "<span class='info'><i>[spell.enhancement_desc]</i></span>"
|
||||
if(spell.spell_power_desc)
|
||||
dat += "<font color='purple'>Spell Power: [spell.spell_power_desc]</font><br>"
|
||||
if(spell.enhancement_desc)
|
||||
dat += "<font color='blue'>Scepter Effect: [spell.enhancement_desc]</font><br>"
|
||||
if(spell.cost <= budget)
|
||||
dat += "<a href='byond://?src=\ref[src];spell_choice=[spell.name]'>Purchase</a> ([spell.cost])<br><br>"
|
||||
else
|
||||
@@ -143,7 +148,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
|
||||
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=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/equipment/E in equipment_instances)
|
||||
dat += "<b>[E.name]</b><br>"
|
||||
@@ -160,7 +166,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
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 += "<b>Consumables</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/consumable/C in consumable_instances)
|
||||
dat += "<b>[C.name]</b><br>"
|
||||
@@ -177,7 +184,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
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 += "<b>Assistance</b></align><br>"
|
||||
dat += "<b>Assistance</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/assistance/A in assistance_instances)
|
||||
dat += "<b>[A.name]</b><br>"
|
||||
@@ -188,6 +196,72 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<font color='red'><b>Cannot afford!</b></font><br><br>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
if(4) //Info
|
||||
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>Info</b></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
dat += "<br>"
|
||||
dat += "<h1>Manipulation Core Owner's Manual</h1><br>"
|
||||
dat += "This brief entry in your catelog will try to explain what everything does. For starters, the thing you're \
|
||||
probably wearing on your back is known as a <b>Manipulation Core</b>, or just a 'Core'. It allows you to do amazing \
|
||||
things with almost no effort, depending on what <b>functions</b> you've purchased for it. Don't lose your core!<br>"
|
||||
dat += "<br>"
|
||||
dat += "There are a few things you need to keep in mind as you use your Core to manipulate the universe. The core \
|
||||
requires a special type of <b>energy</b>, that is referred to as just 'Energy' in the catelog. All cores generate \
|
||||
their own energy, some more than others. Most functions require energy be spent in order to work, so make sure not \
|
||||
to run out in a critical moment. Besides waiting for your Core to recharge, you can buy certain functions which \
|
||||
do something to generate energy.<br>"
|
||||
dat += "<br>"
|
||||
dat += "The second thing you need to know is that awesome power over the physical world has consquences, in the form \
|
||||
of <b>Instability</b>. Instability is the result of your Core's energy being used to fuel it, and so little is \
|
||||
understood about it, even among fellow Core owners, however it is almost always a bad thing to have. Instability will \
|
||||
'cling' to you as you use functions, with powerful functions creating lots of instability. The effects of holding onto \
|
||||
instability are generally harmless or mildly annoying at low levels, with effects such as sparks in the air or forced \
|
||||
blinking. Accumulating more and more instability will lead to worse things happening, which can easily be fatal, if not \
|
||||
managed properly.<br>"
|
||||
dat += "<br>"
|
||||
dat += "Fortunately, all Cores come with a meter to tell you how much instability you currently hold. \
|
||||
Instability will go away on its own as time goes on. You can tell if you have instability by the characteristic \
|
||||
purple colored lightning that appears around something with instability lingering on it. High amounts of instability \
|
||||
may cause the object afflicted with it to glow a dark purple, which is often known simply as <b>Glow</b>, which spreads \
|
||||
the instability. You should stay far away from anyone afflicted by Glow, as they will be a danger to both themselves and \
|
||||
anything nearby. Multiple sources of Glow can perpetuate the glow for a very long time if they are not seperated.<br>"
|
||||
dat += "<br>"
|
||||
dat += "You should strive to keep you and your apprentices' cores secure. To help with this, each core comes with a \
|
||||
locking mechanism, which should make attempts at forceful removal by third parties (or you) futile, until it is \
|
||||
unlocked again. Do note that there is a safety mechanism, which will automatically unlock the core if the wearer \
|
||||
suffers death. There exists a secondary safety mechanism (safety for the core, not you) that is triggered when \
|
||||
the core detects itself being carried, with the carrier not being authorized. It will respond by giving a \
|
||||
massive amount of Instability to them, so be careful, or perhaps make use of that.<br>"
|
||||
dat += "<br>"
|
||||
dat += "<b>You can refund functions, equipment items, and assistance items, so long as you are in your base.</b> \
|
||||
Once you leave, you can't refund anything, however you can still buy things if you still have points remaining. \
|
||||
To refund functions, just click the 'Refund Functions' button on the top, when in the functions tabs. \
|
||||
For equipment items, you need to hit it against the catelog.<br>"
|
||||
dat += "<br>"
|
||||
dat += "Your blue robes and hat are both stylish, and somewhat protective against hostile energies, which includes \
|
||||
EXTERNAL instability sources (like Glow), and mundane electricity. If you're looking for protection against other \
|
||||
things, it's suggested you purchase or otherwise obtain armor.<br>"
|
||||
dat += "<br>"
|
||||
dat += "There are a few terms you may not understand in the catelog, so this will try to explain them.<br>"
|
||||
dat += "A function can be thought of as a 'spell', that you use by holding in your hands and trying to use it on \
|
||||
a target of your choice.<br>"
|
||||
dat += "Some functions can have their abilities enhanced by a special rod called the Scepter of Enhancement. \
|
||||
If a function is able to be boosted with it, it will be shown underneath the description of the function as \
|
||||
<font color='blue'><i>'Scepter Effect:'</i></font>. Note that you must hold the scepter for it to work, so try to avoid losing it.<br>"
|
||||
dat += "Functions can also be boosted with the core itself. A function that is able to benefit \
|
||||
from this will have <font color='purple'><i>'Spell Power:'</i></font> underneath. Different Cores have different \
|
||||
amounts of spell power.<br>"
|
||||
dat += "When a function refers to 'allies', it means you, your apprentices, currently controlled entities (with the \
|
||||
Control function), and friendly simple-minded entities that you've summoned with the Scepter of Enhancement.<br>"
|
||||
dat += "A meter is equal to one 'tile'.<br>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
|
||||
// Proc: Topic()
|
||||
// Parameters: 2 (href - don't know, href_list - the choice that the person using the interface above clicked on.)
|
||||
@@ -266,8 +340,36 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
if(core)
|
||||
for(var/obj/spellbutton/spell in core.spells)
|
||||
for(var/datum/technomancer/spell/spell_datum in spell_instances)
|
||||
if(spell_datum.obj_path == spell.spellpath && !spell.was_bought_by_preset)
|
||||
if(spell_datum.obj_path == spell.spellpath)
|
||||
budget += spell_datum.cost
|
||||
core.remove_spell(spell)
|
||||
break
|
||||
attack_self(H)
|
||||
|
||||
/obj/item/weapon/technomancer_catalog/attackby(var/atom/movable/AM, var/mob/user)
|
||||
if(user.z != 2)
|
||||
to_chat(user, "<span class='danger'>You can only refund at your base, it's too late now!</span>")
|
||||
return
|
||||
for(var/datum/technomancer/equipment/E in equipment_instances + assistance_instances)
|
||||
if(AM.type == E.obj_path) // We got a match.
|
||||
if(budget + E.cost > max_budget)
|
||||
to_chat(user, "<span class='warning'>\The [src] will not allow you to overflow your maximum budget by refunding that.</span>")
|
||||
return
|
||||
else
|
||||
budget = budget + E.cost
|
||||
to_chat(user, "<span class='notice'>You've refunded \the [AM].</span>")
|
||||
|
||||
// We sadly need to do special stuff here or else people who refund cores with spells will lose points permanently.
|
||||
if(istype(AM, /obj/item/weapon/technomancer_core))
|
||||
var/obj/item/weapon/technomancer_core/core = AM
|
||||
for(var/obj/spellbutton/spell in core.spells)
|
||||
for(var/datum/technomancer/spell/spell_datum in spell_instances)
|
||||
if(spell_datum.obj_path == spell.spellpath)
|
||||
budget += spell_datum.cost
|
||||
to_chat(user, "<span class='notice'>[spell.name] was inside \the [core], and was refunded.</span>")
|
||||
core.remove_spell(spell)
|
||||
break
|
||||
qdel(AM)
|
||||
return
|
||||
to_chat(user, "<span class='warn'>\The [src] is unable to refund \the [AM].</span>")
|
||||
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
var/regen_rate = 50 // 200 seconds to full
|
||||
var/energy_delta = 0 // How much we're gaining (or perhaps losing) every process().
|
||||
var/mob/living/wearer = null // Reference to the mob wearing the core.
|
||||
var/instability_modifer = 0.8 // Multiplier on how much instability is added.
|
||||
var/instability_modifier = 0.8 // Multiplier on how much instability is added.
|
||||
var/energy_cost_modifier = 1.0 // Multiplier on how much spells will cost.
|
||||
var/spell_power_modifier = 1.0 // Multiplier on how strong spells are.
|
||||
var/list/spells = list() // This contains the buttons used to make spells in the user's hand.
|
||||
var/list/appearances = list( // Assoc list containing possible icon_states that the wiz can change the core to.
|
||||
"default" = "technomancer_core",
|
||||
@@ -67,6 +69,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/technomancer_core/proc/pay_energy(amount)
|
||||
amount = round(amount * energy_cost_modifier, 0.1)
|
||||
if(amount <= energy)
|
||||
energy = max(energy - amount, 0)
|
||||
return 1
|
||||
@@ -131,7 +134,6 @@
|
||||
name = "generic spellbutton"
|
||||
var/spellpath = null
|
||||
var/obj/item/weapon/technomancer_core/core = null
|
||||
var/was_bought_by_preset = 0 // Relevant for refunding via the spellbook. Presets may be priced differently.
|
||||
var/ability_icon_state = null
|
||||
|
||||
/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
|
||||
@@ -222,7 +224,9 @@
|
||||
energy = 13000
|
||||
max_energy = 13000
|
||||
regen_rate = 35 //~371 seconds to full, 118 seconds to full at 50 instability (rate of 110)
|
||||
instability_modifer = 1.2
|
||||
instability_modifier = 1.2
|
||||
energy_cost_modifier = 0.7
|
||||
spell_power_modifier = 1.1
|
||||
|
||||
/obj/item/weapon/technomancer_core/unstable/regenerate()
|
||||
var/instability_bonus = 0
|
||||
@@ -243,19 +247,21 @@
|
||||
max_energy = 7000
|
||||
regen_rate = 70 //100 seconds to full
|
||||
slowdown = -1
|
||||
instability_modifer = 0.9
|
||||
instability_modifier = 0.9
|
||||
|
||||
//Big batteries but slow regen, buying energy spells is highly recommended.
|
||||
/obj/item/weapon/technomancer_core/bulky
|
||||
name = "bulky core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This variant is more \
|
||||
cumbersome and bulky, due to the additional energy capacitors installed. It also comes at a price of a subpar fractal \
|
||||
cumbersome and bulky, due to the additional energy capacitors installed, which allows for a massive energy storage, as well \
|
||||
as stronger function usage. It also comes at a price of a subpar fractal \
|
||||
reactor."
|
||||
energy = 20000
|
||||
max_energy = 20000
|
||||
regen_rate = 25 //800 seconds to full
|
||||
slowdown = 1
|
||||
instability_modifer = 1.0
|
||||
instability_modifier = 1.0
|
||||
spell_power_modifier = 1.4
|
||||
|
||||
// Using this can result in abilities costing less energy. If you're lucky.
|
||||
/obj/item/weapon/technomancer_core/recycling
|
||||
@@ -265,15 +271,17 @@
|
||||
energy = 12000
|
||||
max_energy = 12000
|
||||
regen_rate = 40 //300 seconds to full
|
||||
instability_modifer = 0.6
|
||||
instability_modifier = 0.6
|
||||
energy_cost_modifier = 0.8
|
||||
|
||||
/obj/item/weapon/technomancer_core/recycling/pay_energy(amount)
|
||||
..()
|
||||
if(.)
|
||||
var/success = ..()
|
||||
if(success)
|
||||
if(prob(30))
|
||||
give_energy(round(amount / 2))
|
||||
if(amount >= 100) // Managing to recover less than half of this isn't worth telling the user about.
|
||||
if(amount >= 50) // Managing to recover less than half of this isn't worth telling the user about.
|
||||
wearer << "<span class='notice'>\The [src] has recovered [amount/2 >= 1000 ? "a lot of" : "some"] energy.</span>"
|
||||
return success
|
||||
|
||||
// For those dedicated to summoning hoards of things.
|
||||
/obj/item/weapon/technomancer_core/summoner
|
||||
@@ -285,12 +293,37 @@
|
||||
max_energy = 8000
|
||||
regen_rate = 35 //228 seconds to full
|
||||
max_summons = 40
|
||||
instability_modifer = 1.0
|
||||
instability_modifier = 1.2
|
||||
spell_power_modifier = 1.2
|
||||
|
||||
/obj/item/weapon/technomancer_core/summoner/pay_dues()
|
||||
if(summoned_mobs.len)
|
||||
pay_energy( round(summoned_mobs.len) )
|
||||
|
||||
// For those who hate instability.
|
||||
/obj/item/weapon/technomancer_core/safety
|
||||
name = "safety core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This type is designed to be \
|
||||
the closest thing you can get to 'safe' for a Core. Instability from this is significantly reduced. You can even dance if \
|
||||
you want to, and leave your apprentice behind."
|
||||
energy = 7000
|
||||
max_energy = 7000
|
||||
regen_rate = 30 //233 seconds to full
|
||||
instability_modifier = 0.3
|
||||
spell_power_modifier = 0.7
|
||||
|
||||
// For those who want to blow everything on a few spells.
|
||||
/obj/item/weapon/technomancer_core/overcharged
|
||||
name = "overcharged core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This type will use as much \
|
||||
energy as it can in order to pump up the strength of functions used to insane levels."
|
||||
energy = 15000
|
||||
max_energy = 15000
|
||||
regen_rate = 40 //375 seconds to full
|
||||
instability_modifier = 1.1
|
||||
spell_power_modifier = 1.75
|
||||
energy_cost_modifier = 2.0
|
||||
|
||||
/obj/item/weapon/technomancer_core/verb/toggle_lock()
|
||||
set name = "Toggle Core Lock"
|
||||
set category = "Object"
|
||||
|
||||
@@ -1,55 +1,106 @@
|
||||
/datum/technomancer/equipment/default_core
|
||||
name = "Manipulation Core"
|
||||
// desc = "The default core that you most likely already have. This is here in-case you change your mind after buying \
|
||||
// another core, don't forget to refund the old core. This has a capacity of 10,000 units of energy, and recharges at a \
|
||||
// rate of 50 units. It also reduces incoming instability from functions by 20%."
|
||||
desc = "The default core that you most likely already have. This is here in-case you change your mind after buying \
|
||||
another core, don't forget to refund the old core. This has a capacity of 10,000 units of energy, and recharges at a \
|
||||
rate of 50 units. It also reduces incoming instability from functions by 20%."
|
||||
another core, don't forget to refund the old core.<br>\
|
||||
Capacity: 10k<br>\
|
||||
Recharge: 50/s<br>\
|
||||
Instability Modifier: 80%<br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core
|
||||
|
||||
/datum/technomancer/equipment/rapid_core
|
||||
name = "Rapid Core"
|
||||
desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \
|
||||
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster, and \
|
||||
reduces incoming instability from functions by 10%."
|
||||
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster.<br>\
|
||||
<font color='red'>Capacity: 7k</font><br>\
|
||||
<font color='green'><b>Recharge: 70/s</b></font><br>\
|
||||
<font color='red'>Instability Modifier: 90%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/rapid
|
||||
|
||||
/datum/technomancer/equipment/bulky_core
|
||||
name = "Bulky Core"
|
||||
desc = "This core has very large capacitors, however it also has a subpar fractal reactor. The user is recommended to \
|
||||
purchase one or more energy-generating Functions as well if using this core. Has a capacity of 20,000 units of energy, \
|
||||
and recharges at a rate of 25 units. The intense weight of the core unfortunately can cause the wear to move slightly slower, \
|
||||
and the closeness of the capacitors causes a slight increase in incoming instability by 10%."
|
||||
purchase one or more energy-generating Functions as well if using this core. The intense weight of the core unfortunately can \
|
||||
cause the wear to move slightly slower, and the closeness of the capacitors causes a slight increase in incoming instability.<br>\
|
||||
<font color='green'><b>Capacity: 20k</b></font><br>\
|
||||
<font color='red'>Recharge: 25/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 100%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='green'>Spell Power: 140%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/bulky
|
||||
|
||||
/datum/technomancer/equipment/unstable
|
||||
name = "Unstable Core"
|
||||
desc = "This core feeds off unstable energies around the user in addition to a fractal reactor. This means that it performs \
|
||||
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. Has a capacity of 13,000 \
|
||||
units of energy, and recharges at a rate of 35 units at no instability, and approximately 110 units when within the \
|
||||
'yellow zone' of instability. Incoming instability is also amplified by 30%, due to the nature of this core."
|
||||
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. The rate of recharging \
|
||||
increases as the user accumulates more instability, eventually exceeding even the rapid core in regen speed, at a huge risk.<br>\
|
||||
<font color='green'>Capacity: 13k</font><br>\
|
||||
<font color='green'>Recharge: 35/s to 110/s+</font><br>\
|
||||
<font color='red'><b>Instability Modifier: 130%</b></font><br>\
|
||||
<font color='green'>Energy Cost Modifier: 70%</font><br>\
|
||||
<font color='green'>Spell Power: 110%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/unstable
|
||||
|
||||
/datum/technomancer/equipment/recycling
|
||||
name = "Recycling Core"
|
||||
desc = "This core is optimized for energy efficency, being able to sometimes recover energy that would have been lost with other \
|
||||
cores. The focus on efficency also makes instability less of an issue, as incoming instability from functions are reduced by \
|
||||
40%. The capacitor is also slightly better, holding 12,000 units of energy, however the reactor is slower to recharge, at a rate \
|
||||
of 40 units."
|
||||
cores. Each time energy is spent, there is a 30% chance of recovering half of what was spent.<br>\
|
||||
<font color='green'>Capacity: 12k</font><br>\
|
||||
<font color='red'>Recharge: 40/s</font><br>\
|
||||
<font color='green'>Instability Modifier: 60%</font><br>\
|
||||
<font color='green'>Energy Cost Modifier: 80%</font><br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/recycling
|
||||
|
||||
/datum/technomancer/equipment/summoning
|
||||
name = "Summoning Core"
|
||||
desc = "A unique type of core, this one sacrifices other characteristics in order to optimize it for the purposes teleporting \
|
||||
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 30 summons at once, and the energy \
|
||||
demand for maintaining summons is severely reduced. This comes at the price of capcitors that can only hold 8,000 units of energy, \
|
||||
a recharging rate of 35 energy, and no shielding from instability."
|
||||
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 40 summons at once, and the energy \
|
||||
demand for maintaining summons is severely reduced.<br>\
|
||||
<font color='red'>Capacity: 8k</font><br>\
|
||||
<font color='red'>Recharge: 35/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 120%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='green'>Spell Power: 120%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/summoner
|
||||
|
||||
/datum/technomancer/equipment/safety
|
||||
name = "Safety Core"
|
||||
desc = "This core is designed so that the wearer suffers almost no instability. It unfortunately comes at a cost of subpar \
|
||||
ratings for everything else.<br>\
|
||||
<font color='red'>Capacity: 7k</font><br>\
|
||||
<font color='red'>Recharge: 30/s</font><br>\
|
||||
<font color='green'><b>Instability Modifier: 30%</b></font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='red'><b>Spell Power: 70%</b></font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/safety
|
||||
|
||||
/datum/technomancer/equipment/overcharged
|
||||
name = "Overcharged Core"
|
||||
desc = "A core that was created in order to get the most power out of functions. It does this by shoving the most power into \
|
||||
those functions, so it is the opposite of energy efficent, however the enhancement of functions is second to none for other \
|
||||
cores.<br>\
|
||||
<font color='red'>Capacity: 15k (effectively 7.5k)</font><br>\
|
||||
<font color='red'>Recharge: 40/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 110%</font><br>\
|
||||
<font color='red'><b>Energy Cost Modifier: 200%</b></font><br>\
|
||||
<font color='green'><b>Spell Power: 175%</b></font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/overcharged
|
||||
|
||||
/datum/technomancer/equipment/hypo_belt
|
||||
name = "Hypo Belt"
|
||||
desc = "A medical belt designed to carry autoinjectors and other medical equipment. Comes with one of each hypo."
|
||||
@@ -154,3 +205,15 @@
|
||||
if(istype(item_to_test, /obj/item/weapon/spell))
|
||||
var/obj/item/weapon/spell/S = item_to_test
|
||||
S.on_scepter_ranged_cast(target, user)
|
||||
|
||||
/datum/technomancer/equipment/spyglass
|
||||
name = "Spyglass"
|
||||
desc = "A mundane spyglass, it may prove useful to those who wish to scout ahead, or fight from an extreme range."
|
||||
cost = 100
|
||||
obj_path = /obj/item/device/binoculars/spyglass
|
||||
|
||||
/obj/item/device/binoculars/spyglass
|
||||
name = "spyglass"
|
||||
desc = "It's a hand-held telescope, useful for star-gazing, peeping, and recon."
|
||||
icon_state = "spyglass"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
/obj/item/weapon/spell/proc/adjust_instability(var/amount)
|
||||
if(!owner || !core)
|
||||
return 0
|
||||
amount = round(amount * core.instability_modifer, 0.1)
|
||||
amount = round(amount * core.instability_modifier, 0.1)
|
||||
owner.adjust_instability(amount)
|
||||
|
||||
// Proc: New()
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/spell/proc/within_range(var/atom/target, var/max_range = 7) // Beyond 7 is off the screen.
|
||||
if(range(get_dist(owner, target) <= max_range))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/spell/proc/calculate_spell_power(var/amount)
|
||||
if(core)
|
||||
return round(amount * core.spell_power_modifier, 1)
|
||||
|
||||
// Returns a 'target' mob from a radius around T.
|
||||
/obj/item/weapon/spell/proc/targeting_assist(var/turf/T, radius = 5)
|
||||
var/chosen_target = null
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
aspect = ASPECT_TELE
|
||||
|
||||
/obj/item/weapon/spell/abjuration/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /mob/living) && pay_energy(500))
|
||||
if(istype(hit_atom, /mob/living) && pay_energy(500) && within_range(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
var/mob/living/simple_animal/SA = null
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Apportation"
|
||||
desc = "This allows you to teleport objects into your hand, or to pull people towards you. If they're close enough, the function \
|
||||
will grab them automatically."
|
||||
enhancement_desc = "Range is unlimited."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/apportation
|
||||
category = UTILITY_SPELLS
|
||||
@@ -22,6 +23,9 @@
|
||||
if(AM.anchored)
|
||||
user << "<span class='warning'>\The [hit_atom] is firmly secured and anchored, you can't move it!</span>"
|
||||
return
|
||||
if(!within_range(hit_atom) && !check_for_scepter())
|
||||
user << "<span class='warning'>\The [hit_atom] is too far away.</span>"
|
||||
return
|
||||
//Teleporting an item.
|
||||
if(istype(hit_atom, /obj/item))
|
||||
var/obj/item/I = hit_atom
|
||||
@@ -38,6 +42,7 @@
|
||||
src.loc = null
|
||||
user.put_in_hands(I)
|
||||
user.visible_message("<span class='notice'>\A [I] appears in \the [user]'s hand!</span>")
|
||||
log_and_message_admins("has stolen [I] with [src].")
|
||||
qdel(src)
|
||||
//Now let's try to teleport a living mob.
|
||||
else if(istype(hit_atom, /mob/living))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/technomancer/spell/audible_deception
|
||||
name = "Audible Deception"
|
||||
desc = "Allows you to create a specific sound at a location of your choosing."
|
||||
enhancement_desc = "An extremely loud sound that a large amount of energy and instability becomes available, which will \
|
||||
deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||
enhancement_desc = "An extremely loud bike horn sound that costs large amount of energy and instability becomes available, \
|
||||
which will deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/audible_deception
|
||||
ability_icon_state = "tech_audibledeception"
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
|
||||
/obj/item/weapon/spell/aura/New()
|
||||
..()
|
||||
set_light(7, 4, l_color = glow_color)
|
||||
set_light(7, calculate_spell_power(4), l_color = glow_color)
|
||||
processing_objects |= src
|
||||
log_and_message_admins("has started casting [src].")
|
||||
|
||||
/obj/item/weapon/spell/aura/Destroy()
|
||||
processing_objects -= src
|
||||
log_and_message_admins("has stopped maintaining [src].")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/aura/process()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/biomed_aura
|
||||
name = "Restoration Aura"
|
||||
desc = "Heals you and your allies (or everyone, if you want) of trauma and burns slowly, as long as they remain within four meters."
|
||||
spell_power_desc = "Increases the radius and healing amount of the aura."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/biomed
|
||||
ability_icon_state = "tech_biomedaura"
|
||||
@@ -21,7 +22,7 @@
|
||||
qdel(src)
|
||||
regen_tick++
|
||||
if(regen_tick % 5 == 0)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
var/list/mobs_to_heal = list()
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(heal_allies_only)
|
||||
@@ -30,8 +31,8 @@
|
||||
else
|
||||
mobs_to_heal |= L // Heal everyone!
|
||||
for(var/mob/living/L in mobs_to_heal)
|
||||
L.adjustBruteLoss(-2)
|
||||
L.adjustFireLoss(-2)
|
||||
L.adjustBruteLoss(calculate_spell_power(-2))
|
||||
L.adjustFireLoss(calculate_spell_power(-2))
|
||||
adjust_instability(2)
|
||||
|
||||
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
This does not affect you or your allies. It also causes a large amount of fire to erupt around you, however the main threat is \
|
||||
still the heating up."
|
||||
enhancement_desc = "Increased heat generation, more fires, and higher temperature cap."
|
||||
spell_power_desc = "Radius, heat rate, heat capacity, and amount of fires made increased."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/fire
|
||||
ability_icon_state = "tech_fireaura"
|
||||
@@ -19,16 +20,17 @@
|
||||
/obj/item/weapon/spell/aura/fire/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_things = range(4,owner)
|
||||
var/list/nearby_things = range(calculate_spell_power(4),owner)
|
||||
|
||||
var/temp_change = 40
|
||||
var/temp_cap = 600
|
||||
var/fire_power = 2
|
||||
var/temp_change = calculate_spell_power(40)
|
||||
var/temp_cap = calculate_spell_power(600)
|
||||
var/fire_power = calculate_spell_power(2)
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change = 80
|
||||
temp_cap = 1000
|
||||
fire_power = 4
|
||||
temp_change = calculate_spell_power(80)
|
||||
temp_cap = calculate_spell_power(1000)
|
||||
fire_power = calculate_spell_power(4)
|
||||
|
||||
for(var/mob/living/carbon/human/H in nearby_things)
|
||||
if(is_ally(H))
|
||||
continue
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/datum/technomancer/spell/frost_aura
|
||||
name = "Chilling Aura"
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to freeze to death if \
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to become very slow if \
|
||||
they stay within four meters of you."
|
||||
enhancement_desc = "The chill becomes lethal."
|
||||
spell_power_desc = "Radius and rate of cooling are scaled."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/frost
|
||||
ability_icon_state = "tech_frostaura"
|
||||
@@ -19,13 +20,13 @@
|
||||
/obj/item/weapon/spell/aura/frost/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
|
||||
var/temp_change = 25
|
||||
var/temp_change = calculate_spell_power(25)
|
||||
var/temp_cap = 260 // Just above the damage threshold, for humans. Unathi are less fortunate.
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change = 50
|
||||
temp_change = calculate_spell_power(50)
|
||||
temp_cap = 200
|
||||
for(var/mob/living/carbon/human/H in nearby_mobs)
|
||||
if(is_ally(H))
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/datum/technomancer/spell/shock_aura
|
||||
name = "Electric Aura"
|
||||
desc = "Repeatively electrocutes enemies within four meters of you, as well as nearby electronics."
|
||||
enhancement_desc = "Aura does twice as much damage."
|
||||
spell_power_desc = "Radius and damage scaled up."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/shock
|
||||
ability_icon_state = "tech_shockaura"
|
||||
@@ -17,11 +19,11 @@
|
||||
/obj/item/weapon/spell/aura/shock/process()
|
||||
if(!pay_energy(1000))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/power = 7
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
var/power = calculate_spell_power(7)
|
||||
if(check_for_scepter())
|
||||
power = 15
|
||||
for(var/obj/machinery/light/light in range(7, owner))
|
||||
power = calculate_spell_power(15)
|
||||
for(var/obj/machinery/light/light in range(calculate_spell_power(7), owner))
|
||||
light.flicker()
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(is_ally(L))
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/datum/technomancer/spell/unstable_aura
|
||||
name = "Degen Aura"
|
||||
desc = "Destabalizes your enemies, breaking their elements down to their basic levels, slowly killing them from the inside. \
|
||||
For each person within fourteen meters of you, they suffer 1% of their current health every second. Your allies are unharmed."
|
||||
For each person within <b>fourteen meters</b> of you, they suffer 1% of their current health every second. Your allies are \
|
||||
unharmed."
|
||||
spell_power_desc = "Radius is increased."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/aura/unstable
|
||||
ability_icon_state = "tech_unstableaura"
|
||||
@@ -13,12 +15,12 @@
|
||||
icon_state = "generic"
|
||||
cast_methods = null
|
||||
aspect = ASPECT_UNSTABLE
|
||||
glow_color = "#0000FF" //TODO
|
||||
glow_color = "#CC00CC"
|
||||
|
||||
/obj/item/weapon/spell/aura/unstable/process()
|
||||
if(!pay_energy(200))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(14,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(14),owner)
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(is_ally(L))
|
||||
continue
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Force the target to teleport a short distance away. This target could be anything from something lying on the ground, to someone trying to \
|
||||
fight you, or even yourself. Using this on someone next to you makes their potential distance after teleportation greater."
|
||||
enhancement_desc = "Blink distance is increased greatly."
|
||||
spell_power_desc = "Blink distance is scaled up with more spell power."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/blink
|
||||
category = UTILITY_SPELLS
|
||||
@@ -50,22 +51,28 @@
|
||||
/obj/item/weapon/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
var/atom/movable/AM = hit_atom
|
||||
if(!within_range(AM))
|
||||
user << "<span class='warning'>\The [AM] is too far away to blink.</span>"
|
||||
return
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 6)
|
||||
safe_blink(AM, calculate_spell_power(6))
|
||||
else
|
||||
safe_blink(AM, 3)
|
||||
safe_blink(AM, calculate_spell_power(3))
|
||||
log_and_message_admins("has blinked [AM] away.")
|
||||
|
||||
/obj/item/weapon/spell/blink/on_use_cast(mob/user)
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 10)
|
||||
safe_blink(user, calculate_spell_power(10))
|
||||
else
|
||||
safe_blink(user, 6)
|
||||
safe_blink(user, calculate_spell_power(6))
|
||||
log_and_message_admins("has blinked themselves away.")
|
||||
|
||||
/obj/item/weapon/spell/blink/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
var/atom/movable/AM = hit_atom
|
||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [AM] with a glowing hand.</span>")
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 10)
|
||||
safe_blink(AM, 10)
|
||||
else
|
||||
safe_blink(AM, 6)
|
||||
log_and_message_admins("has blinked [AM] away.")
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/obj/item/weapon/spell/condensation/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(200))
|
||||
if(istype(hit_atom, /turf/simulated))
|
||||
if(istype(hit_atom, /turf/simulated) && within_range(hit_atom))
|
||||
var/turf/simulated/T = hit_atom
|
||||
|
||||
for(var/direction in alldirs + null) // null is for the center tile.
|
||||
@@ -30,6 +30,7 @@
|
||||
W.set_color()
|
||||
W.set_up(desired_turf)
|
||||
flick(initial(icon_state),W) // Otherwise pooling causes the animation to stay stuck at the end.
|
||||
log_and_message_admins("has wetted the floor with [src] at [T.x],[T.y],[T.z].")
|
||||
else if(hit_atom.reagents && !ismob(hit_atom))
|
||||
hit_atom.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
|
||||
adjust_instability(5)
|
||||
@@ -146,6 +146,7 @@
|
||||
return 0
|
||||
if(pay_energy(50 * controlled_mobs.len))
|
||||
attack_all(L)
|
||||
log_and_message_admins("has commanded their army of [controlled_mobs.len] to attack [L].")
|
||||
user << "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to \
|
||||
attack \the [L].</span>"
|
||||
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
aspect = ASPECT_BIOMED
|
||||
|
||||
/obj/item/weapon/spell/dispel/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
if(isliving(hit_atom) && pay_energy(1000))
|
||||
if(isliving(hit_atom) && within_range(hit_atom) && pay_energy(1000))
|
||||
var/mob/living/target = hit_atom
|
||||
for(var/obj/item/weapon/inserted_spell/I in target)
|
||||
I.on_expire(dispelled = 1)
|
||||
log_and_message_admins("dispelled [I] on [target].")
|
||||
user.adjust_instability(10)
|
||||
qdel(src)
|
||||
@@ -4,6 +4,7 @@
|
||||
Every second, electricity is stolen until the link is broken by the target moving too far away, or having no more energy left. \
|
||||
Can drain from powercells, microbatteries, and other Cores. The beam created by the siphoning is harmful to touch."
|
||||
enhancement_desc = "Rate of siphoning is doubled."
|
||||
spell_power_desc = "Rate of siphoning is scaled up based on spell power."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/energy_siphon
|
||||
ability_icon_state = "tech_energysiphon"
|
||||
@@ -48,7 +49,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/spell/energy_siphon/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
if(istype(hit_atom, /atom/movable) && within_range(hit_atom, 4))
|
||||
var/atom/movable/AM = hit_atom
|
||||
populate_siphon_list(AM)
|
||||
if(!things_to_siphon.len)
|
||||
@@ -56,6 +57,7 @@
|
||||
return 0
|
||||
siphoning = AM
|
||||
update_icon()
|
||||
log_and_message_admins("is siphoning energy from \a [AM].")
|
||||
else
|
||||
stop_siphoning()
|
||||
|
||||
@@ -84,7 +86,7 @@
|
||||
/obj/item/weapon/spell/energy_siphon/proc/siphon(atom/movable/siphoning, mob/user)
|
||||
var/list/things_to_drain = things_to_siphon // Temporary list copy of what we're gonna steal from.
|
||||
var/charge_to_give = 0 // How much energy to give to the Technomancer at the end.
|
||||
var/flow_remaining = flow_rate
|
||||
var/flow_remaining = calculate_spell_power(flow_rate)
|
||||
|
||||
if(!siphoning)
|
||||
return 0
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!</span>")
|
||||
L << "<span class='danger'>You ignite!</span>"
|
||||
L.fire_act()
|
||||
log_and_message_admins("has ignited [L] with [src].")
|
||||
adjust_instability(12)
|
||||
else
|
||||
//This is needed in order for the welder to work, and works similarly to grippers.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Corona"
|
||||
desc = "Causes the victim to glow very brightly, which while harmless in itself, makes it easier for them to be hit. The \
|
||||
bright glow also makes it very difficult to be stealthy. The effect lasts for one minute."
|
||||
spell_power_desc = "Enemies become even easier to hit."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/corona
|
||||
ability_icon_state = "tech_corona"
|
||||
@@ -18,11 +19,16 @@
|
||||
spell_light_range = 3
|
||||
inserting = /obj/item/weapon/inserted_spell/corona
|
||||
|
||||
|
||||
/obj/item/weapon/inserted_spell/corona
|
||||
var/evasion_reduction = 2 // We store this here because spell power may change when the spell expires.
|
||||
|
||||
/obj/item/weapon/inserted_spell/corona/on_insert()
|
||||
spawn(1)
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion -= 2
|
||||
evasion_reduction = round(2 * spell_power_at_creation, 1)
|
||||
L.evasion -= evasion_reduction
|
||||
L.visible_message("<span class='warning'>You start to glow very brightly!</span>")
|
||||
spawn(1 MINUTE)
|
||||
if(src)
|
||||
@@ -31,6 +37,6 @@
|
||||
/obj/item/weapon/inserted_spell/corona/on_expire()
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion += 2
|
||||
L.evasion += evasion_reduction
|
||||
L << "<span class='notice'>Your glow has ended.</span>"
|
||||
..()
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Haste"
|
||||
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."
|
||||
spell_power_desc = "Duration is scaled up."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/insert/haste
|
||||
ability_icon_state = "tech_haste"
|
||||
@@ -23,7 +24,7 @@
|
||||
L.force_max_speed = 1
|
||||
L << "<span class='notice'>You suddenly find it much easier to move.</span>"
|
||||
L.adjust_instability(10)
|
||||
spawn(5 SECONDS)
|
||||
spawn(round(5 SECONDS * spell_power_at_creation, 1))
|
||||
if(src)
|
||||
on_expire()
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
/obj/item/weapon/inserted_spell
|
||||
var/mob/living/carbon/human/origin = null
|
||||
var/mob/living/host = null
|
||||
var/spell_power_at_creation = 1.0 // This is here because the spell object that made this object probably won't exist.
|
||||
|
||||
/obj/item/weapon/inserted_spell/New(var/newloc, var/user, var/obj/item/weapon/spell/insert/inserter)
|
||||
..(newloc)
|
||||
@@ -42,7 +43,9 @@
|
||||
if(IS.type == inserting)
|
||||
user << "<span class='warning'>\The [L] is already affected by \the [src].</span>"
|
||||
return
|
||||
new inserting(L,user,src)
|
||||
var/obj/item/weapon/inserted_spell/inserted = new inserting(L,user,src)
|
||||
inserted.spell_power_at_creation = calculate_spell_power(1.0)
|
||||
log_and_message_admins("has casted [src] on [L].")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/spell/insert/on_melee_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_burns
|
||||
name = "Mend Burns"
|
||||
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_burns
|
||||
ability_icon_state = "tech_mendburns"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_metal
|
||||
name = "Mend Metal"
|
||||
desc = "Restores integrity to external robotic components."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_metal
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Great Mend Wounds"
|
||||
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
|
||||
robotic, reforms bones, patches internal bleeding, and restores missing blood."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_organs
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -21,6 +22,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 2 : 5
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(15)
|
||||
|
||||
for(var/i = 0, i<5,i++)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_wires
|
||||
name = "Mend Wires"
|
||||
desc = "Binds the internal wiring of robotic limbs and components over time."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wires
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Mend Wounds"
|
||||
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wounds
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -21,6 +22,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/purify
|
||||
name = "Purify"
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/purify
|
||||
ability_icon_state = "tech_purify"
|
||||
@@ -24,6 +25,7 @@
|
||||
// for(var/datum/disease/D in H.viruses)
|
||||
// D.cure()
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Repel Missiles"
|
||||
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 five minutes and can be granted to yourself or an ally."
|
||||
spell_power_desc = "Projectiles will be more likely to be deflected."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/repel_missiles
|
||||
ability_icon_state = "tech_repelmissiles"
|
||||
@@ -16,11 +17,15 @@
|
||||
light_color = "#FF5C5C"
|
||||
inserting = /obj/item/weapon/inserted_spell/repel_missiles
|
||||
|
||||
/obj/item/weapon/inserted_spell/repel_missiles
|
||||
var/evasion_increased = 2 // We store this here because spell power may change when the spell expires.
|
||||
|
||||
/obj/item/weapon/inserted_spell/repel_missiles/on_insert()
|
||||
spawn(1)
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion += 2
|
||||
evasion_increased = round(2 * spell_power_at_creation, 1)
|
||||
L.evasion += evasion_increased
|
||||
L << "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>"
|
||||
spawn(5 MINUTES)
|
||||
if(src)
|
||||
@@ -29,6 +34,6 @@
|
||||
/obj/item/weapon/inserted_spell/repel_missiles/on_expire()
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion -= 2
|
||||
L.evasion -= evasion_increased
|
||||
L << "<span class='warning'>Your repulsion field has expired.</span>"
|
||||
..()
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Instability Tap"
|
||||
desc = "Creates a large sum of energy, at the cost of a very large amount of instability afflicting you."
|
||||
enhancement_desc = "50% more energy gained, 20% less instability gained."
|
||||
spell_power_desc = "Amount of energy gained scaled up with spell power."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/instability_tap
|
||||
ability_icon_state = "tech_instabilitytap"
|
||||
@@ -18,10 +19,11 @@
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
|
||||
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
||||
var/amount = calculate_spell_power(5000)
|
||||
if(check_for_scepter())
|
||||
core.give_energy(7500)
|
||||
core.give_energy(amount * 1.5)
|
||||
adjust_instability(40)
|
||||
else
|
||||
core.give_energy(5000)
|
||||
core.give_energy(amount)
|
||||
adjust_instability(50)
|
||||
qdel(src)
|
||||
@@ -16,6 +16,8 @@
|
||||
cooldown = 30
|
||||
|
||||
/obj/item/weapon/spell/oxygenate/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(!within_range(hit_atom))
|
||||
return
|
||||
if(ishuman(hit_atom))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(pay_energy(1500))
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
/obj/item/weapon/spell/phase_shift/New()
|
||||
..()
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
processing_objects |= src
|
||||
|
||||
/obj/effect/phase_shift
|
||||
name = "rift"
|
||||
@@ -29,6 +28,7 @@
|
||||
/obj/effect/phase_shift/New()
|
||||
..()
|
||||
set_light(3, 5, l_color = "#FA58F4")
|
||||
processing_objects |= src
|
||||
|
||||
/obj/effect/phase_shift/Destroy()
|
||||
for(var/atom/movable/AM in contents) //Eject everything out.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/beam
|
||||
name = "Beam"
|
||||
desc = "Fires a laser at your target. Cheap, reliable, and a bit boring."
|
||||
spell_power_desc = "Increases damage dealt."
|
||||
cost = 100
|
||||
ability_icon_state = "tech_beam"
|
||||
obj_path = /obj/item/weapon/spell/projectile/beam
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Chain Lightning"
|
||||
desc = "This dangerous function shoots lightning that will strike someone, then bounce to a nearby person. Be careful that \
|
||||
it does not bounce to you. The lighting prefers to bounce to people with the least resistance to electricity. It will \
|
||||
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. Lightning functions cannot miss due to distance."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/projectile/chain_lightning
|
||||
ability_icon_state = "tech_chain_lightning"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Force Missile"
|
||||
desc = "This fires a missile at your target. It's cheap to use, however the projectile itself moves and impacts in such a way \
|
||||
that armor designed to protect from blunt force will mitigate this function as well."
|
||||
spell_power_desc = "Increases damage dealt."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/projectile/force_missile
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Lightning Strike"
|
||||
desc = "This uses a hidden electrolaser, which creates a laser beam to ionize the enviroment, allowing for ideal conditions \
|
||||
for a directed lightning strike to occur. The lightning is very strong, however it requires a few seconds to prepare a \
|
||||
strike."
|
||||
strike. Lightning functions cannot miss due to distance."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/projectile/lightning
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/datum/technomancer/spell/overload
|
||||
name = "Overload"
|
||||
desc = "Fires a bolt of highly unstable energy, that does damaged equal to 0.3% of the technomancer's current reserve of energy. \
|
||||
This energy pierces all known armor."
|
||||
This energy pierces all known armor. Energy cost is equal to 10% of maximum core charge."
|
||||
enhancement_desc = "Will do damage equal to 0.4% of current energy."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/projectile/overload
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
/obj/item/weapon/spell/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
if(set_up(hit_atom, user))
|
||||
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
|
||||
new_projectile.damage = calculate_spell_power(new_projectile.damage)
|
||||
new_projectile.launch(hit_atom)
|
||||
log_and_message_admins("has casted [src] at \the [hit_atom].")
|
||||
if(fire_sound)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/datum/technomancer/spell/radiance
|
||||
name = "Radiance"
|
||||
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. Note \
|
||||
that this WILL affect you."
|
||||
enhancement_desc = "Radiation will not affect the caster or their allies."
|
||||
spell_power_desc = "Spell power increases the amount of radiation and heat radiated, as well as the radius."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/radiance
|
||||
category = OFFENSIVE_SPELLS
|
||||
@@ -10,36 +13,41 @@
|
||||
desc = "You will glow with a radiance similar to that of Supermatter."
|
||||
icon_state = "radiance"
|
||||
aspect = ASPECT_LIGHT
|
||||
var/power = 100
|
||||
var/power = 250
|
||||
toggled = 1
|
||||
|
||||
/obj/item/weapon/spell/radiance/New()
|
||||
..()
|
||||
set_light(7, 4, l_color = "#D9D900")
|
||||
processing_objects |= src
|
||||
log_and_message_admins("has casted [src].")
|
||||
|
||||
/obj/item/weapon/spell/radiance/Destroy()
|
||||
processing_objects -= src
|
||||
log_and_message_admins("has stopped maintaining [src].")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/radiance/process()
|
||||
var/turf/T = get_turf(src)
|
||||
var/datum/gas_mixture/removed = null
|
||||
var/datum/gas_mixture/env = null
|
||||
var/adjusted_power = calculate_spell_power(power)
|
||||
|
||||
if(!istype(T, /turf/space))
|
||||
env = T.return_air()
|
||||
removed = env.remove(0.25 * env.total_moles) //Remove gas from surrounding area
|
||||
|
||||
var/thermal_power = 300 * power
|
||||
var/thermal_power = 300 * adjusted_power
|
||||
|
||||
removed.add_thermal_energy(thermal_power)
|
||||
removed.temperature = between(0, removed.temperature, 10000)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/L in range(T, round(sqrt(power / 2))))
|
||||
for(var/mob/living/L in range(T, round(sqrt(adjusted_power / 2))))
|
||||
if(check_for_scepter() && is_ally(L))
|
||||
continue
|
||||
var/radius = max(get_dist(L, src), 1)
|
||||
var/rads = (power / 10) * ( 1 / (radius**2) )
|
||||
var/rads = (adjusted_power / 10) * ( 1 / (radius**2) )
|
||||
L.apply_effect(rads, IRRADIATE)
|
||||
adjust_instability(2)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
user << "<span class='warning'>\The [L] isn't dead!</span>"
|
||||
return 0
|
||||
if(pay_energy(5000))
|
||||
if(L.tod > world.time + 10 MINUTES)
|
||||
if(L.tod > world.time + 30 MINUTES)
|
||||
user << "<span class='danger'>\The [L]'s been dead for too long, even this function cannot replace cloning at \
|
||||
this point.</span>"
|
||||
return 0
|
||||
@@ -57,7 +57,8 @@
|
||||
H.timeofdeath = null
|
||||
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
||||
user << "<span class='notice'>It's alive!</span>"
|
||||
adjust_instability(100)
|
||||
adjust_instability(50)
|
||||
log_and_message_admins("has resurrected [H].")
|
||||
else
|
||||
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
||||
adjust_instability(10)
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/shared_burden
|
||||
name = "Shared Burden"
|
||||
desc = "One of the few functions able to adjust instability, this allows you to take someone else's instability."
|
||||
spell_power_desc = "Draws bonus instability from the target, with the bonus dissipating harmlessly, for 'free'."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/shared_burden
|
||||
category = SUPPORT_SPELLS
|
||||
@@ -13,16 +14,16 @@
|
||||
aspect = ASPECT_UNSTABLE
|
||||
|
||||
/obj/item/weapon/spell/shared_burden/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(ishuman(hit_atom))
|
||||
if(ishuman(hit_atom) && within_range(hit_atom))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(H == user)
|
||||
user << "<span class='warning'>Draining instability out of you to put it back seems a bit pointless.</span>"
|
||||
return 0
|
||||
if(!H.instability)
|
||||
if(H.instability <= 0)
|
||||
user << "<span class='warning'>\The [H] has no instability to drain.</span>"
|
||||
return 0
|
||||
if(pay_energy(500))
|
||||
var/instability_to_drain = min(H.instability, 25)
|
||||
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
|
||||
adjust_instability(instability_to_drain)
|
||||
H.adjust_instability(-instability_to_drain)
|
||||
H.adjust_instability(-calculate_spell_power(instability_to_drain))
|
||||
@@ -1,7 +1,9 @@
|
||||
/datum/technomancer/spell/shield
|
||||
name = "Shield"
|
||||
desc = "Emits a protective shield fron your hand in front of you, which will protect you from almost anything able to harm \
|
||||
you, so long as you can power it."
|
||||
you, so long as you can power it. Stronger attacks blocked cost more energy to sustain. \
|
||||
Note that holding two shields will make blocking more energy efficent."
|
||||
enhancement_desc = "Blocking is twice as efficent in terms of energy cost per hit."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/shield
|
||||
ability_icon_state = "tech_shield"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
spawner_type = /obj/effect/temporary_effect/fire_blast
|
||||
|
||||
/obj/item/weapon/spell/spawner/fire_blast/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(2000))
|
||||
if(within_range(hit_atom) && pay_energy(2000))
|
||||
adjust_instability(12)
|
||||
..() // Makes the booms happen.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
set_light(3, 2, l_color = "#2ECCFA")
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(4000))
|
||||
if(within_range(hit_atom) && pay_energy(4000))
|
||||
adjust_instability(8)
|
||||
..()
|
||||
|
||||
|
||||
@@ -27,4 +27,5 @@
|
||||
if(T)
|
||||
new spawner_type(T)
|
||||
user << "<span class='notice'>You shift \the [src] onto \the [T].</span>"
|
||||
log_and_message_admins("has casted [src] at [T.x],[T.y],[T.z].")
|
||||
qdel(src)
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
/obj/item/weapon/spell/summon/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(summoned_mob_type && core.summoned_mobs.len < core.max_summons && pay_energy(energy_cost))
|
||||
if(summoned_mob_type && core.summoned_mobs.len < core.max_summons && within_range(hit_atom) && pay_energy(energy_cost))
|
||||
var/obj/effect/E = new(T)
|
||||
E.icon = 'icons/obj/objects.dmi'
|
||||
E.icon_state = "anom"
|
||||
@@ -29,6 +29,7 @@
|
||||
on_summon(L)
|
||||
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
|
||||
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
|
||||
log_and_message_admins("has summoned \a [L] at [T.x],[T.y],[T.z].")
|
||||
user.adjust_instability(instability_cost)
|
||||
|
||||
/obj/item/weapon/spell/summon/on_use_cast(mob/living/user)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
The creatures take a few moments to be teleported to the targeted tile. Note that the creatures summoned are \
|
||||
not inherently loyal to the technomancer, and that the creatures will be hurt slightly from being teleported to you."
|
||||
enhancement_desc = "Summoned entities will never harm their summoner."
|
||||
spell_power_desc = "The strength and endurance of the summoned creature will be greater."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_creature
|
||||
category = UTILITY_SPELLS
|
||||
@@ -37,10 +38,18 @@
|
||||
instability_cost = 10
|
||||
energy_cost = 1000
|
||||
|
||||
/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/summoned)
|
||||
/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/simple_animal/summoned)
|
||||
if(check_for_scepter())
|
||||
// summoned.faction = "technomancer"
|
||||
if(istype(summoned, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/SA = summoned
|
||||
SA.friends.Add(owner)
|
||||
|
||||
// Makes their new pal big and strong, if they have spell power.
|
||||
summoned.maxHealth = calculate_spell_power(summoned.maxHealth)
|
||||
summoned.health = calculate_spell_power(summoned.health)
|
||||
summoned.melee_damage_lower = calculate_spell_power(summoned.melee_damage_lower)
|
||||
summoned.melee_damage_upper = calculate_spell_power(summoned.melee_damage_upper)
|
||||
|
||||
// Now we hurt their new pal, because being forcefully abducted by teleportation can't be healthy.
|
||||
summoned.health = round(summoned.maxHealth * 0.7)
|
||||
@@ -1,8 +1,9 @@
|
||||
/datum/technomancer/spell/summon_ward
|
||||
name = "Summon Ward"
|
||||
desc = "Teleports a prefabricated 'ward' drone to the target location, which will alert you and your allies when it sees entities \
|
||||
moving around it, or when it is attacked. They can see for up to five meters. Wards expire in six minutes."
|
||||
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees."
|
||||
moving around it, or when it is attacked. They can see for up to five meters."
|
||||
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees. \
|
||||
Invisible entities that are spotted by it will be decloaked."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_ward
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
/obj/item/weapon/spell/warp_strike/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(T)
|
||||
if(!within_range(T))
|
||||
return
|
||||
//First, we handle who to teleport to.
|
||||
user.setClickCooldown(5)
|
||||
var/mob/living/chosen_target = targeting_assist(T,5) //The person who's about to get attacked.
|
||||
@@ -74,4 +76,5 @@
|
||||
I.afterattack(chosen_target, user)
|
||||
else
|
||||
chosen_target.attack_hand(user)
|
||||
log_and_message_admins("has warp striked [chosen_target].")
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Reference in New Issue
Block a user