mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 15:08:34 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into novearlysync
# Conflicts: # html/changelogs/.all_changelog.yml # icons/mob/hud.dmi # maps/polaris-1.dmm Fake conflicts from a merge error previously. No real conflicts.
This commit is contained in:
@@ -110,7 +110,8 @@
|
||||
|
||||
|
||||
// Defines mob sizes, used by lockers and to determine what is considered a small sized mob, etc.
|
||||
#define MOB_LARGE 40
|
||||
#define MOB_HUGE 40
|
||||
#define MOB_LARGE 30
|
||||
#define MOB_MEDIUM 20
|
||||
#define MOB_SMALL 10
|
||||
#define MOB_TINY 5
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/proc/create_objects_in_loc(var/atom/loc, var/list/item_paths)
|
||||
if(!istype(loc))
|
||||
CRASH("Inappropriate loction given.")
|
||||
if(!istype(item_paths))
|
||||
CRASH("Inappropriate item path list given.")
|
||||
|
||||
for(var/item_path in item_paths)
|
||||
for(var/i = 1 to max(1, item_paths[item_path]))
|
||||
new item_path(loc)
|
||||
@@ -97,7 +97,8 @@
|
||||
var/i = 1
|
||||
for(var/obj/screen/ability/ability in ability_objects)
|
||||
ability.update_icon(forced)
|
||||
ability.maptext = "[i]" // Slot number
|
||||
ability.index = i
|
||||
ability.maptext = "[ability.index]" // Slot number
|
||||
i++
|
||||
|
||||
/obj/screen/movable/ability_master/update_icon()
|
||||
@@ -195,6 +196,7 @@
|
||||
maptext_x = 3
|
||||
var/background_base_state = "grey"
|
||||
var/ability_icon_state = null
|
||||
var/index = 0
|
||||
|
||||
// var/spell/spell = null
|
||||
var/obj/screen/movable/ability_master/ability_master
|
||||
@@ -260,6 +262,16 @@
|
||||
// spell.perform(usr)
|
||||
activate()
|
||||
|
||||
/obj/screen/ability/MouseDrop(var/atom/A)
|
||||
if(!A || A == src)
|
||||
return
|
||||
if(istype(A, /obj/screen/ability))
|
||||
var/obj/screen/ability/ability = A
|
||||
if(ability.ability_master && ability.ability_master == src.ability_master)
|
||||
ability_master.ability_objects.Swap(src.index, ability.index)
|
||||
ability_master.toggle_open(2) // To update the UI.
|
||||
|
||||
|
||||
// Makes the ability be triggered. The subclasses of this are responsible for carrying it out in whatever way it needs to.
|
||||
/obj/screen/ability/proc/activate()
|
||||
world << "[src] had activate() called."
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/pirate,
|
||||
/obj/item/clothing/suit/judgerobe,
|
||||
/obj/item/clothing/suit/wcoat,
|
||||
/obj/item/clothing/accessory/wcoat,
|
||||
/obj/item/clothing/suit/hastur,
|
||||
/obj/item/clothing/suit/holidaypriest,
|
||||
/obj/item/clothing/suit/nun,
|
||||
@@ -102,7 +102,7 @@
|
||||
/obj/item/clothing/under/lawyer/purpsuit,
|
||||
/obj/item/clothing/shoes/black = 2,
|
||||
/obj/item/clothing/shoes/leather,
|
||||
/obj/item/clothing/suit/wcoat
|
||||
/obj/item/clothing/accessory/wcoat
|
||||
)
|
||||
name = "Formalwear closet"
|
||||
cost = 30
|
||||
|
||||
@@ -57,4 +57,9 @@
|
||||
|
||||
/datum/category_item/underwear/bottom/fishnet_lower
|
||||
name = "Fishnets"
|
||||
icon_state = "fishnet_lower"
|
||||
icon_state = "fishnet_lower"
|
||||
|
||||
/datum/category_item/underwear/bottom/striped_panties
|
||||
name = "Striped Panties"
|
||||
icon_state = "striped_panties"
|
||||
has_color = TRUE
|
||||
@@ -57,4 +57,9 @@
|
||||
|
||||
/datum/category_item/underwear/top/fishnet_gloves
|
||||
name = "Fishnet with gloves"
|
||||
icon_state = "fishnet_gloves"
|
||||
icon_state = "fishnet_gloves"
|
||||
|
||||
/datum/category_item/underwear/top/striped_bra
|
||||
name = "Striped Bra"
|
||||
icon_state = "striped_bra"
|
||||
has_color = TRUE
|
||||
@@ -81,3 +81,25 @@ var/datum/antagonist/technomancer/technomancers
|
||||
feedback_set_details("round_end_result","loss - technomancer killed")
|
||||
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been \
|
||||
killed!</font></span>"
|
||||
|
||||
/datum/antagonist/technomancer/print_player_summary()
|
||||
..()
|
||||
for(var/obj/item/weapon/technomancer_core/core in technomancer_belongings)
|
||||
if(core.wearer)
|
||||
continue // Only want abandoned cores.
|
||||
if(!core.spells.len)
|
||||
continue // Cores containing spells only.
|
||||
world << "Abandoned [core] had [english_list(core.spells)].<br>"
|
||||
|
||||
/datum/antagonist/technomancer/print_player_full(var/datum/mind/player)
|
||||
var/text = print_player_lite(player)
|
||||
|
||||
var/obj/item/weapon/technomancer_core/core
|
||||
if(player.original)
|
||||
core = locate() in player.original
|
||||
if(core)
|
||||
text += "<br>Bought [english_list(core.spells)], and used \a [core]."
|
||||
else
|
||||
text += "<br>They've lost their core."
|
||||
|
||||
return text
|
||||
|
||||
@@ -12,7 +12,6 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
/datum/technomancer
|
||||
var/name = "technomancer thing"
|
||||
var/desc = "If you can see this, something broke."
|
||||
var/enhancement_desc = "No effect."
|
||||
var/cost = 100
|
||||
var/hidden = 0
|
||||
var/obj_path = null
|
||||
@@ -20,6 +19,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
|
||||
/datum/technomancer/spell
|
||||
var/category = ALL_SPELLS
|
||||
var/enhancement_desc = null
|
||||
var/spell_power_desc = null
|
||||
|
||||
/obj/item/weapon/technomancer_catalog
|
||||
name = "catalog"
|
||||
@@ -28,6 +29,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state ="scientology" //placeholder
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
var/budget = 1000
|
||||
var/max_budget = 1000
|
||||
var/mob/living/carbon/human/owner = null
|
||||
@@ -35,7 +37,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
var/list/equipment_instances = list()
|
||||
var/list/consumable_instances = list()
|
||||
var/list/assistance_instances = list()
|
||||
var/tab = 0
|
||||
var/tab = 4 // Info tab, so new players can read it before doing anything.
|
||||
var/spell_tab = ALL_SPELLS
|
||||
var/show_scepter_text = 0
|
||||
|
||||
@@ -116,7 +118,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<align='center'><b>Functions</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];refund_functions=1'>Refund Functions</a><br><br>"
|
||||
|
||||
@@ -129,8 +132,10 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
continue
|
||||
dat += "<b>[spell.name]</b><br>"
|
||||
dat += "<i>[spell.desc]</i><br>"
|
||||
if(show_scepter_text)
|
||||
dat += "<span class='info'><i>[spell.enhancement_desc]</i></span>"
|
||||
if(spell.spell_power_desc)
|
||||
dat += "<font color='purple'>Spell Power: [spell.spell_power_desc]</font><br>"
|
||||
if(spell.enhancement_desc)
|
||||
dat += "<font color='blue'>Scepter Effect: [spell.enhancement_desc]</font><br>"
|
||||
if(spell.cost <= budget)
|
||||
dat += "<a href='byond://?src=\ref[src];spell_choice=[spell.name]'>Purchase</a> ([spell.cost])<br><br>"
|
||||
else
|
||||
@@ -143,7 +148,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
|
||||
dat += "<b>Equipment</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/equipment/E in equipment_instances)
|
||||
dat += "<b>[E.name]</b><br>"
|
||||
@@ -160,7 +166,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
|
||||
dat += "<b>Consumables</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a></align><br>"
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/consumable/C in consumable_instances)
|
||||
dat += "<b>[C.name]</b><br>"
|
||||
@@ -177,7 +184,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
|
||||
dat += "<b>Assistance</b></align><br>"
|
||||
dat += "<b>Assistance</b> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=4'>Info</a></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
for(var/datum/technomancer/assistance/A in assistance_instances)
|
||||
dat += "<b>[A.name]</b><br>"
|
||||
@@ -188,6 +196,72 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
dat += "<font color='red'><b>Cannot afford!</b></font><br><br>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
if(4) //Info
|
||||
var/dat = ""
|
||||
user.set_machine(src)
|
||||
dat += "<align='center'><a href='byond://?src=\ref[src];tab_choice=0'>Functions</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=1'>Equipment</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=2'>Consumables</a> | "
|
||||
dat += "<a href='byond://?src=\ref[src];tab_choice=3'>Assistance</a> | "
|
||||
dat += "<b>Info</b></align><br>"
|
||||
dat += "You currently have a budget of <b>[budget]/[max_budget]</b>.<br><br>"
|
||||
dat += "<br>"
|
||||
dat += "<h1>Manipulation Core Owner's Manual</h1><br>"
|
||||
dat += "This brief entry in your catelog will try to explain what everything does. For starters, the thing you're \
|
||||
probably wearing on your back is known as a <b>Manipulation Core</b>, or just a 'Core'. It allows you to do amazing \
|
||||
things with almost no effort, depending on what <b>functions</b> you've purchased for it. Don't lose your core!<br>"
|
||||
dat += "<br>"
|
||||
dat += "There are a few things you need to keep in mind as you use your Core to manipulate the universe. The core \
|
||||
requires a special type of <b>energy</b>, that is referred to as just 'Energy' in the catelog. All cores generate \
|
||||
their own energy, some more than others. Most functions require energy be spent in order to work, so make sure not \
|
||||
to run out in a critical moment. Besides waiting for your Core to recharge, you can buy certain functions which \
|
||||
do something to generate energy.<br>"
|
||||
dat += "<br>"
|
||||
dat += "The second thing you need to know is that awesome power over the physical world has consquences, in the form \
|
||||
of <b>Instability</b>. Instability is the result of your Core's energy being used to fuel it, and so little is \
|
||||
understood about it, even among fellow Core owners, however it is almost always a bad thing to have. Instability will \
|
||||
'cling' to you as you use functions, with powerful functions creating lots of instability. The effects of holding onto \
|
||||
instability are generally harmless or mildly annoying at low levels, with effects such as sparks in the air or forced \
|
||||
blinking. Accumulating more and more instability will lead to worse things happening, which can easily be fatal, if not \
|
||||
managed properly.<br>"
|
||||
dat += "<br>"
|
||||
dat += "Fortunately, all Cores come with a meter to tell you how much instability you currently hold. \
|
||||
Instability will go away on its own as time goes on. You can tell if you have instability by the characteristic \
|
||||
purple colored lightning that appears around something with instability lingering on it. High amounts of instability \
|
||||
may cause the object afflicted with it to glow a dark purple, which is often known simply as <b>Glow</b>, which spreads \
|
||||
the instability. You should stay far away from anyone afflicted by Glow, as they will be a danger to both themselves and \
|
||||
anything nearby. Multiple sources of Glow can perpetuate the glow for a very long time if they are not seperated.<br>"
|
||||
dat += "<br>"
|
||||
dat += "You should strive to keep you and your apprentices' cores secure. To help with this, each core comes with a \
|
||||
locking mechanism, which should make attempts at forceful removal by third parties (or you) futile, until it is \
|
||||
unlocked again. Do note that there is a safety mechanism, which will automatically unlock the core if the wearer \
|
||||
suffers death. There exists a secondary safety mechanism (safety for the core, not you) that is triggered when \
|
||||
the core detects itself being carried, with the carrier not being authorized. It will respond by giving a \
|
||||
massive amount of Instability to them, so be careful, or perhaps make use of that.<br>"
|
||||
dat += "<br>"
|
||||
dat += "<b>You can refund functions, equipment items, and assistance items, so long as you are in your base.</b> \
|
||||
Once you leave, you can't refund anything, however you can still buy things if you still have points remaining. \
|
||||
To refund functions, just click the 'Refund Functions' button on the top, when in the functions tabs. \
|
||||
For equipment items, you need to hit it against the catelog.<br>"
|
||||
dat += "<br>"
|
||||
dat += "Your blue robes and hat are both stylish, and somewhat protective against hostile energies, which includes \
|
||||
EXTERNAL instability sources (like Glow), and mundane electricity. If you're looking for protection against other \
|
||||
things, it's suggested you purchase or otherwise obtain armor.<br>"
|
||||
dat += "<br>"
|
||||
dat += "There are a few terms you may not understand in the catelog, so this will try to explain them.<br>"
|
||||
dat += "A function can be thought of as a 'spell', that you use by holding in your hands and trying to use it on \
|
||||
a target of your choice.<br>"
|
||||
dat += "Some functions can have their abilities enhanced by a special rod called the Scepter of Enhancement. \
|
||||
If a function is able to be boosted with it, it will be shown underneath the description of the function as \
|
||||
<font color='blue'><i>'Scepter Effect:'</i></font>. Note that you must hold the scepter for it to work, so try to avoid losing it.<br>"
|
||||
dat += "Functions can also be boosted with the core itself. A function that is able to benefit \
|
||||
from this will have <font color='purple'><i>'Spell Power:'</i></font> underneath. Different Cores have different \
|
||||
amounts of spell power.<br>"
|
||||
dat += "When a function refers to 'allies', it means you, your apprentices, currently controlled entities (with the \
|
||||
Control function), and friendly simple-minded entities that you've summoned with the Scepter of Enhancement.<br>"
|
||||
dat += "A meter is equal to one 'tile'.<br>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
|
||||
// Proc: Topic()
|
||||
// Parameters: 2 (href - don't know, href_list - the choice that the person using the interface above clicked on.)
|
||||
@@ -266,8 +340,36 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
if(core)
|
||||
for(var/obj/spellbutton/spell in core.spells)
|
||||
for(var/datum/technomancer/spell/spell_datum in spell_instances)
|
||||
if(spell_datum.obj_path == spell.spellpath && !spell.was_bought_by_preset)
|
||||
if(spell_datum.obj_path == spell.spellpath)
|
||||
budget += spell_datum.cost
|
||||
core.remove_spell(spell)
|
||||
break
|
||||
attack_self(H)
|
||||
|
||||
/obj/item/weapon/technomancer_catalog/attackby(var/atom/movable/AM, var/mob/user)
|
||||
if(user.z != 2)
|
||||
to_chat(user, "<span class='danger'>You can only refund at your base, it's too late now!</span>")
|
||||
return
|
||||
for(var/datum/technomancer/equipment/E in equipment_instances + assistance_instances)
|
||||
if(AM.type == E.obj_path) // We got a match.
|
||||
if(budget + E.cost > max_budget)
|
||||
to_chat(user, "<span class='warning'>\The [src] will not allow you to overflow your maximum budget by refunding that.</span>")
|
||||
return
|
||||
else
|
||||
budget = budget + E.cost
|
||||
to_chat(user, "<span class='notice'>You've refunded \the [AM].</span>")
|
||||
|
||||
// We sadly need to do special stuff here or else people who refund cores with spells will lose points permanently.
|
||||
if(istype(AM, /obj/item/weapon/technomancer_core))
|
||||
var/obj/item/weapon/technomancer_core/core = AM
|
||||
for(var/obj/spellbutton/spell in core.spells)
|
||||
for(var/datum/technomancer/spell/spell_datum in spell_instances)
|
||||
if(spell_datum.obj_path == spell.spellpath)
|
||||
budget += spell_datum.cost
|
||||
to_chat(user, "<span class='notice'>[spell.name] was inside \the [core], and was refunded.</span>")
|
||||
core.remove_spell(spell)
|
||||
break
|
||||
qdel(AM)
|
||||
return
|
||||
to_chat(user, "<span class='warn'>\The [src] is unable to refund \the [AM].</span>")
|
||||
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
var/regen_rate = 50 // 200 seconds to full
|
||||
var/energy_delta = 0 // How much we're gaining (or perhaps losing) every process().
|
||||
var/mob/living/wearer = null // Reference to the mob wearing the core.
|
||||
var/instability_modifer = 0.8 // Multiplier on how much instability is added.
|
||||
var/instability_modifier = 0.8 // Multiplier on how much instability is added.
|
||||
var/energy_cost_modifier = 1.0 // Multiplier on how much spells will cost.
|
||||
var/spell_power_modifier = 1.0 // Multiplier on how strong spells are.
|
||||
var/list/spells = list() // This contains the buttons used to make spells in the user's hand.
|
||||
var/list/appearances = list( // Assoc list containing possible icon_states that the wiz can change the core to.
|
||||
"default" = "technomancer_core",
|
||||
@@ -67,6 +69,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/technomancer_core/proc/pay_energy(amount)
|
||||
amount = round(amount * energy_cost_modifier, 0.1)
|
||||
if(amount <= energy)
|
||||
energy = max(energy - amount, 0)
|
||||
return 1
|
||||
@@ -131,7 +134,6 @@
|
||||
name = "generic spellbutton"
|
||||
var/spellpath = null
|
||||
var/obj/item/weapon/technomancer_core/core = null
|
||||
var/was_bought_by_preset = 0 // Relevant for refunding via the spellbook. Presets may be priced differently.
|
||||
var/ability_icon_state = null
|
||||
|
||||
/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
|
||||
@@ -222,7 +224,9 @@
|
||||
energy = 13000
|
||||
max_energy = 13000
|
||||
regen_rate = 35 //~371 seconds to full, 118 seconds to full at 50 instability (rate of 110)
|
||||
instability_modifer = 1.2
|
||||
instability_modifier = 1.2
|
||||
energy_cost_modifier = 0.7
|
||||
spell_power_modifier = 1.1
|
||||
|
||||
/obj/item/weapon/technomancer_core/unstable/regenerate()
|
||||
var/instability_bonus = 0
|
||||
@@ -243,19 +247,21 @@
|
||||
max_energy = 7000
|
||||
regen_rate = 70 //100 seconds to full
|
||||
slowdown = -1
|
||||
instability_modifer = 0.9
|
||||
instability_modifier = 0.9
|
||||
|
||||
//Big batteries but slow regen, buying energy spells is highly recommended.
|
||||
/obj/item/weapon/technomancer_core/bulky
|
||||
name = "bulky core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This variant is more \
|
||||
cumbersome and bulky, due to the additional energy capacitors installed. It also comes at a price of a subpar fractal \
|
||||
cumbersome and bulky, due to the additional energy capacitors installed, which allows for a massive energy storage, as well \
|
||||
as stronger function usage. It also comes at a price of a subpar fractal \
|
||||
reactor."
|
||||
energy = 20000
|
||||
max_energy = 20000
|
||||
regen_rate = 25 //800 seconds to full
|
||||
slowdown = 1
|
||||
instability_modifer = 1.0
|
||||
instability_modifier = 1.0
|
||||
spell_power_modifier = 1.4
|
||||
|
||||
// Using this can result in abilities costing less energy. If you're lucky.
|
||||
/obj/item/weapon/technomancer_core/recycling
|
||||
@@ -265,15 +271,17 @@
|
||||
energy = 12000
|
||||
max_energy = 12000
|
||||
regen_rate = 40 //300 seconds to full
|
||||
instability_modifer = 0.6
|
||||
instability_modifier = 0.6
|
||||
energy_cost_modifier = 0.8
|
||||
|
||||
/obj/item/weapon/technomancer_core/recycling/pay_energy(amount)
|
||||
..()
|
||||
if(.)
|
||||
var/success = ..()
|
||||
if(success)
|
||||
if(prob(30))
|
||||
give_energy(round(amount / 2))
|
||||
if(amount >= 100) // Managing to recover less than half of this isn't worth telling the user about.
|
||||
if(amount >= 50) // Managing to recover less than half of this isn't worth telling the user about.
|
||||
wearer << "<span class='notice'>\The [src] has recovered [amount/2 >= 1000 ? "a lot of" : "some"] energy.</span>"
|
||||
return success
|
||||
|
||||
// For those dedicated to summoning hoards of things.
|
||||
/obj/item/weapon/technomancer_core/summoner
|
||||
@@ -285,12 +293,37 @@
|
||||
max_energy = 8000
|
||||
regen_rate = 35 //228 seconds to full
|
||||
max_summons = 40
|
||||
instability_modifer = 1.0
|
||||
instability_modifier = 1.2
|
||||
spell_power_modifier = 1.2
|
||||
|
||||
/obj/item/weapon/technomancer_core/summoner/pay_dues()
|
||||
if(summoned_mobs.len)
|
||||
pay_energy( round(summoned_mobs.len) )
|
||||
|
||||
// For those who hate instability.
|
||||
/obj/item/weapon/technomancer_core/safety
|
||||
name = "safety core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This type is designed to be \
|
||||
the closest thing you can get to 'safe' for a Core. Instability from this is significantly reduced. You can even dance if \
|
||||
you want to, and leave your apprentice behind."
|
||||
energy = 7000
|
||||
max_energy = 7000
|
||||
regen_rate = 30 //233 seconds to full
|
||||
instability_modifier = 0.3
|
||||
spell_power_modifier = 0.7
|
||||
|
||||
// For those who want to blow everything on a few spells.
|
||||
/obj/item/weapon/technomancer_core/overcharged
|
||||
name = "overcharged core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This type will use as much \
|
||||
energy as it can in order to pump up the strength of functions used to insane levels."
|
||||
energy = 15000
|
||||
max_energy = 15000
|
||||
regen_rate = 40 //375 seconds to full
|
||||
instability_modifier = 1.1
|
||||
spell_power_modifier = 1.75
|
||||
energy_cost_modifier = 2.0
|
||||
|
||||
/obj/item/weapon/technomancer_core/verb/toggle_lock()
|
||||
set name = "Toggle Core Lock"
|
||||
set category = "Object"
|
||||
|
||||
@@ -1,55 +1,106 @@
|
||||
/datum/technomancer/equipment/default_core
|
||||
name = "Manipulation Core"
|
||||
// desc = "The default core that you most likely already have. This is here in-case you change your mind after buying \
|
||||
// another core, don't forget to refund the old core. This has a capacity of 10,000 units of energy, and recharges at a \
|
||||
// rate of 50 units. It also reduces incoming instability from functions by 20%."
|
||||
desc = "The default core that you most likely already have. This is here in-case you change your mind after buying \
|
||||
another core, don't forget to refund the old core. This has a capacity of 10,000 units of energy, and recharges at a \
|
||||
rate of 50 units. It also reduces incoming instability from functions by 20%."
|
||||
another core, don't forget to refund the old core.<br>\
|
||||
Capacity: 10k<br>\
|
||||
Recharge: 50/s<br>\
|
||||
Instability Modifier: 80%<br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core
|
||||
|
||||
/datum/technomancer/equipment/rapid_core
|
||||
name = "Rapid Core"
|
||||
desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \
|
||||
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster, and \
|
||||
reduces incoming instability from functions by 10%."
|
||||
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster.<br>\
|
||||
<font color='red'>Capacity: 7k</font><br>\
|
||||
<font color='green'><b>Recharge: 70/s</b></font><br>\
|
||||
<font color='red'>Instability Modifier: 90%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/rapid
|
||||
|
||||
/datum/technomancer/equipment/bulky_core
|
||||
name = "Bulky Core"
|
||||
desc = "This core has very large capacitors, however it also has a subpar fractal reactor. The user is recommended to \
|
||||
purchase one or more energy-generating Functions as well if using this core. Has a capacity of 20,000 units of energy, \
|
||||
and recharges at a rate of 25 units. The intense weight of the core unfortunately can cause the wear to move slightly slower, \
|
||||
and the closeness of the capacitors causes a slight increase in incoming instability by 10%."
|
||||
purchase one or more energy-generating Functions as well if using this core. The intense weight of the core unfortunately can \
|
||||
cause the wear to move slightly slower, and the closeness of the capacitors causes a slight increase in incoming instability.<br>\
|
||||
<font color='green'><b>Capacity: 20k</b></font><br>\
|
||||
<font color='red'>Recharge: 25/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 100%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='green'>Spell Power: 140%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/bulky
|
||||
|
||||
/datum/technomancer/equipment/unstable
|
||||
name = "Unstable Core"
|
||||
desc = "This core feeds off unstable energies around the user in addition to a fractal reactor. This means that it performs \
|
||||
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. Has a capacity of 13,000 \
|
||||
units of energy, and recharges at a rate of 35 units at no instability, and approximately 110 units when within the \
|
||||
'yellow zone' of instability. Incoming instability is also amplified by 30%, due to the nature of this core."
|
||||
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. The rate of recharging \
|
||||
increases as the user accumulates more instability, eventually exceeding even the rapid core in regen speed, at a huge risk.<br>\
|
||||
<font color='green'>Capacity: 13k</font><br>\
|
||||
<font color='green'>Recharge: 35/s to 110/s+</font><br>\
|
||||
<font color='red'><b>Instability Modifier: 130%</b></font><br>\
|
||||
<font color='green'>Energy Cost Modifier: 70%</font><br>\
|
||||
<font color='green'>Spell Power: 110%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/unstable
|
||||
|
||||
/datum/technomancer/equipment/recycling
|
||||
name = "Recycling Core"
|
||||
desc = "This core is optimized for energy efficency, being able to sometimes recover energy that would have been lost with other \
|
||||
cores. The focus on efficency also makes instability less of an issue, as incoming instability from functions are reduced by \
|
||||
40%. The capacitor is also slightly better, holding 12,000 units of energy, however the reactor is slower to recharge, at a rate \
|
||||
of 40 units."
|
||||
cores. Each time energy is spent, there is a 30% chance of recovering half of what was spent.<br>\
|
||||
<font color='green'>Capacity: 12k</font><br>\
|
||||
<font color='red'>Recharge: 40/s</font><br>\
|
||||
<font color='green'>Instability Modifier: 60%</font><br>\
|
||||
<font color='green'>Energy Cost Modifier: 80%</font><br>\
|
||||
Spell Power: 100%"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/recycling
|
||||
|
||||
/datum/technomancer/equipment/summoning
|
||||
name = "Summoning Core"
|
||||
desc = "A unique type of core, this one sacrifices other characteristics in order to optimize it for the purposes teleporting \
|
||||
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 30 summons at once, and the energy \
|
||||
demand for maintaining summons is severely reduced. This comes at the price of capcitors that can only hold 8,000 units of energy, \
|
||||
a recharging rate of 35 energy, and no shielding from instability."
|
||||
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 40 summons at once, and the energy \
|
||||
demand for maintaining summons is severely reduced.<br>\
|
||||
<font color='red'>Capacity: 8k</font><br>\
|
||||
<font color='red'>Recharge: 35/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 120%</font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='green'>Spell Power: 120%</font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/summoner
|
||||
|
||||
/datum/technomancer/equipment/safety
|
||||
name = "Safety Core"
|
||||
desc = "This core is designed so that the wearer suffers almost no instability. It unfortunately comes at a cost of subpar \
|
||||
ratings for everything else.<br>\
|
||||
<font color='red'>Capacity: 7k</font><br>\
|
||||
<font color='red'>Recharge: 30/s</font><br>\
|
||||
<font color='green'><b>Instability Modifier: 30%</b></font><br>\
|
||||
Energy Cost Modifier: 100%<br>\
|
||||
<font color='red'><b>Spell Power: 70%</b></font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/safety
|
||||
|
||||
/datum/technomancer/equipment/overcharged
|
||||
name = "Overcharged Core"
|
||||
desc = "A core that was created in order to get the most power out of functions. It does this by shoving the most power into \
|
||||
those functions, so it is the opposite of energy efficent, however the enhancement of functions is second to none for other \
|
||||
cores.<br>\
|
||||
<font color='red'>Capacity: 15k (effectively 7.5k)</font><br>\
|
||||
<font color='red'>Recharge: 40/s</font><br>\
|
||||
<font color='red'>Instability Modifier: 110%</font><br>\
|
||||
<font color='red'><b>Energy Cost Modifier: 200%</b></font><br>\
|
||||
<font color='green'><b>Spell Power: 175%</b></font>"
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/overcharged
|
||||
|
||||
/datum/technomancer/equipment/hypo_belt
|
||||
name = "Hypo Belt"
|
||||
desc = "A medical belt designed to carry autoinjectors and other medical equipment. Comes with one of each hypo."
|
||||
@@ -154,3 +205,15 @@
|
||||
if(istype(item_to_test, /obj/item/weapon/spell))
|
||||
var/obj/item/weapon/spell/S = item_to_test
|
||||
S.on_scepter_ranged_cast(target, user)
|
||||
|
||||
/datum/technomancer/equipment/spyglass
|
||||
name = "Spyglass"
|
||||
desc = "A mundane spyglass, it may prove useful to those who wish to scout ahead, or fight from an extreme range."
|
||||
cost = 100
|
||||
obj_path = /obj/item/device/binoculars/spyglass
|
||||
|
||||
/obj/item/device/binoculars/spyglass
|
||||
name = "spyglass"
|
||||
desc = "It's a hand-held telescope, useful for star-gazing, peeping, and recon."
|
||||
icon_state = "spyglass"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
/obj/item/weapon/spell/proc/adjust_instability(var/amount)
|
||||
if(!owner || !core)
|
||||
return 0
|
||||
amount = round(amount * core.instability_modifer, 0.1)
|
||||
amount = round(amount * core.instability_modifier, 0.1)
|
||||
owner.adjust_instability(amount)
|
||||
|
||||
// Proc: New()
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/spell/proc/within_range(var/atom/target, var/max_range = 7) // Beyond 7 is off the screen.
|
||||
if(range(get_dist(owner, target) <= max_range))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/spell/proc/calculate_spell_power(var/amount)
|
||||
if(core)
|
||||
return round(amount * core.spell_power_modifier, 1)
|
||||
|
||||
// Returns a 'target' mob from a radius around T.
|
||||
/obj/item/weapon/spell/proc/targeting_assist(var/turf/T, radius = 5)
|
||||
var/chosen_target = null
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
aspect = ASPECT_TELE
|
||||
|
||||
/obj/item/weapon/spell/abjuration/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /mob/living) && pay_energy(500))
|
||||
if(istype(hit_atom, /mob/living) && pay_energy(500) && within_range(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
var/mob/living/simple_animal/SA = null
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Apportation"
|
||||
desc = "This allows you to teleport objects into your hand, or to pull people towards you. If they're close enough, the function \
|
||||
will grab them automatically."
|
||||
enhancement_desc = "Range is unlimited."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/apportation
|
||||
category = UTILITY_SPELLS
|
||||
@@ -22,6 +23,9 @@
|
||||
if(AM.anchored)
|
||||
user << "<span class='warning'>\The [hit_atom] is firmly secured and anchored, you can't move it!</span>"
|
||||
return
|
||||
if(!within_range(hit_atom) && !check_for_scepter())
|
||||
user << "<span class='warning'>\The [hit_atom] is too far away.</span>"
|
||||
return
|
||||
//Teleporting an item.
|
||||
if(istype(hit_atom, /obj/item))
|
||||
var/obj/item/I = hit_atom
|
||||
@@ -38,6 +42,7 @@
|
||||
src.loc = null
|
||||
user.put_in_hands(I)
|
||||
user.visible_message("<span class='notice'>\A [I] appears in \the [user]'s hand!</span>")
|
||||
log_and_message_admins("has stolen [I] with [src].")
|
||||
qdel(src)
|
||||
//Now let's try to teleport a living mob.
|
||||
else if(istype(hit_atom, /mob/living))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/technomancer/spell/audible_deception
|
||||
name = "Audible Deception"
|
||||
desc = "Allows you to create a specific sound at a location of your choosing."
|
||||
enhancement_desc = "An extremely loud sound that a large amount of energy and instability becomes available, which will \
|
||||
deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||
enhancement_desc = "An extremely loud bike horn sound that costs large amount of energy and instability becomes available, \
|
||||
which will deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/audible_deception
|
||||
ability_icon_state = "tech_audibledeception"
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
|
||||
/obj/item/weapon/spell/aura/New()
|
||||
..()
|
||||
set_light(7, 4, l_color = glow_color)
|
||||
set_light(7, calculate_spell_power(4), l_color = glow_color)
|
||||
processing_objects |= src
|
||||
log_and_message_admins("has started casting [src].")
|
||||
|
||||
/obj/item/weapon/spell/aura/Destroy()
|
||||
processing_objects -= src
|
||||
log_and_message_admins("has stopped maintaining [src].")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/aura/process()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/biomed_aura
|
||||
name = "Restoration Aura"
|
||||
desc = "Heals you and your allies (or everyone, if you want) of trauma and burns slowly, as long as they remain within four meters."
|
||||
spell_power_desc = "Increases the radius and healing amount of the aura."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/biomed
|
||||
ability_icon_state = "tech_biomedaura"
|
||||
@@ -21,7 +22,7 @@
|
||||
qdel(src)
|
||||
regen_tick++
|
||||
if(regen_tick % 5 == 0)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
var/list/mobs_to_heal = list()
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(heal_allies_only)
|
||||
@@ -30,8 +31,8 @@
|
||||
else
|
||||
mobs_to_heal |= L // Heal everyone!
|
||||
for(var/mob/living/L in mobs_to_heal)
|
||||
L.adjustBruteLoss(-2)
|
||||
L.adjustFireLoss(-2)
|
||||
L.adjustBruteLoss(calculate_spell_power(-2))
|
||||
L.adjustFireLoss(calculate_spell_power(-2))
|
||||
adjust_instability(2)
|
||||
|
||||
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
This does not affect you or your allies. It also causes a large amount of fire to erupt around you, however the main threat is \
|
||||
still the heating up."
|
||||
enhancement_desc = "Increased heat generation, more fires, and higher temperature cap."
|
||||
spell_power_desc = "Radius, heat rate, heat capacity, and amount of fires made increased."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/fire
|
||||
ability_icon_state = "tech_fireaura"
|
||||
@@ -19,16 +20,17 @@
|
||||
/obj/item/weapon/spell/aura/fire/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_things = range(4,owner)
|
||||
var/list/nearby_things = range(calculate_spell_power(4),owner)
|
||||
|
||||
var/temp_change = 40
|
||||
var/temp_cap = 600
|
||||
var/fire_power = 2
|
||||
var/temp_change = calculate_spell_power(40)
|
||||
var/temp_cap = calculate_spell_power(600)
|
||||
var/fire_power = calculate_spell_power(2)
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change = 80
|
||||
temp_cap = 1000
|
||||
fire_power = 4
|
||||
temp_change = calculate_spell_power(80)
|
||||
temp_cap = calculate_spell_power(1000)
|
||||
fire_power = calculate_spell_power(4)
|
||||
|
||||
for(var/mob/living/carbon/human/H in nearby_things)
|
||||
if(is_ally(H))
|
||||
continue
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/datum/technomancer/spell/frost_aura
|
||||
name = "Chilling Aura"
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to freeze to death if \
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to become very slow if \
|
||||
they stay within four meters of you."
|
||||
enhancement_desc = "The chill becomes lethal."
|
||||
spell_power_desc = "Radius and rate of cooling are scaled."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/frost
|
||||
ability_icon_state = "tech_frostaura"
|
||||
@@ -19,13 +20,13 @@
|
||||
/obj/item/weapon/spell/aura/frost/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
|
||||
var/temp_change = 25
|
||||
var/temp_change = calculate_spell_power(25)
|
||||
var/temp_cap = 260 // Just above the damage threshold, for humans. Unathi are less fortunate.
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change = 50
|
||||
temp_change = calculate_spell_power(50)
|
||||
temp_cap = 200
|
||||
for(var/mob/living/carbon/human/H in nearby_mobs)
|
||||
if(is_ally(H))
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/datum/technomancer/spell/shock_aura
|
||||
name = "Electric Aura"
|
||||
desc = "Repeatively electrocutes enemies within four meters of you, as well as nearby electronics."
|
||||
enhancement_desc = "Aura does twice as much damage."
|
||||
spell_power_desc = "Radius and damage scaled up."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/shock
|
||||
ability_icon_state = "tech_shockaura"
|
||||
@@ -17,11 +19,11 @@
|
||||
/obj/item/weapon/spell/aura/shock/process()
|
||||
if(!pay_energy(1000))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/power = 7
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
var/power = calculate_spell_power(7)
|
||||
if(check_for_scepter())
|
||||
power = 15
|
||||
for(var/obj/machinery/light/light in range(7, owner))
|
||||
power = calculate_spell_power(15)
|
||||
for(var/obj/machinery/light/light in range(calculate_spell_power(7), owner))
|
||||
light.flicker()
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(is_ally(L))
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/datum/technomancer/spell/unstable_aura
|
||||
name = "Degen Aura"
|
||||
desc = "Destabalizes your enemies, breaking their elements down to their basic levels, slowly killing them from the inside. \
|
||||
For each person within fourteen meters of you, they suffer 1% of their current health every second. Your allies are unharmed."
|
||||
For each person within <b>fourteen meters</b> of you, they suffer 1% of their current health every second. Your allies are \
|
||||
unharmed."
|
||||
spell_power_desc = "Radius is increased."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/aura/unstable
|
||||
ability_icon_state = "tech_unstableaura"
|
||||
@@ -13,12 +15,12 @@
|
||||
icon_state = "generic"
|
||||
cast_methods = null
|
||||
aspect = ASPECT_UNSTABLE
|
||||
glow_color = "#0000FF" //TODO
|
||||
glow_color = "#CC00CC"
|
||||
|
||||
/obj/item/weapon/spell/aura/unstable/process()
|
||||
if(!pay_energy(200))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(14,owner)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(14),owner)
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(is_ally(L))
|
||||
continue
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Force the target to teleport a short distance away. This target could be anything from something lying on the ground, to someone trying to \
|
||||
fight you, or even yourself. Using this on someone next to you makes their potential distance after teleportation greater."
|
||||
enhancement_desc = "Blink distance is increased greatly."
|
||||
spell_power_desc = "Blink distance is scaled up with more spell power."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/blink
|
||||
category = UTILITY_SPELLS
|
||||
@@ -50,22 +51,28 @@
|
||||
/obj/item/weapon/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
var/atom/movable/AM = hit_atom
|
||||
if(!within_range(AM))
|
||||
user << "<span class='warning'>\The [AM] is too far away to blink.</span>"
|
||||
return
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 6)
|
||||
safe_blink(AM, calculate_spell_power(6))
|
||||
else
|
||||
safe_blink(AM, 3)
|
||||
safe_blink(AM, calculate_spell_power(3))
|
||||
log_and_message_admins("has blinked [AM] away.")
|
||||
|
||||
/obj/item/weapon/spell/blink/on_use_cast(mob/user)
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 10)
|
||||
safe_blink(user, calculate_spell_power(10))
|
||||
else
|
||||
safe_blink(user, 6)
|
||||
safe_blink(user, calculate_spell_power(6))
|
||||
log_and_message_admins("has blinked themselves away.")
|
||||
|
||||
/obj/item/weapon/spell/blink/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
var/atom/movable/AM = hit_atom
|
||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [AM] with a glowing hand.</span>")
|
||||
if(check_for_scepter())
|
||||
safe_blink(user, 10)
|
||||
safe_blink(AM, 10)
|
||||
else
|
||||
safe_blink(AM, 6)
|
||||
safe_blink(AM, 6)
|
||||
log_and_message_admins("has blinked [AM] away.")
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/obj/item/weapon/spell/condensation/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(200))
|
||||
if(istype(hit_atom, /turf/simulated))
|
||||
if(istype(hit_atom, /turf/simulated) && within_range(hit_atom))
|
||||
var/turf/simulated/T = hit_atom
|
||||
|
||||
for(var/direction in alldirs + null) // null is for the center tile.
|
||||
@@ -30,6 +30,7 @@
|
||||
W.set_color()
|
||||
W.set_up(desired_turf)
|
||||
flick(initial(icon_state),W) // Otherwise pooling causes the animation to stay stuck at the end.
|
||||
log_and_message_admins("has wetted the floor with [src] at [T.x],[T.y],[T.z].")
|
||||
else if(hit_atom.reagents && !ismob(hit_atom))
|
||||
hit_atom.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
|
||||
adjust_instability(5)
|
||||
@@ -146,6 +146,7 @@
|
||||
return 0
|
||||
if(pay_energy(50 * controlled_mobs.len))
|
||||
attack_all(L)
|
||||
log_and_message_admins("has commanded their army of [controlled_mobs.len] to attack [L].")
|
||||
user << "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to \
|
||||
attack \the [L].</span>"
|
||||
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
aspect = ASPECT_BIOMED
|
||||
|
||||
/obj/item/weapon/spell/dispel/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
if(isliving(hit_atom) && pay_energy(1000))
|
||||
if(isliving(hit_atom) && within_range(hit_atom) && pay_energy(1000))
|
||||
var/mob/living/target = hit_atom
|
||||
for(var/obj/item/weapon/inserted_spell/I in target)
|
||||
I.on_expire(dispelled = 1)
|
||||
log_and_message_admins("dispelled [I] on [target].")
|
||||
user.adjust_instability(10)
|
||||
qdel(src)
|
||||
@@ -4,6 +4,7 @@
|
||||
Every second, electricity is stolen until the link is broken by the target moving too far away, or having no more energy left. \
|
||||
Can drain from powercells, microbatteries, and other Cores. The beam created by the siphoning is harmful to touch."
|
||||
enhancement_desc = "Rate of siphoning is doubled."
|
||||
spell_power_desc = "Rate of siphoning is scaled up based on spell power."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/energy_siphon
|
||||
ability_icon_state = "tech_energysiphon"
|
||||
@@ -48,7 +49,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/spell/energy_siphon/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(istype(hit_atom, /atom/movable))
|
||||
if(istype(hit_atom, /atom/movable) && within_range(hit_atom, 4))
|
||||
var/atom/movable/AM = hit_atom
|
||||
populate_siphon_list(AM)
|
||||
if(!things_to_siphon.len)
|
||||
@@ -56,6 +57,7 @@
|
||||
return 0
|
||||
siphoning = AM
|
||||
update_icon()
|
||||
log_and_message_admins("is siphoning energy from \a [AM].")
|
||||
else
|
||||
stop_siphoning()
|
||||
|
||||
@@ -84,7 +86,7 @@
|
||||
/obj/item/weapon/spell/energy_siphon/proc/siphon(atom/movable/siphoning, mob/user)
|
||||
var/list/things_to_drain = things_to_siphon // Temporary list copy of what we're gonna steal from.
|
||||
var/charge_to_give = 0 // How much energy to give to the Technomancer at the end.
|
||||
var/flow_remaining = flow_rate
|
||||
var/flow_remaining = calculate_spell_power(flow_rate)
|
||||
|
||||
if(!siphoning)
|
||||
return 0
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!</span>")
|
||||
L << "<span class='danger'>You ignite!</span>"
|
||||
L.fire_act()
|
||||
log_and_message_admins("has ignited [L] with [src].")
|
||||
adjust_instability(12)
|
||||
else
|
||||
//This is needed in order for the welder to work, and works similarly to grippers.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Corona"
|
||||
desc = "Causes the victim to glow very brightly, which while harmless in itself, makes it easier for them to be hit. The \
|
||||
bright glow also makes it very difficult to be stealthy. The effect lasts for one minute."
|
||||
spell_power_desc = "Enemies become even easier to hit."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/corona
|
||||
ability_icon_state = "tech_corona"
|
||||
@@ -18,11 +19,16 @@
|
||||
spell_light_range = 3
|
||||
inserting = /obj/item/weapon/inserted_spell/corona
|
||||
|
||||
|
||||
/obj/item/weapon/inserted_spell/corona
|
||||
var/evasion_reduction = 2 // We store this here because spell power may change when the spell expires.
|
||||
|
||||
/obj/item/weapon/inserted_spell/corona/on_insert()
|
||||
spawn(1)
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion -= 2
|
||||
evasion_reduction = round(2 * spell_power_at_creation, 1)
|
||||
L.evasion -= evasion_reduction
|
||||
L.visible_message("<span class='warning'>You start to glow very brightly!</span>")
|
||||
spawn(1 MINUTE)
|
||||
if(src)
|
||||
@@ -31,6 +37,6 @@
|
||||
/obj/item/weapon/inserted_spell/corona/on_expire()
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion += 2
|
||||
L.evasion += evasion_reduction
|
||||
L << "<span class='notice'>Your glow has ended.</span>"
|
||||
..()
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Haste"
|
||||
desc = "Allows the target to run at speeds that should not be possible for an ordinary being. For five seconds, the target \
|
||||
runs extremly fast, and cannot be slowed by any means."
|
||||
spell_power_desc = "Duration is scaled up."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/insert/haste
|
||||
ability_icon_state = "tech_haste"
|
||||
@@ -23,7 +24,7 @@
|
||||
L.force_max_speed = 1
|
||||
L << "<span class='notice'>You suddenly find it much easier to move.</span>"
|
||||
L.adjust_instability(10)
|
||||
spawn(5 SECONDS)
|
||||
spawn(round(5 SECONDS * spell_power_at_creation, 1))
|
||||
if(src)
|
||||
on_expire()
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
/obj/item/weapon/inserted_spell
|
||||
var/mob/living/carbon/human/origin = null
|
||||
var/mob/living/host = null
|
||||
var/spell_power_at_creation = 1.0 // This is here because the spell object that made this object probably won't exist.
|
||||
|
||||
/obj/item/weapon/inserted_spell/New(var/newloc, var/user, var/obj/item/weapon/spell/insert/inserter)
|
||||
..(newloc)
|
||||
@@ -42,7 +43,9 @@
|
||||
if(IS.type == inserting)
|
||||
user << "<span class='warning'>\The [L] is already affected by \the [src].</span>"
|
||||
return
|
||||
new inserting(L,user,src)
|
||||
var/obj/item/weapon/inserted_spell/inserted = new inserting(L,user,src)
|
||||
inserted.spell_power_at_creation = calculate_spell_power(1.0)
|
||||
log_and_message_admins("has casted [src] on [L].")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/spell/insert/on_melee_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_burns
|
||||
name = "Mend Burns"
|
||||
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_burns
|
||||
ability_icon_state = "tech_mendburns"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_metal
|
||||
name = "Mend Metal"
|
||||
desc = "Restores integrity to external robotic components."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_metal
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Great Mend Wounds"
|
||||
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
|
||||
robotic, reforms bones, patches internal bleeding, and restores missing blood."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_organs
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -21,6 +22,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 2 : 5
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(15)
|
||||
|
||||
for(var/i = 0, i<5,i++)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/mend_wires
|
||||
name = "Mend Wires"
|
||||
desc = "Binds the internal wiring of robotic limbs and components over time."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wires
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -20,6 +21,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Mend Wounds"
|
||||
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wounds
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -21,6 +22,7 @@
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/purify
|
||||
name = "Purify"
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/purify
|
||||
ability_icon_state = "tech_purify"
|
||||
@@ -24,6 +25,7 @@
|
||||
// for(var/datum/disease/D in H.viruses)
|
||||
// D.cure()
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Repel Missiles"
|
||||
desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 30% less likely \
|
||||
to hit you. The field lasts for five minutes and can be granted to yourself or an ally."
|
||||
spell_power_desc = "Projectiles will be more likely to be deflected."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/repel_missiles
|
||||
ability_icon_state = "tech_repelmissiles"
|
||||
@@ -16,11 +17,15 @@
|
||||
light_color = "#FF5C5C"
|
||||
inserting = /obj/item/weapon/inserted_spell/repel_missiles
|
||||
|
||||
/obj/item/weapon/inserted_spell/repel_missiles
|
||||
var/evasion_increased = 2 // We store this here because spell power may change when the spell expires.
|
||||
|
||||
/obj/item/weapon/inserted_spell/repel_missiles/on_insert()
|
||||
spawn(1)
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion += 2
|
||||
evasion_increased = round(2 * spell_power_at_creation, 1)
|
||||
L.evasion += evasion_increased
|
||||
L << "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>"
|
||||
spawn(5 MINUTES)
|
||||
if(src)
|
||||
@@ -29,6 +34,6 @@
|
||||
/obj/item/weapon/inserted_spell/repel_missiles/on_expire()
|
||||
if(isliving(host))
|
||||
var/mob/living/L = host
|
||||
L.evasion -= 2
|
||||
L.evasion -= evasion_increased
|
||||
L << "<span class='warning'>Your repulsion field has expired.</span>"
|
||||
..()
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Instability Tap"
|
||||
desc = "Creates a large sum of energy, at the cost of a very large amount of instability afflicting you."
|
||||
enhancement_desc = "50% more energy gained, 20% less instability gained."
|
||||
spell_power_desc = "Amount of energy gained scaled up with spell power."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/instability_tap
|
||||
ability_icon_state = "tech_instabilitytap"
|
||||
@@ -18,10 +19,11 @@
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
|
||||
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
||||
var/amount = calculate_spell_power(5000)
|
||||
if(check_for_scepter())
|
||||
core.give_energy(7500)
|
||||
core.give_energy(amount * 1.5)
|
||||
adjust_instability(40)
|
||||
else
|
||||
core.give_energy(5000)
|
||||
core.give_energy(amount)
|
||||
adjust_instability(50)
|
||||
qdel(src)
|
||||
@@ -16,6 +16,8 @@
|
||||
cooldown = 30
|
||||
|
||||
/obj/item/weapon/spell/oxygenate/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(!within_range(hit_atom))
|
||||
return
|
||||
if(ishuman(hit_atom))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(pay_energy(1500))
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
/obj/item/weapon/spell/phase_shift/New()
|
||||
..()
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
processing_objects |= src
|
||||
|
||||
/obj/effect/phase_shift
|
||||
name = "rift"
|
||||
@@ -29,6 +28,7 @@
|
||||
/obj/effect/phase_shift/New()
|
||||
..()
|
||||
set_light(3, 5, l_color = "#FA58F4")
|
||||
processing_objects |= src
|
||||
|
||||
/obj/effect/phase_shift/Destroy()
|
||||
for(var/atom/movable/AM in contents) //Eject everything out.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/beam
|
||||
name = "Beam"
|
||||
desc = "Fires a laser at your target. Cheap, reliable, and a bit boring."
|
||||
spell_power_desc = "Increases damage dealt."
|
||||
cost = 100
|
||||
ability_icon_state = "tech_beam"
|
||||
obj_path = /obj/item/weapon/spell/projectile/beam
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Chain Lightning"
|
||||
desc = "This dangerous function shoots lightning that will strike someone, then bounce to a nearby person. Be careful that \
|
||||
it does not bounce to you. The lighting prefers to bounce to people with the least resistance to electricity. It will \
|
||||
strike up to four targets, including yourself if conditions allow it to occur."
|
||||
strike up to four targets, including yourself if conditions allow it to occur. Lightning functions cannot miss due to distance."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/projectile/chain_lightning
|
||||
ability_icon_state = "tech_chain_lightning"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Force Missile"
|
||||
desc = "This fires a missile at your target. It's cheap to use, however the projectile itself moves and impacts in such a way \
|
||||
that armor designed to protect from blunt force will mitigate this function as well."
|
||||
spell_power_desc = "Increases damage dealt."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/projectile/force_missile
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Lightning Strike"
|
||||
desc = "This uses a hidden electrolaser, which creates a laser beam to ionize the enviroment, allowing for ideal conditions \
|
||||
for a directed lightning strike to occur. The lightning is very strong, however it requires a few seconds to prepare a \
|
||||
strike."
|
||||
strike. Lightning functions cannot miss due to distance."
|
||||
cost = 150
|
||||
obj_path = /obj/item/weapon/spell/projectile/lightning
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/datum/technomancer/spell/overload
|
||||
name = "Overload"
|
||||
desc = "Fires a bolt of highly unstable energy, that does damaged equal to 0.3% of the technomancer's current reserve of energy. \
|
||||
This energy pierces all known armor."
|
||||
This energy pierces all known armor. Energy cost is equal to 10% of maximum core charge."
|
||||
enhancement_desc = "Will do damage equal to 0.4% of current energy."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/projectile/overload
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
/obj/item/weapon/spell/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
if(set_up(hit_atom, user))
|
||||
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
|
||||
new_projectile.damage = calculate_spell_power(new_projectile.damage)
|
||||
new_projectile.launch(hit_atom)
|
||||
log_and_message_admins("has casted [src] at \the [hit_atom].")
|
||||
if(fire_sound)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/datum/technomancer/spell/radiance
|
||||
name = "Radiance"
|
||||
desc = "Causes you to be very radiant, glowing brightly in visible light, thermal energy, and deadly ionizing radiation."
|
||||
desc = "Causes you to be very radiant, glowing brightly in visible light, thermal energy, and deadly ionizing radiation. Note \
|
||||
that this WILL affect you."
|
||||
enhancement_desc = "Radiation will not affect the caster or their allies."
|
||||
spell_power_desc = "Spell power increases the amount of radiation and heat radiated, as well as the radius."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/radiance
|
||||
category = OFFENSIVE_SPELLS
|
||||
@@ -10,36 +13,41 @@
|
||||
desc = "You will glow with a radiance similar to that of Supermatter."
|
||||
icon_state = "radiance"
|
||||
aspect = ASPECT_LIGHT
|
||||
var/power = 100
|
||||
var/power = 250
|
||||
toggled = 1
|
||||
|
||||
/obj/item/weapon/spell/radiance/New()
|
||||
..()
|
||||
set_light(7, 4, l_color = "#D9D900")
|
||||
processing_objects |= src
|
||||
log_and_message_admins("has casted [src].")
|
||||
|
||||
/obj/item/weapon/spell/radiance/Destroy()
|
||||
processing_objects -= src
|
||||
log_and_message_admins("has stopped maintaining [src].")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/radiance/process()
|
||||
var/turf/T = get_turf(src)
|
||||
var/datum/gas_mixture/removed = null
|
||||
var/datum/gas_mixture/env = null
|
||||
var/adjusted_power = calculate_spell_power(power)
|
||||
|
||||
if(!istype(T, /turf/space))
|
||||
env = T.return_air()
|
||||
removed = env.remove(0.25 * env.total_moles) //Remove gas from surrounding area
|
||||
|
||||
var/thermal_power = 300 * power
|
||||
var/thermal_power = 300 * adjusted_power
|
||||
|
||||
removed.add_thermal_energy(thermal_power)
|
||||
removed.temperature = between(0, removed.temperature, 10000)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/L in range(T, round(sqrt(power / 2))))
|
||||
for(var/mob/living/L in range(T, round(sqrt(adjusted_power / 2))))
|
||||
if(check_for_scepter() && is_ally(L))
|
||||
continue
|
||||
var/radius = max(get_dist(L, src), 1)
|
||||
var/rads = (power / 10) * ( 1 / (radius**2) )
|
||||
var/rads = (adjusted_power / 10) * ( 1 / (radius**2) )
|
||||
L.apply_effect(rads, IRRADIATE)
|
||||
adjust_instability(2)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
user << "<span class='warning'>\The [L] isn't dead!</span>"
|
||||
return 0
|
||||
if(pay_energy(5000))
|
||||
if(L.tod > world.time + 10 MINUTES)
|
||||
if(L.tod > world.time + 30 MINUTES)
|
||||
user << "<span class='danger'>\The [L]'s been dead for too long, even this function cannot replace cloning at \
|
||||
this point.</span>"
|
||||
return 0
|
||||
@@ -57,7 +57,8 @@
|
||||
H.timeofdeath = null
|
||||
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
||||
user << "<span class='notice'>It's alive!</span>"
|
||||
adjust_instability(100)
|
||||
adjust_instability(50)
|
||||
log_and_message_admins("has resurrected [H].")
|
||||
else
|
||||
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
||||
adjust_instability(10)
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/technomancer/spell/shared_burden
|
||||
name = "Shared Burden"
|
||||
desc = "One of the few functions able to adjust instability, this allows you to take someone else's instability."
|
||||
spell_power_desc = "Draws bonus instability from the target, with the bonus dissipating harmlessly, for 'free'."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/shared_burden
|
||||
category = SUPPORT_SPELLS
|
||||
@@ -13,16 +14,16 @@
|
||||
aspect = ASPECT_UNSTABLE
|
||||
|
||||
/obj/item/weapon/spell/shared_burden/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(ishuman(hit_atom))
|
||||
if(ishuman(hit_atom) && within_range(hit_atom))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(H == user)
|
||||
user << "<span class='warning'>Draining instability out of you to put it back seems a bit pointless.</span>"
|
||||
return 0
|
||||
if(!H.instability)
|
||||
if(H.instability <= 0)
|
||||
user << "<span class='warning'>\The [H] has no instability to drain.</span>"
|
||||
return 0
|
||||
if(pay_energy(500))
|
||||
var/instability_to_drain = min(H.instability, 25)
|
||||
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
|
||||
adjust_instability(instability_to_drain)
|
||||
H.adjust_instability(-instability_to_drain)
|
||||
H.adjust_instability(-calculate_spell_power(instability_to_drain))
|
||||
@@ -1,7 +1,9 @@
|
||||
/datum/technomancer/spell/shield
|
||||
name = "Shield"
|
||||
desc = "Emits a protective shield fron your hand in front of you, which will protect you from almost anything able to harm \
|
||||
you, so long as you can power it."
|
||||
you, so long as you can power it. Stronger attacks blocked cost more energy to sustain. \
|
||||
Note that holding two shields will make blocking more energy efficent."
|
||||
enhancement_desc = "Blocking is twice as efficent in terms of energy cost per hit."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/shield
|
||||
ability_icon_state = "tech_shield"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
spawner_type = /obj/effect/temporary_effect/fire_blast
|
||||
|
||||
/obj/item/weapon/spell/spawner/fire_blast/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(2000))
|
||||
if(within_range(hit_atom) && pay_energy(2000))
|
||||
adjust_instability(12)
|
||||
..() // Makes the booms happen.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
set_light(3, 2, l_color = "#2ECCFA")
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(4000))
|
||||
if(within_range(hit_atom) && pay_energy(4000))
|
||||
adjust_instability(8)
|
||||
..()
|
||||
|
||||
|
||||
@@ -27,4 +27,5 @@
|
||||
if(T)
|
||||
new spawner_type(T)
|
||||
user << "<span class='notice'>You shift \the [src] onto \the [T].</span>"
|
||||
log_and_message_admins("has casted [src] at [T.x],[T.y],[T.z].")
|
||||
qdel(src)
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
/obj/item/weapon/spell/summon/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(summoned_mob_type && core.summoned_mobs.len < core.max_summons && pay_energy(energy_cost))
|
||||
if(summoned_mob_type && core.summoned_mobs.len < core.max_summons && within_range(hit_atom) && pay_energy(energy_cost))
|
||||
var/obj/effect/E = new(T)
|
||||
E.icon = 'icons/obj/objects.dmi'
|
||||
E.icon_state = "anom"
|
||||
@@ -29,6 +29,7 @@
|
||||
on_summon(L)
|
||||
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
|
||||
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
|
||||
log_and_message_admins("has summoned \a [L] at [T.x],[T.y],[T.z].")
|
||||
user.adjust_instability(instability_cost)
|
||||
|
||||
/obj/item/weapon/spell/summon/on_use_cast(mob/living/user)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
The creatures take a few moments to be teleported to the targeted tile. Note that the creatures summoned are \
|
||||
not inherently loyal to the technomancer, and that the creatures will be hurt slightly from being teleported to you."
|
||||
enhancement_desc = "Summoned entities will never harm their summoner."
|
||||
spell_power_desc = "The strength and endurance of the summoned creature will be greater."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_creature
|
||||
category = UTILITY_SPELLS
|
||||
@@ -37,10 +38,18 @@
|
||||
instability_cost = 10
|
||||
energy_cost = 1000
|
||||
|
||||
/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/summoned)
|
||||
/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/simple_animal/summoned)
|
||||
if(check_for_scepter())
|
||||
// summoned.faction = "technomancer"
|
||||
if(istype(summoned, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/SA = summoned
|
||||
SA.friends.Add(owner)
|
||||
|
||||
// Makes their new pal big and strong, if they have spell power.
|
||||
summoned.maxHealth = calculate_spell_power(summoned.maxHealth)
|
||||
summoned.health = calculate_spell_power(summoned.health)
|
||||
summoned.melee_damage_lower = calculate_spell_power(summoned.melee_damage_lower)
|
||||
summoned.melee_damage_upper = calculate_spell_power(summoned.melee_damage_upper)
|
||||
|
||||
// Now we hurt their new pal, because being forcefully abducted by teleportation can't be healthy.
|
||||
summoned.health = round(summoned.maxHealth * 0.7)
|
||||
@@ -1,8 +1,9 @@
|
||||
/datum/technomancer/spell/summon_ward
|
||||
name = "Summon Ward"
|
||||
desc = "Teleports a prefabricated 'ward' drone to the target location, which will alert you and your allies when it sees entities \
|
||||
moving around it, or when it is attacked. They can see for up to five meters. Wards expire in six minutes."
|
||||
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees."
|
||||
moving around it, or when it is attacked. They can see for up to five meters."
|
||||
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees. \
|
||||
Invisible entities that are spotted by it will be decloaked."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_ward
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
/obj/item/weapon/spell/warp_strike/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(T)
|
||||
if(!within_range(T))
|
||||
return
|
||||
//First, we handle who to teleport to.
|
||||
user.setClickCooldown(5)
|
||||
var/mob/living/chosen_target = targeting_assist(T,5) //The person who's about to get attacked.
|
||||
@@ -74,4 +76,5 @@
|
||||
I.afterattack(chosen_target, user)
|
||||
else
|
||||
chosen_target.attack_hand(user)
|
||||
log_and_message_admins("has warp striked [chosen_target].")
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/costume/butler/New()
|
||||
new /obj/item/clothing/suit/wcoat(src.loc)
|
||||
new /obj/item/clothing/accessory/wcoat(src.loc)
|
||||
new /obj/item/clothing/under/suit_jacket(src.loc)
|
||||
new /obj/item/clothing/head/that(src.loc)
|
||||
delete_me = 1
|
||||
@@ -170,7 +170,7 @@
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/costume/prig/New()
|
||||
new /obj/item/clothing/suit/wcoat(src.loc)
|
||||
new /obj/item/clothing/accessory/wcoat(src.loc)
|
||||
new /obj/item/clothing/glasses/monocle(src.loc)
|
||||
var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that)
|
||||
new CHOICE(src.loc)
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
// implant uplink (not the implant tool) and a preset headset uplink.
|
||||
|
||||
/obj/item/device/radio/uplink/New()
|
||||
hidden_uplink = new(src)
|
||||
hidden_uplink = new(src, usr.mind, DEFAULT_TELECRYSTAL_AMOUNT)
|
||||
icon_state = "radio"
|
||||
|
||||
/obj/item/device/radio/uplink/attack_self(mob/user as mob)
|
||||
|
||||
@@ -35,20 +35,20 @@
|
||||
return
|
||||
|
||||
//check for an aggressive grab (or robutts)
|
||||
var/can_place
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
can_place = 1
|
||||
else
|
||||
for (var/obj/item/weapon/grab/G in C.grabbed_by)
|
||||
if (G.loc == user && G.state >= GRAB_AGGRESSIVE)
|
||||
can_place = 1
|
||||
break
|
||||
|
||||
if(can_place)
|
||||
if(can_place(C, user))
|
||||
place_handcuffs(C, user)
|
||||
else
|
||||
user << "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>"
|
||||
|
||||
/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user)
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
return 1
|
||||
else
|
||||
for(var/obj/item/weapon/grab/G in target.grabbed_by)
|
||||
if(G.loc == user && G.state >= GRAB_AGGRESSIVE)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user)
|
||||
playsound(src.loc, cuff_sound, 30, 1, -2)
|
||||
|
||||
@@ -69,6 +69,9 @@
|
||||
if(!do_after(user,30))
|
||||
return 0
|
||||
|
||||
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
||||
return 0
|
||||
|
||||
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [H.name] ([H.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]")
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
new /obj/item/clothing/gloves/chameleon(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
new /obj/item/clothing/glasses/chameleon(src)
|
||||
new /obj/item/clothing/accessory/chameleon(src)
|
||||
new /obj/item/weapon/gun/energy/chameleon(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/clerical
|
||||
|
||||
@@ -21,7 +21,13 @@
|
||||
var/store_items = 1
|
||||
var/store_mobs = 1
|
||||
|
||||
var/list/will_contain
|
||||
|
||||
/obj/structure/closet/initialize()
|
||||
..()
|
||||
if(will_contain)
|
||||
create_objects_in_loc(src, will_contain)
|
||||
|
||||
if(!opened) // if closed, any item at the crate's loc is put in the contents
|
||||
var/obj/item/I
|
||||
for(I in src.loc)
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
new /obj/item/clothing/under/dress/dress_saloon(src)
|
||||
new /obj/item/clothing/suit/wcoat(src)
|
||||
new /obj/item/clothing/suit/wcoat(src)
|
||||
new /obj/item/clothing/accessory/wcoat(src)
|
||||
new /obj/item/clothing/accessory/wcoat(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
|
||||
|
||||
@@ -8,20 +8,7 @@
|
||||
icon_broken = "cabinetdetective_broken"
|
||||
icon_off = "cabinetdetective_broken"
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
|
||||
return
|
||||
will_contain = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 10)
|
||||
|
||||
/obj/structure/closet/secure_closet/bar/update_icon()
|
||||
if(broken)
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
// This is not great.
|
||||
/turf/simulated/proc/wet_floor(var/wet_val = 1)
|
||||
spawn(0)
|
||||
if(wet_val <= wet)
|
||||
return
|
||||
wet = wet_val
|
||||
if(wet_overlay)
|
||||
overlays -= wet_overlay
|
||||
|
||||
@@ -664,6 +664,31 @@ proc/admin_notice(var/message, var/rights)
|
||||
log_admin("Announce: [key_name(usr)] : [message]")
|
||||
feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/intercom()
|
||||
set category = "Fun"
|
||||
set name = "Intercom Msg"
|
||||
set desc = "Send an intercom message, like an arrivals announcement."
|
||||
if(!check_rights(0)) return
|
||||
|
||||
//This is basically how death alarms do it
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/ert(null)
|
||||
|
||||
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot1.channels + a.keyslot2.channels)
|
||||
|
||||
if(channel) //They picked a channel
|
||||
var/sender = input("Name of sender (max 75):", "Announcement", "Announcement Computer") as null|text
|
||||
|
||||
if(sender) //They put a sender
|
||||
sender = sanitize(sender, 75, extra = 0)
|
||||
var/message = input("Message content (max 500):", "Contents", "This is a test of the announcement system.") as null|message
|
||||
|
||||
if(message) //They put a message
|
||||
message = sanitize(message, 500, extra = 0)
|
||||
a.autosay("[message]", "[sender]", "[channel == "Common" ? null : channel]") //Common is a weird case, as it's not a "channel", it's just talking into a radio without a channel set.
|
||||
log_admin("Intercom: [key_name(usr)] : [sender]:[message]")
|
||||
qdel(a)
|
||||
feedback_add_details("admin_verb","IN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/toggleooc()
|
||||
set category = "Server"
|
||||
set desc="Globally Toggles OOC"
|
||||
|
||||
@@ -24,6 +24,7 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/toggleenter, //toggles whether people can join the current game,
|
||||
/datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
|
||||
@@ -583,7 +583,7 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/accessory/wcoat(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(M), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
|
||||
|
||||
@@ -74,6 +74,37 @@
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
|
||||
/datum/gear/accessory/wcoat
|
||||
display_name = "waistcoat"
|
||||
path = /obj/item/clothing/accessory/wcoat
|
||||
cost = 1
|
||||
|
||||
/datum/gear/accessory/wcoat/red
|
||||
display_name = "waistcoat, red"
|
||||
path = /obj/item/clothing/accessory/wcoat/red
|
||||
|
||||
/datum/gear/accessory/wcoat/grey
|
||||
display_name = "waistcoat, grey"
|
||||
path = /obj/item/clothing/accessory/wcoat/grey
|
||||
|
||||
/datum/gear/accessory/wcoat/brown
|
||||
display_name = "waistcoat, brown"
|
||||
path = /obj/item/clothing/accessory/wcoat/brown
|
||||
|
||||
/datum/gear/accessory/swvest
|
||||
display_name = "sweatervest, black"
|
||||
path = /obj/item/clothing/accessory/wcoat/swvest
|
||||
cost = 1
|
||||
|
||||
/datum/gear/accessory/swvest/blue
|
||||
display_name = "sweatervest, blue"
|
||||
path = /obj/item/clothing/accessory/wcoat/swvest/blue
|
||||
|
||||
/datum/gear/accessory/swvest/red
|
||||
display_name = "sweatervest, red"
|
||||
path = /obj/item/clothing/accessory/wcoat/swvest/red
|
||||
|
||||
/datum/gear/accessory/holster
|
||||
display_name = "holster, armpit"
|
||||
path = /obj/item/clothing/accessory/holster/armpit
|
||||
@@ -127,6 +158,10 @@
|
||||
display_name = "tie, navy blue"
|
||||
path = /obj/item/clothing/accessory/navy
|
||||
|
||||
/datum/gear/accessory/tie/white
|
||||
display_name = "tie, white"
|
||||
path = /obj/item/clothing/accessory/white
|
||||
|
||||
/datum/gear/accessory/tie/horrible
|
||||
display_name = "tie, socially disgraceful"
|
||||
path = /obj/item/clothing/accessory/horrible
|
||||
|
||||
@@ -38,6 +38,16 @@
|
||||
display_name = "Security HUD, prescription (Security)"
|
||||
path = /obj/item/clothing/glasses/hud/security/prescription
|
||||
|
||||
/datum/gear/eyes/secaviators
|
||||
display_name = "Security HUD Aviators"
|
||||
path = /obj/item/clothing/glasses/sunglasses/sechud/aviator
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/eyes/secaviators/prescription
|
||||
display_name = "Security HUD Aviators, prescription"
|
||||
path = /obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/eyes/medical
|
||||
display_name = "Medical HUD (Medical)"
|
||||
path = /obj/item/clothing/glasses/hud/health
|
||||
@@ -56,6 +66,10 @@
|
||||
display_name = "Sunglasses, stylish"
|
||||
path = /obj/item/clothing/glasses/fakesunglasses
|
||||
|
||||
/datum/gear/eyes/glasses/fakeaviator
|
||||
display_name = "Sunglasses, stylish aviators"
|
||||
path = /obj/item/clothing/glasses/fakesunglasses/aviator
|
||||
|
||||
/datum/gear/eyes/shades/prescriptionsun
|
||||
display_name = "sunglasses, presciption (Security/Command)"
|
||||
path = /obj/item/clothing/glasses/sunglasses/prescription
|
||||
|
||||
@@ -203,36 +203,6 @@
|
||||
display_name = "suspenders"
|
||||
path = /obj/item/clothing/suit/suspenders
|
||||
|
||||
/datum/gear/suit/wcoat
|
||||
display_name = "waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/wcoat/red
|
||||
display_name = "red waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat/red
|
||||
|
||||
/datum/gear/suit/wcoat/grey
|
||||
display_name = "grey waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat/grey
|
||||
|
||||
/datum/gear/suit/wcoat/brown
|
||||
display_name = "brown waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat/brown
|
||||
|
||||
/datum/gear/suit/swvest
|
||||
display_name = "black sweatervest"
|
||||
path = /obj/item/clothing/suit/wcoat/swvest
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/swvest/blue
|
||||
display_name = "blue sweatervest"
|
||||
path = /obj/item/clothing/suit/wcoat/swvest/blue
|
||||
|
||||
/datum/gear/suit/swvest/red
|
||||
display_name = "red sweatervest"
|
||||
path = /obj/item/clothing/suit/wcoat/swvest/red
|
||||
|
||||
/datum/gear/suit/forensics
|
||||
display_name = "forensics long, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red/long
|
||||
|
||||
@@ -327,7 +327,7 @@
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
icon_state = "utilitybelt"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
var/list/clothing_choices = list()
|
||||
var/global/list/clothing_choices
|
||||
|
||||
/obj/item/weapon/storage/belt/chameleon/New()
|
||||
..()
|
||||
@@ -357,6 +357,42 @@
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_belt() //so our overlays update.
|
||||
|
||||
//******************
|
||||
//**Chameleon Tie**
|
||||
//******************
|
||||
|
||||
/obj/item/clothing/accessory/chameleon
|
||||
name = "black tie"
|
||||
desc = "Looks like a black tie, but his one also has a dial inside."
|
||||
icon = 'icons/obj/clothing/ties.dmi'
|
||||
icon_state = "blacktie"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
var/global/list/clothing_choices
|
||||
|
||||
/obj/item/clothing/accessory/chameleon/New()
|
||||
..()
|
||||
if(!clothing_choices)
|
||||
var/blocked = list(src.type, /obj/item/clothing/accessory/storage)
|
||||
clothing_choices = generate_chameleon_choices(/obj/item/clothing/accessory, blocked)
|
||||
|
||||
/obj/item/clothing/accessory/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "black tie"
|
||||
desc = "Looks like a black tie, but his one also has a dial inside."
|
||||
icon_state = "blacktie"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/accessory/chameleon/verb/change(picked in clothing_choices)
|
||||
set name = "Change Accessory Appearance"
|
||||
set category = "Chameleon Items"
|
||||
set src in usr
|
||||
|
||||
if(!ispath(clothing_choices[picked]))
|
||||
return
|
||||
|
||||
disguise(clothing_choices[picked])
|
||||
update_icon()
|
||||
|
||||
//*****************
|
||||
//**Chameleon Gun**
|
||||
//*****************
|
||||
|
||||
@@ -186,7 +186,6 @@ BLIND // can't see anything
|
||||
/obj/item/clothing/glasses/welding/attack_self()
|
||||
toggle()
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/welding/verb/toggle()
|
||||
set category = "Object"
|
||||
set name = "Adjust welding goggles"
|
||||
@@ -242,6 +241,11 @@ BLIND // can't see anything
|
||||
icon_state = "sun"
|
||||
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
|
||||
|
||||
/obj/item/clothing/glasses/fakesunglasses/aviator
|
||||
desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes."
|
||||
name = "stylish aviators"
|
||||
icon_state = "sec_flash"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud
|
||||
name = "HUDSunglasses"
|
||||
desc = "Sunglasses with a HUD."
|
||||
@@ -258,6 +262,53 @@ BLIND // can't see anything
|
||||
desc = "Flash-resistant goggles with inbuilt combat and security information."
|
||||
icon_state = "swatgoggles"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator
|
||||
name = "HUD aviators"
|
||||
desc = "Modified aviator glasses that can be switch between HUD and flash protection modes."
|
||||
icon_state = "sec_hud"
|
||||
off_state = "sec_flash"
|
||||
action_button_name = "Toggle Mode"
|
||||
var/on = 1
|
||||
toggleable = 1
|
||||
activation_sound = 'sound/effects/pop.ogg'
|
||||
|
||||
var/hud_holder
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator/New()
|
||||
..()
|
||||
hud_holder = hud
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator/Destroy()
|
||||
qdel(hud_holder)
|
||||
hud_holder = null
|
||||
hud = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator/attack_self(mob/user)
|
||||
if(toggleable && !user.incapacitated())
|
||||
on = !on
|
||||
if(on)
|
||||
src.hud = hud_holder
|
||||
to_chat(user, "You switch the [src] to HUD mode.")
|
||||
else
|
||||
src.hud = null
|
||||
to_chat(user, "You switch \the [src] to flash protection mode.")
|
||||
update_icon()
|
||||
user << activation_sound
|
||||
user.update_inv_glasses()
|
||||
user.update_action_buttons()
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator/update_icon()
|
||||
if(on)
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = off_state
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription
|
||||
name = "Prescription HUD aviators"
|
||||
desc = "Modified aviator glasses that can be switch between HUD and flash protection modes. Comes with bonus prescription lenses."
|
||||
prescription = 6
|
||||
|
||||
/obj/item/clothing/glasses/thermal
|
||||
name = "Optical Thermal Scanner"
|
||||
desc = "Thermals in the shape of glasses."
|
||||
|
||||
@@ -107,21 +107,19 @@
|
||||
desc = "The hat of the Head of Security. For showing the officers who's in charge."
|
||||
icon_state = "hoscap"
|
||||
body_parts_covered = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/dermal
|
||||
name = "Dermal Armour Patch"
|
||||
desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head."
|
||||
icon_state = "dermal"
|
||||
item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "")
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/head/det
|
||||
name = "fedora"
|
||||
desc = "A brown fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it."
|
||||
icon_state = "detective"
|
||||
allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen)
|
||||
armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = 0
|
||||
|
||||
|
||||
@@ -294,9 +294,7 @@
|
||||
desc = "A greatcoat enhanced with a special alloy for some protection and style."
|
||||
icon_state = "hos"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
//Jensen cosplay gear
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat/jensen
|
||||
@@ -304,7 +302,6 @@
|
||||
desc = "A trenchcoat augmented with a special alloy for some protection and style."
|
||||
icon_state = "hostrench"
|
||||
flags_inv = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/pcrc
|
||||
name = "PCRC armor vest"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Job related
|
||||
*/
|
||||
|
||||
//Botonist
|
||||
//Botanist
|
||||
/obj/item/clothing/suit/apron
|
||||
name = "apron"
|
||||
desc = "A basic blue apron."
|
||||
@@ -10,7 +10,8 @@
|
||||
item_state_slots = list(slot_r_hand_str = "overalls", slot_l_hand_str = "overalls")
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = 0
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/material/minihoe)
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/material/minihoe)
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/suit/captunic
|
||||
@@ -30,10 +31,11 @@
|
||||
//Chaplain
|
||||
/obj/item/clothing/suit/chaplain_hoodie
|
||||
name = "chaplain hoodie"
|
||||
desc = "This suit says to you 'hush'!"
|
||||
desc = "This suit says to you \"Hush\"!"
|
||||
icon_state = "chaplain_hoodie"
|
||||
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list (/obj/item/weapon/storage/bible)
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/suit/nun
|
||||
@@ -90,8 +92,10 @@
|
||||
icon_state = "detective"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
|
||||
/obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter,
|
||||
/obj/item/device/taperecorder, /obj/item/device/uv_light)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/grey
|
||||
name = "grey trenchcoat"
|
||||
@@ -103,7 +107,9 @@
|
||||
name = "jacket"
|
||||
desc = "A forensics technician jacket."
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
|
||||
/obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter,
|
||||
/obj/item/device/taperecorder, /obj/item/device/uv_light)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/red
|
||||
@@ -134,8 +140,8 @@
|
||||
desc = "A high-visibility vest used in work zones."
|
||||
icon_state = "hazard"
|
||||
blood_overlay_type = "armor"
|
||||
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, \
|
||||
/obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency_oxygen, \
|
||||
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner,
|
||||
/obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency_oxygen,
|
||||
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering)
|
||||
body_parts_covered = UPPER_TORSO
|
||||
|
||||
@@ -180,7 +186,7 @@
|
||||
icon_open = "fr_jacket_open"
|
||||
icon_closed = "fr_jacket"
|
||||
blood_overlay_type = "armor"
|
||||
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
|
||||
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
|
||||
/obj/item/clothing/suit/wcoat
|
||||
/*/obj/item/clothing/suit/wcoat
|
||||
name = "waistcoat"
|
||||
desc = "For some classy, murderous fun."
|
||||
icon_state = "vest"
|
||||
@@ -117,7 +117,7 @@
|
||||
/obj/item/clothing/suit/wcoat/swvest/red
|
||||
name = "red sweatervest"
|
||||
icon_state = "sweatervest_red"
|
||||
|
||||
*/
|
||||
/obj/item/clothing/suit/apron/overalls
|
||||
name = "coveralls"
|
||||
desc = "A set of denim overalls."
|
||||
@@ -729,23 +729,23 @@
|
||||
|
||||
/obj/item/clothing/suit/varsity/red
|
||||
name = "red varsity jacket"
|
||||
icon_state = "suit_red"
|
||||
icon_state = "varsity_red"
|
||||
|
||||
/obj/item/clothing/suit/varsity/purple
|
||||
name = "purple varsity jacket"
|
||||
icon_state = "suit_purple"
|
||||
icon_state = "varsity_purple"
|
||||
|
||||
/obj/item/clothing/suit/varsity/green
|
||||
name = "green varsity jacket"
|
||||
icon_state = "suit_olive"
|
||||
icon_state = "varsity_green"
|
||||
|
||||
/obj/item/clothing/suit/varsity/blue
|
||||
name = "blue varsity jacket"
|
||||
icon_state = "suit_blue"
|
||||
icon_state = "varsity_blue"
|
||||
|
||||
/obj/item/clothing/suit/varsity/brown
|
||||
name = "brown varsity jacket"
|
||||
icon_state = "brown_jacket"
|
||||
icon_state = "varsity_brown"
|
||||
|
||||
/*
|
||||
* Track Jackets
|
||||
|
||||
@@ -114,6 +114,10 @@
|
||||
name = "navy tie"
|
||||
icon_state = "navytie"
|
||||
|
||||
/obj/item/clothing/accessory/white
|
||||
name = "white tie"
|
||||
icon_state = "whitetie"
|
||||
|
||||
/obj/item/clothing/accessory/horrible
|
||||
name = "horrible tie"
|
||||
desc = "A neosilk clip-on tie. This one is disgusting."
|
||||
|
||||
@@ -130,3 +130,46 @@
|
||||
if(prob(50))
|
||||
icon_state = "hawaii2"
|
||||
color = color_rotation(rand(-11,12)*15)
|
||||
|
||||
/obj/item/clothing/accessory/wcoat
|
||||
name = "waistcoat"
|
||||
desc = "For some classy, murderous fun."
|
||||
icon_state = "vest"
|
||||
item_state = "vest"
|
||||
icon_override = 'icons/mob/ties.dmi'
|
||||
item_state_slots = list(slot_r_hand_str = "wcoat", slot_l_hand_str = "wcoat")
|
||||
allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
slot_flags = SLOT_OCLOTHING | SLOT_TIE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/red
|
||||
name = "red waistcoat"
|
||||
icon_state = "red_waistcoat"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/grey
|
||||
name = "grey waistcoat"
|
||||
icon_state = "grey_waistcoat"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/brown
|
||||
name = "brown waistcoat"
|
||||
icon_state = "brown_waistcoat"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/gentleman
|
||||
name = "elegant waistcoat"
|
||||
icon_state = "elegant_waistcoat"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/swvest
|
||||
name = "black sweatervest"
|
||||
desc = "A sleeveless sweater. Wear this if you don't want your arms to be warm, or if you're a nerd."
|
||||
icon_state = "sweatervest"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/swvest/blue
|
||||
name = "blue sweatervest"
|
||||
icon_state = "sweatervest_blue"
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/swvest/red
|
||||
name = "red sweatervest"
|
||||
icon_state = "sweatervest_red"
|
||||
@@ -104,12 +104,14 @@
|
||||
desc = "A more modern uniform for corporate investigators."
|
||||
|
||||
/obj/item/clothing/under/det/waistcoat
|
||||
icon_state = "detective_waistcoat"
|
||||
icon_state = "detective"
|
||||
desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat."
|
||||
starting_accessories = list(/obj/item/clothing/accessory/blue_clip, /obj/item/clothing/accessory/wcoat)
|
||||
|
||||
/obj/item/clothing/under/det/grey/waistcoat
|
||||
icon_state = "detective2_waistcoat"
|
||||
icon_state = "detective2"
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
|
||||
starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/wcoat)
|
||||
|
||||
/*
|
||||
* Head of Security
|
||||
@@ -120,7 +122,7 @@
|
||||
icon_state = "hos"
|
||||
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.8
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/corp
|
||||
@@ -133,7 +135,6 @@
|
||||
desc = "You never asked for anything that stylish."
|
||||
name = "head of security's jumpsuit"
|
||||
icon_state = "jensen"
|
||||
siemens_coefficient = 0.6
|
||||
rolled_sleeves = -1
|
||||
|
||||
/*
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
icon_state = "gentlesuit"
|
||||
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
|
||||
rolled_sleeves = 0
|
||||
starting_accessories = list(/obj/item/clothing/accessory/white, /obj/item/clothing/accessory/wcoat/gentleman)
|
||||
|
||||
/obj/item/clothing/under/gimmick/rank/captain/suit
|
||||
name = "colony director's suit"
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
/datum/event/grid_check //NOTE: Times are measured in master controller ticks!
|
||||
announceWhen = 5
|
||||
|
||||
/*
|
||||
/datum/event/grid_check/setup()
|
||||
endWhen = rand(30,120)
|
||||
|
||||
*/
|
||||
/datum/event/grid_check/start()
|
||||
power_failure(0)
|
||||
|
||||
// This sets off a chain of events that lead to the actual grid check (or perhaps worse).
|
||||
// First, the Supermatter engine makes a power spike.
|
||||
for(var/obj/machinery/power/generator/engine in machines)
|
||||
engine.power_spike()
|
||||
break // Just one engine, please.
|
||||
// After that, the engine checks if a grid checker exists on the same powernet, and if so, it triggers a blackout.
|
||||
// If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code.
|
||||
// power_failure(0)
|
||||
/*
|
||||
/datum/event/grid_check/announce()
|
||||
if (prob(30))
|
||||
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
|
||||
|
||||
/datum/event/grid_check/end()
|
||||
power_restore()
|
||||
*/
|
||||
@@ -8,6 +8,7 @@
|
||||
var/list/hud_list[10]
|
||||
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
|
||||
var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
|
||||
var/last_push_time //For human_attackhand.dm, keeps track of the last use of disarm
|
||||
|
||||
/mob/living/carbon/human/New(var/new_loc, var/new_species = null)
|
||||
|
||||
@@ -680,7 +681,12 @@
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/thermal))
|
||||
number -= 1
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/sunglasses))
|
||||
number += 1
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/sunglasses/sechud/aviator))
|
||||
var/obj/item/clothing/glasses/sunglasses/sechud/aviator/S = src.glasses
|
||||
if(!S.on)
|
||||
number += 1
|
||||
else
|
||||
number += 1
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/welding))
|
||||
var/obj/item/clothing/glasses/welding/W = src.glasses
|
||||
if(!W.up)
|
||||
|
||||
@@ -265,7 +265,12 @@
|
||||
visible_message("<span class='danger'>[src]'s [W] goes off during the struggle!</span>")
|
||||
return W.afterattack(target,src)
|
||||
|
||||
if(last_push_time + 30 > world.time)
|
||||
visible_message("<span class='warning'>[M] has weakly pushed [src]!</span>")
|
||||
return
|
||||
|
||||
var/randn = rand(1, 100)
|
||||
last_push_time = world.time
|
||||
if(!(species.flags & NO_SLIP) && randn <= 25)
|
||||
var/armor_check = run_armor_check(affecting, "melee")
|
||||
apply_effect(3, WEAKEN, armor_check)
|
||||
|
||||
@@ -25,21 +25,6 @@
|
||||
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
|
||||
if (hungry >= 70) tally += hungry/50
|
||||
|
||||
// Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately.
|
||||
// Includes slots which can provide armor, the back slot, and suit storage.
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) )
|
||||
tally += I.slowdown
|
||||
|
||||
// Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable.
|
||||
// This is done seperately to disallow negative numbers.
|
||||
for(var/obj/item/I in list(r_hand, l_hand) )
|
||||
tally += max(I.slowdown, 0)
|
||||
|
||||
// Dragging heavy objects will also slow you down, similar to above.
|
||||
if(pulling && istype(pulling, /obj/item))
|
||||
var/obj/item/pulled = pulling
|
||||
tally += max(pulled.slowdown, 0)
|
||||
|
||||
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
|
||||
for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
@@ -76,6 +61,24 @@
|
||||
if(mRun in mutations)
|
||||
tally = 0
|
||||
|
||||
if(species.slowdown_fixed)
|
||||
return (tally+config.human_delay)
|
||||
|
||||
// Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately.
|
||||
// Includes slots which can provide armor, the back slot, and suit storage.
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) )
|
||||
tally += I.slowdown
|
||||
|
||||
// Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable.
|
||||
// This is done seperately to disallow negative numbers.
|
||||
for(var/obj/item/I in list(r_hand, l_hand) )
|
||||
tally += max(I.slowdown, 0)
|
||||
|
||||
// Dragging heavy objects will also slow you down, similar to above.
|
||||
if(pulling && istype(pulling, /obj/item))
|
||||
var/obj/item/pulled = pulling
|
||||
tally += max(pulled.slowdown, 0)
|
||||
|
||||
return (tally+config.human_delay)
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
|
||||
|
||||
@@ -901,7 +901,7 @@
|
||||
Paralyse(3)
|
||||
|
||||
if(hallucination)
|
||||
if(hallucination >= 20)
|
||||
if(hallucination >= 20 && !(species.flags & (NO_POISON|IS_PLANT)) )
|
||||
if(prob(3))
|
||||
fake_attack(src)
|
||||
if(!handling_hal)
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/slowdown_fixed = 0 // If this is on, they're not affected by object related slowdown (positive or negative)
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/holder_type
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attacktext = "smashed their armoured gauntlet into"
|
||||
mob_size = MOB_LARGE
|
||||
mob_size = MOB_HUGE
|
||||
speed = 3
|
||||
environment_smash = 2
|
||||
attack_sound = 'sound/weapons/heavysmash.ogg'
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
heat_damage_per_tick = 20
|
||||
cold_damage_per_tick = 20
|
||||
var/poison_per_bite = 5
|
||||
var/poison_chance = 10
|
||||
var/poison_type = "toxin"
|
||||
faction = "spiders"
|
||||
var/busy = 0
|
||||
@@ -45,7 +46,7 @@
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
poison_per_bite = 10
|
||||
poison_per_bite = 7
|
||||
var/atom/cocoon_target
|
||||
poison_type = "stoxin"
|
||||
var/fed = 0
|
||||
@@ -68,20 +69,20 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
|
||||
var/target = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
. = ..()
|
||||
if(isliving(.))
|
||||
var/mob/living/L = .
|
||||
if(L.reagents)
|
||||
L.reagents.add_reagent("toxin", poison_per_bite)
|
||||
if(prob(poison_per_bite))
|
||||
L << "\red You feel a tiny prick."
|
||||
L.reagents.add_reagent(poison_type, 5)
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
if(prob(poison_chance))
|
||||
L << "<span class='warning'>You feel a tiny prick.</span>"
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/AttackingTarget()
|
||||
var/target = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(prob(poison_per_bite))
|
||||
. = ..()
|
||||
if(ishuman(.))
|
||||
var/mob/living/carbon/human/H = .
|
||||
if(prob(poison_chance))
|
||||
var/obj/item/organ/external/O = pick(H.organs)
|
||||
if(!(O.robotic >= ORGAN_ROBOT))
|
||||
var/eggs = PoolOrNew(/obj/effect/spider/eggcluster/, list(O, src))
|
||||
|
||||
@@ -268,6 +268,10 @@
|
||||
icon_state = "hair_buzzcut"
|
||||
species_allowed = list("Human","Unathi")
|
||||
|
||||
shavehair
|
||||
name = "Shaved Hair"
|
||||
icon_state = "hair_shaved"
|
||||
|
||||
crew
|
||||
name = "Crewcut"
|
||||
icon_state = "hair_crewcut"
|
||||
@@ -625,6 +629,10 @@
|
||||
name = "Dwarf Beard"
|
||||
icon_state = "facial_dwarf"
|
||||
|
||||
shadow
|
||||
name = "Five O'Clock Shadow"
|
||||
icon_state = "facial_shadow"
|
||||
|
||||
//unathi horn beards and the like
|
||||
|
||||
una_chinhorn
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
icon_state = "stamp-intaff"
|
||||
|
||||
/obj/item/weapon/stamp/centcomm
|
||||
name = "centcomm rubber stamp"
|
||||
name = "\improper CentCom rubber stamp"
|
||||
icon_state = "stamp-cent"
|
||||
|
||||
/obj/item/weapon/stamp/qm
|
||||
@@ -65,7 +65,7 @@
|
||||
icon_state = "stamp-cargo"
|
||||
|
||||
/obj/item/weapon/stamp/solgov
|
||||
name = "solgov stamp"
|
||||
name = "\improper Sol Government rubber stamp"
|
||||
icon_state = "stamp-sg"
|
||||
|
||||
|
||||
|
||||
@@ -1238,7 +1238,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
|
||||
|
||||
if(prob(40)) // Spooky flickers.
|
||||
for(var/obj/machinery/light/L in area)
|
||||
L.flicker(20)
|
||||
L.flicker(rand(20,30))
|
||||
|
||||
if(prob(25)) // Bluescreens.
|
||||
emagged = 1
|
||||
@@ -1256,4 +1256,12 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
|
||||
if(prob(5)) // APC completely ruined.
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/power/apc/do_grid_check()
|
||||
if(is_critical)
|
||||
return
|
||||
grid_check = TRUE
|
||||
spawn(15 MINUTES) // Protection against someone deconning the grid checker after a grid check happens, preventing infinte blackout.
|
||||
if(src && grid_check == TRUE)
|
||||
grid_check = FALSE
|
||||
|
||||
#undef APC_UPDATE_ICON_COOLDOWN
|
||||
|
||||
@@ -236,6 +236,31 @@
|
||||
src.set_dir(turn(src.dir, -90))
|
||||
|
||||
/obj/machinery/power/generator/power_spike()
|
||||
if(effective_gen >= max_power / 2 && powernet) // Don't make a spike if we're not making a whole lot of power.
|
||||
..()
|
||||
// if(!effective_gen >= max_power / 2 && powernet) // Don't make a spike if we're not making a whole lot of power.
|
||||
// return
|
||||
|
||||
var/list/powernet_union = powernet.nodes
|
||||
for(var/obj/machinery/power/terminal/T in powernet.nodes)
|
||||
if(T.master && istype(T.master, /obj/machinery/power/smes))
|
||||
var/obj/machinery/power/smes/S = T.master
|
||||
powernet_union |= S.powernet.nodes
|
||||
|
||||
var/found_grid_checker = FALSE
|
||||
for(var/obj/machinery/power/grid_checker/G in powernet_union)
|
||||
G.power_failure(prob(30)) // If we found a grid checker, then all is well.
|
||||
found_grid_checker = TRUE
|
||||
if(!found_grid_checker) // Otherwise lets break some stuff.
|
||||
spawn(1)
|
||||
command_announcement.Announce("Dangerous power spike detected in the power network. Please check machinery \
|
||||
for electrical damage.",
|
||||
"Critical Power Overload")
|
||||
var/i = 0
|
||||
var/limit = rand(30, 50)
|
||||
for(var/obj/machinery/power/P in powernet_union)
|
||||
P.overload(src)
|
||||
i++
|
||||
if(i % 5)
|
||||
sleep(1)
|
||||
if(i >= limit)
|
||||
break
|
||||
|
||||
|
||||
@@ -73,26 +73,17 @@
|
||||
new_sound = 'sound/AI/poweroff.ogg')
|
||||
power_failing = TRUE
|
||||
if(powernet)
|
||||
for(var/obj/machinery/power/terminal/T in powernet.nodes) // SMESes that are "downstream" of the powernet.
|
||||
for(var/obj/machinery/power/terminal/T in powernet.nodes) // APCs that are "downstream" of the powernet.
|
||||
|
||||
if(istype(T.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = T.master
|
||||
if(A.is_critical)
|
||||
continue
|
||||
A.grid_check = TRUE
|
||||
A.do_grid_check()
|
||||
|
||||
for(var/obj/machinery/power/smes/smes in powernet.nodes) // These are "upstream"
|
||||
smes.grid_check = TRUE
|
||||
/*
|
||||
smes.last_charge = smes.charge
|
||||
smes.last_output_attempt = smes.output_attempt
|
||||
smes.last_input_attempt = smes.input_attempt
|
||||
smes.charge = 0
|
||||
smes.inputting(FALSE)
|
||||
smes.outputting(FALSE)
|
||||
smes.update_icon()
|
||||
smes.power_change()
|
||||
*/
|
||||
smes.do_grid_check()
|
||||
|
||||
update_icon()
|
||||
|
||||
spawn(rand(4 MINUTES, 10 MINUTES) )
|
||||
@@ -116,10 +107,3 @@
|
||||
|
||||
for(var/obj/machinery/power/smes/smes in powernet.nodes) // These are "upstream"
|
||||
smes.grid_check = FALSE
|
||||
/*
|
||||
smes.charge = smes.last_charge
|
||||
smes.output_attempt = smes.last_output_attempt
|
||||
smes.input_attempt = smes.last_input_attempt
|
||||
smes.update_icon()
|
||||
smes.power_change()
|
||||
*/
|
||||
@@ -142,24 +142,12 @@
|
||||
/obj/machinery/power/proc/overload(var/obj/machinery/power/source)
|
||||
return
|
||||
|
||||
// Used by the grid checker upon receiving a power spike.
|
||||
/obj/machinery/power/proc/do_grid_check()
|
||||
return
|
||||
|
||||
/obj/machinery/power/proc/power_spike()
|
||||
var/obj/machinery/power/grid_checker/G = locate() in powernet.nodes
|
||||
if(G) // If we found a grid checker, then all is well.
|
||||
G.power_failure(prob(30))
|
||||
else // Otherwise lets break some stuff.
|
||||
spawn(1)
|
||||
command_announcement.Announce("Dangerous power spike detected in the power network. Please check machinery \
|
||||
for electrical damage.",
|
||||
"Critical Power Overload")
|
||||
var/i = 0
|
||||
var/limit = rand(30, 50)
|
||||
for(var/obj/machinery/power/P in powernet.nodes)
|
||||
P.overload(src)
|
||||
i++
|
||||
if(i % 5)
|
||||
sleep(1)
|
||||
if(i >= limit)
|
||||
break
|
||||
return
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Powernet handling helpers
|
||||
|
||||
@@ -421,12 +421,6 @@
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/power/smes/overload(var/obj/machinery/power/source) // This propagates the power spike down the powernet.
|
||||
if(istype(source, /obj/machinery/power/smes)) // Prevent infinite loops if two SMESes are hooked up to each other.
|
||||
return
|
||||
power_spike()
|
||||
|
||||
|
||||
/obj/machinery/power/smes/magical
|
||||
name = "magical power storage unit"
|
||||
desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Magically produces power."
|
||||
|
||||
@@ -53,6 +53,58 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">25 October 2016</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">The effects from empty-handed disarming now have a cooldown.</li>
|
||||
<li class="rscdel">HoS and Detective equipment is less protective.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">24 October 2016</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">The color selectable beret should now be more vibrantly colored.</li>
|
||||
<li class="rscadd">Bullet armor has a higher chance of preventing an embed.</li>
|
||||
<li class="tweak">The actual system by which embed works has been changed. The overall effect should be negligible.</li>
|
||||
<li class="tweak">Flashlights use device cells. Time of use should be roughly unchanged.</li>
|
||||
<li class="rscadd">Device cells have a chance to spawn where normal cells do.</li>
|
||||
<li class="rscadd">Internal Affairs Agent HUD icon added.</li>
|
||||
<li class="tweak">Command, QM, and Bridge Secretary icons are now blue.</li>
|
||||
<li class="tweak">Research department icons are now purple.</li>
|
||||
<li class="tweak">Supply department icons are now brown.</li>
|
||||
<li class="tweak">Chemist icon is now white and red, like the rest of medical.</li>
|
||||
<li class="tweak">Using a roll of tape on a person requires the same level of grip as handcuffs.</li>
|
||||
</ul>
|
||||
<h3 class="author">MagmaRam updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Rates of blood loss now depend on the type of wound inflicted and where the wound is inflicted, as well as the damage.</li>
|
||||
</ul>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">The disclocation chance when using disarm intent with a weapon has had its' formula changed, meaning the threshold for always disclocatiing is now higher, and no longer 15 force. Meaning weapons will dislocate limbs less often and will also do less damage.</li>
|
||||
</ul>
|
||||
<h3 class="author">Neerti updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Changes how the grid check event works. A new machine called the grid checker exists in engineering, near the engineering substation. The actual event now involves a power spike originating from the engine, which the grid checker will activate upon sensing it, and causing a blackout. Engineering can restore power faster if they hack the grid checker correctly. A piece of paper left in the substation has more details.</li>
|
||||
<li class="rscadd">Adds new 'spell power' mechanic, currently tied to technomancer cores. Certain cores will augment various characteristics of spells, such as damage, radius, etc Base spell power is 100% (internally 1.0) and some cores may raise or lower it.</li>
|
||||
<li class="rscadd">Adds new 'info' tab for Technomancers that hopefully tells new them what they need to know.</li>
|
||||
<li class="tweak">Round-end now shows every spell each technomancer has, as well as their core type.</li>
|
||||
<li class="tweak">Ability HUD buttons can be re-ordered by clickdragging one button onto another.</li>
|
||||
<li class="bugfix">Recycling core now actually works.</li>
|
||||
<li class="rscadd">Adds two new cores. The Safety Core, which reduces instability by 70%, however it hass less energy, lower recharge rate and lower spell power. Also the Overcharged Core which uses more energy, caused more instability, but has far higher spell potency.</li>
|
||||
<li class="rscadd">Adds a new Spyglass item, that functions exactly like a pair of binoculars. This is for Techomancers.</li>
|
||||
<li class="tweak">Technomancer Resurrect now has a deadline of 30 minutes until a dead person can't be revived, instead of 10 minutes.</li>
|
||||
<li class="tweak">Technomancer Radiance is now three times as strong. Also Radiance with a Scepter prevents the caster and allies from being afflicted.</li>
|
||||
</ul>
|
||||
<h3 class="author">PapaDrow updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Striped undergarments now exist.</li>
|
||||
</ul>
|
||||
<h3 class="author">Redstryker updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a blue variant of the Medical voidsuit called the 'Emergency Medical Response Voidsuit' that can be obtained from the suit cycler.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">10 October 2016</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -2956,3 +2956,62 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- bugfix: Low Yield EMP grenades now have the proper EMP radii.
|
||||
Redstryker:
|
||||
- bugfix: Allows promotion to Colony Director on the ID console.
|
||||
2016-10-24:
|
||||
Anewbe:
|
||||
- tweak: The color selectable beret should now be more vibrantly colored.
|
||||
- rscadd: Bullet armor has a higher chance of preventing an embed.
|
||||
- tweak: The actual system by which embed works has been changed. The overall effect
|
||||
should be negligible.
|
||||
- tweak: Flashlights use device cells. Time of use should be roughly unchanged.
|
||||
- rscadd: Device cells have a chance to spawn where normal cells do.
|
||||
- rscadd: Internal Affairs Agent HUD icon added.
|
||||
- tweak: Command, QM, and Bridge Secretary icons are now blue.
|
||||
- tweak: Research department icons are now purple.
|
||||
- tweak: Supply department icons are now brown.
|
||||
- tweak: Chemist icon is now white and red, like the rest of medical.
|
||||
- tweak: Using a roll of tape on a person requires the same level of grip as handcuffs.
|
||||
MagmaRam:
|
||||
- tweak: Rates of blood loss now depend on the type of wound inflicted and where
|
||||
the wound is inflicted, as well as the damage.
|
||||
Anewbe:
|
||||
- tweak: The disclocation chance when using disarm intent with a weapon has had
|
||||
its' formula changed, meaning the threshold for always disclocatiing is now
|
||||
higher, and no longer 15 force. Meaning weapons will dislocate limbs less often
|
||||
and will also do less damage.
|
||||
Neerti:
|
||||
- tweak: Changes how the grid check event works. A new machine called the grid
|
||||
checker exists in engineering, near the engineering substation. The actual
|
||||
event now involves a power spike originating from the engine, which the grid
|
||||
checker will activate upon sensing it, and causing a blackout. Engineering
|
||||
can restore power faster if they hack the grid checker correctly. A piece of
|
||||
paper left in the substation has more details.
|
||||
- rscadd: Adds new 'spell power' mechanic, currently tied to technomancer cores.
|
||||
Certain cores will augment various characteristics of spells, such as damage,
|
||||
radius, etc Base spell power is 100% (internally 1.0) and some cores may raise
|
||||
or lower it.
|
||||
- rscadd: Adds new 'info' tab for Technomancers that hopefully tells new them what
|
||||
they need to know.
|
||||
- tweak: Round-end now shows every spell each technomancer has, as well as their
|
||||
core type.
|
||||
- tweak: Ability HUD buttons can be re-ordered by clickdragging one button onto
|
||||
another.
|
||||
- bugfix: Recycling core now actually works.
|
||||
- rscadd: Adds two new cores. The Safety Core, which reduces instability by 70%,
|
||||
however it hass less energy, lower recharge rate and lower spell power. Also
|
||||
the Overcharged Core which uses more energy, caused more instability, but has
|
||||
far higher spell potency.
|
||||
- rscadd: Adds a new Spyglass item, that functions exactly like a pair of binoculars.
|
||||
This is for Techomancers.
|
||||
- tweak: Technomancer Resurrect now has a deadline of 30 minutes until a dead person
|
||||
can't be revived, instead of 10 minutes.
|
||||
- tweak: Technomancer Radiance is now three times as strong. Also Radiance with
|
||||
a Scepter prevents the caster and allies from being afflicted.
|
||||
PapaDrow:
|
||||
- rscadd: Striped undergarments now exist.
|
||||
Redstryker:
|
||||
- rscadd: Added a blue variant of the Medical voidsuit called the 'Emergency Medical
|
||||
Response Voidsuit' that can be obtained from the suit cycler.
|
||||
2016-10-25:
|
||||
Anewbe:
|
||||
- tweak: The effects from empty-handed disarming now have a cooldown.
|
||||
- rscdel: HoS and Detective equipment is less protective.
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Anewbe
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Bullet armor has a higher chance of preventing an embed."
|
||||
- tweak: "The actual system by which embed works has been changed. The overall effect should be negligible."
|
||||
@@ -1,37 +0,0 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Anewbe
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- tweak: "Flashlights use device cells. Time of use should be roughly unchanged."
|
||||
- rscadd: "Device cells have a chance to spawn where normal cells do."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user