mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 04:02:31 +00:00
Another Big Technomancer PR
See PR for details.
This commit is contained in:
@@ -97,7 +97,8 @@
|
|||||||
var/i = 1
|
var/i = 1
|
||||||
for(var/obj/screen/ability/ability in ability_objects)
|
for(var/obj/screen/ability/ability in ability_objects)
|
||||||
ability.update_icon(forced)
|
ability.update_icon(forced)
|
||||||
ability.maptext = "[i]" // Slot number
|
ability.index = i
|
||||||
|
ability.maptext = "[ability.index]" // Slot number
|
||||||
i++
|
i++
|
||||||
|
|
||||||
/obj/screen/movable/ability_master/update_icon()
|
/obj/screen/movable/ability_master/update_icon()
|
||||||
@@ -195,6 +196,7 @@
|
|||||||
maptext_x = 3
|
maptext_x = 3
|
||||||
var/background_base_state = "grey"
|
var/background_base_state = "grey"
|
||||||
var/ability_icon_state = null
|
var/ability_icon_state = null
|
||||||
|
var/index = 0
|
||||||
|
|
||||||
// var/spell/spell = null
|
// var/spell/spell = null
|
||||||
var/obj/screen/movable/ability_master/ability_master
|
var/obj/screen/movable/ability_master/ability_master
|
||||||
@@ -260,6 +262,16 @@
|
|||||||
// spell.perform(usr)
|
// spell.perform(usr)
|
||||||
activate()
|
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.
|
// 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()
|
/obj/screen/ability/proc/activate()
|
||||||
world << "[src] had activate() called."
|
world << "[src] had activate() called."
|
||||||
|
|||||||
@@ -81,3 +81,25 @@ var/datum/antagonist/technomancer/technomancers
|
|||||||
feedback_set_details("round_end_result","loss - technomancer killed")
|
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 \
|
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been \
|
||||||
killed!</font></span>"
|
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
|
/datum/technomancer
|
||||||
var/name = "technomancer thing"
|
var/name = "technomancer thing"
|
||||||
var/desc = "If you can see this, something broke."
|
var/desc = "If you can see this, something broke."
|
||||||
var/enhancement_desc = "No effect."
|
|
||||||
var/cost = 100
|
var/cost = 100
|
||||||
var/hidden = 0
|
var/hidden = 0
|
||||||
var/obj_path = null
|
var/obj_path = null
|
||||||
@@ -20,6 +19,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
|||||||
|
|
||||||
/datum/technomancer/spell
|
/datum/technomancer/spell
|
||||||
var/category = ALL_SPELLS
|
var/category = ALL_SPELLS
|
||||||
|
var/enhancement_desc = null
|
||||||
|
var/spell_power_desc = null
|
||||||
|
|
||||||
/obj/item/weapon/technomancer_catalog
|
/obj/item/weapon/technomancer_catalog
|
||||||
name = "catalog"
|
name = "catalog"
|
||||||
@@ -28,6 +29,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
|||||||
icon = 'icons/obj/storage.dmi'
|
icon = 'icons/obj/storage.dmi'
|
||||||
icon_state ="scientology" //placeholder
|
icon_state ="scientology" //placeholder
|
||||||
w_class = ITEMSIZE_SMALL
|
w_class = ITEMSIZE_SMALL
|
||||||
|
slot_flags = SLOT_BELT
|
||||||
var/budget = 1000
|
var/budget = 1000
|
||||||
var/max_budget = 1000
|
var/max_budget = 1000
|
||||||
var/mob/living/carbon/human/owner = null
|
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/equipment_instances = list()
|
||||||
var/list/consumable_instances = list()
|
var/list/consumable_instances = list()
|
||||||
var/list/assistance_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/spell_tab = ALL_SPELLS
|
||||||
var/show_scepter_text = 0
|
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 += "<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></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 += "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>"
|
||||||
|
|
||||||
@@ -129,8 +132,10 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
|||||||
continue
|
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(spell.spell_power_desc)
|
||||||
dat += "<span class='info'><i>[spell.enhancement_desc]</i></span>"
|
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)
|
if(spell.cost <= budget)
|
||||||
dat += "<a href='byond://?src=\ref[src];spell_choice=[spell.name]'>Purchase</a> ([spell.cost])<br><br>"
|
dat += "<a href='byond://?src=\ref[src];spell_choice=[spell.name]'>Purchase</a> ([spell.cost])<br><br>"
|
||||||
else
|
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 += "<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></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 += "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>"
|
||||||
@@ -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 += "<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></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 += "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>"
|
||||||
@@ -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 += "<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></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>"
|
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>"
|
||||||
@@ -188,6 +196,72 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
|||||||
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) //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()
|
// 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.)
|
||||||
@@ -266,8 +340,36 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
|||||||
if(core)
|
if(core)
|
||||||
for(var/obj/spellbutton/spell in core.spells)
|
for(var/obj/spellbutton/spell in core.spells)
|
||||||
for(var/datum/technomancer/spell/spell_datum in spell_instances)
|
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
|
budget += spell_datum.cost
|
||||||
core.remove_spell(spell)
|
core.remove_spell(spell)
|
||||||
break
|
break
|
||||||
attack_self(H)
|
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/regen_rate = 50 // 200 seconds to full
|
||||||
var/energy_delta = 0 // How much we're gaining (or perhaps losing) every process().
|
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/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/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.
|
var/list/appearances = list( // Assoc list containing possible icon_states that the wiz can change the core to.
|
||||||
"default" = "technomancer_core",
|
"default" = "technomancer_core",
|
||||||
@@ -67,6 +69,7 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/weapon/technomancer_core/proc/pay_energy(amount)
|
/obj/item/weapon/technomancer_core/proc/pay_energy(amount)
|
||||||
|
amount = round(amount * energy_cost_modifier, 0.1)
|
||||||
if(amount <= energy)
|
if(amount <= energy)
|
||||||
energy = max(energy - amount, 0)
|
energy = max(energy - amount, 0)
|
||||||
return 1
|
return 1
|
||||||
@@ -131,7 +134,6 @@
|
|||||||
name = "generic spellbutton"
|
name = "generic spellbutton"
|
||||||
var/spellpath = null
|
var/spellpath = null
|
||||||
var/obj/item/weapon/technomancer_core/core = 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
|
var/ability_icon_state = null
|
||||||
|
|
||||||
/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
|
/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
|
||||||
@@ -222,7 +224,9 @@
|
|||||||
energy = 13000
|
energy = 13000
|
||||||
max_energy = 13000
|
max_energy = 13000
|
||||||
regen_rate = 35 //~371 seconds to full, 118 seconds to full at 50 instability (rate of 110)
|
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()
|
/obj/item/weapon/technomancer_core/unstable/regenerate()
|
||||||
var/instability_bonus = 0
|
var/instability_bonus = 0
|
||||||
@@ -243,19 +247,21 @@
|
|||||||
max_energy = 7000
|
max_energy = 7000
|
||||||
regen_rate = 70 //100 seconds to full
|
regen_rate = 70 //100 seconds to full
|
||||||
slowdown = -1
|
slowdown = -1
|
||||||
instability_modifer = 0.9
|
instability_modifier = 0.9
|
||||||
|
|
||||||
//Big batteries but slow regen, buying energy spells is highly recommended.
|
//Big batteries but slow regen, buying energy spells is highly recommended.
|
||||||
/obj/item/weapon/technomancer_core/bulky
|
/obj/item/weapon/technomancer_core/bulky
|
||||||
name = "bulky core"
|
name = "bulky core"
|
||||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This variant is more \
|
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."
|
reactor."
|
||||||
energy = 20000
|
energy = 20000
|
||||||
max_energy = 20000
|
max_energy = 20000
|
||||||
regen_rate = 25 //800 seconds to full
|
regen_rate = 25 //800 seconds to full
|
||||||
slowdown = 1
|
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.
|
// Using this can result in abilities costing less energy. If you're lucky.
|
||||||
/obj/item/weapon/technomancer_core/recycling
|
/obj/item/weapon/technomancer_core/recycling
|
||||||
@@ -265,15 +271,17 @@
|
|||||||
energy = 12000
|
energy = 12000
|
||||||
max_energy = 12000
|
max_energy = 12000
|
||||||
regen_rate = 40 //300 seconds to full
|
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)
|
/obj/item/weapon/technomancer_core/recycling/pay_energy(amount)
|
||||||
..()
|
var/success = ..()
|
||||||
if(.)
|
if(success)
|
||||||
if(prob(30))
|
if(prob(30))
|
||||||
give_energy(round(amount / 2))
|
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>"
|
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.
|
// For those dedicated to summoning hoards of things.
|
||||||
/obj/item/weapon/technomancer_core/summoner
|
/obj/item/weapon/technomancer_core/summoner
|
||||||
@@ -285,12 +293,37 @@
|
|||||||
max_energy = 8000
|
max_energy = 8000
|
||||||
regen_rate = 35 //228 seconds to full
|
regen_rate = 35 //228 seconds to full
|
||||||
max_summons = 40
|
max_summons = 40
|
||||||
instability_modifer = 1.0
|
instability_modifier = 1.2
|
||||||
|
spell_power_modifier = 1.2
|
||||||
|
|
||||||
/obj/item/weapon/technomancer_core/summoner/pay_dues()
|
/obj/item/weapon/technomancer_core/summoner/pay_dues()
|
||||||
if(summoned_mobs.len)
|
if(summoned_mobs.len)
|
||||||
pay_energy( round(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()
|
/obj/item/weapon/technomancer_core/verb/toggle_lock()
|
||||||
set name = "Toggle Core Lock"
|
set name = "Toggle Core Lock"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
|
|||||||
@@ -1,55 +1,106 @@
|
|||||||
/datum/technomancer/equipment/default_core
|
/datum/technomancer/equipment/default_core
|
||||||
name = "Manipulation 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 \
|
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 \
|
another core, don't forget to refund the old core.<br>\
|
||||||
rate of 50 units. It also reduces incoming instability from functions by 20%."
|
Capacity: 10k<br>\
|
||||||
|
Recharge: 50/s<br>\
|
||||||
|
Instability Modifier: 80%<br>\
|
||||||
|
Energy Cost Modifier: 100%<br>\
|
||||||
|
Spell Power: 100%"
|
||||||
cost = 100
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core
|
obj_path = /obj/item/weapon/technomancer_core
|
||||||
|
|
||||||
/datum/technomancer/equipment/rapid_core
|
/datum/technomancer/equipment/rapid_core
|
||||||
name = "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 \
|
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 \
|
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster.<br>\
|
||||||
reduces incoming instability from functions by 10%."
|
<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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core/rapid
|
obj_path = /obj/item/weapon/technomancer_core/rapid
|
||||||
|
|
||||||
/datum/technomancer/equipment/bulky_core
|
/datum/technomancer/equipment/bulky_core
|
||||||
name = "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 \
|
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, \
|
purchase one or more energy-generating Functions as well if using this core. The intense weight of the core unfortunately can \
|
||||||
and recharges at a rate of 25 units. The intense weight of the core unfortunately can cause the wear to move slightly slower, \
|
cause the wear to move slightly slower, and the closeness of the capacitors causes a slight increase in incoming instability.<br>\
|
||||||
and the closeness of the capacitors causes a slight increase in incoming instability by 10%."
|
<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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core/bulky
|
obj_path = /obj/item/weapon/technomancer_core/bulky
|
||||||
|
|
||||||
/datum/technomancer/equipment/unstable
|
/datum/technomancer/equipment/unstable
|
||||||
name = "Unstable Core"
|
name = "Unstable Core"
|
||||||
desc = "This core feeds off unstable energies around the user in addition to a fractal reactor. This means that it performs \
|
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 \
|
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. The rate of recharging \
|
||||||
units of energy, and recharges at a rate of 35 units at no instability, and approximately 110 units when within the \
|
increases as the user accumulates more instability, eventually exceeding even the rapid core in regen speed, at a huge risk.<br>\
|
||||||
'yellow zone' of instability. Incoming instability is also amplified by 30%, due to the nature of this core."
|
<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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core/unstable
|
obj_path = /obj/item/weapon/technomancer_core/unstable
|
||||||
|
|
||||||
/datum/technomancer/equipment/recycling
|
/datum/technomancer/equipment/recycling
|
||||||
name = "Recycling Core"
|
name = "Recycling Core"
|
||||||
desc = "This core is optimized for energy efficency, being able to sometimes recover energy that would have been lost with other \
|
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 \
|
cores. Each time energy is spent, there is a 30% chance of recovering half of what was spent.<br>\
|
||||||
40%. The capacitor is also slightly better, holding 12,000 units of energy, however the reactor is slower to recharge, at a rate \
|
<font color='green'>Capacity: 12k</font><br>\
|
||||||
of 40 units."
|
<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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core/recycling
|
obj_path = /obj/item/weapon/technomancer_core/recycling
|
||||||
|
|
||||||
/datum/technomancer/equipment/summoning
|
/datum/technomancer/equipment/summoning
|
||||||
name = "Summoning Core"
|
name = "Summoning Core"
|
||||||
desc = "A unique type of core, this one sacrifices other characteristics in order to optimize it for the purposes teleporting \
|
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 \
|
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. This comes at the price of capcitors that can only hold 8,000 units of energy, \
|
demand for maintaining summons is severely reduced.<br>\
|
||||||
a recharging rate of 35 energy, and no shielding from instability."
|
<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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/technomancer_core/summoner
|
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
|
/datum/technomancer/equipment/hypo_belt
|
||||||
name = "Hypo Belt"
|
name = "Hypo Belt"
|
||||||
desc = "A medical belt designed to carry autoinjectors and other medical equipment. Comes with one of each hypo."
|
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))
|
if(istype(item_to_test, /obj/item/weapon/spell))
|
||||||
var/obj/item/weapon/spell/S = item_to_test
|
var/obj/item/weapon/spell/S = item_to_test
|
||||||
S.on_scepter_ranged_cast(target, user)
|
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)
|
/obj/item/weapon/spell/proc/adjust_instability(var/amount)
|
||||||
if(!owner || !core)
|
if(!owner || !core)
|
||||||
return 0
|
return 0
|
||||||
amount = round(amount * core.instability_modifer, 0.1)
|
amount = round(amount * core.instability_modifier, 0.1)
|
||||||
owner.adjust_instability(amount)
|
owner.adjust_instability(amount)
|
||||||
|
|
||||||
// Proc: New()
|
// Proc: New()
|
||||||
|
|||||||
@@ -25,6 +25,15 @@
|
|||||||
return 0
|
return 0
|
||||||
return 1
|
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.
|
// Returns a 'target' mob from a radius around T.
|
||||||
/obj/item/weapon/spell/proc/targeting_assist(var/turf/T, radius = 5)
|
/obj/item/weapon/spell/proc/targeting_assist(var/turf/T, radius = 5)
|
||||||
var/chosen_target = null
|
var/chosen_target = null
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
aspect = ASPECT_TELE
|
aspect = ASPECT_TELE
|
||||||
|
|
||||||
/obj/item/weapon/spell/abjuration/on_ranged_cast(atom/hit_atom, mob/user)
|
/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/L = hit_atom
|
||||||
var/mob/living/simple_animal/SA = null
|
var/mob/living/simple_animal/SA = null
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Apportation"
|
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 \
|
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."
|
will grab them automatically."
|
||||||
|
enhancement_desc = "Range is unlimited."
|
||||||
cost = 25
|
cost = 25
|
||||||
obj_path = /obj/item/weapon/spell/apportation
|
obj_path = /obj/item/weapon/spell/apportation
|
||||||
category = UTILITY_SPELLS
|
category = UTILITY_SPELLS
|
||||||
@@ -22,6 +23,9 @@
|
|||||||
if(AM.anchored)
|
if(AM.anchored)
|
||||||
user << "<span class='warning'>\The [hit_atom] is firmly secured and anchored, you can't move it!</span>"
|
user << "<span class='warning'>\The [hit_atom] is firmly secured and anchored, you can't move it!</span>"
|
||||||
return
|
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.
|
//Teleporting an item.
|
||||||
if(istype(hit_atom, /obj/item))
|
if(istype(hit_atom, /obj/item))
|
||||||
var/obj/item/I = hit_atom
|
var/obj/item/I = hit_atom
|
||||||
@@ -38,6 +42,7 @@
|
|||||||
src.loc = null
|
src.loc = null
|
||||||
user.put_in_hands(I)
|
user.put_in_hands(I)
|
||||||
user.visible_message("<span class='notice'>\A [I] appears in \the [user]'s hand!</span>")
|
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)
|
qdel(src)
|
||||||
//Now let's try to teleport a living mob.
|
//Now let's try to teleport a living mob.
|
||||||
else if(istype(hit_atom, /mob/living))
|
else if(istype(hit_atom, /mob/living))
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/datum/technomancer/spell/audible_deception
|
/datum/technomancer/spell/audible_deception
|
||||||
name = "Audible Deception"
|
name = "Audible Deception"
|
||||||
desc = "Allows you to create a specific sound at a location of your choosing."
|
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 \
|
enhancement_desc = "An extremely loud bike horn sound that costs large amount of energy and instability becomes available, \
|
||||||
deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
which will deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||||
cost = 50
|
cost = 50
|
||||||
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"
|
||||||
|
|||||||
@@ -8,11 +8,13 @@
|
|||||||
|
|
||||||
/obj/item/weapon/spell/aura/New()
|
/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
|
processing_objects |= src
|
||||||
|
log_and_message_admins("has started casting [src].")
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/Destroy()
|
/obj/item/weapon/spell/aura/Destroy()
|
||||||
processing_objects -= src
|
processing_objects -= src
|
||||||
|
log_and_message_admins("has stopped maintaining [src].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/process()
|
/obj/item/weapon/spell/aura/process()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/biomed_aura
|
/datum/technomancer/spell/biomed_aura
|
||||||
name = "Restoration 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."
|
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
|
cost = 100
|
||||||
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"
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
qdel(src)
|
qdel(src)
|
||||||
regen_tick++
|
regen_tick++
|
||||||
if(regen_tick % 5 == 0)
|
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()
|
var/list/mobs_to_heal = list()
|
||||||
for(var/mob/living/L in nearby_mobs)
|
for(var/mob/living/L in nearby_mobs)
|
||||||
if(heal_allies_only)
|
if(heal_allies_only)
|
||||||
@@ -30,8 +31,8 @@
|
|||||||
else
|
else
|
||||||
mobs_to_heal |= L // Heal everyone!
|
mobs_to_heal |= L // Heal everyone!
|
||||||
for(var/mob/living/L in mobs_to_heal)
|
for(var/mob/living/L in mobs_to_heal)
|
||||||
L.adjustBruteLoss(-2)
|
L.adjustBruteLoss(calculate_spell_power(-2))
|
||||||
L.adjustFireLoss(-2)
|
L.adjustFireLoss(calculate_spell_power(-2))
|
||||||
adjust_instability(2)
|
adjust_instability(2)
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
|
/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 \
|
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."
|
still the heating up."
|
||||||
enhancement_desc = "Increased heat generation, more fires, and higher temperature cap."
|
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
|
cost = 100
|
||||||
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"
|
||||||
@@ -19,16 +20,17 @@
|
|||||||
/obj/item/weapon/spell/aura/fire/process()
|
/obj/item/weapon/spell/aura/fire/process()
|
||||||
if(!pay_energy(100))
|
if(!pay_energy(100))
|
||||||
qdel(src)
|
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_change = calculate_spell_power(40)
|
||||||
var/temp_cap = 600
|
var/temp_cap = calculate_spell_power(600)
|
||||||
var/fire_power = 2
|
var/fire_power = calculate_spell_power(2)
|
||||||
|
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
temp_change = 80
|
temp_change = calculate_spell_power(80)
|
||||||
temp_cap = 1000
|
temp_cap = calculate_spell_power(1000)
|
||||||
fire_power = 4
|
fire_power = calculate_spell_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))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
/datum/technomancer/spell/frost_aura
|
/datum/technomancer/spell/frost_aura
|
||||||
name = "Chilling 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."
|
they stay within four meters of you."
|
||||||
enhancement_desc = "The chill becomes lethal."
|
enhancement_desc = "The chill becomes lethal."
|
||||||
|
spell_power_desc = "Radius and rate of cooling are scaled."
|
||||||
cost = 100
|
cost = 100
|
||||||
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"
|
||||||
@@ -19,13 +20,13 @@
|
|||||||
/obj/item/weapon/spell/aura/frost/process()
|
/obj/item/weapon/spell/aura/frost/process()
|
||||||
if(!pay_energy(100))
|
if(!pay_energy(100))
|
||||||
qdel(src)
|
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.
|
var/temp_cap = 260 // Just above the damage threshold, for humans. Unathi are less fortunate.
|
||||||
|
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
temp_change = 50
|
temp_change = calculate_spell_power(50)
|
||||||
temp_cap = 200
|
temp_cap = 200
|
||||||
for(var/mob/living/carbon/human/H in nearby_mobs)
|
for(var/mob/living/carbon/human/H in nearby_mobs)
|
||||||
if(is_ally(H))
|
if(is_ally(H))
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
/datum/technomancer/spell/shock_aura
|
/datum/technomancer/spell/shock_aura
|
||||||
name = "Electric Aura"
|
name = "Electric Aura"
|
||||||
desc = "Repeatively electrocutes enemies within four meters of you, as well as nearby electronics."
|
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
|
cost = 100
|
||||||
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"
|
||||||
@@ -17,11 +19,11 @@
|
|||||||
/obj/item/weapon/spell/aura/shock/process()
|
/obj/item/weapon/spell/aura/shock/process()
|
||||||
if(!pay_energy(1000))
|
if(!pay_energy(1000))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
var/list/nearby_mobs = range(4,owner)
|
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||||
var/power = 7
|
var/power = calculate_spell_power(7)
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
power = 15
|
power = calculate_spell_power(15)
|
||||||
for(var/obj/machinery/light/light in range(7, owner))
|
for(var/obj/machinery/light/light in range(calculate_spell_power(7), owner))
|
||||||
light.flicker()
|
light.flicker()
|
||||||
for(var/mob/living/L in nearby_mobs)
|
for(var/mob/living/L in nearby_mobs)
|
||||||
if(is_ally(L))
|
if(is_ally(L))
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
/datum/technomancer/spell/unstable_aura
|
/datum/technomancer/spell/unstable_aura
|
||||||
name = "Degen Aura"
|
name = "Degen Aura"
|
||||||
desc = "Destabalizes your enemies, breaking their elements down to their basic levels, slowly killing them from the inside. \
|
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
|
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"
|
||||||
@@ -13,12 +15,12 @@
|
|||||||
icon_state = "generic"
|
icon_state = "generic"
|
||||||
cast_methods = null
|
cast_methods = null
|
||||||
aspect = ASPECT_UNSTABLE
|
aspect = ASPECT_UNSTABLE
|
||||||
glow_color = "#0000FF" //TODO
|
glow_color = "#CC00CC"
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/unstable/process()
|
/obj/item/weapon/spell/aura/unstable/process()
|
||||||
if(!pay_energy(200))
|
if(!pay_energy(200))
|
||||||
qdel(src)
|
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)
|
for(var/mob/living/L in nearby_mobs)
|
||||||
if(is_ally(L))
|
if(is_ally(L))
|
||||||
continue
|
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 \
|
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."
|
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."
|
enhancement_desc = "Blink distance is increased greatly."
|
||||||
|
spell_power_desc = "Blink distance is scaled up with more spell power."
|
||||||
cost = 50
|
cost = 50
|
||||||
obj_path = /obj/item/weapon/spell/blink
|
obj_path = /obj/item/weapon/spell/blink
|
||||||
category = UTILITY_SPELLS
|
category = UTILITY_SPELLS
|
||||||
@@ -50,22 +51,28 @@
|
|||||||
/obj/item/weapon/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)
|
/obj/item/weapon/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)
|
||||||
if(istype(hit_atom, /atom/movable))
|
if(istype(hit_atom, /atom/movable))
|
||||||
var/atom/movable/AM = hit_atom
|
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())
|
if(check_for_scepter())
|
||||||
safe_blink(user, 6)
|
safe_blink(AM, calculate_spell_power(6))
|
||||||
else
|
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)
|
/obj/item/weapon/spell/blink/on_use_cast(mob/user)
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
safe_blink(user, 10)
|
safe_blink(user, calculate_spell_power(10))
|
||||||
else
|
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)
|
/obj/item/weapon/spell/blink/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||||
if(istype(hit_atom, /atom/movable))
|
if(istype(hit_atom, /atom/movable))
|
||||||
var/atom/movable/AM = hit_atom
|
var/atom/movable/AM = hit_atom
|
||||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [AM] with a glowing hand.</span>")
|
visible_message("<span class='danger'>\The [user] reaches out towards \the [AM] with a glowing hand.</span>")
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
safe_blink(user, 10)
|
safe_blink(AM, 10)
|
||||||
else
|
else
|
||||||
safe_blink(AM, 6)
|
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)
|
/obj/item/weapon/spell/condensation/on_ranged_cast(atom/hit_atom, mob/user)
|
||||||
if(pay_energy(200))
|
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
|
var/turf/simulated/T = hit_atom
|
||||||
|
|
||||||
for(var/direction in alldirs + null) // null is for the center tile.
|
for(var/direction in alldirs + null) // null is for the center tile.
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
W.set_color()
|
W.set_color()
|
||||||
W.set_up(desired_turf)
|
W.set_up(desired_turf)
|
||||||
flick(initial(icon_state),W) // Otherwise pooling causes the animation to stay stuck at the end.
|
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))
|
else if(hit_atom.reagents && !ismob(hit_atom))
|
||||||
hit_atom.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
|
hit_atom.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
|
||||||
adjust_instability(5)
|
adjust_instability(5)
|
||||||
@@ -146,6 +146,7 @@
|
|||||||
return 0
|
return 0
|
||||||
if(pay_energy(50 * controlled_mobs.len))
|
if(pay_energy(50 * controlled_mobs.len))
|
||||||
attack_all(L)
|
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 \
|
user << "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to \
|
||||||
attack \the [L].</span>"
|
attack \the [L].</span>"
|
||||||
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
|
//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
|
aspect = ASPECT_BIOMED
|
||||||
|
|
||||||
/obj/item/weapon/spell/dispel/on_ranged_cast(atom/hit_atom, mob/living/user)
|
/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
|
var/mob/living/target = hit_atom
|
||||||
for(var/obj/item/weapon/inserted_spell/I in target)
|
for(var/obj/item/weapon/inserted_spell/I in target)
|
||||||
I.on_expire(dispelled = 1)
|
I.on_expire(dispelled = 1)
|
||||||
|
log_and_message_admins("dispelled [I] on [target].")
|
||||||
user.adjust_instability(10)
|
user.adjust_instability(10)
|
||||||
qdel(src)
|
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. \
|
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."
|
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."
|
enhancement_desc = "Rate of siphoning is doubled."
|
||||||
|
spell_power_desc = "Rate of siphoning is scaled up based on spell power."
|
||||||
cost = 100
|
cost = 100
|
||||||
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"
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/spell/energy_siphon/on_ranged_cast(atom/hit_atom, mob/user)
|
/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
|
var/atom/movable/AM = hit_atom
|
||||||
populate_siphon_list(AM)
|
populate_siphon_list(AM)
|
||||||
if(!things_to_siphon.len)
|
if(!things_to_siphon.len)
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
return 0
|
return 0
|
||||||
siphoning = AM
|
siphoning = AM
|
||||||
update_icon()
|
update_icon()
|
||||||
|
log_and_message_admins("is siphoning energy from \a [AM].")
|
||||||
else
|
else
|
||||||
stop_siphoning()
|
stop_siphoning()
|
||||||
|
|
||||||
@@ -84,7 +86,7 @@
|
|||||||
/obj/item/weapon/spell/energy_siphon/proc/siphon(atom/movable/siphoning, mob/user)
|
/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/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/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)
|
if(!siphoning)
|
||||||
return 0
|
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>")
|
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 << "<span class='danger'>You ignite!</span>"
|
||||||
L.fire_act()
|
L.fire_act()
|
||||||
|
log_and_message_admins("has ignited [L] with [src].")
|
||||||
adjust_instability(12)
|
adjust_instability(12)
|
||||||
else
|
else
|
||||||
//This is needed in order for the welder to work, and works similarly to grippers.
|
//This is needed in order for the welder to work, and works similarly to grippers.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Corona"
|
name = "Corona"
|
||||||
desc = "Causes the victim to glow very brightly, which while harmless in itself, makes it easier for them to be hit. The \
|
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."
|
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
|
cost = 50
|
||||||
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"
|
||||||
@@ -18,11 +19,16 @@
|
|||||||
spell_light_range = 3
|
spell_light_range = 3
|
||||||
inserting = /obj/item/weapon/inserted_spell/corona
|
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()
|
/obj/item/weapon/inserted_spell/corona/on_insert()
|
||||||
spawn(1)
|
spawn(1)
|
||||||
if(isliving(host))
|
if(isliving(host))
|
||||||
var/mob/living/L = 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>")
|
L.visible_message("<span class='warning'>You start to glow very brightly!</span>")
|
||||||
spawn(1 MINUTE)
|
spawn(1 MINUTE)
|
||||||
if(src)
|
if(src)
|
||||||
@@ -31,6 +37,6 @@
|
|||||||
/obj/item/weapon/inserted_spell/corona/on_expire()
|
/obj/item/weapon/inserted_spell/corona/on_expire()
|
||||||
if(isliving(host))
|
if(isliving(host))
|
||||||
var/mob/living/L = host
|
var/mob/living/L = host
|
||||||
L.evasion += 2
|
L.evasion += evasion_reduction
|
||||||
L << "<span class='notice'>Your glow has ended.</span>"
|
L << "<span class='notice'>Your glow has ended.</span>"
|
||||||
..()
|
..()
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Haste"
|
name = "Haste"
|
||||||
desc = "Allows the target to run at speeds that should not be possible for an ordinary being. For five 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."
|
||||||
|
spell_power_desc = "Duration is scaled up."
|
||||||
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"
|
||||||
@@ -23,7 +24,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(5 SECONDS)
|
spawn(round(5 SECONDS * spell_power_at_creation, 1))
|
||||||
if(src)
|
if(src)
|
||||||
on_expire()
|
on_expire()
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
/obj/item/weapon/inserted_spell
|
/obj/item/weapon/inserted_spell
|
||||||
var/mob/living/carbon/human/origin = null
|
var/mob/living/carbon/human/origin = null
|
||||||
var/mob/living/host = 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)
|
/obj/item/weapon/inserted_spell/New(var/newloc, var/user, var/obj/item/weapon/spell/insert/inserter)
|
||||||
..(newloc)
|
..(newloc)
|
||||||
@@ -42,7 +43,9 @@
|
|||||||
if(IS.type == inserting)
|
if(IS.type == inserting)
|
||||||
user << "<span class='warning'>\The [L] is already affected by \the [src].</span>"
|
user << "<span class='warning'>\The [L] is already affected by \the [src].</span>"
|
||||||
return
|
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)
|
qdel(src)
|
||||||
|
|
||||||
/obj/item/weapon/spell/insert/on_melee_cast(atom/hit_atom, mob/user)
|
/obj/item/weapon/spell/insert/on_melee_cast(atom/hit_atom, mob/user)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/mend_burns
|
/datum/technomancer/spell/mend_burns
|
||||||
name = "Mend Burns"
|
name = "Mend Burns"
|
||||||
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
|
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
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"
|
||||||
@@ -20,6 +21,7 @@
|
|||||||
if(ishuman(host))
|
if(ishuman(host))
|
||||||
var/mob/living/carbon/human/H = host
|
var/mob/living/carbon/human/H = host
|
||||||
var/heal_power = host == origin ? 10 : 30
|
var/heal_power = host == origin ? 10 : 30
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(10)
|
origin.adjust_instability(10)
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/mend_metal
|
/datum/technomancer/spell/mend_metal
|
||||||
name = "Mend Metal"
|
name = "Mend Metal"
|
||||||
desc = "Restores integrity to external robotic components."
|
desc = "Restores integrity to external robotic components."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
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"
|
||||||
@@ -20,6 +21,7 @@
|
|||||||
if(ishuman(host))
|
if(ishuman(host))
|
||||||
var/mob/living/carbon/human/H = host
|
var/mob/living/carbon/human/H = host
|
||||||
var/heal_power = host == origin ? 10 : 30
|
var/heal_power = host == origin ? 10 : 30
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(10)
|
origin.adjust_instability(10)
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Great Mend Wounds"
|
name = "Great Mend Wounds"
|
||||||
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
|
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."
|
robotic, reforms bones, patches internal bleeding, and restores missing blood."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
cost = 100
|
cost = 100
|
||||||
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"
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
if(ishuman(host))
|
if(ishuman(host))
|
||||||
var/mob/living/carbon/human/H = host
|
var/mob/living/carbon/human/H = host
|
||||||
var/heal_power = host == origin ? 2 : 5
|
var/heal_power = host == origin ? 2 : 5
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(15)
|
origin.adjust_instability(15)
|
||||||
|
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/mend_wires
|
/datum/technomancer/spell/mend_wires
|
||||||
name = "Mend Wires"
|
name = "Mend Wires"
|
||||||
desc = "Binds the internal wiring of robotic limbs and components over time."
|
desc = "Binds the internal wiring of robotic limbs and components over time."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
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"
|
||||||
@@ -20,6 +21,7 @@
|
|||||||
if(ishuman(host))
|
if(ishuman(host))
|
||||||
var/mob/living/carbon/human/H = host
|
var/mob/living/carbon/human/H = host
|
||||||
var/heal_power = host == origin ? 10 : 30
|
var/heal_power = host == origin ? 10 : 30
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(10)
|
origin.adjust_instability(10)
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Mend Wounds"
|
name = "Mend Wounds"
|
||||||
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
|
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
|
||||||
Instability is split between the target and technomancer, if seperate."
|
Instability is split between the target and technomancer, if seperate."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
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"
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
if(ishuman(host))
|
if(ishuman(host))
|
||||||
var/mob/living/carbon/human/H = host
|
var/mob/living/carbon/human/H = host
|
||||||
var/heal_power = host == origin ? 10 : 30
|
var/heal_power = host == origin ? 10 : 30
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(10)
|
origin.adjust_instability(10)
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/purify
|
/datum/technomancer/spell/purify
|
||||||
name = "Purify"
|
name = "Purify"
|
||||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
||||||
|
spell_power_desc = "Healing amount increased."
|
||||||
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"
|
||||||
@@ -24,6 +25,7 @@
|
|||||||
// for(var/datum/disease/D in H.viruses)
|
// for(var/datum/disease/D in H.viruses)
|
||||||
// D.cure()
|
// D.cure()
|
||||||
var/heal_power = host == origin ? 10 : 30
|
var/heal_power = host == origin ? 10 : 30
|
||||||
|
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||||
origin.adjust_instability(10)
|
origin.adjust_instability(10)
|
||||||
for(var/i = 0, i<5,i++)
|
for(var/i = 0, i<5,i++)
|
||||||
if(H)
|
if(H)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
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 five 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."
|
||||||
|
spell_power_desc = "Projectiles will be more likely to be deflected."
|
||||||
cost = 25
|
cost = 25
|
||||||
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"
|
||||||
@@ -16,11 +17,15 @@
|
|||||||
light_color = "#FF5C5C"
|
light_color = "#FF5C5C"
|
||||||
inserting = /obj/item/weapon/inserted_spell/repel_missiles
|
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()
|
/obj/item/weapon/inserted_spell/repel_missiles/on_insert()
|
||||||
spawn(1)
|
spawn(1)
|
||||||
if(isliving(host))
|
if(isliving(host))
|
||||||
var/mob/living/L = 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>"
|
L << "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>"
|
||||||
spawn(5 MINUTES)
|
spawn(5 MINUTES)
|
||||||
if(src)
|
if(src)
|
||||||
@@ -29,6 +34,6 @@
|
|||||||
/obj/item/weapon/inserted_spell/repel_missiles/on_expire()
|
/obj/item/weapon/inserted_spell/repel_missiles/on_expire()
|
||||||
if(isliving(host))
|
if(isliving(host))
|
||||||
var/mob/living/L = host
|
var/mob/living/L = host
|
||||||
L.evasion -= 2
|
L.evasion -= evasion_increased
|
||||||
L << "<span class='warning'>Your repulsion field has expired.</span>"
|
L << "<span class='warning'>Your repulsion field has expired.</span>"
|
||||||
..()
|
..()
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Instability Tap"
|
name = "Instability Tap"
|
||||||
desc = "Creates a large sum of energy, at the cost of a very large amount of instability afflicting you."
|
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."
|
enhancement_desc = "50% more energy gained, 20% less instability gained."
|
||||||
|
spell_power_desc = "Amount of energy gained scaled up with spell power."
|
||||||
cost = 100
|
cost = 100
|
||||||
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"
|
||||||
@@ -18,10 +19,11 @@
|
|||||||
set_light(3, 2, l_color = "#FA58F4")
|
set_light(3, 2, l_color = "#FA58F4")
|
||||||
|
|
||||||
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
||||||
|
var/amount = calculate_spell_power(5000)
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
core.give_energy(7500)
|
core.give_energy(amount * 1.5)
|
||||||
adjust_instability(40)
|
adjust_instability(40)
|
||||||
else
|
else
|
||||||
core.give_energy(5000)
|
core.give_energy(amount)
|
||||||
adjust_instability(50)
|
adjust_instability(50)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
@@ -16,6 +16,8 @@
|
|||||||
cooldown = 30
|
cooldown = 30
|
||||||
|
|
||||||
/obj/item/weapon/spell/oxygenate/on_ranged_cast(atom/hit_atom, mob/user)
|
/obj/item/weapon/spell/oxygenate/on_ranged_cast(atom/hit_atom, mob/user)
|
||||||
|
if(!within_range(hit_atom))
|
||||||
|
return
|
||||||
if(ishuman(hit_atom))
|
if(ishuman(hit_atom))
|
||||||
var/mob/living/carbon/human/H = hit_atom
|
var/mob/living/carbon/human/H = hit_atom
|
||||||
if(pay_energy(1500))
|
if(pay_energy(1500))
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
/obj/item/weapon/spell/phase_shift/New()
|
/obj/item/weapon/spell/phase_shift/New()
|
||||||
..()
|
..()
|
||||||
set_light(3, 2, l_color = "#FA58F4")
|
set_light(3, 2, l_color = "#FA58F4")
|
||||||
processing_objects |= src
|
|
||||||
|
|
||||||
/obj/effect/phase_shift
|
/obj/effect/phase_shift
|
||||||
name = "rift"
|
name = "rift"
|
||||||
@@ -29,6 +28,7 @@
|
|||||||
/obj/effect/phase_shift/New()
|
/obj/effect/phase_shift/New()
|
||||||
..()
|
..()
|
||||||
set_light(3, 5, l_color = "#FA58F4")
|
set_light(3, 5, l_color = "#FA58F4")
|
||||||
|
processing_objects |= src
|
||||||
|
|
||||||
/obj/effect/phase_shift/Destroy()
|
/obj/effect/phase_shift/Destroy()
|
||||||
for(var/atom/movable/AM in contents) //Eject everything out.
|
for(var/atom/movable/AM in contents) //Eject everything out.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/beam
|
/datum/technomancer/spell/beam
|
||||||
name = "Beam"
|
name = "Beam"
|
||||||
desc = "Fires a laser at your target. Cheap, reliable, and a bit boring."
|
desc = "Fires a laser at your target. Cheap, reliable, and a bit boring."
|
||||||
|
spell_power_desc = "Increases damage dealt."
|
||||||
cost = 100
|
cost = 100
|
||||||
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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Chain Lightning"
|
name = "Chain Lightning"
|
||||||
desc = "This dangerous function shoots lightning that will strike someone, then bounce to a nearby person. Be careful that \
|
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 \
|
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
|
cost = 150
|
||||||
obj_path = /obj/item/weapon/spell/projectile/chain_lightning
|
obj_path = /obj/item/weapon/spell/projectile/chain_lightning
|
||||||
ability_icon_state = "tech_chain_lightning"
|
ability_icon_state = "tech_chain_lightning"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "Force Missile"
|
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 \
|
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."
|
that armor designed to protect from blunt force will mitigate this function as well."
|
||||||
|
spell_power_desc = "Increases damage dealt."
|
||||||
cost = 50
|
cost = 50
|
||||||
obj_path = /obj/item/weapon/spell/projectile/force_missile
|
obj_path = /obj/item/weapon/spell/projectile/force_missile
|
||||||
category = OFFENSIVE_SPELLS
|
category = OFFENSIVE_SPELLS
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Lightning Strike"
|
name = "Lightning Strike"
|
||||||
desc = "This uses a hidden electrolaser, which creates a laser beam to ionize the enviroment, allowing for ideal conditions \
|
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 \
|
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
|
cost = 150
|
||||||
obj_path = /obj/item/weapon/spell/projectile/lightning
|
obj_path = /obj/item/weapon/spell/projectile/lightning
|
||||||
category = OFFENSIVE_SPELLS
|
category = OFFENSIVE_SPELLS
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/datum/technomancer/spell/overload
|
/datum/technomancer/spell/overload
|
||||||
name = "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. \
|
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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/spell/projectile/overload
|
obj_path = /obj/item/weapon/spell/projectile/overload
|
||||||
category = OFFENSIVE_SPELLS
|
category = OFFENSIVE_SPELLS
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
/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)
|
||||||
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.damage = calculate_spell_power(new_projectile.damage)
|
||||||
new_projectile.launch(hit_atom)
|
new_projectile.launch(hit_atom)
|
||||||
log_and_message_admins("has casted [src] at \the [hit_atom].")
|
log_and_message_admins("has casted [src] at \the [hit_atom].")
|
||||||
if(fire_sound)
|
if(fire_sound)
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
/datum/technomancer/spell/radiance
|
/datum/technomancer/spell/radiance
|
||||||
name = "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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/spell/radiance
|
obj_path = /obj/item/weapon/spell/radiance
|
||||||
category = OFFENSIVE_SPELLS
|
category = OFFENSIVE_SPELLS
|
||||||
@@ -10,36 +13,41 @@
|
|||||||
desc = "You will glow with a radiance similar to that of Supermatter."
|
desc = "You will glow with a radiance similar to that of Supermatter."
|
||||||
icon_state = "radiance"
|
icon_state = "radiance"
|
||||||
aspect = ASPECT_LIGHT
|
aspect = ASPECT_LIGHT
|
||||||
var/power = 100
|
var/power = 250
|
||||||
toggled = 1
|
toggled = 1
|
||||||
|
|
||||||
/obj/item/weapon/spell/radiance/New()
|
/obj/item/weapon/spell/radiance/New()
|
||||||
..()
|
..()
|
||||||
set_light(7, 4, l_color = "#D9D900")
|
set_light(7, 4, l_color = "#D9D900")
|
||||||
processing_objects |= src
|
processing_objects |= src
|
||||||
|
log_and_message_admins("has casted [src].")
|
||||||
|
|
||||||
/obj/item/weapon/spell/radiance/Destroy()
|
/obj/item/weapon/spell/radiance/Destroy()
|
||||||
processing_objects -= src
|
processing_objects -= src
|
||||||
|
log_and_message_admins("has stopped maintaining [src].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/spell/radiance/process()
|
/obj/item/weapon/spell/radiance/process()
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
var/datum/gas_mixture/removed = null
|
var/datum/gas_mixture/removed = null
|
||||||
var/datum/gas_mixture/env = null
|
var/datum/gas_mixture/env = null
|
||||||
|
var/adjusted_power = calculate_spell_power(power)
|
||||||
|
|
||||||
if(!istype(T, /turf/space))
|
if(!istype(T, /turf/space))
|
||||||
env = T.return_air()
|
env = T.return_air()
|
||||||
removed = env.remove(0.25 * env.total_moles) //Remove gas from surrounding area
|
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.add_thermal_energy(thermal_power)
|
||||||
removed.temperature = between(0, removed.temperature, 10000)
|
removed.temperature = between(0, removed.temperature, 10000)
|
||||||
|
|
||||||
env.merge(removed)
|
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/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)
|
L.apply_effect(rads, IRRADIATE)
|
||||||
adjust_instability(2)
|
adjust_instability(2)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
user << "<span class='warning'>\The [L] isn't dead!</span>"
|
user << "<span class='warning'>\The [L] isn't dead!</span>"
|
||||||
return 0
|
return 0
|
||||||
if(pay_energy(5000))
|
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 \
|
user << "<span class='danger'>\The [L]'s been dead for too long, even this function cannot replace cloning at \
|
||||||
this point.</span>"
|
this point.</span>"
|
||||||
return 0
|
return 0
|
||||||
@@ -57,7 +57,8 @@
|
|||||||
H.timeofdeath = null
|
H.timeofdeath = null
|
||||||
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
||||||
user << "<span class='notice'>It's alive!</span>"
|
user << "<span class='notice'>It's alive!</span>"
|
||||||
adjust_instability(100)
|
adjust_instability(50)
|
||||||
|
log_and_message_admins("has resurrected [H].")
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
||||||
adjust_instability(10)
|
adjust_instability(10)
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
/datum/technomancer/spell/shared_burden
|
/datum/technomancer/spell/shared_burden
|
||||||
name = "Shared Burden"
|
name = "Shared Burden"
|
||||||
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."
|
||||||
|
spell_power_desc = "Draws bonus instability from the target, with the bonus dissipating harmlessly, for 'free'."
|
||||||
cost = 50
|
cost = 50
|
||||||
obj_path = /obj/item/weapon/spell/shared_burden
|
obj_path = /obj/item/weapon/spell/shared_burden
|
||||||
category = SUPPORT_SPELLS
|
category = SUPPORT_SPELLS
|
||||||
@@ -13,16 +14,16 @@
|
|||||||
aspect = ASPECT_UNSTABLE
|
aspect = ASPECT_UNSTABLE
|
||||||
|
|
||||||
/obj/item/weapon/spell/shared_burden/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
/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
|
var/mob/living/carbon/human/H = hit_atom
|
||||||
if(H == user)
|
if(H == user)
|
||||||
user << "<span class='warning'>Draining instability out of you to put it back seems a bit pointless.</span>"
|
user << "<span class='warning'>Draining instability out of you to put it back seems a bit pointless.</span>"
|
||||||
return 0
|
return 0
|
||||||
if(!H.instability)
|
if(H.instability <= 0)
|
||||||
user << "<span class='warning'>\The [H] has no instability to drain.</span>"
|
user << "<span class='warning'>\The [H] has no instability to drain.</span>"
|
||||||
return 0
|
return 0
|
||||||
if(pay_energy(500))
|
if(pay_energy(500))
|
||||||
var/instability_to_drain = min(H.instability, 25)
|
var/instability_to_drain = min(H.instability, 25)
|
||||||
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
|
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
|
||||||
adjust_instability(instability_to_drain)
|
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
|
/datum/technomancer/spell/shield
|
||||||
name = "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 \
|
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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/spell/shield
|
obj_path = /obj/item/weapon/spell/shield
|
||||||
ability_icon_state = "tech_shield"
|
ability_icon_state = "tech_shield"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
spawner_type = /obj/effect/temporary_effect/fire_blast
|
spawner_type = /obj/effect/temporary_effect/fire_blast
|
||||||
|
|
||||||
/obj/item/weapon/spell/spawner/fire_blast/on_ranged_cast(atom/hit_atom, mob/user)
|
/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)
|
adjust_instability(12)
|
||||||
..() // Makes the booms happen.
|
..() // Makes the booms happen.
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
set_light(3, 2, l_color = "#2ECCFA")
|
set_light(3, 2, l_color = "#2ECCFA")
|
||||||
|
|
||||||
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
|
/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)
|
adjust_instability(8)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -27,4 +27,5 @@
|
|||||||
if(T)
|
if(T)
|
||||||
new spawner_type(T)
|
new spawner_type(T)
|
||||||
user << "<span class='notice'>You shift \the [src] onto \the [T].</span>"
|
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)
|
qdel(src)
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/spell/summon/on_ranged_cast(atom/hit_atom, mob/living/user)
|
/obj/item/weapon/spell/summon/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||||
var/turf/T = get_turf(hit_atom)
|
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)
|
var/obj/effect/E = new(T)
|
||||||
E.icon = 'icons/obj/objects.dmi'
|
E.icon = 'icons/obj/objects.dmi'
|
||||||
E.icon_state = "anom"
|
E.icon_state = "anom"
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
on_summon(L)
|
on_summon(L)
|
||||||
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
|
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>")
|
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)
|
user.adjust_instability(instability_cost)
|
||||||
|
|
||||||
/obj/item/weapon/spell/summon/on_use_cast(mob/living/user)
|
/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 \
|
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."
|
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."
|
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
|
cost = 100
|
||||||
obj_path = /obj/item/weapon/spell/summon/summon_creature
|
obj_path = /obj/item/weapon/spell/summon/summon_creature
|
||||||
category = UTILITY_SPELLS
|
category = UTILITY_SPELLS
|
||||||
@@ -37,10 +38,18 @@
|
|||||||
instability_cost = 10
|
instability_cost = 10
|
||||||
energy_cost = 1000
|
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())
|
if(check_for_scepter())
|
||||||
// summoned.faction = "technomancer"
|
// summoned.faction = "technomancer"
|
||||||
if(istype(summoned, /mob/living/simple_animal/hostile))
|
if(istype(summoned, /mob/living/simple_animal/hostile))
|
||||||
var/mob/living/simple_animal/SA = summoned
|
var/mob/living/simple_animal/SA = summoned
|
||||||
SA.friends.Add(owner)
|
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)
|
summoned.health = round(summoned.maxHealth * 0.7)
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
/datum/technomancer/spell/summon_ward
|
/datum/technomancer/spell/summon_ward
|
||||||
name = "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 \
|
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."
|
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."
|
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
|
cost = 25
|
||||||
obj_path = /obj/item/weapon/spell/summon/summon_ward
|
obj_path = /obj/item/weapon/spell/summon/summon_ward
|
||||||
category = UTILITY_SPELLS
|
category = UTILITY_SPELLS
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
/obj/item/weapon/spell/warp_strike/on_ranged_cast(atom/hit_atom, mob/user)
|
/obj/item/weapon/spell/warp_strike/on_ranged_cast(atom/hit_atom, mob/user)
|
||||||
var/turf/T = get_turf(hit_atom)
|
var/turf/T = get_turf(hit_atom)
|
||||||
if(T)
|
if(T)
|
||||||
|
if(!within_range(T))
|
||||||
|
return
|
||||||
//First, we handle who to teleport to.
|
//First, we handle who to teleport to.
|
||||||
user.setClickCooldown(5)
|
user.setClickCooldown(5)
|
||||||
var/mob/living/chosen_target = targeting_assist(T,5) //The person who's about to get attacked.
|
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)
|
I.afterattack(chosen_target, user)
|
||||||
else
|
else
|
||||||
chosen_target.attack_hand(user)
|
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