mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-20 11:35:19 +01:00
Whitespace Standardization [MDB IGNORE] (#15748)
* Update settings * Whitespace changes * Comment out merger hooks in gitattributes Corrupt maps would have to be resolved in repo before hooks could be updated * Revert "Whitespace changes" This reverts commitafbdd1d844. * Whitespace again minus example * Gitignore example changelog * Restore changelog merge setting * Keep older dmi hook attribute until hooks can be updated * update vscode settings too * Renormalize remaining * Revert "Gitignore example changelog" This reverts commitde22ad375d. * Attempt to normalize example.yml (and another file I guess) * Try again
This commit is contained in:
@@ -1,23 +1,23 @@
|
||||
/datum/reagents/proc/get_color()
|
||||
if(!reagent_list || !reagent_list.len)
|
||||
return "#ffffffff"
|
||||
if(reagent_list.len == 1) // It's pretty common and saves a lot of work
|
||||
var/datum/reagent/R = reagent_list[1]
|
||||
return R.color
|
||||
|
||||
var/list/colors = list(0, 0, 0, 0)
|
||||
var/tot_w = 0
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
var/hex = uppertext(R.color)
|
||||
if(length(hex) == 7)
|
||||
hex += "FF"
|
||||
if(length(hex) != 9) // PANIC PANIC PANIC
|
||||
warning("Reagent [R.id] has an incorrect color set ([R.color])")
|
||||
hex = "#FFFFFFFF"
|
||||
colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight
|
||||
colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight
|
||||
colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight
|
||||
colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight
|
||||
tot_w += R.volume * R.color_weight
|
||||
|
||||
/datum/reagents/proc/get_color()
|
||||
if(!reagent_list || !reagent_list.len)
|
||||
return "#ffffffff"
|
||||
if(reagent_list.len == 1) // It's pretty common and saves a lot of work
|
||||
var/datum/reagent/R = reagent_list[1]
|
||||
return R.color
|
||||
|
||||
var/list/colors = list(0, 0, 0, 0)
|
||||
var/tot_w = 0
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
var/hex = uppertext(R.color)
|
||||
if(length(hex) == 7)
|
||||
hex += "FF"
|
||||
if(length(hex) != 9) // PANIC PANIC PANIC
|
||||
warning("Reagent [R.id] has an incorrect color set ([R.color])")
|
||||
hex = "#FFFFFFFF"
|
||||
colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight
|
||||
colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight
|
||||
colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight
|
||||
colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight
|
||||
tot_w += R.volume * R.color_weight
|
||||
|
||||
return rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w)
|
||||
@@ -1,34 +1,34 @@
|
||||
/datum/reagents/metabolism
|
||||
var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_BLOOD
|
||||
var/metabolism_speed = 1 // Multiplicative, 1 is full speed, 0.5 is half, etc.
|
||||
var/mob/living/carbon/parent
|
||||
|
||||
/datum/reagents/metabolism/New(var/max = 100, mob/living/carbon/parent_mob, var/met_class = null)
|
||||
..(max, parent_mob)
|
||||
|
||||
if(met_class)
|
||||
metabolism_class = met_class
|
||||
if(istype(parent_mob))
|
||||
parent = parent_mob
|
||||
|
||||
/datum/reagents/metabolism/proc/metabolize()
|
||||
|
||||
var/metabolism_type = 0 //non-human mobs
|
||||
if(ishuman(parent))
|
||||
var/mob/living/carbon/human/H = parent
|
||||
metabolism_type = H.species.reagent_tag
|
||||
|
||||
for(var/datum/reagent/current in reagent_list)
|
||||
current.on_mob_life(parent, metabolism_type, src)
|
||||
update_total()
|
||||
|
||||
// "Specialized" metabolism datums
|
||||
/datum/reagents/metabolism/bloodstream
|
||||
metabolism_class = CHEM_BLOOD
|
||||
|
||||
/datum/reagents/metabolism/ingested
|
||||
metabolism_class = CHEM_INGEST
|
||||
metabolism_speed = 0.5
|
||||
|
||||
/datum/reagents/metabolism/touch
|
||||
/datum/reagents/metabolism
|
||||
var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_BLOOD
|
||||
var/metabolism_speed = 1 // Multiplicative, 1 is full speed, 0.5 is half, etc.
|
||||
var/mob/living/carbon/parent
|
||||
|
||||
/datum/reagents/metabolism/New(var/max = 100, mob/living/carbon/parent_mob, var/met_class = null)
|
||||
..(max, parent_mob)
|
||||
|
||||
if(met_class)
|
||||
metabolism_class = met_class
|
||||
if(istype(parent_mob))
|
||||
parent = parent_mob
|
||||
|
||||
/datum/reagents/metabolism/proc/metabolize()
|
||||
|
||||
var/metabolism_type = 0 //non-human mobs
|
||||
if(ishuman(parent))
|
||||
var/mob/living/carbon/human/H = parent
|
||||
metabolism_type = H.species.reagent_tag
|
||||
|
||||
for(var/datum/reagent/current in reagent_list)
|
||||
current.on_mob_life(parent, metabolism_type, src)
|
||||
update_total()
|
||||
|
||||
// "Specialized" metabolism datums
|
||||
/datum/reagents/metabolism/bloodstream
|
||||
metabolism_class = CHEM_BLOOD
|
||||
|
||||
/datum/reagents/metabolism/ingested
|
||||
metabolism_class = CHEM_INGEST
|
||||
metabolism_speed = 0.5
|
||||
|
||||
/datum/reagents/metabolism/touch
|
||||
metabolism_class = CHEM_TOUCH
|
||||
@@ -1,111 +1,111 @@
|
||||
/obj/item/weapon/storage/box/bloodpacks
|
||||
name = "blood packs bags"
|
||||
desc = "This box contains blood packs."
|
||||
icon_state = "sterile"
|
||||
|
||||
/obj/item/weapon/storage/box/bloodpacks/Initialize()
|
||||
. = ..()
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood
|
||||
name = "IV pack"
|
||||
var/base_name = " "
|
||||
desc = "Holds liquids used for transfusion."
|
||||
var/base_desc = " "
|
||||
icon = 'icons/obj/bloodpack.dmi'
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
volume = 200
|
||||
var/label_text = ""
|
||||
|
||||
var/blood_type = null
|
||||
var/reag_id = "blood"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/Initialize()
|
||||
. = ..()
|
||||
base_name = name
|
||||
base_desc = desc
|
||||
if(blood_type != null)
|
||||
label_text = "[blood_type]"
|
||||
update_iv_label()
|
||||
reagents.add_reagent(reag_id, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/update_icon()
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
if(percent >= 0 && percent <= 9)
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
else if(percent >= 10 && percent <= 50)
|
||||
icon_state = "half"
|
||||
item_state = "bloodpack_half"
|
||||
else if(percent >= 51 && percent < INFINITY)
|
||||
icon_state = "full"
|
||||
item_state = "bloodpack_full"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
|
||||
var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > 50)
|
||||
to_chat(user, "<span class='notice'>The label can be at most 50 characters long.</span>")
|
||||
else if(length(tmp_label) > 10)
|
||||
to_chat(user, "<span class='notice'>You set the label.</span>")
|
||||
label_text = tmp_label
|
||||
update_iv_label()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You set the label to \"[tmp_label]\".</span>")
|
||||
label_text = tmp_label
|
||||
update_iv_label()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/proc/update_iv_label()
|
||||
if(label_text == "")
|
||||
name = base_name
|
||||
else if(length(label_text) > 10)
|
||||
var/short_label_text = copytext(label_text, 1, 11)
|
||||
name = "[base_name] ([short_label_text]...)"
|
||||
else
|
||||
name = "[base_name] ([label_text])"
|
||||
desc = "[base_desc] It is labeled \"[label_text]\"."
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/APlus
|
||||
blood_type = "A+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/AMinus
|
||||
blood_type = "A-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/BPlus
|
||||
blood_type = "B+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/BMinus
|
||||
blood_type = "B-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/OPlus
|
||||
blood_type = "O+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/OMinus
|
||||
blood_type = "O-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/synthplas
|
||||
blood_type = "O-"
|
||||
reag_id = "synthblood_dilute"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/synthblood
|
||||
blood_type = "O-"
|
||||
reag_id = "synthblood"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/empty
|
||||
name = "Empty BloodPack"
|
||||
desc = "Seems pretty useless... Maybe if there were a way to fill it?"
|
||||
icon_state = "empty"
|
||||
/obj/item/weapon/storage/box/bloodpacks
|
||||
name = "blood packs bags"
|
||||
desc = "This box contains blood packs."
|
||||
icon_state = "sterile"
|
||||
|
||||
/obj/item/weapon/storage/box/bloodpacks/Initialize()
|
||||
. = ..()
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
new /obj/item/weapon/reagent_containers/blood/empty(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood
|
||||
name = "IV pack"
|
||||
var/base_name = " "
|
||||
desc = "Holds liquids used for transfusion."
|
||||
var/base_desc = " "
|
||||
icon = 'icons/obj/bloodpack.dmi'
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
volume = 200
|
||||
var/label_text = ""
|
||||
|
||||
var/blood_type = null
|
||||
var/reag_id = "blood"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/Initialize()
|
||||
. = ..()
|
||||
base_name = name
|
||||
base_desc = desc
|
||||
if(blood_type != null)
|
||||
label_text = "[blood_type]"
|
||||
update_iv_label()
|
||||
reagents.add_reagent(reag_id, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/update_icon()
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
if(percent >= 0 && percent <= 9)
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
else if(percent >= 10 && percent <= 50)
|
||||
icon_state = "half"
|
||||
item_state = "bloodpack_half"
|
||||
else if(percent >= 51 && percent < INFINITY)
|
||||
icon_state = "full"
|
||||
item_state = "bloodpack_full"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
|
||||
var/tmp_label = sanitizeSafe(tgui_input_text(user, "Enter a label for [name]", "Label", label_text, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > 50)
|
||||
to_chat(user, "<span class='notice'>The label can be at most 50 characters long.</span>")
|
||||
else if(length(tmp_label) > 10)
|
||||
to_chat(user, "<span class='notice'>You set the label.</span>")
|
||||
label_text = tmp_label
|
||||
update_iv_label()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You set the label to \"[tmp_label]\".</span>")
|
||||
label_text = tmp_label
|
||||
update_iv_label()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/proc/update_iv_label()
|
||||
if(label_text == "")
|
||||
name = base_name
|
||||
else if(length(label_text) > 10)
|
||||
var/short_label_text = copytext(label_text, 1, 11)
|
||||
name = "[base_name] ([short_label_text]...)"
|
||||
else
|
||||
name = "[base_name] ([label_text])"
|
||||
desc = "[base_desc] It is labeled \"[label_text]\"."
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/APlus
|
||||
blood_type = "A+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/AMinus
|
||||
blood_type = "A-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/BPlus
|
||||
blood_type = "B+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/BMinus
|
||||
blood_type = "B-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/OPlus
|
||||
blood_type = "O+"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/OMinus
|
||||
blood_type = "O-"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/synthplas
|
||||
blood_type = "O-"
|
||||
reag_id = "synthblood_dilute"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/synthblood
|
||||
blood_type = "O-"
|
||||
reag_id = "synthblood"
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/empty
|
||||
name = "Empty BloodPack"
|
||||
desc = "Seems pretty useless... Maybe if there were a way to fill it?"
|
||||
icon_state = "empty"
|
||||
item_state = "bloodpack_empty"
|
||||
@@ -1,201 +1,201 @@
|
||||
/obj/item/weapon/reagent_containers/borghypo
|
||||
name = "cyborg hypospray"
|
||||
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
item_state = "hypo"
|
||||
icon_state = "borghypo"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
|
||||
var/mode = 1
|
||||
var/charge_cost = 50
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
|
||||
var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
|
||||
|
||||
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
|
||||
var/list/reagent_volumes = list()
|
||||
var/list/reagent_names = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/surgeon
|
||||
reagent_ids = list("inaprovaline", "dexalin", "tricordrazine", "spaceacillin", "oxycodone")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/crisis
|
||||
reagent_ids = list("inaprovaline", "bicaridine", "kelotane", "anti_toxin", "dexalin", "tricordrazine", "spaceacillin", "tramadol")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/lost
|
||||
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/merc
|
||||
name = "advanced cyborg hypospray"
|
||||
desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
|
||||
thick materials that other hyposprays would struggle with."
|
||||
bypass_protection = TRUE // Because mercs tend to be in spacesuits.
|
||||
reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine", "synthblood")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Initialize()
|
||||
. = ..()
|
||||
|
||||
for(var/T in reagent_ids)
|
||||
reagent_volumes[T] = volume
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[T]
|
||||
reagent_names += R.name
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+
|
||||
if(++charge_tick < recharge_time)
|
||||
return 0
|
||||
charge_tick = 0
|
||||
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
for(var/T in reagent_ids)
|
||||
if(reagent_volumes[T] < volume)
|
||||
R.cell.use(charge_cost)
|
||||
reagent_volumes[T] = min(reagent_volumes[T] + 5, volume)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(!reagent_volumes[reagent_ids[mode]])
|
||||
to_chat(user, "<span class='warning'>The injector is empty.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
|
||||
to_chat(user, "<span class='notice'>You inject [M] with the injector.</span>")
|
||||
to_chat(M, "<span class='notice'>You feel a tiny prick!</span>")
|
||||
|
||||
if(M.reagents)
|
||||
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
|
||||
M.reagents.add_reagent(reagent_ids[mode], t)
|
||||
reagent_volumes[reagent_ids[mode]] -= t
|
||||
add_attack_logs(user, M, "Borg injected with [reagent_ids[mode]]")
|
||||
to_chat(user, "<span class='notice'>[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
|
||||
var/t = "<span class='infoplain'>"
|
||||
for(var/i = 1 to reagent_ids.len)
|
||||
if(t)
|
||||
t += ", "
|
||||
if(mode == i)
|
||||
t += "<b>[reagent_names[i]]</b>"
|
||||
else
|
||||
t += "<a href='?src=\ref[src];reagent=[reagent_ids[i]]'>[reagent_names[i]]</a>"
|
||||
t = "Available reagents: [t].</span>"
|
||||
to_chat(user,t)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Topic(var/href, var/list/href_list)
|
||||
if(href_list["reagent"])
|
||||
var/t = reagent_ids.Find(href_list["reagent"])
|
||||
if(t)
|
||||
playsound(src, 'sound/effects/pop.ogg', 50, 0)
|
||||
mode = t
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
|
||||
to_chat(usr, "<span class='notice'>Synthesizer is now producing '[R.name]'.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
|
||||
. += "<span class='notice'>It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service
|
||||
name = "cyborg drink synthesizer"
|
||||
desc = "A portable drink dispencer."
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "shaker"
|
||||
charge_cost = 20
|
||||
recharge_time = 3
|
||||
volume = 60
|
||||
possible_transfer_amounts = list(5, 10, 20, 30)
|
||||
reagent_ids = list("ale",
|
||||
"beer",
|
||||
"berryjuice",
|
||||
"bitters",
|
||||
"cider",
|
||||
"coffee",
|
||||
"cognac",
|
||||
"cola",
|
||||
"cream",
|
||||
"dr_gibb",
|
||||
"egg",
|
||||
"gin",
|
||||
"gingerale",
|
||||
"hot_coco",
|
||||
"ice",
|
||||
"icetea",
|
||||
"kahlua",
|
||||
"lemonjuice",
|
||||
"lemon_lime",
|
||||
"limejuice",
|
||||
"mead",
|
||||
"milk",
|
||||
"mint",
|
||||
"orangejuice",
|
||||
"redwine",
|
||||
"rum",
|
||||
"sake",
|
||||
"sodawater",
|
||||
"soymilk",
|
||||
"space_up",
|
||||
"spacemountainwind",
|
||||
"spacespice",
|
||||
"specialwhiskey",
|
||||
"sugar",
|
||||
"tea",
|
||||
"tequilla",
|
||||
"tomatojuice",
|
||||
"tonic",
|
||||
"vermouth",
|
||||
"vodka",
|
||||
"water",
|
||||
"watermelonjuice",
|
||||
"whiskey")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!target.is_open_container() || !target.reagents)
|
||||
return
|
||||
|
||||
if(!reagent_volumes[reagent_ids[mode]])
|
||||
to_chat(user, "<span class='notice'>[src] is out of this reagent, give it some time to refill.</span>")
|
||||
return
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
|
||||
target.reagents.add_reagent(reagent_ids[mode], t)
|
||||
reagent_volumes[reagent_ids[mode]] -= t
|
||||
to_chat(user, "<span class='notice'>You transfer [t] units of the solution to [target].</span>")
|
||||
return
|
||||
/obj/item/weapon/reagent_containers/borghypo
|
||||
name = "cyborg hypospray"
|
||||
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
item_state = "hypo"
|
||||
icon_state = "borghypo"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
|
||||
var/mode = 1
|
||||
var/charge_cost = 50
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
|
||||
var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
|
||||
|
||||
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
|
||||
var/list/reagent_volumes = list()
|
||||
var/list/reagent_names = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/surgeon
|
||||
reagent_ids = list("inaprovaline", "dexalin", "tricordrazine", "spaceacillin", "oxycodone")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/crisis
|
||||
reagent_ids = list("inaprovaline", "bicaridine", "kelotane", "anti_toxin", "dexalin", "tricordrazine", "spaceacillin", "tramadol")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/lost
|
||||
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/merc
|
||||
name = "advanced cyborg hypospray"
|
||||
desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
|
||||
thick materials that other hyposprays would struggle with."
|
||||
bypass_protection = TRUE // Because mercs tend to be in spacesuits.
|
||||
reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine", "synthblood")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Initialize()
|
||||
. = ..()
|
||||
|
||||
for(var/T in reagent_ids)
|
||||
reagent_volumes[T] = volume
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[T]
|
||||
reagent_names += R.name
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+
|
||||
if(++charge_tick < recharge_time)
|
||||
return 0
|
||||
charge_tick = 0
|
||||
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
for(var/T in reagent_ids)
|
||||
if(reagent_volumes[T] < volume)
|
||||
R.cell.use(charge_cost)
|
||||
reagent_volumes[T] = min(reagent_volumes[T] + 5, volume)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(!reagent_volumes[reagent_ids[mode]])
|
||||
to_chat(user, "<span class='warning'>The injector is empty.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
|
||||
to_chat(user, "<span class='notice'>You inject [M] with the injector.</span>")
|
||||
to_chat(M, "<span class='notice'>You feel a tiny prick!</span>")
|
||||
|
||||
if(M.reagents)
|
||||
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
|
||||
M.reagents.add_reagent(reagent_ids[mode], t)
|
||||
reagent_volumes[reagent_ids[mode]] -= t
|
||||
add_attack_logs(user, M, "Borg injected with [reagent_ids[mode]]")
|
||||
to_chat(user, "<span class='notice'>[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
|
||||
var/t = "<span class='infoplain'>"
|
||||
for(var/i = 1 to reagent_ids.len)
|
||||
if(t)
|
||||
t += ", "
|
||||
if(mode == i)
|
||||
t += "<b>[reagent_names[i]]</b>"
|
||||
else
|
||||
t += "<a href='?src=\ref[src];reagent=[reagent_ids[i]]'>[reagent_names[i]]</a>"
|
||||
t = "Available reagents: [t].</span>"
|
||||
to_chat(user,t)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/Topic(var/href, var/list/href_list)
|
||||
if(href_list["reagent"])
|
||||
var/t = reagent_ids.Find(href_list["reagent"])
|
||||
if(t)
|
||||
playsound(src, 'sound/effects/pop.ogg', 50, 0)
|
||||
mode = t
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
|
||||
to_chat(usr, "<span class='notice'>Synthesizer is now producing '[R.name]'.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[reagent_ids[mode]]
|
||||
. += "<span class='notice'>It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service
|
||||
name = "cyborg drink synthesizer"
|
||||
desc = "A portable drink dispencer."
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "shaker"
|
||||
charge_cost = 20
|
||||
recharge_time = 3
|
||||
volume = 60
|
||||
possible_transfer_amounts = list(5, 10, 20, 30)
|
||||
reagent_ids = list("ale",
|
||||
"beer",
|
||||
"berryjuice",
|
||||
"bitters",
|
||||
"cider",
|
||||
"coffee",
|
||||
"cognac",
|
||||
"cola",
|
||||
"cream",
|
||||
"dr_gibb",
|
||||
"egg",
|
||||
"gin",
|
||||
"gingerale",
|
||||
"hot_coco",
|
||||
"ice",
|
||||
"icetea",
|
||||
"kahlua",
|
||||
"lemonjuice",
|
||||
"lemon_lime",
|
||||
"limejuice",
|
||||
"mead",
|
||||
"milk",
|
||||
"mint",
|
||||
"orangejuice",
|
||||
"redwine",
|
||||
"rum",
|
||||
"sake",
|
||||
"sodawater",
|
||||
"soymilk",
|
||||
"space_up",
|
||||
"spacemountainwind",
|
||||
"spacespice",
|
||||
"specialwhiskey",
|
||||
"sugar",
|
||||
"tea",
|
||||
"tequilla",
|
||||
"tomatojuice",
|
||||
"tonic",
|
||||
"vermouth",
|
||||
"vodka",
|
||||
"water",
|
||||
"watermelonjuice",
|
||||
"whiskey")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!target.is_open_container() || !target.reagents)
|
||||
return
|
||||
|
||||
if(!reagent_volumes[reagent_ids[mode]])
|
||||
to_chat(user, "<span class='notice'>[src] is out of this reagent, give it some time to refill.</span>")
|
||||
return
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]])
|
||||
target.reagents.add_reagent(reagent_ids[mode], t)
|
||||
reagent_volumes[reagent_ids[mode]] -= t
|
||||
to_chat(user, "<span class='notice'>You transfer [t] units of the solution to [target].</span>")
|
||||
return
|
||||
|
||||
@@ -1,114 +1,114 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Droppers.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/dropper
|
||||
name = "dropper"
|
||||
desc = "A dropper. Transfers up to 5 units at a time."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "dropper0"
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = list(1,2,3,4,5)
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 5
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
. += "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
|
||||
else
|
||||
. += "<span class='notice'>It is empty.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity)
|
||||
if(!target.reagents || !proximity) return
|
||||
|
||||
if(reagents.total_volume)
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
|
||||
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
|
||||
return
|
||||
|
||||
var/trans = 0
|
||||
|
||||
if(ismob(target))
|
||||
|
||||
var/time = 20 //2/3rds the time of a syringe
|
||||
user.visible_message("<span class='warning'>[user] is trying to squirt something into [target]'s eyes!</span>")
|
||||
|
||||
if(!do_mob(user, target, time))
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/victim = target
|
||||
|
||||
var/obj/item/safe_thing = null
|
||||
if(victim.wear_mask)
|
||||
if (victim.wear_mask.body_parts_covered & EYES)
|
||||
safe_thing = victim.wear_mask
|
||||
if(victim.head)
|
||||
if (victim.head.body_parts_covered & EYES)
|
||||
safe_thing = victim.head
|
||||
if(victim.glasses)
|
||||
if (!safe_thing)
|
||||
safe_thing = victim.glasses
|
||||
|
||||
if(safe_thing)
|
||||
trans = reagents.splash(safe_thing, min(amount_per_transfer_from_this, reagents.total_volume), max_spill=30)
|
||||
user.visible_message("<span class='warning'>[user] tries to squirt something into [target]'s eyes, but fails!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
return
|
||||
|
||||
var/contained = reagentlist()
|
||||
add_attack_logs(user,target,"Used [src.name] containing [contained]")
|
||||
|
||||
trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested
|
||||
trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something
|
||||
user.visible_message("<span class='warning'>[user] squirts something into [target]'s eyes!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
|
||||
return
|
||||
|
||||
else
|
||||
trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
|
||||
else // Taking from something
|
||||
|
||||
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
|
||||
to_chat(user, "<span class='notice'>You cannot directly remove reagents from [target].</span>")
|
||||
return
|
||||
|
||||
if(!target.reagents || !target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill the dropper with [trans] units of the solution.</span>")
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/update_icon()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "dropper1"
|
||||
else
|
||||
icon_state = "dropper0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/industrial
|
||||
name = "Industrial Dropper"
|
||||
desc = "A larger dropper. Transfers up to 10 units at a time."
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
|
||||
volume = 10
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Droppers. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Droppers.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/dropper
|
||||
name = "dropper"
|
||||
desc = "A dropper. Transfers up to 5 units at a time."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "dropper0"
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = list(1,2,3,4,5)
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 5
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
. += "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
|
||||
else
|
||||
. += "<span class='notice'>It is empty.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity)
|
||||
if(!target.reagents || !proximity) return
|
||||
|
||||
if(reagents.total_volume)
|
||||
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
|
||||
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
|
||||
return
|
||||
|
||||
var/trans = 0
|
||||
|
||||
if(ismob(target))
|
||||
|
||||
var/time = 20 //2/3rds the time of a syringe
|
||||
user.visible_message("<span class='warning'>[user] is trying to squirt something into [target]'s eyes!</span>")
|
||||
|
||||
if(!do_mob(user, target, time))
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/victim = target
|
||||
|
||||
var/obj/item/safe_thing = null
|
||||
if(victim.wear_mask)
|
||||
if (victim.wear_mask.body_parts_covered & EYES)
|
||||
safe_thing = victim.wear_mask
|
||||
if(victim.head)
|
||||
if (victim.head.body_parts_covered & EYES)
|
||||
safe_thing = victim.head
|
||||
if(victim.glasses)
|
||||
if (!safe_thing)
|
||||
safe_thing = victim.glasses
|
||||
|
||||
if(safe_thing)
|
||||
trans = reagents.splash(safe_thing, min(amount_per_transfer_from_this, reagents.total_volume), max_spill=30)
|
||||
user.visible_message("<span class='warning'>[user] tries to squirt something into [target]'s eyes, but fails!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
return
|
||||
|
||||
var/contained = reagentlist()
|
||||
add_attack_logs(user,target,"Used [src.name] containing [contained]")
|
||||
|
||||
trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested
|
||||
trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something
|
||||
user.visible_message("<span class='warning'>[user] squirts something into [target]'s eyes!</span>", "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
|
||||
return
|
||||
|
||||
else
|
||||
trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution.</span>")
|
||||
|
||||
else // Taking from something
|
||||
|
||||
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
|
||||
to_chat(user, "<span class='notice'>You cannot directly remove reagents from [target].</span>")
|
||||
return
|
||||
|
||||
if(!target.reagents || !target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill the dropper with [trans] units of the solution.</span>")
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/update_icon()
|
||||
if(reagents.total_volume)
|
||||
icon_state = "dropper1"
|
||||
else
|
||||
icon_state = "dropper0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/dropper/industrial
|
||||
name = "Industrial Dropper"
|
||||
desc = "A larger dropper. Transfers up to 10 units at a time."
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
|
||||
volume = 10
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Droppers. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,385 +1,385 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// HYPOSPRAY
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray
|
||||
name = "hypospray"
|
||||
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
icon_state = "hypo"
|
||||
item_state = "hypo"
|
||||
amount_per_transfer_from_this = 5
|
||||
unacidable = TRUE
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
drop_sound = 'sound/items/drop/gun.ogg'
|
||||
pickup_sound = 'sound/items/pickup/gun.ogg'
|
||||
preserve_item = 1
|
||||
var/filled = 0
|
||||
var/list/filled_reagents = list()
|
||||
var/hyposound // What sound do we play on use?
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/Initialize()
|
||||
. = ..()
|
||||
if(filled)
|
||||
if(filled_reagents)
|
||||
for(var/r in filled_reagents)
|
||||
reagents.add_reagent(r, filled_reagents[r])
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob)
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty.</span>")
|
||||
return
|
||||
if (!istype(M))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
//VOREStation Add Start - Adds Prototype Hypo functionality
|
||||
if(H != user && prototype)
|
||||
to_chat(user, "<span class='notice'>You begin injecting [H] with \the [src].</span>")
|
||||
to_chat(H, "<span class='danger'> [user] is trying to inject you with \the [src]!</span>")
|
||||
if(!do_after(user, 30, H))
|
||||
return
|
||||
//VOREstation Add End
|
||||
else if(!H.stat && !prototype) //VOREStation Edit
|
||||
if(H != user)
|
||||
if(H.a_intent != I_HELP)
|
||||
to_chat(user, "<span class='notice'>[H] is resisting your attempt to inject them with \the [src].</span>")
|
||||
to_chat(H, "<span class='danger'> [user] is trying to inject you with \the [src]!</span>")
|
||||
if(!do_after(user, 30, H))
|
||||
return
|
||||
|
||||
do_injection(H, user)
|
||||
return
|
||||
|
||||
// This does the actual injection and transfer.
|
||||
/obj/item/weapon/reagent_containers/hypospray/proc/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
if(!istype(H) || !istype(user))
|
||||
return FALSE
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
to_chat(user, span("notice", "You inject \the [H] with \the [src]."))
|
||||
to_chat(H, span("warning", "You feel a tiny prick!"))
|
||||
|
||||
if(hyposound)
|
||||
playsound(src, hyposound, 25)
|
||||
|
||||
if(H.reagents)
|
||||
var/contained = reagentlist()
|
||||
var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
add_attack_logs(user,H,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
to_chat(user, span("notice", "[trans] units injected. [reagents.total_volume] units remaining in \the [src]."))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//A vial-loaded hypospray. Cartridge-based!
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial
|
||||
name = "advanced hypospray"
|
||||
icon_state = "advhypo"
|
||||
desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name.
|
||||
volume = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/Initialize()
|
||||
. = ..()
|
||||
icon_state = "[initial(icon_state)]"
|
||||
loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial
|
||||
volume = loaded_vial.volume
|
||||
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/attack_hand(mob/user as mob)
|
||||
if(user.get_inactive_hand() == src)
|
||||
if(loaded_vial)
|
||||
reagents.trans_to_holder(loaded_vial.reagents,volume)
|
||||
reagents.maximum_volume = 0
|
||||
loaded_vial.update_icon()
|
||||
user.put_in_hands(loaded_vial)
|
||||
loaded_vial = null
|
||||
to_chat(user, "<span class='notice'>You remove the vial from the [src].</span>")
|
||||
update_icon()
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
return
|
||||
..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/update_icon()
|
||||
..()
|
||||
if(loaded_vial)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_empty"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial))
|
||||
if(!loaded_vial)
|
||||
user.visible_message("<span class='notice'>[user] begins loading [W] into \the [src].</span>","<span class='notice'>You start loading [W] into \the [src].</span>")
|
||||
if(!do_after(user,30) || loaded_vial || !(W in user))
|
||||
return 0
|
||||
if(W.is_open_container())
|
||||
W.flags ^= OPENCONTAINER
|
||||
W.update_icon()
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
loaded_vial = W
|
||||
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
||||
loaded_vial.reagents.trans_to_holder(reagents,volume)
|
||||
user.visible_message("<span class='notice'>[user] has loaded [W] into \the [src].</span>","<span class='notice'>You have loaded [W] into \the [src].</span>")
|
||||
update_icon()
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] already has a vial.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector
|
||||
name = "autoinjector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
|
||||
icon_state = "blue"
|
||||
item_state = "blue"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 5
|
||||
filled = 1
|
||||
filled_reagents = list("inaprovaline" = 5)
|
||||
preserve_item = 0
|
||||
hyposound = 'sound/effects/hypospray.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty
|
||||
filled = 0
|
||||
filled_reagents = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/used/Initialize()
|
||||
. = ..()
|
||||
flags &= ~OPENCONTAINER
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
. = ..()
|
||||
if(.) // Will occur if successfully injected.
|
||||
flags &= ~OPENCONTAINER
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
|
||||
if(reagents.total_volume > 0)
|
||||
icon_state = "[initial(icon_state)]1"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
|
||||
. = ..()
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
. += "<span class='notice'>It is currently loaded.</span>"
|
||||
else
|
||||
. += "<span class='notice'>It is spent.</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox
|
||||
name = "autoinjector (antitox)"
|
||||
icon_state = "green"
|
||||
filled_reagents = list("anti_toxin" = 5)
|
||||
|
||||
//Special autoinjectors, while having potent chems like the 15u ones, the chems are usually potent enough that 5u is enough
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed
|
||||
name = "bone repair injector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating damage to bones."
|
||||
filled_reagents = list("osteodaxon" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed
|
||||
name = "clone injector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating genetic damage."
|
||||
filled_reagents = list("rezadone" = 5)
|
||||
|
||||
// These have a 15u capacity, somewhat higher tech level, and generally more useful chems, but are otherwise the same as the regular autoinjectors.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector
|
||||
name = "empty hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity."
|
||||
icon_state = "autoinjector"
|
||||
amount_per_transfer_from_this = 15
|
||||
volume = 15
|
||||
origin_tech = list(TECH_BIO = 4)
|
||||
filled_reagents = list("inaprovaline" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty //for the autolathe
|
||||
name = "large autoinjector"
|
||||
filled = 0
|
||||
filled_reagents = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute
|
||||
name = "trauma hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on victims of \
|
||||
moderate blunt trauma."
|
||||
filled_reagents = list("bicaridine" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn
|
||||
name = "burn hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on burn victims, \
|
||||
featuring an optimized chemical mixture to allow for rapid healing."
|
||||
filled_reagents = list("kelotane" = 7.5, "dermaline" = 7.5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin
|
||||
name = "toxin hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract toxins."
|
||||
filled_reagents = list("anti_toxin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy
|
||||
name = "oxy hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract oxygen \
|
||||
deprivation."
|
||||
filled_reagents = list("dexalinp" = 10, "tricordrazine" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity
|
||||
name = "purity hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at \
|
||||
resolving viruses, infections, radiation, and genetic maladies."
|
||||
filled_reagents = list("spaceacillin" = 4, "arithrazine" = 5, "prussian_blue" = 5, "ryetalyn" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain
|
||||
name = "pain hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one contains potent painkillers."
|
||||
filled_reagents = list("tramadol" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ
|
||||
name = "organ hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. Organ damage is resolved by this variant."
|
||||
filled_reagents = list("alkysine" = 3, "imidazoline" = 2, "peridaxon" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat
|
||||
name = "combat hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This is a more dangerous and potentially \
|
||||
addictive hypo compared to others, as it contains a potent cocktail of various chemicals to optimize the recipient's combat \
|
||||
ability."
|
||||
filled_reagents = list("bicaridine" = 3, "kelotane" = 1.5, "dermaline" = 1.5, "oxycodone" = 3, "hyperzine" = 3, "tricordrazine" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting
|
||||
name = "clotting agent"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at treating bleeding wounds and internal bleeding."
|
||||
filled_reagents = list("inaprovaline" = 5, "myelamine" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose
|
||||
name = "glucose hypo"
|
||||
desc = "A hypoinjector filled with glucose, used for critically malnourished patients and voidsuited workers."
|
||||
filled_reagents = list("glucose" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm
|
||||
name = "stimm injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is filled with a home-made stimulant, with some serious side-effects."
|
||||
filled_reagents = list("stimm" = 10) // More than 10u will OD.
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired
|
||||
name = "expired injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one has had its contents expire a long time ago, using it now will probably make someone sick, or worse."
|
||||
filled_reagents = list("expired_medicine" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific
|
||||
name = "soporific injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is sometimes used by orderlies, as it has soporifics, which make someone tired and fall asleep."
|
||||
filled_reagents = list("stoxin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide
|
||||
name = "cyanide injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains cyanide, a lethal poison. It being inside a medical autoinjector has certain unsettling implications."
|
||||
filled_reagents = list("cyanide" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium
|
||||
name = "serotrotium injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is filled with serotrotium, which causes concentrated production of the serotonin neurotransmitter in humans."
|
||||
filled_reagents = list("serotrotium" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss
|
||||
name = "illicit injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains various illicit drugs, held inside a hypospray to make smuggling easier."
|
||||
filled_reagents = list("bliss" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin
|
||||
name = "cryptobiolin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains cryptobiolin, which causes confusion."
|
||||
filled_reagents = list("cryptobiolin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene
|
||||
name = "impedrezene injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one has impedrezene inside, a narcotic that impairs higher brain functioning. \
|
||||
This autoinjector is almost certainly created illegitimately."
|
||||
filled_reagents = list("impedrezene" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker
|
||||
name = "mindbreaker injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one stores the dangerous hallucinogen called 'Mindbreaker', likely put in place \
|
||||
by illicit groups hoping to hide their product."
|
||||
filled_reagents = list("mindbreaker" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin
|
||||
name = "psilocybin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This has psilocybin inside, which is a strong psychotropic derived from certain species of mushroom. \
|
||||
This autoinjector likely was made by criminal elements to avoid detection from casual inspection."
|
||||
filled_reagents = list("psilocybin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen
|
||||
name = "unstable mutagen injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This contains unstable mutagen, which makes using this a very bad idea. It will either \
|
||||
ruin your genetic health, turn you into a Five Points violation, or both!"
|
||||
filled_reagents = list("mutagen" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin
|
||||
name = "lexorin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This contains lexorin, a dangerous toxin that stops respiration, and has been \
|
||||
implicated in several high-profile assassinations in the past."
|
||||
filled_reagents = list("lexorin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites
|
||||
name = "medical nanite injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The injector stores a slurry of highly advanced and specialized nanomachines designed \
|
||||
to restore bodily health from within. The nanomachines are short-lived but degrade \
|
||||
harmlessly, and cannot self-replicate in order to remain Five Points compliant."
|
||||
filled_reagents = list("healing_nanites" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites
|
||||
name = "defective nanite injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The injector stores a slurry of highly advanced and specialized nanomachines that \
|
||||
are unfortunately malfunctioning, making them unsafe to use inside of a living body. \
|
||||
Because of the Five Points, these nanites cannot self-replicate."
|
||||
filled_reagents = list("defective_nanites" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated
|
||||
name = "contaminated injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The hypospray contains a viral agent inside, as well as a liquid substance that encourages \
|
||||
the growth of the virus inside."
|
||||
filled_reagents = list("virusfood" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
. = ..()
|
||||
if(.) // Will occur if successfully injected.
|
||||
infect_mob_random_lesser(H)
|
||||
add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].")
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// HYPOSPRAY
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray
|
||||
name = "hypospray"
|
||||
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
icon_state = "hypo"
|
||||
item_state = "hypo"
|
||||
amount_per_transfer_from_this = 5
|
||||
unacidable = TRUE
|
||||
volume = 30
|
||||
possible_transfer_amounts = null
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
drop_sound = 'sound/items/drop/gun.ogg'
|
||||
pickup_sound = 'sound/items/pickup/gun.ogg'
|
||||
preserve_item = 1
|
||||
var/filled = 0
|
||||
var/list/filled_reagents = list()
|
||||
var/hyposound // What sound do we play on use?
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/Initialize()
|
||||
. = ..()
|
||||
if(filled)
|
||||
if(filled_reagents)
|
||||
for(var/r in filled_reagents)
|
||||
reagents.add_reagent(r, filled_reagents[r])
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob)
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty.</span>")
|
||||
return
|
||||
if (!istype(M))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
//VOREStation Add Start - Adds Prototype Hypo functionality
|
||||
if(H != user && prototype)
|
||||
to_chat(user, "<span class='notice'>You begin injecting [H] with \the [src].</span>")
|
||||
to_chat(H, "<span class='danger'> [user] is trying to inject you with \the [src]!</span>")
|
||||
if(!do_after(user, 30, H))
|
||||
return
|
||||
//VOREstation Add End
|
||||
else if(!H.stat && !prototype) //VOREStation Edit
|
||||
if(H != user)
|
||||
if(H.a_intent != I_HELP)
|
||||
to_chat(user, "<span class='notice'>[H] is resisting your attempt to inject them with \the [src].</span>")
|
||||
to_chat(H, "<span class='danger'> [user] is trying to inject you with \the [src]!</span>")
|
||||
if(!do_after(user, 30, H))
|
||||
return
|
||||
|
||||
do_injection(H, user)
|
||||
return
|
||||
|
||||
// This does the actual injection and transfer.
|
||||
/obj/item/weapon/reagent_containers/hypospray/proc/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
if(!istype(H) || !istype(user))
|
||||
return FALSE
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
to_chat(user, span("notice", "You inject \the [H] with \the [src]."))
|
||||
to_chat(H, span("warning", "You feel a tiny prick!"))
|
||||
|
||||
if(hyposound)
|
||||
playsound(src, hyposound, 25)
|
||||
|
||||
if(H.reagents)
|
||||
var/contained = reagentlist()
|
||||
var/trans = reagents.trans_to_mob(H, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
add_attack_logs(user,H,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
to_chat(user, span("notice", "[trans] units injected. [reagents.total_volume] units remaining in \the [src]."))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//A vial-loaded hypospray. Cartridge-based!
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial
|
||||
name = "advanced hypospray"
|
||||
icon_state = "advhypo"
|
||||
desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/vial/loaded_vial //Wow, what a name.
|
||||
volume = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/Initialize()
|
||||
. = ..()
|
||||
icon_state = "[initial(icon_state)]"
|
||||
loaded_vial = new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //Comes with an empty vial
|
||||
volume = loaded_vial.volume
|
||||
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/attack_hand(mob/user as mob)
|
||||
if(user.get_inactive_hand() == src)
|
||||
if(loaded_vial)
|
||||
reagents.trans_to_holder(loaded_vial.reagents,volume)
|
||||
reagents.maximum_volume = 0
|
||||
loaded_vial.update_icon()
|
||||
user.put_in_hands(loaded_vial)
|
||||
loaded_vial = null
|
||||
to_chat(user, "<span class='notice'>You remove the vial from the [src].</span>")
|
||||
update_icon()
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
return
|
||||
..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/update_icon()
|
||||
..()
|
||||
if(loaded_vial)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_empty"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/vial))
|
||||
if(!loaded_vial)
|
||||
user.visible_message("<span class='notice'>[user] begins loading [W] into \the [src].</span>","<span class='notice'>You start loading [W] into \the [src].</span>")
|
||||
if(!do_after(user,30) || loaded_vial || !(W in user))
|
||||
return 0
|
||||
if(W.is_open_container())
|
||||
W.flags ^= OPENCONTAINER
|
||||
W.update_icon()
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
loaded_vial = W
|
||||
reagents.maximum_volume = loaded_vial.reagents.maximum_volume
|
||||
loaded_vial.reagents.trans_to_holder(reagents,volume)
|
||||
user.visible_message("<span class='notice'>[user] has loaded [W] into \the [src].</span>","<span class='notice'>You have loaded [W] into \the [src].</span>")
|
||||
update_icon()
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] already has a vial.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector
|
||||
name = "autoinjector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
|
||||
icon_state = "blue"
|
||||
item_state = "blue"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 5
|
||||
filled = 1
|
||||
filled_reagents = list("inaprovaline" = 5)
|
||||
preserve_item = 0
|
||||
hyposound = 'sound/effects/hypospray.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/empty
|
||||
filled = 0
|
||||
filled_reagents = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/used/Initialize()
|
||||
. = ..()
|
||||
flags &= ~OPENCONTAINER
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
. = ..()
|
||||
if(.) // Will occur if successfully injected.
|
||||
flags &= ~OPENCONTAINER
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
|
||||
if(reagents.total_volume > 0)
|
||||
icon_state = "[initial(icon_state)]1"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
|
||||
. = ..()
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
. += "<span class='notice'>It is currently loaded.</span>"
|
||||
else
|
||||
. += "<span class='notice'>It is spent.</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox
|
||||
name = "autoinjector (antitox)"
|
||||
icon_state = "green"
|
||||
filled_reagents = list("anti_toxin" = 5)
|
||||
|
||||
//Special autoinjectors, while having potent chems like the 15u ones, the chems are usually potent enough that 5u is enough
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed
|
||||
name = "bone repair injector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating damage to bones."
|
||||
filled_reagents = list("osteodaxon" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed
|
||||
name = "clone injector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel. This one excels at treating genetic damage."
|
||||
filled_reagents = list("rezadone" = 5)
|
||||
|
||||
// These have a 15u capacity, somewhat higher tech level, and generally more useful chems, but are otherwise the same as the regular autoinjectors.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector
|
||||
name = "empty hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity."
|
||||
icon_state = "autoinjector"
|
||||
amount_per_transfer_from_this = 15
|
||||
volume = 15
|
||||
origin_tech = list(TECH_BIO = 4)
|
||||
filled_reagents = list("inaprovaline" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/empty //for the autolathe
|
||||
name = "large autoinjector"
|
||||
filled = 0
|
||||
filled_reagents = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute
|
||||
name = "trauma hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on victims of \
|
||||
moderate blunt trauma."
|
||||
filled_reagents = list("bicaridine" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn
|
||||
name = "burn hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to be used on burn victims, \
|
||||
featuring an optimized chemical mixture to allow for rapid healing."
|
||||
filled_reagents = list("kelotane" = 7.5, "dermaline" = 7.5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin
|
||||
name = "toxin hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract toxins."
|
||||
filled_reagents = list("anti_toxin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy
|
||||
name = "oxy hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one is made to counteract oxygen \
|
||||
deprivation."
|
||||
filled_reagents = list("dexalinp" = 10, "tricordrazine" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity
|
||||
name = "purity hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at \
|
||||
resolving viruses, infections, radiation, and genetic maladies."
|
||||
filled_reagents = list("spaceacillin" = 4, "arithrazine" = 5, "prussian_blue" = 5, "ryetalyn" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain
|
||||
name = "pain hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This one contains potent painkillers."
|
||||
filled_reagents = list("tramadol" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ
|
||||
name = "organ hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. Organ damage is resolved by this variant."
|
||||
filled_reagents = list("alkysine" = 3, "imidazoline" = 2, "peridaxon" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat
|
||||
name = "combat hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This is a more dangerous and potentially \
|
||||
addictive hypo compared to others, as it contains a potent cocktail of various chemicals to optimize the recipient's combat \
|
||||
ability."
|
||||
filled_reagents = list("bicaridine" = 3, "kelotane" = 1.5, "dermaline" = 1.5, "oxycodone" = 3, "hyperzine" = 3, "tricordrazine" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting
|
||||
name = "clotting agent"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at treating bleeding wounds and internal bleeding."
|
||||
filled_reagents = list("inaprovaline" = 5, "myelamine" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose
|
||||
name = "glucose hypo"
|
||||
desc = "A hypoinjector filled with glucose, used for critically malnourished patients and voidsuited workers."
|
||||
filled_reagents = list("glucose" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm
|
||||
name = "stimm injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is filled with a home-made stimulant, with some serious side-effects."
|
||||
filled_reagents = list("stimm" = 10) // More than 10u will OD.
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired
|
||||
name = "expired injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one has had its contents expire a long time ago, using it now will probably make someone sick, or worse."
|
||||
filled_reagents = list("expired_medicine" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific
|
||||
name = "soporific injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is sometimes used by orderlies, as it has soporifics, which make someone tired and fall asleep."
|
||||
filled_reagents = list("stoxin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide
|
||||
name = "cyanide injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains cyanide, a lethal poison. It being inside a medical autoinjector has certain unsettling implications."
|
||||
filled_reagents = list("cyanide" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium
|
||||
name = "serotrotium injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one is filled with serotrotium, which causes concentrated production of the serotonin neurotransmitter in humans."
|
||||
filled_reagents = list("serotrotium" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss
|
||||
name = "illicit injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains various illicit drugs, held inside a hypospray to make smuggling easier."
|
||||
filled_reagents = list("bliss" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin
|
||||
name = "cryptobiolin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one contains cryptobiolin, which causes confusion."
|
||||
filled_reagents = list("cryptobiolin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene
|
||||
name = "impedrezene injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one has impedrezene inside, a narcotic that impairs higher brain functioning. \
|
||||
This autoinjector is almost certainly created illegitimately."
|
||||
filled_reagents = list("impedrezene" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker
|
||||
name = "mindbreaker injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This one stores the dangerous hallucinogen called 'Mindbreaker', likely put in place \
|
||||
by illicit groups hoping to hide their product."
|
||||
filled_reagents = list("mindbreaker" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin
|
||||
name = "psilocybin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This has psilocybin inside, which is a strong psychotropic derived from certain species of mushroom. \
|
||||
This autoinjector likely was made by criminal elements to avoid detection from casual inspection."
|
||||
filled_reagents = list("psilocybin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen
|
||||
name = "unstable mutagen injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This contains unstable mutagen, which makes using this a very bad idea. It will either \
|
||||
ruin your genetic health, turn you into a Five Points violation, or both!"
|
||||
filled_reagents = list("mutagen" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/lexorin
|
||||
name = "lexorin injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
This contains lexorin, a dangerous toxin that stops respiration, and has been \
|
||||
implicated in several high-profile assassinations in the past."
|
||||
filled_reagents = list("lexorin" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites
|
||||
name = "medical nanite injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The injector stores a slurry of highly advanced and specialized nanomachines designed \
|
||||
to restore bodily health from within. The nanomachines are short-lived but degrade \
|
||||
harmlessly, and cannot self-replicate in order to remain Five Points compliant."
|
||||
filled_reagents = list("healing_nanites" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites
|
||||
name = "defective nanite injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The injector stores a slurry of highly advanced and specialized nanomachines that \
|
||||
are unfortunately malfunctioning, making them unsafe to use inside of a living body. \
|
||||
Because of the Five Points, these nanites cannot self-replicate."
|
||||
filled_reagents = list("defective_nanites" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated
|
||||
name = "contaminated injector"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
|
||||
The hypospray contains a viral agent inside, as well as a liquid substance that encourages \
|
||||
the growth of the virus inside."
|
||||
filled_reagents = list("virusfood" = 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/do_injection(mob/living/carbon/human/H, mob/living/user)
|
||||
. = ..()
|
||||
if(.) // Will occur if successfully injected.
|
||||
infect_mob_random_lesser(H)
|
||||
add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].")
|
||||
|
||||
@@ -1,355 +1,355 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/pill
|
||||
name = "pill"
|
||||
desc = "A pill."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = null
|
||||
item_state = "pill"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
var/base_state = "pill"
|
||||
|
||||
possible_transfer_amounts = null
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 60
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/Initialize()
|
||||
. = ..()
|
||||
if(!icon_state)
|
||||
icon_state = "[base_state][rand(1, 4)]" //preset pills only use colour changing or unique icons
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob)
|
||||
if(M == user)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
to_chat(M, "<span class='notice'>You swallow \the [src].</span>")
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
|
||||
|
||||
user.setClickCooldown(user.get_attack_speed(src))
|
||||
if(!do_mob(user, M))
|
||||
return
|
||||
|
||||
user.drop_from_inventory(src) //icon update
|
||||
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
|
||||
|
||||
var/contained = reagentlist()
|
||||
add_attack_logs(user,M,"Fed a pill containing [contained]")
|
||||
|
||||
if(reagents && reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
if(target.is_open_container() && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You dissolve \the [src] in [target].</span>")
|
||||
|
||||
add_attack_logs(user,null,"Spiked [target.name] with a pill containing [reagentlist()]")
|
||||
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in \the [target].</span>", 1)
|
||||
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(is_sharp(W))
|
||||
var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
|
||||
user.visible_message("<span class='warning'>[user] gently cuts up [src] with [W]!</span>")
|
||||
playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
|
||||
|
||||
if(reagents)
|
||||
reagents.trans_to_obj(J, reagents.total_volume)
|
||||
J.get_appearance()
|
||||
qdel(src)
|
||||
|
||||
if(istype(W, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
|
||||
user.visible_message("<span class='warning'>[user] clumsily chops up [src] with [W]!</span>")
|
||||
playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
|
||||
|
||||
if(reagents)
|
||||
reagents.trans_to_obj(J, reagents.total_volume)
|
||||
J.get_appearance()
|
||||
qdel(src)
|
||||
|
||||
return ..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Pills
|
||||
/obj/item/weapon/reagent_containers/pill/antitox
|
||||
name = "Dylovene (30u)" //VOREStation Edit
|
||||
desc = "Neutralizes many common toxins."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/antitox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox
|
||||
name = "Toxins pill"
|
||||
desc = "Highly toxic."
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("toxin", 50)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide
|
||||
name = "Strange pill"
|
||||
desc = "It's marked 'KCN'. Smells vaguely of almonds."
|
||||
icon_state = "pill9"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cyanide", 50)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine
|
||||
name = "Adminordrazine pill"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
icon_state = "pillA"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("adminordrazine", 5)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox
|
||||
name = "Soporific (15u)"
|
||||
desc = "Commonly used to treat insomnia."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("stoxin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane
|
||||
name = "Kelotane (20u)" //VOREStation Edit
|
||||
desc = "Used to treat burns."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("kelotane", 20) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol
|
||||
name = "Paracetamol (15u)"
|
||||
desc = "Paracetamol! A painkiller for the ages. Chewables!"
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("paracetamol", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol
|
||||
name = "Tramadol (15u)"
|
||||
desc = "A simple painkiller."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("tramadol", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate
|
||||
name = "Methylphenidate (15u)"
|
||||
desc = "Improves the ability to concentrate."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("methylphenidate", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram
|
||||
name = "Citalopram (15u)"
|
||||
desc = "Mild anti-depressant."
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("citalopram", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin
|
||||
name = "Dexalin (7.5u)" //VOREstation Edit
|
||||
desc = "Used to treat oxygen deprivation."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dexalin", 7.5) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus
|
||||
name = "Dexalin Plus (15u)"
|
||||
desc = "Used to treat extreme oxygen deprivation."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dexalinp", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline
|
||||
name = "Dermaline (15u)"
|
||||
desc = "Used to treat burn wounds."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dermaline", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene
|
||||
name = "Dylovene (15u)"
|
||||
desc = "A broad-spectrum anti-toxin."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline (30u)"
|
||||
desc = "Used to stabilize patients."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine
|
||||
name = "Bicaridine (20u)"
|
||||
desc = "Used to treat physical injuries."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bicaridine", 20)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
name = "Spaceacillin (15u)" //VOREStation Edit
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon
|
||||
name = "Carbon (30u)" //VOREStation Edit
|
||||
desc = "Used to neutralise chemicals in the stomach."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("carbon", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron
|
||||
name = "Iron (30u)" //VOREStation Edit
|
||||
desc = "Used to aid in blood regeneration after bleeding for red-blooded crew."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("iron", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/copper
|
||||
name = "Copper (30u)"
|
||||
desc = "Used to aid in blood regeneration after bleeding for blue-blooded crew."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/copper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("copper", 30)
|
||||
color = reagents.get_color()
|
||||
|
||||
//Not-quite-medicine
|
||||
/obj/item/weapon/reagent_containers/pill/happy
|
||||
name = "Happy pill"
|
||||
desc = "Happy happy joy joy!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bliss", 15)
|
||||
reagents.add_reagent("sugar", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom
|
||||
name = "Zoom pill"
|
||||
desc = "Zoooom!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom/Initialize()
|
||||
. = ..()
|
||||
if(prob(50)) //VOREStation edit begin: Zoom pill adjustments
|
||||
reagents.add_reagent("mold", 2) //Chance to be more dangerous
|
||||
reagents.add_reagent("expired_medicine", 5)
|
||||
reagents.add_reagent("stimm", 5) //VOREStation edit end: Zoom pill adjustments
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/diet
|
||||
name = "diet pill"
|
||||
desc = "Guaranteed to get you slim!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/diet/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("lipozine", 15) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/pill
|
||||
name = "pill"
|
||||
desc = "A pill."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = null
|
||||
item_state = "pill"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
var/base_state = "pill"
|
||||
|
||||
possible_transfer_amounts = null
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
volume = 60
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/Initialize()
|
||||
. = ..()
|
||||
if(!icon_state)
|
||||
icon_state = "[base_state][rand(1, 4)]" //preset pills only use colour changing or unique icons
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob)
|
||||
if(M == user)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
to_chat(M, "<span class='notice'>You swallow \the [src].</span>")
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
|
||||
|
||||
user.setClickCooldown(user.get_attack_speed(src))
|
||||
if(!do_mob(user, M))
|
||||
return
|
||||
|
||||
user.drop_from_inventory(src) //icon update
|
||||
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
|
||||
|
||||
var/contained = reagentlist()
|
||||
add_attack_logs(user,M,"Fed a pill containing [contained]")
|
||||
|
||||
if(reagents && reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
if(target.is_open_container() && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You dissolve \the [src] in [target].</span>")
|
||||
|
||||
add_attack_logs(user,null,"Spiked [target.name] with a pill containing [reagentlist()]")
|
||||
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in \the [target].</span>", 1)
|
||||
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(is_sharp(W))
|
||||
var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
|
||||
user.visible_message("<span class='warning'>[user] gently cuts up [src] with [W]!</span>")
|
||||
playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
|
||||
|
||||
if(reagents)
|
||||
reagents.trans_to_obj(J, reagents.total_volume)
|
||||
J.get_appearance()
|
||||
qdel(src)
|
||||
|
||||
if(istype(W, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
|
||||
user.visible_message("<span class='warning'>[user] clumsily chops up [src] with [W]!</span>")
|
||||
playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
|
||||
|
||||
if(reagents)
|
||||
reagents.trans_to_obj(J, reagents.total_volume)
|
||||
J.get_appearance()
|
||||
qdel(src)
|
||||
|
||||
return ..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Pills
|
||||
/obj/item/weapon/reagent_containers/pill/antitox
|
||||
name = "Dylovene (30u)" //VOREStation Edit
|
||||
desc = "Neutralizes many common toxins."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/antitox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox
|
||||
name = "Toxins pill"
|
||||
desc = "Highly toxic."
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("toxin", 50)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide
|
||||
name = "Strange pill"
|
||||
desc = "It's marked 'KCN'. Smells vaguely of almonds."
|
||||
icon_state = "pill9"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cyanide", 50)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine
|
||||
name = "Adminordrazine pill"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
icon_state = "pillA"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("adminordrazine", 5)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox
|
||||
name = "Soporific (15u)"
|
||||
desc = "Commonly used to treat insomnia."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("stoxin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane
|
||||
name = "Kelotane (20u)" //VOREStation Edit
|
||||
desc = "Used to treat burns."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("kelotane", 20) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol
|
||||
name = "Paracetamol (15u)"
|
||||
desc = "Paracetamol! A painkiller for the ages. Chewables!"
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("paracetamol", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol
|
||||
name = "Tramadol (15u)"
|
||||
desc = "A simple painkiller."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("tramadol", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate
|
||||
name = "Methylphenidate (15u)"
|
||||
desc = "Improves the ability to concentrate."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("methylphenidate", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram
|
||||
name = "Citalopram (15u)"
|
||||
desc = "Mild anti-depressant."
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("citalopram", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin
|
||||
name = "Dexalin (7.5u)" //VOREstation Edit
|
||||
desc = "Used to treat oxygen deprivation."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dexalin", 7.5) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus
|
||||
name = "Dexalin Plus (15u)"
|
||||
desc = "Used to treat extreme oxygen deprivation."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dexalinp", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline
|
||||
name = "Dermaline (15u)"
|
||||
desc = "Used to treat burn wounds."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dermaline", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene
|
||||
name = "Dylovene (15u)"
|
||||
desc = "A broad-spectrum anti-toxin."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline (30u)"
|
||||
desc = "Used to stabilize patients."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine
|
||||
name = "Bicaridine (20u)"
|
||||
desc = "Used to treat physical injuries."
|
||||
icon_state = "pill2"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bicaridine", 20)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
name = "Spaceacillin (15u)" //VOREStation Edit
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon
|
||||
name = "Carbon (30u)" //VOREStation Edit
|
||||
desc = "Used to neutralise chemicals in the stomach."
|
||||
icon_state = "pill3"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("carbon", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron
|
||||
name = "Iron (30u)" //VOREStation Edit
|
||||
desc = "Used to aid in blood regeneration after bleeding for red-blooded crew."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("iron", 30) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/copper
|
||||
name = "Copper (30u)"
|
||||
desc = "Used to aid in blood regeneration after bleeding for blue-blooded crew."
|
||||
icon_state = "pill1"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/copper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("copper", 30)
|
||||
color = reagents.get_color()
|
||||
|
||||
//Not-quite-medicine
|
||||
/obj/item/weapon/reagent_containers/pill/happy
|
||||
name = "Happy pill"
|
||||
desc = "Happy happy joy joy!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bliss", 15)
|
||||
reagents.add_reagent("sugar", 15)
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom
|
||||
name = "Zoom pill"
|
||||
desc = "Zoooom!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom/Initialize()
|
||||
. = ..()
|
||||
if(prob(50)) //VOREStation edit begin: Zoom pill adjustments
|
||||
reagents.add_reagent("mold", 2) //Chance to be more dangerous
|
||||
reagents.add_reagent("expired_medicine", 5)
|
||||
reagents.add_reagent("stimm", 5) //VOREStation edit end: Zoom pill adjustments
|
||||
color = reagents.get_color()
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/diet
|
||||
name = "diet pill"
|
||||
desc = "Guaranteed to get you slim!"
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/diet/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("lipozine", 15) //VOREStation Edit
|
||||
color = reagents.get_color()
|
||||
|
||||
@@ -1,303 +1,303 @@
|
||||
/obj/item/weapon/reagent_containers/spray
|
||||
name = "spray bottle"
|
||||
desc = "A spray bottle, with an unscrewable top."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "cleaner"
|
||||
item_state = "cleaner"
|
||||
center_of_mass = list("x" = 16,"y" = 10)
|
||||
flags = OPENCONTAINER|NOBLUDGEON
|
||||
matter = list(MAT_GLASS = 300, MAT_STEEL = 300)
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
amount_per_transfer_from_this = 10
|
||||
unacidable = TRUE //plastic
|
||||
possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one.
|
||||
var/spray_size = 3
|
||||
var/list/spray_sizes = list(1,3)
|
||||
volume = 250
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/Initialize()
|
||||
. = ..()
|
||||
src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
|
||||
return
|
||||
|
||||
if(istype(A, /spell))
|
||||
return
|
||||
|
||||
if(proximity)
|
||||
if(standard_dispenser_refill(user, A))
|
||||
return
|
||||
|
||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>\The [src] is empty!</span>")
|
||||
return
|
||||
|
||||
Spray_at(A, user, proximity)
|
||||
|
||||
user.setClickCooldown(4)
|
||||
|
||||
if(reagents.has_reagent("sacid"))
|
||||
message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src].")
|
||||
log_game("[key_name(user)] fired sulphuric acid from \a [src].")
|
||||
if(reagents.has_reagent("pacid"))
|
||||
message_admins("[key_name_admin(user)] fired Polyacid from \a [src].")
|
||||
log_game("[key_name(user)] fired Polyacid from \a [src].")
|
||||
if(reagents.has_reagent("lube"))
|
||||
message_admins("[key_name_admin(user)] fired Space lube from \a [src].")
|
||||
log_game("[key_name(user)] fired Space lube from \a [src].")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
if (A.density && proximity)
|
||||
A.visible_message("[usr] sprays [A] with [src].")
|
||||
reagents.splash(A, amount_per_transfer_from_this)
|
||||
else
|
||||
spawn(0)
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = get_turf(A)
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, spray_size, 10)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/attack_self(var/mob/user)
|
||||
if(!possible_transfer_amounts)
|
||||
return
|
||||
amount_per_transfer_from_this = next_in_list(amount_per_transfer_from_this, possible_transfer_amounts)
|
||||
spray_size = next_in_list(spray_size, spray_sizes)
|
||||
to_chat(user, "<span class='notice'>You adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/examine(mob/user)
|
||||
. = ..()
|
||||
if(loc == user)
|
||||
. += "[round(reagents.total_volume)] units left."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/verb/empty()
|
||||
|
||||
set name = "Empty Spray Bottle"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes")
|
||||
return
|
||||
if(isturf(usr.loc))
|
||||
to_chat(usr, "<span class='notice'>You empty \the [src] onto the floor.</span>")
|
||||
reagents.splash(usr.loc, reagents.total_volume)
|
||||
|
||||
//space cleaner
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner
|
||||
name = "space cleaner"
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner/drone
|
||||
name = "space cleaner"
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
volume = 50
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cleaner", volume)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/sterilizine
|
||||
name = "sterilizine"
|
||||
desc = "Great for hiding incriminating bloodstains and sterilizing scalpels."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/sterilizine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sterilizine", volume)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper
|
||||
name = "pepperspray"
|
||||
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
center_of_mass = list("x" = 16,"y" = 16)
|
||||
possible_transfer_amounts = null
|
||||
volume = 40
|
||||
var/safety = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("condensedcapsaicin", 40)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/examine(mob/user)
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
. += "The safety is [safety ? "on" : "off"]."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/attack_self(var/mob/user)
|
||||
safety = !safety
|
||||
to_chat(usr, "<span class = 'notice'>You switch the safety [safety ? "on" : "off"].</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj)
|
||||
if(safety)
|
||||
to_chat(usr, "<span class = 'warning'>The safety is on!</span>")
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/waterflower
|
||||
name = "water flower"
|
||||
desc = "A seemingly innocent sunflower...with a twist."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "sunflower"
|
||||
item_state = "sunflower"
|
||||
amount_per_transfer_from_this = 1
|
||||
possible_transfer_amounts = null
|
||||
volume = 10
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/waterflower/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("water", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer
|
||||
name = "chem sprayer"
|
||||
desc = "A utility used to spray large amounts of reagent in a given area."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi')
|
||||
center_of_mass = list("x" = 16,"y" = 16)
|
||||
throwforce = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
possible_transfer_amounts = null
|
||||
volume = 600
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
|
||||
playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6)
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T, T1, T2)
|
||||
|
||||
for(var/a = 1 to 3)
|
||||
spawn(0)
|
||||
if(reagents.total_volume < 1) break
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = the_targets[a]
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, rand(6, 8), 2)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone
|
||||
name = "Plant-B-Gone"
|
||||
desc = "Kills those pesky weeds!"
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
icon_state = "plantbgone"
|
||||
item_state = "plantbgone"
|
||||
volume = 100
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("plantbgone", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed
|
||||
name = "hose nozzle"
|
||||
desc = "A heavy spray nozzle that must be attached to a hose."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "cleaner-industrial"
|
||||
item_state = "cleaner"
|
||||
center_of_mass = list("x" = 16,"y" = 10)
|
||||
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
|
||||
var/heavy_spray = FALSE
|
||||
var/spray_particles = 3
|
||||
|
||||
var/icon/hose_overlay
|
||||
|
||||
var/obj/item/hose_connector/input/active/InputSocket
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Initialize()
|
||||
. = ..()
|
||||
|
||||
InputSocket = new(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/update_icon()
|
||||
..()
|
||||
|
||||
cut_overlays()
|
||||
|
||||
if(!hose_overlay)
|
||||
hose_overlay = new icon(icon, "[icon_state]+hose")
|
||||
|
||||
if(InputSocket.get_pairing())
|
||||
add_overlay(hose_overlay)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user)
|
||||
if(++spray_particles > 3) spray_particles = 1
|
||||
|
||||
to_chat(user, "<span class='notice'>You turn the dial on \the [src] to [spray_particles].</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user)
|
||||
if(loc != get_turf(src))
|
||||
heavy_spray = !heavy_spray
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj)
|
||||
update_icon()
|
||||
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T, T1, T2)
|
||||
|
||||
if(src.reagents.total_volume < 1)
|
||||
to_chat(usr, "<span class='notice'>\The [src] is empty.</span>")
|
||||
return
|
||||
|
||||
if(!heavy_spray)
|
||||
for(var/a = 1 to 3)
|
||||
spawn(0)
|
||||
if(reagents.total_volume < 1) break
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = the_targets[a]
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, rand(6, 8), 2)
|
||||
return
|
||||
|
||||
else
|
||||
playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3)
|
||||
|
||||
for(var/a = 1 to spray_particles)
|
||||
spawn(0)
|
||||
if(!src || !reagents.total_volume) return
|
||||
|
||||
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src))
|
||||
var/turf/my_target
|
||||
if(a <= the_targets.len)
|
||||
my_target = the_targets[a]
|
||||
else
|
||||
my_target = pick(the_targets)
|
||||
W.create_reagents(amount_per_transfer_from_this)
|
||||
reagents.trans_to_obj(W, amount_per_transfer_from_this)
|
||||
W.set_color()
|
||||
W.set_up(my_target)
|
||||
|
||||
return
|
||||
/obj/item/weapon/reagent_containers/spray
|
||||
name = "spray bottle"
|
||||
desc = "A spray bottle, with an unscrewable top."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "cleaner"
|
||||
item_state = "cleaner"
|
||||
center_of_mass = list("x" = 16,"y" = 10)
|
||||
flags = OPENCONTAINER|NOBLUDGEON
|
||||
matter = list(MAT_GLASS = 300, MAT_STEEL = 300)
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
amount_per_transfer_from_this = 10
|
||||
unacidable = TRUE //plastic
|
||||
possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one.
|
||||
var/spray_size = 3
|
||||
var/list/spray_sizes = list(1,3)
|
||||
volume = 250
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/Initialize()
|
||||
. = ..()
|
||||
src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
|
||||
return
|
||||
|
||||
if(istype(A, /spell))
|
||||
return
|
||||
|
||||
if(proximity)
|
||||
if(standard_dispenser_refill(user, A))
|
||||
return
|
||||
|
||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>\The [src] is empty!</span>")
|
||||
return
|
||||
|
||||
Spray_at(A, user, proximity)
|
||||
|
||||
user.setClickCooldown(4)
|
||||
|
||||
if(reagents.has_reagent("sacid"))
|
||||
message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src].")
|
||||
log_game("[key_name(user)] fired sulphuric acid from \a [src].")
|
||||
if(reagents.has_reagent("pacid"))
|
||||
message_admins("[key_name_admin(user)] fired Polyacid from \a [src].")
|
||||
log_game("[key_name(user)] fired Polyacid from \a [src].")
|
||||
if(reagents.has_reagent("lube"))
|
||||
message_admins("[key_name_admin(user)] fired Space lube from \a [src].")
|
||||
log_game("[key_name(user)] fired Space lube from \a [src].")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
if (A.density && proximity)
|
||||
A.visible_message("[usr] sprays [A] with [src].")
|
||||
reagents.splash(A, amount_per_transfer_from_this)
|
||||
else
|
||||
spawn(0)
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = get_turf(A)
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, spray_size, 10)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/attack_self(var/mob/user)
|
||||
if(!possible_transfer_amounts)
|
||||
return
|
||||
amount_per_transfer_from_this = next_in_list(amount_per_transfer_from_this, possible_transfer_amounts)
|
||||
spray_size = next_in_list(spray_size, spray_sizes)
|
||||
to_chat(user, "<span class='notice'>You adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/examine(mob/user)
|
||||
. = ..()
|
||||
if(loc == user)
|
||||
. += "[round(reagents.total_volume)] units left."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/verb/empty()
|
||||
|
||||
set name = "Empty Spray Bottle"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes")
|
||||
return
|
||||
if(isturf(usr.loc))
|
||||
to_chat(usr, "<span class='notice'>You empty \the [src] onto the floor.</span>")
|
||||
reagents.splash(usr.loc, reagents.total_volume)
|
||||
|
||||
//space cleaner
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner
|
||||
name = "space cleaner"
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner/drone
|
||||
name = "space cleaner"
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
volume = 50
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cleaner", volume)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/sterilizine
|
||||
name = "sterilizine"
|
||||
desc = "Great for hiding incriminating bloodstains and sterilizing scalpels."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/sterilizine/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sterilizine", volume)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper
|
||||
name = "pepperspray"
|
||||
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "pepperspray"
|
||||
item_state = "pepperspray"
|
||||
center_of_mass = list("x" = 16,"y" = 16)
|
||||
possible_transfer_amounts = null
|
||||
volume = 40
|
||||
var/safety = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("condensedcapsaicin", 40)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/examine(mob/user)
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
. += "The safety is [safety ? "on" : "off"]."
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/attack_self(var/mob/user)
|
||||
safety = !safety
|
||||
to_chat(usr, "<span class = 'notice'>You switch the safety [safety ? "on" : "off"].</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj)
|
||||
if(safety)
|
||||
to_chat(usr, "<span class = 'warning'>The safety is on!</span>")
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/waterflower
|
||||
name = "water flower"
|
||||
desc = "A seemingly innocent sunflower...with a twist."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "sunflower"
|
||||
item_state = "sunflower"
|
||||
amount_per_transfer_from_this = 1
|
||||
possible_transfer_amounts = null
|
||||
volume = 10
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/waterflower/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("water", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer
|
||||
name = "chem sprayer"
|
||||
desc = "A utility used to spray large amounts of reagent in a given area."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi')
|
||||
center_of_mass = list("x" = 16,"y" = 16)
|
||||
throwforce = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
possible_transfer_amounts = null
|
||||
volume = 600
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
|
||||
playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6)
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T, T1, T2)
|
||||
|
||||
for(var/a = 1 to 3)
|
||||
spawn(0)
|
||||
if(reagents.total_volume < 1) break
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = the_targets[a]
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, rand(6, 8), 2)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone
|
||||
name = "Plant-B-Gone"
|
||||
desc = "Kills those pesky weeds!"
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
icon_state = "plantbgone"
|
||||
item_state = "plantbgone"
|
||||
volume = 100
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("plantbgone", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed
|
||||
name = "hose nozzle"
|
||||
desc = "A heavy spray nozzle that must be attached to a hose."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "cleaner-industrial"
|
||||
item_state = "cleaner"
|
||||
center_of_mass = list("x" = 16,"y" = 10)
|
||||
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
|
||||
var/heavy_spray = FALSE
|
||||
var/spray_particles = 3
|
||||
|
||||
var/icon/hose_overlay
|
||||
|
||||
var/obj/item/hose_connector/input/active/InputSocket
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Initialize()
|
||||
. = ..()
|
||||
|
||||
InputSocket = new(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/update_icon()
|
||||
..()
|
||||
|
||||
cut_overlays()
|
||||
|
||||
if(!hose_overlay)
|
||||
hose_overlay = new icon(icon, "[icon_state]+hose")
|
||||
|
||||
if(InputSocket.get_pairing())
|
||||
add_overlay(hose_overlay)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user)
|
||||
if(++spray_particles > 3) spray_particles = 1
|
||||
|
||||
to_chat(user, "<span class='notice'>You turn the dial on \the [src] to [spray_particles].</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user)
|
||||
if(loc != get_turf(src))
|
||||
heavy_spray = !heavy_spray
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj)
|
||||
update_icon()
|
||||
|
||||
var/direction = get_dir(src, A)
|
||||
var/turf/T = get_turf(A)
|
||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
var/list/the_targets = list(T, T1, T2)
|
||||
|
||||
if(src.reagents.total_volume < 1)
|
||||
to_chat(usr, "<span class='notice'>\The [src] is empty.</span>")
|
||||
return
|
||||
|
||||
if(!heavy_spray)
|
||||
for(var/a = 1 to 3)
|
||||
spawn(0)
|
||||
if(reagents.total_volume < 1) break
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
|
||||
var/turf/my_target = the_targets[a]
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
if(!src)
|
||||
return
|
||||
reagents.trans_to_obj(D, amount_per_transfer_from_this)
|
||||
D.set_color()
|
||||
D.set_up(my_target, rand(6, 8), 2)
|
||||
return
|
||||
|
||||
else
|
||||
playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3)
|
||||
|
||||
for(var/a = 1 to spray_particles)
|
||||
spawn(0)
|
||||
if(!src || !reagents.total_volume) return
|
||||
|
||||
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src))
|
||||
var/turf/my_target
|
||||
if(a <= the_targets.len)
|
||||
my_target = the_targets[a]
|
||||
else
|
||||
my_target = pick(the_targets)
|
||||
W.create_reagents(amount_per_transfer_from_this)
|
||||
reagents.trans_to_obj(W, amount_per_transfer_from_this)
|
||||
W.set_color()
|
||||
W.set_up(my_target)
|
||||
|
||||
return
|
||||
|
||||
@@ -1,392 +1,392 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Syringes.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#define SYRINGE_DRAW 0
|
||||
#define SYRINGE_INJECT 1
|
||||
#define SYRINGE_BROKEN 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
name = "syringe"
|
||||
desc = "A syringe."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
item_state = "syringe_0"
|
||||
icon_state = "0"
|
||||
center_of_mass = list("x" = 16,"y" = 14)
|
||||
matter = list(MAT_GLASS = 150)
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = null
|
||||
volume = 15
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
sharp = TRUE
|
||||
unacidable = TRUE //glass
|
||||
var/mode = SYRINGE_DRAW
|
||||
var/image/filling //holds a reference to the current filling overlay
|
||||
var/visible_name = "a syringe"
|
||||
var/time = 30
|
||||
var/drawing = 0
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob)
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
mode = SYRINGE_INJECT
|
||||
if(SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
if(SYRINGE_BROKEN)
|
||||
return
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity || !target.reagents)
|
||||
return
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
to_chat(user, "<span class='warning'>This syringe is broken!</span>")
|
||||
return
|
||||
|
||||
if(user.a_intent == I_HURT && ismob(target))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
target = user
|
||||
syringestab(target, user)
|
||||
return
|
||||
|
||||
var/injtime = time // Calculated 'true' injection time (as added to by hardsuits and whatnot), 66% of this goes to warmup, then every 33% after injects 5u
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
if(!reagents.get_free_space())
|
||||
to_chat(user, "<span class='warning'>The syringe is full.</span>")
|
||||
mode = SYRINGE_INJECT
|
||||
return
|
||||
|
||||
if(ismob(target))//Blood!
|
||||
if(reagents.has_reagent("blood"))
|
||||
to_chat(user, "<span class='notice'>There is already a blood sample in this syringe.</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/amount = reagents.get_free_space()
|
||||
var/mob/living/carbon/T = target
|
||||
if(!T.dna)
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>")
|
||||
return
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood.</span>")
|
||||
return
|
||||
|
||||
if(T.isSynthetic())
|
||||
to_chat(user, "<span class = 'warning'>You can't draw blood from a synthetic!</span>")
|
||||
return
|
||||
|
||||
if(drawing)
|
||||
to_chat(user, "<span class='warning'>You are already drawing blood from [T.name].</span>")
|
||||
return
|
||||
|
||||
var/datum/reagent/B
|
||||
drawing = 1
|
||||
if(istype(T, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = T
|
||||
if(H.species && !H.should_have_organ(O_HEART))
|
||||
H.reagents.trans_to_obj(src, amount)
|
||||
else
|
||||
if(ismob(H) && H != user)
|
||||
if(!do_mob(user, target, time))
|
||||
drawing = 0
|
||||
return
|
||||
B = T.take_blood(src, amount)
|
||||
drawing = 0
|
||||
else
|
||||
if(!do_mob(user, target, time))
|
||||
drawing = 0
|
||||
return
|
||||
B = T.take_blood(src,amount)
|
||||
drawing = 0
|
||||
|
||||
if (B)
|
||||
reagents.reagent_list += B
|
||||
reagents.update_total()
|
||||
on_reagent_change()
|
||||
reagents.handle_reactions()
|
||||
to_chat(user, "<span class='notice'>You take a blood sample from [target].</span>")
|
||||
for(var/mob/O in viewers(4, user))
|
||||
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
|
||||
|
||||
else //if not mob
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty.</span>")
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/weapon/reagent_containers/food))
|
||||
to_chat(user, "<span class='notice'>You cannot directly remove reagents from this object.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>")
|
||||
update_icon()
|
||||
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
mode = SYRINGE_DRAW
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
|
||||
return
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/external/affected //VOREStation Edit - Moved this outside this if
|
||||
if(istype(H))
|
||||
affected = H.get_organ(user.zone_sel.selecting) //VOREStation Edit - See above comment.
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
var/cycle_time = injtime*0.33 //33% of the time slept between 5u doses
|
||||
var/warmup_time = 0 //0 for containers
|
||||
if(ismob(target))
|
||||
warmup_time = cycle_time //If the target is another mob, this gets overwritten
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
warmup_time = injtime*0.66 //66% of the time is warmup
|
||||
|
||||
if(istype(H))
|
||||
if(H.wear_suit)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
|
||||
injtime = injtime * 2
|
||||
|
||||
else if(isliving(target))
|
||||
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
if(injtime == time)
|
||||
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>","<span class='notice'>You begin injecting [target] with [visible_name].</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>","<span class='notice'>You begin hunting for an injection port on [target]'s suit!</span>")
|
||||
|
||||
//The warmup
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
if(!do_after(user,warmup_time,target))
|
||||
return
|
||||
|
||||
var/trans = 0
|
||||
var/contained = reagentlist()
|
||||
if(ismob(target))
|
||||
while(reagents.total_volume)
|
||||
trans += reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
update_icon()
|
||||
if(!reagents.total_volume || !do_after(user,cycle_time,target))
|
||||
break
|
||||
else
|
||||
trans += reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
|
||||
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
update_icon()
|
||||
|
||||
if(trans)
|
||||
to_chat(user, "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>")
|
||||
if(ismob(target))
|
||||
add_attack_logs(user,target,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
|
||||
// dirty(target,affected) //VOREStation Add -- Removed by Request
|
||||
|
||||
return
|
||||
/* VOREStation Edit - See syringes_vr.dm
|
||||
/obj/item/weapon/reagent_containers/syringe/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
icon_state = "broken"
|
||||
return
|
||||
|
||||
var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
|
||||
if(ismob(loc))
|
||||
var/injoverlay
|
||||
switch(mode)
|
||||
if (SYRINGE_DRAW)
|
||||
injoverlay = "draw"
|
||||
if (SYRINGE_INJECT)
|
||||
injoverlay = "inject"
|
||||
add_overlay(injoverlay)
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
|
||||
if(reagents.total_volume)
|
||||
filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
|
||||
|
||||
filling.icon_state = "syringe[rounded_vol]"
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
add_overlay(filling)
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
|
||||
if (!affecting || affecting.is_stump())
|
||||
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
|
||||
return
|
||||
|
||||
var/hit_area = affecting.name
|
||||
|
||||
if((user != target) && H.check_shields(7, src, user, "\the [src]"))
|
||||
return
|
||||
|
||||
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(span_red(text("<B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>")), 1)
|
||||
user.remove_from_mob(src)
|
||||
qdel(src)
|
||||
|
||||
add_attack_logs(user,target,"Syringe harmclick")
|
||||
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] in \the [hit_area] with [src.name]!</span>")
|
||||
|
||||
if(affecting.take_damage(3))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with [src.name]!</span>")
|
||||
target.take_organ_damage(3)// 7 is the same as crowbar punch
|
||||
|
||||
|
||||
|
||||
var/syringestab_amount_transferred = rand(max(reagents.total_volume - 10, 0), (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
|
||||
if(isnull(trans)) trans = 0
|
||||
add_attack_logs(user,target,"Stabbed with [src.name] containing [contained], trasferred [trans] units")
|
||||
if(!issilicon(user))
|
||||
break_syringe(target, user)
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
|
||||
desc += " It is broken."
|
||||
mode = SYRINGE_BROKEN
|
||||
if(target)
|
||||
add_blood(target)
|
||||
if(user)
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe
|
||||
name = "Lethal Injection Syringe"
|
||||
desc = "A syringe used for lethal injections."
|
||||
amount_per_transfer_from_this = 50
|
||||
volume = 50
|
||||
visible_name = "a giant syringe"
|
||||
time = 300
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
|
||||
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
|
||||
to_chat(user, "<span class='notice'>This needle isn't designed for drawing blood.</span>")
|
||||
return
|
||||
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
|
||||
to_chat(user, "<span class='notice'>This syringe is too big to stab someone with it.</span>")
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Syringes. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline
|
||||
name = "Syringe (inaprovaline)"
|
||||
desc = "Contains inaprovaline - used to stabilize patients."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("inaprovaline", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin
|
||||
name = "Syringe (anti-toxin)"
|
||||
desc = "Contains anti-toxins."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral
|
||||
name = "Syringe (spaceacillin)"
|
||||
desc = "Contains antiviral agents."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs
|
||||
name = "Syringe (drugs)"
|
||||
desc = "Contains aggressive drugs meant for torture."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bliss", 5)
|
||||
reagents.add_reagent("mindbreaker", 5)
|
||||
reagents.add_reagent("cryptobiolin", 5)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("chloralhydrate", 50)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/steroid
|
||||
name = "Syringe (anabolic steroids)"
|
||||
desc = "Contains drugs for muscle growth."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/steroid/Initialize()
|
||||
..()
|
||||
//reagents.add_reagent("adrenaline",5) //VOREStation Edit - No thanks.
|
||||
reagents.add_reagent("hyperzine",10)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Syringes.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#define SYRINGE_DRAW 0
|
||||
#define SYRINGE_INJECT 1
|
||||
#define SYRINGE_BROKEN 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
name = "syringe"
|
||||
desc = "A syringe."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
item_state = "syringe_0"
|
||||
icon_state = "0"
|
||||
center_of_mass = list("x" = 16,"y" = 14)
|
||||
matter = list(MAT_GLASS = 150)
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = null
|
||||
volume = 15
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
sharp = TRUE
|
||||
unacidable = TRUE //glass
|
||||
var/mode = SYRINGE_DRAW
|
||||
var/image/filling //holds a reference to the current filling overlay
|
||||
var/visible_name = "a syringe"
|
||||
var/time = 30
|
||||
var/drawing = 0
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/pickup(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/dropped(mob/user)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob)
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
mode = SYRINGE_INJECT
|
||||
if(SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
if(SYRINGE_BROKEN)
|
||||
return
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attack_hand()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity || !target.reagents)
|
||||
return
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
to_chat(user, "<span class='warning'>This syringe is broken!</span>")
|
||||
return
|
||||
|
||||
if(user.a_intent == I_HURT && ismob(target))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
target = user
|
||||
syringestab(target, user)
|
||||
return
|
||||
|
||||
var/injtime = time // Calculated 'true' injection time (as added to by hardsuits and whatnot), 66% of this goes to warmup, then every 33% after injects 5u
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
if(!reagents.get_free_space())
|
||||
to_chat(user, "<span class='warning'>The syringe is full.</span>")
|
||||
mode = SYRINGE_INJECT
|
||||
return
|
||||
|
||||
if(ismob(target))//Blood!
|
||||
if(reagents.has_reagent("blood"))
|
||||
to_chat(user, "<span class='notice'>There is already a blood sample in this syringe.</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/amount = reagents.get_free_space()
|
||||
var/mob/living/carbon/T = target
|
||||
if(!T.dna)
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>")
|
||||
return
|
||||
if(NOCLONE in T.mutations) //target done been et, no more blood in him
|
||||
to_chat(user, "<span class='warning'>You are unable to locate any blood.</span>")
|
||||
return
|
||||
|
||||
if(T.isSynthetic())
|
||||
to_chat(user, "<span class = 'warning'>You can't draw blood from a synthetic!</span>")
|
||||
return
|
||||
|
||||
if(drawing)
|
||||
to_chat(user, "<span class='warning'>You are already drawing blood from [T.name].</span>")
|
||||
return
|
||||
|
||||
var/datum/reagent/B
|
||||
drawing = 1
|
||||
if(istype(T, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = T
|
||||
if(H.species && !H.should_have_organ(O_HEART))
|
||||
H.reagents.trans_to_obj(src, amount)
|
||||
else
|
||||
if(ismob(H) && H != user)
|
||||
if(!do_mob(user, target, time))
|
||||
drawing = 0
|
||||
return
|
||||
B = T.take_blood(src, amount)
|
||||
drawing = 0
|
||||
else
|
||||
if(!do_mob(user, target, time))
|
||||
drawing = 0
|
||||
return
|
||||
B = T.take_blood(src,amount)
|
||||
drawing = 0
|
||||
|
||||
if (B)
|
||||
reagents.reagent_list += B
|
||||
reagents.update_total()
|
||||
on_reagent_change()
|
||||
reagents.handle_reactions()
|
||||
to_chat(user, "<span class='notice'>You take a blood sample from [target].</span>")
|
||||
for(var/mob/O in viewers(4, user))
|
||||
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
|
||||
|
||||
else //if not mob
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is empty.</span>")
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/weapon/reagent_containers/food))
|
||||
to_chat(user, "<span class='notice'>You cannot directly remove reagents from this object.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>")
|
||||
update_icon()
|
||||
|
||||
|
||||
if(!reagents.get_free_space())
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
mode = SYRINGE_DRAW
|
||||
return
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
|
||||
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
|
||||
return
|
||||
if(!target.reagents.get_free_space())
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/external/affected //VOREStation Edit - Moved this outside this if
|
||||
if(istype(H))
|
||||
affected = H.get_organ(user.zone_sel.selecting) //VOREStation Edit - See above comment.
|
||||
if(!affected)
|
||||
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
|
||||
return
|
||||
/* since synths have oil/coolant streams now, it only makes sense that you should be able to inject stuff. preserved for posterity.
|
||||
else if(affected.robotic >= ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
var/cycle_time = injtime*0.33 //33% of the time slept between 5u doses
|
||||
var/warmup_time = 0 //0 for containers
|
||||
if(ismob(target))
|
||||
warmup_time = cycle_time //If the target is another mob, this gets overwritten
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
warmup_time = injtime*0.66 //66% of the time is warmup
|
||||
|
||||
if(istype(H))
|
||||
if(H.wear_suit)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
|
||||
injtime = injtime * 2
|
||||
|
||||
else if(isliving(target))
|
||||
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
if(injtime == time)
|
||||
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>","<span class='notice'>You begin injecting [target] with [visible_name].</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>","<span class='notice'>You begin hunting for an injection port on [target]'s suit!</span>")
|
||||
|
||||
//The warmup
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
if(!do_after(user,warmup_time,target))
|
||||
return
|
||||
|
||||
var/trans = 0
|
||||
var/contained = reagentlist()
|
||||
if(ismob(target))
|
||||
while(reagents.total_volume)
|
||||
trans += reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
update_icon()
|
||||
if(!reagents.total_volume || !do_after(user,cycle_time,target))
|
||||
break
|
||||
else
|
||||
trans += reagents.trans_to_obj(target, amount_per_transfer_from_this)
|
||||
|
||||
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
update_icon()
|
||||
|
||||
if(trans)
|
||||
to_chat(user, "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>")
|
||||
if(ismob(target))
|
||||
add_attack_logs(user,target,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
|
||||
// dirty(target,affected) //VOREStation Add -- Removed by Request
|
||||
|
||||
return
|
||||
/* VOREStation Edit - See syringes_vr.dm
|
||||
/obj/item/weapon/reagent_containers/syringe/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
icon_state = "broken"
|
||||
return
|
||||
|
||||
var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
|
||||
if(ismob(loc))
|
||||
var/injoverlay
|
||||
switch(mode)
|
||||
if (SYRINGE_DRAW)
|
||||
injoverlay = "draw"
|
||||
if (SYRINGE_INJECT)
|
||||
injoverlay = "inject"
|
||||
add_overlay(injoverlay)
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
|
||||
if(reagents.total_volume)
|
||||
filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
|
||||
|
||||
filling.icon_state = "syringe[rounded_vol]"
|
||||
|
||||
filling.color = reagents.get_color()
|
||||
add_overlay(filling)
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
|
||||
if (!affecting || affecting.is_stump())
|
||||
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
|
||||
return
|
||||
|
||||
var/hit_area = affecting.name
|
||||
|
||||
if((user != target) && H.check_shields(7, src, user, "\the [src]"))
|
||||
return
|
||||
|
||||
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(span_red(text("<B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>")), 1)
|
||||
user.remove_from_mob(src)
|
||||
qdel(src)
|
||||
|
||||
add_attack_logs(user,target,"Syringe harmclick")
|
||||
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] in \the [hit_area] with [src.name]!</span>")
|
||||
|
||||
if(affecting.take_damage(3))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with [src.name]!</span>")
|
||||
target.take_organ_damage(3)// 7 is the same as crowbar punch
|
||||
|
||||
|
||||
|
||||
var/syringestab_amount_transferred = rand(max(reagents.total_volume - 10, 0), (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
|
||||
if(isnull(trans)) trans = 0
|
||||
add_attack_logs(user,target,"Stabbed with [src.name] containing [contained], trasferred [trans] units")
|
||||
if(!issilicon(user))
|
||||
break_syringe(target, user)
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
|
||||
desc += " It is broken."
|
||||
mode = SYRINGE_BROKEN
|
||||
if(target)
|
||||
add_blood(target)
|
||||
if(user)
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe
|
||||
name = "Lethal Injection Syringe"
|
||||
desc = "A syringe used for lethal injections."
|
||||
amount_per_transfer_from_this = 50
|
||||
volume = 50
|
||||
visible_name = "a giant syringe"
|
||||
time = 300
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
|
||||
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
|
||||
to_chat(user, "<span class='notice'>This needle isn't designed for drawing blood.</span>")
|
||||
return
|
||||
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
|
||||
to_chat(user, "<span class='notice'>This syringe is too big to stab someone with it.</span>")
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Syringes. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline
|
||||
name = "Syringe (inaprovaline)"
|
||||
desc = "Contains inaprovaline - used to stabilize patients."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/inaprovaline/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("inaprovaline", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin
|
||||
name = "Syringe (anti-toxin)"
|
||||
desc = "Contains anti-toxins."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("anti_toxin", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral
|
||||
name = "Syringe (spaceacillin)"
|
||||
desc = "Contains antiviral agents."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs
|
||||
name = "Syringe (drugs)"
|
||||
desc = "Contains aggressive drugs meant for torture."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/drugs/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bliss", 5)
|
||||
reagents.add_reagent("mindbreaker", 5)
|
||||
reagents.add_reagent("cryptobiolin", 5)
|
||||
//mode = SYRINGE_INJECT //VOREStation Edit - Starts capped
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("chloralhydrate", 50)
|
||||
mode = SYRINGE_INJECT
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/steroid
|
||||
name = "Syringe (anabolic steroids)"
|
||||
desc = "Contains drugs for muscle growth."
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/steroid/Initialize()
|
||||
..()
|
||||
//reagents.add_reagent("adrenaline",5) //VOREStation Edit - No thanks.
|
||||
reagents.add_reagent("hyperzine",10)
|
||||
|
||||
@@ -1,108 +1,108 @@
|
||||
// Here are the paths for all hypos that start unidentified.
|
||||
// Usually you want to use a random spawner instead of using them directly, unless you're spawning these live for adminbus purposes.
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector
|
||||
identity_type = /datum/identification/hypo
|
||||
|
||||
// The good.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
// The somewhat bad.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
// The very bad.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified
|
||||
init_hide_identity = TRUE
|
||||
// Here are the paths for all hypos that start unidentified.
|
||||
// Usually you want to use a random spawner instead of using them directly, unless you're spawning these live for adminbus purposes.
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector
|
||||
identity_type = /datum/identification/hypo
|
||||
|
||||
// The good.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clonemed/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
// The somewhat bad.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/psilocybin/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/soporific/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
// The very bad.
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cyanide/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/impedrezene/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mutagen/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/defective_nanites/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/contaminated/unidentified
|
||||
init_hide_identity = TRUE
|
||||
flags = 0
|
||||
Reference in New Issue
Block a user