Merge pull request #1673 from Yoshax/shotglasses

Adds shot glasses + code qol
This commit is contained in:
Datraen
2016-05-16 22:34:19 -04:00
20 changed files with 2037 additions and 1935 deletions
@@ -2,7 +2,8 @@
name = "blood packs bags"
desc = "This box contains blood packs."
icon_state = "sterile"
New()
/obj/item/weapon/storage/box/bloodpacks/New()
..()
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
@@ -21,22 +22,22 @@
var/blood_type = null
New()
..()
if(blood_type != null)
name = "BloodPack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
on_reagent_change()
/obj/item/weapon/reagent_containers/blood/New()
..()
if(blood_type != null)
name = "BloodPack [blood_type]"
reagents.add_reagent("blood", 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()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) icon_state = "empty"
if(10 to 50) icon_state = "half"
if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) icon_state = "empty"
if(10 to 50) icon_state = "half"
if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/APlus
blood_type = "A+"
@@ -12,88 +12,88 @@
slot_flags = SLOT_EARS
volume = 5
afterattack(var/obj/target, var/mob/user, var/flag)
if(!target.reagents || !flag) return
/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/flag)
if(!target.reagents || !flag) return
if(reagents.total_volume)
if(reagents.total_volume)
if(!target.reagents.get_free_space())
user << "<span class='notice'>[target] is full.</span>"
if(!target.reagents.get_free_space())
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.
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(!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.
user << "<span class='notice'>You cannot directly fill this object.</span>"
return
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/victim = target
var/trans = 0
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(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))
if(safe_thing)
trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
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
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/victim = target
var/mob/living/M = target
var/contained = reagentlist()
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]</font>")
msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
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.trans_to_obj(safe_thing, amount_per_transfer_from_this)
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/mob/living/M = target
var/contained = reagentlist()
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]</font>")
msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
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>")
trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
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
return
else
trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
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))
user << "<span class='notice'>You cannot directly remove reagents from [target].</span>"
return
if(!target.reagents || !target.reagents.total_volume)
user << "<span class='notice'>[target] is empty.</span>"
return
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
user << "<span class='notice'>You fill the dropper with [trans] units of the solution.</span>"
return
on_reagent_change()
update_icon()
update_icon()
if(reagents.total_volume)
icon_state = "dropper1"
else
icon_state = "dropper0"
trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
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))
user << "<span class='notice'>You cannot directly remove reagents from [target].</span>"
return
if(!target.reagents || !target.reagents.total_volume)
user << "<span class='notice'>[target] is empty.</span>"
return
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
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"
@@ -10,43 +10,48 @@
desc = "Cola. in space."
icon_state = "cola"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("cola", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/cola/New()
..()
reagents.add_reagent("cola", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
name = "bottled water"
desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles."
icon_state = "waterbottle"
center_of_mass = list("x"=15, "y"=8)
New()
..()
reagents.add_reagent("water", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/New()
..()
reagents.add_reagent("water", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("spacemountainwind", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind/New()
..()
reagents.add_reagent("spacemountainwind", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko
name = "\improper Thirteen Loko"
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko"
center_of_mass = list("x"=16, "y"=8)
New()
..()
reagents.add_reagent("thirteenloko", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/New()
..()
reagents.add_reagent("thirteenloko", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
name = "\improper Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
icon_state = "dr_gibb"
center_of_mass = list("x"=16, "y"=10)
New()
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb/New()
..()
reagents.add_reagent("dr_gibb", 30)
@@ -55,60 +60,67 @@
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
icon_state = "starkist"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("brownstar", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist/New()
..()
reagents.add_reagent("brownstar", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("space_up", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up/New()
..()
reagents.add_reagent("space_up", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime
name = "\improper Lemon-Lime"
desc = "You wanted ORANGE. It gave you Lemon Lime."
icon_state = "lemon-lime"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("lemon_lime", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime/New()
..()
reagents.add_reagent("lemon_lime", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
name = "\improper Vrisk Serket Iced Tea"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
icon_state = "ice_tea_can"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("icetea", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea/New()
..()
reagents.add_reagent("icetea", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice
name = "\improper Grapel Juice"
desc = "500 pages of rules of how to appropriately enter into a combat with this juice!"
icon_state = "purple_can"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("grapejuice", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice/New()
..()
reagents.add_reagent("grapejuice", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic
name = "\improper T-Borg's Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
icon_state = "tonic"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("tonic", 50)
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic/New()
..()
reagents.add_reagent("tonic", 50)
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater
name = "soda water"
desc = "A can of soda water. Still water's more refreshing cousin."
icon_state = "sodawater"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("sodawater", 50)
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater/New()
..()
reagents.add_reagent("sodawater", 50)
@@ -15,147 +15,152 @@
center_of_mass = list("x"=16, "y"=6)
volume = 50
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
return
/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob)
return
/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
if(standard_feed_mob(user, M))
return
attack_self(var/mob/user as mob)
/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag)
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
if(standard_feed_mob(user, M))
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
if(!reagents || !reagents.total_volume)
user << "<span class='notice'>There is no condiment left in \the [src].</span>"
return
afterattack(var/obj/target, var/mob/user, var/flag)
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
if(!target.reagents.get_free_space())
user << "<span class='notice'>You can't add more condiment to \the [target].</span>"
return
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
if(!reagents || !reagents.total_volume)
user << "<span class='notice'>There is no condiment left in \the [src].</span>"
return
var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
user << "<span class='notice'>You add [trans] units of the condiment to \the [target].</span>"
else
..()
if(!target.reagents.get_free_space())
user << "<span class='notice'>You can't add more condiment to \the [target].</span>"
return
/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
user << "<span class='notice'>You add [trans] units of the condiment to \the [target].</span>"
else
..()
/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
user << "<span class='notice'>You swallow some of contents of \the [src].</span>"
feed_sound(var/mob/user)
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
self_feed_message(var/mob/user)
user << "<span class='notice'>You swallow some of contents of \the [src].</span>"
on_reagent_change()
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("ketchup")
name = "Ketchup"
desc = "You feel more American already."
icon_state = "ketchup"
center_of_mass = list("x"=16, "y"=6)
if("capsaicin")
name = "Hotsauce"
desc = "You can almost TASTE the stomach ulcers now!"
icon_state = "hotsauce"
center_of_mass = list("x"=16, "y"=6)
if("enzyme")
name = "Universal Enzyme"
desc = "Used in cooking various dishes."
icon_state = "enzyme"
center_of_mass = list("x"=16, "y"=6)
if("soysauce")
name = "Soy Sauce"
desc = "A salty soy-based flavoring."
icon_state = "soysauce"
center_of_mass = list("x"=16, "y"=6)
if("frostoil")
name = "Coldsauce"
desc = "Leaves the tongue numb in its passage."
icon_state = "coldsauce"
center_of_mass = list("x"=16, "y"=6)
if("sodiumchloride")
name = "Salt Shaker"
desc = "Salt. From space oceans, presumably."
icon_state = "saltshaker"
center_of_mass = list("x"=16, "y"=10)
if("blackpepper")
name = "Pepper Mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
center_of_mass = list("x"=16, "y"=10)
if("cornoil")
name = "Corn Oil"
desc = "A delicious oil used in cooking. Made from corn."
icon_state = "oliveoil"
center_of_mass = list("x"=16, "y"=6)
if("sugar")
name = "Sugar"
desc = "Tastey space sugar!"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("ketchup")
name = "Ketchup"
desc = "You feel more American already."
icon_state = "ketchup"
center_of_mass = list("x"=16, "y"=6)
if("capsaicin")
name = "Hotsauce"
desc = "You can almost TASTE the stomach ulcers now!"
icon_state = "hotsauce"
center_of_mass = list("x"=16, "y"=6)
if("enzyme")
name = "Universal Enzyme"
desc = "Used in cooking various dishes."
icon_state = "enzyme"
center_of_mass = list("x"=16, "y"=6)
if("soysauce")
name = "Soy Sauce"
desc = "A salty soy-based flavoring."
icon_state = "soysauce"
center_of_mass = list("x"=16, "y"=6)
if("frostoil")
name = "Coldsauce"
desc = "Leaves the tongue numb in its passage."
icon_state = "coldsauce"
center_of_mass = list("x"=16, "y"=6)
if("sodiumchloride")
name = "Salt Shaker"
desc = "Salt. From space oceans, presumably."
icon_state = "saltshaker"
center_of_mass = list("x"=16, "y"=10)
if("blackpepper")
name = "Pepper Mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
center_of_mass = list("x"=16, "y"=10)
if("cornoil")
name = "Corn Oil"
desc = "A delicious oil used in cooking. Made from corn."
icon_state = "oliveoil"
center_of_mass = list("x"=16, "y"=6)
if("sugar")
name = "Sugar"
desc = "Tastey space sugar!"
center_of_mass = list("x"=16, "y"=6)
else
name = "Misc Condiment Bottle"
if (reagents.reagent_list.len==1)
desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
else
name = "Misc Condiment Bottle"
if (reagents.reagent_list.len==1)
desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
else
desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
icon_state = "mixedcondiments"
center_of_mass = list("x"=16, "y"=6)
else
icon_state = "emptycondiment"
name = "Condiment Bottle"
desc = "An empty condiment bottle."
center_of_mass = list("x"=16, "y"=6)
return
desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
icon_state = "mixedcondiments"
center_of_mass = list("x"=16, "y"=6)
else
icon_state = "emptycondiment"
name = "Condiment Bottle"
desc = "An empty condiment bottle."
center_of_mass = list("x"=16, "y"=6)
return
/obj/item/weapon/reagent_containers/food/condiment/enzyme
name = "Universal Enzyme"
desc = "Used in cooking various dishes."
icon_state = "enzyme"
New()
..()
reagents.add_reagent("enzyme", 50)
/obj/item/weapon/reagent_containers/food/condiment/sugar
New()
..()
reagents.add_reagent("sugar", 50)
/obj/item/weapon/reagent_containers/food/condiment/enzyme/New()
..()
reagents.add_reagent("enzyme", 50)
/obj/item/weapon/reagent_containers/food/condiment/sugar/New()
..()
reagents.add_reagent("sugar", 50)
/obj/item/weapon/reagent_containers/food/condiment/small
possible_transfer_amounts = list(1,20)
amount_per_transfer_from_this = 1
volume = 20
center_of_mass = list()
on_reagent_change() return
/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change()
return
/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then
name = "salt shaker" // a large one.
desc = "Salt. From space oceans, presumably."
icon_state = "saltshakersmall"
New()
..()
reagents.add_reagent("sodiumchloride", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New()
..()
reagents.add_reagent("sodiumchloride", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/peppermill
name = "pepper mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
New()
..()
reagents.add_reagent("blackpepper", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New()
..()
reagents.add_reagent("blackpepper", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/sugar
name = "sugar"
desc = "Sweetness in a bottle"
icon_state = "sugarsmall"
New()
..()
reagents.add_reagent("sugar", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New()
..()
reagents.add_reagent("sugar", 20)
/obj/item/weapon/reagent_containers/food/condiment/flour
name = "flour sack"
@@ -163,9 +168,12 @@
icon = 'icons/obj/food.dmi'
icon_state = "flour"
item_state = "flour"
on_reagent_change() return
New()
..()
reagents.add_reagent("flour", 30)
src.pixel_x = rand(-10.0, 10)
src.pixel_y = rand(-10.0, 10)
/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change()
return
/obj/item/weapon/reagent_containers/food/condiment/flour/New()
..()
reagents.add_reagent("flour", 30)
src.pixel_x = rand(-10.0, 10)
src.pixel_y = rand(-10.0, 10)
@@ -10,70 +10,70 @@
amount_per_transfer_from_this = 5
volume = 50
on_reagent_change()
/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
return
attack_self(mob/user as mob)
if(!is_open_container())
open(user)
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
if(!is_open_container())
open(user)
proc/open(mob/user)
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
user << "<span class='notice'>You open [src] with an audible pop!</span>"
flags |= OPENCONTAINER
/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user)
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
user << "<span class='notice'>You open [src] with an audible pop!</span>"
flags |= OPENCONTAINER
attack(mob/M as mob, mob/user as mob, def_zone)
if(standard_feed_mob(user, M))
return
return 0
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
if(standard_feed_mob(user, M))
return
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
return 0
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
return ..()
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
standard_feed_mob(var/mob/user, var/mob/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
return ..()
standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
standard_pour_into(var/mob/user, var/atom/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
self_feed_message(var/mob/user)
user << "<span class='notice'>You swallow a gulp from \the [src].</span>"
/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
if(!is_open_container())
user << "<span class='notice'>You need to open [src]!</span>"
return 1
return ..()
feed_sound(var/mob/user)
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
user << "<span class='notice'>You swallow a gulp from \the [src].</span>"
examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume == 0)
user << "<span class='notice'>\The [src] is empty!</span>"
else if (reagents.total_volume <= volume * 0.25)
user << "<span class='notice'>\The [src] is almost empty!</span>"
else if (reagents.total_volume <= volume * 0.66)
user << "<span class='notice'>\The [src] is half full!</span>"
else if (reagents.total_volume <= volume * 0.90)
user << "<span class='notice'>\The [src] is almost full!</span>"
else
user << "<span class='notice'>\The [src] is full!</span>"
/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume == 0)
user << "<span class='notice'>\The [src] is empty!</span>"
else if (reagents.total_volume <= volume * 0.25)
user << "<span class='notice'>\The [src] is almost empty!</span>"
else if (reagents.total_volume <= volume * 0.66)
user << "<span class='notice'>\The [src] is half full!</span>"
else if (reagents.total_volume <= volume * 0.90)
user << "<span class='notice'>\The [src] is almost full!</span>"
else
user << "<span class='notice'>\The [src] is full!</span>"
////////////////////////////////////////////////////////////////////////////////
@@ -108,9 +108,10 @@
icon_state = "milk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
New()
..()
reagents.add_reagent("milk", 50)
/obj/item/weapon/reagent_containers/food/drinks/milk/New()
..()
reagents.add_reagent("milk", 50)
/obj/item/weapon/reagent_containers/food/drinks/soymilk
name = "SoyMilk"
@@ -118,18 +119,18 @@
icon_state = "soymilk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
New()
..()
reagents.add_reagent("soymilk", 50)
/obj/item/weapon/reagent_containers/food/drinks/soymilk/New()
..()
reagents.add_reagent("soymilk", 50)
/obj/item/weapon/reagent_containers/food/drinks/coffee
name = "Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
center_of_mass = list("x"=15, "y"=10)
New()
..()
reagents.add_reagent("coffee", 30)
/obj/item/weapon/reagent_containers/food/drinks/coffee/New()
..()
reagents.add_reagent("coffee", 30)
/obj/item/weapon/reagent_containers/food/drinks/tea
name = "Duke Purple Tea"
@@ -137,18 +138,19 @@
icon_state = "teacup"
item_state = "coffee"
center_of_mass = list("x"=16, "y"=14)
New()
..()
reagents.add_reagent("tea", 30)
/obj/item/weapon/reagent_containers/food/drinks/tea/New()
..()
reagents.add_reagent("tea", 30)
/obj/item/weapon/reagent_containers/food/drinks/ice
name = "Ice Cup"
desc = "Careful, cold ice, do not chew."
icon_state = "coffee"
center_of_mass = list("x"=15, "y"=10)
New()
..()
reagents.add_reagent("ice", 30)
/obj/item/weapon/reagent_containers/food/drinks/ice/New()
..()
reagents.add_reagent("ice", 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
name = "Dutch Hot Coco"
@@ -156,19 +158,19 @@
icon_state = "hot_coco"
item_state = "coffee"
center_of_mass = list("x"=15, "y"=13)
New()
..()
reagents.add_reagent("hot_coco", 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New()
..()
reagents.add_reagent("hot_coco", 30)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
center_of_mass = list("x"=16, "y"=11)
New()
..()
reagents.add_reagent("dry_ramen", 30)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
..()
reagents.add_reagent("dry_ramen", 30)
/obj/item/weapon/reagent_containers/food/drinks/sillycup
name = "Paper Cup"
@@ -177,13 +179,14 @@
possible_transfer_amounts = null
volume = 10
center_of_mass = list("x"=16, "y"=12)
New()
..()
on_reagent_change()
if(reagents.total_volume)
icon_state = "water_cup"
else
icon_state = "water_cup_e"
/obj/item/weapon/reagent_containers/food/drinks/sillycup/New()
..()
/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
if(reagents.total_volume)
icon_state = "water_cup"
else
icon_state = "water_cup_e"
//////////////////////////drinkingglass and shaker//
@@ -193,7 +193,6 @@
//Keeping this here for now, I'll ask if I should keep it here.
/obj/item/weapon/broken_bottle
name = "Broken Bottle"
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
@@ -212,204 +211,225 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..()
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
icon_state = "ginbottle"
center_of_mass = list("x"=16, "y"=4)
New()
..()
reagents.add_reagent("gin", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New()
..()
reagents.add_reagent("gin", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle"
center_of_mass = list("x"=16, "y"=3)
New()
..()
reagents.add_reagent("whiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New()
..()
reagents.add_reagent("whiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey
name = "Special Blend Whiskey"
desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
icon_state = "whiskeybottle2"
center_of_mass = list("x"=16, "y"=3)
New()
..()
reagents.add_reagent("specialwhiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New()
..()
reagents.add_reagent("specialwhiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
icon_state = "vodkabottle"
center_of_mass = list("x"=17, "y"=3)
New()
..()
reagents.add_reagent("vodka", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New()
..()
reagents.add_reagent("vodka", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
name = "Caccavo Guaranteed Quality Tequilla"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequillabottle"
center_of_mass = list("x"=16, "y"=3)
New()
..()
reagents.add_reagent("tequilla", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New()
..()
reagents.add_reagent("tequilla", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
name = "Bottle of Nothing"
desc = "A bottle filled with nothing"
icon_state = "bottleofnothing"
center_of_mass = list("x"=17, "y"=5)
New()
..()
reagents.add_reagent("nothing", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New()
..()
reagents.add_reagent("nothing", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
name = "Wrapp Artiste Patron"
desc = "Silver laced tequilla, served in space night clubs across the galaxy."
icon_state = "patronbottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("patron", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New()
..()
reagents.add_reagent("patron", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
name = "Captain Pete's Cuban Spiced Rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle"
center_of_mass = list("x"=16, "y"=8)
New()
..()
reagents.add_reagent("rum", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New()
..()
reagents.add_reagent("rum", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
name = "Flask of Holy Water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
center_of_mass = list("x"=17, "y"=10)
New()
..()
reagents.add_reagent("holywater", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New()
..()
reagents.add_reagent("holywater", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
name = "Goldeneye Vermouth"
desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle"
center_of_mass = list("x"=17, "y"=3)
New()
..()
reagents.add_reagent("vermouth", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New()
..()
reagents.add_reagent("vermouth", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
name = "Robert Robust's Coffee Liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK"
icon_state = "kahluabottle"
center_of_mass = list("x"=17, "y"=3)
New()
..()
reagents.add_reagent("kahlua", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New()
..()
reagents.add_reagent("kahlua", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
name = "College Girl Goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle"
center_of_mass = list("x"=15, "y"=3)
New()
..()
reagents.add_reagent("goldschlager", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New()
..()
reagents.add_reagent("goldschlager", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("cognac", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New()
..()
reagents.add_reagent("cognac", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
name = "Doublebeard Bearded Special Wine"
desc = "A faint aura of unease and asspainery surrounds the bottle."
icon_state = "winebottle"
center_of_mass = list("x"=16, "y"=4)
New()
..()
reagents.add_reagent("wine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New()
..()
reagents.add_reagent("wine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Jailbreaker Verte"
desc = "One sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("absinthe", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New()
..()
reagents.add_reagent("absinthe", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
name = "Emeraldine Melon Liquor"
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
icon_state = "alco-green" //Placeholder.
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("melonliquor", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New()
..()
reagents.add_reagent("melonliquor", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
name = "Miss Blue Curacao"
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
icon_state = "alco-blue" //Placeholder.
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("bluecuracao", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New()
..()
reagents.add_reagent("bluecuracao", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine
name = "Briar Rose Grenadine Syrup"
desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
icon_state = "grenadinebottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("grenadine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New()
..()
reagents.add_reagent("grenadine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
name = "\improper Space Cola"
desc = "Cola. in space"
icon_state = "colabottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New()
..()
reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New()
..()
reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind_bottle"
center_of_mass = list("x"=16, "y"=6)
New()
..()
reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New()
..()
reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
name = "Warlock's Velvet"
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
icon_state = "pwinebottle"
center_of_mass = list("x"=16, "y"=4)
New()
..()
reagents.add_reagent("pwine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New()
..()
reagents.add_reagent("pwine", 100)
//////////////////////////JUICES AND STUFF ///////////////////////
@@ -420,9 +440,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=7)
isGlass = 0
New()
..()
reagents.add_reagent("orangejuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New()
..()
reagents.add_reagent("orangejuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
name = "Milk Cream"
@@ -431,9 +452,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
New()
..()
reagents.add_reagent("cream", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New()
..()
reagents.add_reagent("cream", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
name = "Tomato Juice"
@@ -442,9 +464,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
New()
..()
reagents.add_reagent("tomatojuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New()
..()
reagents.add_reagent("tomatojuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
name = "Lime Juice"
@@ -453,9 +476,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
New()
..()
reagents.add_reagent("limejuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New()
..()
reagents.add_reagent("limejuice", 100)
//Small bottles
/obj/item/weapon/reagent_containers/food/drinks/bottle/small
@@ -469,9 +493,10 @@
desc = "Contains only water, malt and hops."
icon_state = "beer"
center_of_mass = list("x"=16, "y"=12)
New()
..()
reagents.add_reagent("beer", 30)
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New()
..()
reagents.add_reagent("beer", 30)
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale
name = "\improper Magm-Ale"
@@ -479,6 +504,7 @@
icon_state = "alebottle"
item_state = "beer"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("ale", 30)
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New()
..()
reagents.add_reagent("ale", 30)
@@ -108,3 +108,28 @@
..()
reagents.add_reagent("cola", 50)
on_reagent_change()
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
name = "shot glass"
desc = "No glasses were shot in the making of this glass."
icon_state = "shotglass"
amount_per_transfer_from_this = 10
volume = 10
matter = list("glass" = 175)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
switch(reagents.total_volume)
if(0 to 3) filling.icon_state = "[icon_state]1"
if(4 to 7) filling.icon_state = "[icon_state]5"
if(8 to INFINITY) filling.icon_state = "[icon_state]12"
filling.color += reagents.get_color()
overlays += filling
name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
else
name = "shot glass"
File diff suppressed because it is too large Load Diff
@@ -5,10 +5,11 @@
health = 180
filling_color = "#FF1C1C"
center_of_mass = list("x"=16, "y"=14)
New()
..()
reagents.add_reagent("protein", 9)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/New()
..()
reagents.add_reagent("protein", 9)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/material/knife))
+95 -131
View File
@@ -44,66 +44,65 @@
/obj/machinery/radiocarbon_spectrometer
)
New()
..()
base_name = name
/obj/item/weapon/reagent_containers/glass/New()
..()
base_name = name
examine(var/mob/user)
if(!..(user, 2))
/obj/item/weapon/reagent_containers/glass/examine(var/mob/user)
if(!..(user, 2))
return
if(reagents && reagents.reagent_list.len)
user << "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
else
user << "<span class='notice'>It is empty.</span>"
if(!is_open_container())
user << "<span class='notice'>Airtight lid seals it completely.</span>"
/obj/item/weapon/reagent_containers/glass/attack_self()
..()
if(is_open_container())
usr << "<span class = 'notice'>You put the lid on \the [src].</span>"
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the lid off \the [src].</span>"
flags |= OPENCONTAINER
update_icon()
/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/flag)
if(!is_open_container() || !flag)
return
for(var/type in can_be_placed_into)
if(istype(target, type))
return
if(reagents && reagents.reagent_list.len)
user << "<span class='notice'>It contains [reagents.total_volume] units of liquid.</span>"
if(standard_splash_mob(user, target))
return
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
if(reagents.total_volume)
user << "<span class='notice'>You splash the solution onto [target].</span>"
reagents.splash(target, reagents.total_volume)
return
/obj/item/weapon/reagent_containers/glass/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(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
if(length(tmp_label) > 10)
user << "<span class='notice'>The label can be at most 10 characters long.</span>"
else
user << "<span class='notice'>It is empty.</span>"
if(!is_open_container())
user << "<span class='notice'>Airtight lid seals it completely.</span>"
user << "<span class='notice'>You set the label to \"[tmp_label]\".</span>"
label_text = tmp_label
update_name_label()
attack_self()
..()
if(is_open_container())
usr << "<span class = 'notice'>You put the lid on \the [src].</span>"
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the lid off \the [src].</span>"
flags |= OPENCONTAINER
update_icon()
afterattack(var/obj/target, var/mob/user, var/flag)
if(!is_open_container() || !flag)
return
for(var/type in can_be_placed_into)
if(istype(target, type))
return
if(standard_splash_mob(user, target))
return
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
if(reagents.total_volume)
user << "<span class='notice'>You splash the solution onto [target].</span>"
reagents.splash(target, reagents.total_volume)
return
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(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
if(length(tmp_label) > 10)
user << "<span class='notice'>The label can be at most 10 characters long.</span>"
else
user << "<span class='notice'>You set the label to \"[tmp_label]\".</span>"
label_text = tmp_label
update_name_label()
proc/update_name_label()
if(label_text == "")
name = base_name
else
name = "[base_name] ([label_text])"
/obj/item/weapon/reagent_containers/glass/proc/update_name_label()
if(label_text == "")
name = base_name
else
name = "[base_name] ([label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
@@ -113,47 +112,47 @@
item_state = "beaker"
matter = list("glass" = 500)
New()
..()
desc += " Can hold up to [volume] units."
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/New()
..()
desc += " Can hold up to [volume] units."
/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change()
update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user)
..()
update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "[icon_state]-10"
if(10 to 24) filling.icon_state = "[icon_state]10"
if(25 to 49) filling.icon_state = "[icon_state]25"
if(50 to 74) filling.icon_state = "[icon_state]50"
if(75 to 79) filling.icon_state = "[icon_state]75"
if(80 to 90) filling.icon_state = "[icon_state]80"
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user)
..()
update_icon()
filling.color = reagents.get_color()
overlays += filling
/obj/item/weapon/reagent_containers/glass/beaker/attack_hand()
..()
update_icon()
if (!is_open_container())
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
/obj/item/weapon/reagent_containers/glass/beaker/update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "[icon_state]-10"
if(10 to 24) filling.icon_state = "[icon_state]10"
if(25 to 49) filling.icon_state = "[icon_state]25"
if(50 to 74) filling.icon_state = "[icon_state]50"
if(75 to 79) filling.icon_state = "[icon_state]75"
if(80 to 90) filling.icon_state = "[icon_state]80"
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
filling.color = reagents.get_color()
overlays += filling
if (!is_open_container())
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
/obj/item/weapon/reagent_containers/glass/beaker/large
name = "large beaker"
@@ -194,14 +193,12 @@
possible_transfer_amounts = list(5,10,15,25)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
New()
..()
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
..()
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
New()
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
..()
reagents.add_reagent("sacid", 60)
update_icon()
@@ -221,7 +218,6 @@
unacidable = 0
/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob)
if(isprox(D))
user << "You add [D] to [src]."
qdel(D)
@@ -256,35 +252,3 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60,120)
volume = 120
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
name = "Blender Jug"
desc = "A blender jug, part of a blender."
icon = 'icons/obj/kitchen.dmi'
icon_state = "blender_jug_e"
volume = 100
on_reagent_change()
switch(src.reagents.total_volume)
if(0)
icon_state = "blender_jug_e"
if(1 to 75)
icon_state = "blender_jug_h"
if(76 to 100)
icon_state = "blender_jug_f"
/obj/item/weapon/reagent_containers/glass/canister //not used apparantly
desc = "It's a canister. Mainly used for transporting fuel."
name = "canister"
icon = 'icons/obj/tank.dmi'
icon_state = "canister"
item_state = "canister"
m_amt = 300
g_amt = 0
w_class = 4.0
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
*/
@@ -12,48 +12,48 @@
flags = 0
volume = 60
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
attack_hand()
..()
update_icon()
New()
..()
if(!icon_state)
icon_state = "bottle-[rand(1,4)]"
/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
update_icon()
overlays.Cut()
if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
..()
update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "[icon_state]--10"
if(10 to 24) filling.icon_state = "[icon_state]-10"
if(25 to 49) filling.icon_state = "[icon_state]-25"
if(50 to 74) filling.icon_state = "[icon_state]-50"
if(75 to 79) filling.icon_state = "[icon_state]-75"
if(80 to 90) filling.icon_state = "[icon_state]-80"
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
..()
update_icon()
filling.color = reagents.get_color()
overlays += filling
/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
..()
update_icon()
if (!is_open_container())
var/image/lid = image(icon, src, "lid_bottle")
overlays += lid
/obj/item/weapon/reagent_containers/glass/bottle/New()
..()
if(!icon_state)
icon_state = "bottle-[rand(1,4)]"
/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
overlays.Cut()
if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "[icon_state]--10"
if(10 to 24) filling.icon_state = "[icon_state]-10"
if(25 to 49) filling.icon_state = "[icon_state]-25"
if(50 to 74) filling.icon_state = "[icon_state]-50"
if(75 to 79) filling.icon_state = "[icon_state]-75"
if(80 to 90) filling.icon_state = "[icon_state]-80"
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
filling.color = reagents.get_color()
overlays += filling
if (!is_open_container())
var/image/lid = image(icon, src, "lid_bottle")
overlays += lid
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
@@ -86,12 +86,12 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
/obj/item/weapon/reagent_containers/glass/bottle/cyanide/New()
..()
reagents.add_reagent("cyanide", 30) //volume changed to match chloral
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/stoxin
name = "soporific bottle"
desc = "A small bottle of soporific. Just the fumes make you sleepy."
@@ -14,10 +14,10 @@
icon_state = "bottle-4"
reagent = "inaprovaline"
New()
..()
reagents.add_reagent("inaprovaline", 60)
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 60)
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
@@ -27,8 +27,8 @@
icon_state = "bottle-4"
reagent = "anti_toxin"
New()
..()
reagents.add_reagent("anti_toxin", 60)
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin/New()
..()
reagents.add_reagent("anti_toxin", 60)
update_icon()
+153 -117
View File
@@ -12,82 +12,82 @@
slot_flags = SLOT_EARS
volume = 60
New()
..()
if(!icon_state)
icon_state = "pill[rand(1, 20)]"
/obj/item/weapon/reagent_containers/pill/New()
..()
if(!icon_state)
icon_state = "pill[rand(1, 20)]"
attack(mob/M as mob, mob/user as mob, def_zone)
if(M == user)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
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)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
return
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))
/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone)
if(M == user)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
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)
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>")
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
if(!do_mob(user, M))
return
else if(istype(M, /mob/living/carbon/human))
user.drop_from_inventory(src) //icon update
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
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)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
return
var/contained = reagentlist()
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [name] by [key_name(user)] Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [name] to [key_name(M)] Reagents: [contained]</font>")
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
if(reagents.total_volume)
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
qdel(src)
if(!do_mob(user, M))
return
return 1
user.drop_from_inventory(src) //icon update
user.visible_message("<span class='warning'>[user] forces [M] to swallow \the [src].</span>")
return 0
var/contained = reagentlist()
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [name] by [key_name(user)] Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [name] to [key_name(M)] Reagents: [contained]</font>")
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
if(reagents.total_volume)
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
qdel(src)
if(target.is_open_container() && target.reagents)
if(!target.reagents.total_volume)
user << "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>"
return
user << "<span class='notice'>You dissolve \the [src] in [target].</span>"
return 1
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Spiked \a [target] with a pill. Reagents: [reagentlist()]</font>")
msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
return 0
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)
/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
qdel(src)
if(target.is_open_container() && target.reagents)
if(!target.reagents.total_volume)
user << "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>"
return
user << "<span class='notice'>You dissolve \the [src] in [target].</span>"
return
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Spiked \a [target] with a pill. Reagents: [reagentlist()]</font>")
msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
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
////////////////////////////////////////////////////////////////////////////////
/// Pills. END
@@ -98,163 +98,199 @@
name = "Anti-toxins pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
New()
..()
reagents.add_reagent("anti_toxin", 25)
/obj/item/weapon/reagent_containers/pill/antitox/New()
..()
reagents.add_reagent("anti_toxin", 25)
/obj/item/weapon/reagent_containers/pill/tox
name = "Toxins pill"
desc = "Highly toxic."
icon_state = "pill5"
New()
..()
reagents.add_reagent("toxin", 50)
/obj/item/weapon/reagent_containers/pill/tox/New()
..()
reagents.add_reagent("toxin", 50)
/obj/item/weapon/reagent_containers/pill/cyanide
name = "Cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
New()
..()
reagents.add_reagent("cyanide", 50)
/obj/item/weapon/reagent_containers/pill/cyanide/New()
..()
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 = "pill16"
New()
..()
reagents.add_reagent("adminordrazine", 50)
/obj/item/weapon/reagent_containers/pill/adminordrazine/New()
..()
reagents.add_reagent("adminordrazine", 50)
/obj/item/weapon/reagent_containers/pill/stox
name = "Sleeping pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
New()
..()
reagents.add_reagent("stoxin", 15)
/obj/item/weapon/reagent_containers/pill/stox/New()
..()
reagents.add_reagent("stoxin", 15)
/obj/item/weapon/reagent_containers/pill/kelotane
name = "Kelotane pill"
desc = "Used to treat burns."
icon_state = "pill11"
New()
..()
reagents.add_reagent("kelotane", 15)
/obj/item/weapon/reagent_containers/pill/kelotane/New()
..()
reagents.add_reagent("kelotane", 15)
/obj/item/weapon/reagent_containers/pill/paracetamol
name = "Paracetamol pill"
desc = "Tylenol! A painkiller for the ages. Chewables!"
icon_state = "pill8"
New()
..()
reagents.add_reagent("paracetamol", 15)
/obj/item/weapon/reagent_containers/pill/paracetamol/New()
..()
reagents.add_reagent("paracetamol", 15)
/obj/item/weapon/reagent_containers/pill/tramadol
name = "Tramadol pill"
desc = "A simple painkiller."
icon_state = "pill8"
New()
..()
reagents.add_reagent("tramadol", 15)
/obj/item/weapon/reagent_containers/pill/tramadol/New()
..()
reagents.add_reagent("tramadol", 15)
/obj/item/weapon/reagent_containers/pill/methylphenidate
name = "Methylphenidate pill"
desc = "Improves the ability to concentrate."
icon_state = "pill8"
New()
..()
reagents.add_reagent("methylphenidate", 15)
/obj/item/weapon/reagent_containers/pill/methylphenidate/New()
..()
reagents.add_reagent("methylphenidate", 15)
/obj/item/weapon/reagent_containers/pill/citalopram
name = "Citalopram pill"
desc = "Mild anti-depressant."
icon_state = "pill8"
New()
..()
reagents.add_reagent("citalopram", 15)
/obj/item/weapon/reagent_containers/pill/citalopram/New()
..()
reagents.add_reagent("citalopram", 15)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
icon_state = "pill20"
New()
..()
reagents.add_reagent("inaprovaline", 30)
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 30)
/obj/item/weapon/reagent_containers/pill/dexalin
name = "Dexalin pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill16"
New()
..()
reagents.add_reagent("dexalin", 15)
/obj/item/weapon/reagent_containers/pill/dexalin/New()
..()
reagents.add_reagent("dexalin", 15)
/obj/item/weapon/reagent_containers/pill/dexalin_plus
name = "Dexalin Plus pill"
desc = "Used to treat extreme oxygen deprivation."
icon_state = "pill8"
New()
..()
reagents.add_reagent("dexalinp", 15)
/obj/item/weapon/reagent_containers/pill/dexalin_plus/New()
..()
reagents.add_reagent("dexalinp", 15)
/obj/item/weapon/reagent_containers/pill/dermaline
name = "Dermaline pill"
desc = "Used to treat burn wounds."
icon_state = "pill12"
New()
..()
reagents.add_reagent("dermaline", 15)
/obj/item/weapon/reagent_containers/pill/dermaline/New()
..()
reagents.add_reagent("dermaline", 15)
/obj/item/weapon/reagent_containers/pill/dylovene
name = "Dylovene pill"
desc = "A broad-spectrum anti-toxin."
icon_state = "pill13"
New()
..()
reagents.add_reagent("anti_toxin", 15)
/obj/item/weapon/reagent_containers/pill/dylovene/New()
..()
reagents.add_reagent("anti_toxin", 15)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
icon_state = "pill20"
New()
..()
reagents.add_reagent("inaprovaline", 30)
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 30)
/obj/item/weapon/reagent_containers/pill/bicaridine
name = "Bicaridine pill"
desc = "Used to treat physical injuries."
icon_state = "pill18"
New()
..()
reagents.add_reagent("bicaridine", 20)
/obj/item/weapon/reagent_containers/pill/bicaridine/New()
..()
reagents.add_reagent("bicaridine", 20)
/obj/item/weapon/reagent_containers/pill/happy
name = "Happy pill"
desc = "Happy happy joy joy!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
/obj/item/weapon/reagent_containers/pill/happy/New()
..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
/obj/item/weapon/reagent_containers/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("impedrezene", 10)
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)
/obj/item/weapon/reagent_containers/pill/zoom/New()
..()
reagents.add_reagent("impedrezene", 10)
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)
/obj/item/weapon/reagent_containers/pill/spaceacillin
name = "Spaceacillin pill"
desc = "Contains antiviral agents."
icon_state = "pill19"
New()
..()
reagents.add_reagent("spaceacillin", 15)
/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
..()
reagents.add_reagent("spaceacillin", 15)
@@ -24,260 +24,258 @@
var/visible_name = "a syringe"
var/time = 30
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
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()
attack_hand()
..()
update_icon()
attackby(obj/item/I as obj, mob/user as mob)
return
afterattack(obj/target, mob/user, proximity)
if(!proximity || !target.reagents)
return
if(mode == SYRINGE_BROKEN)
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
switch(mode)
if(SYRINGE_DRAW)
if(!reagents.get_free_space())
user << "<span class='warning'>The syringe is full.</span>"
mode = SYRINGE_INJECT
return
if(ismob(target))//Blood!
if(reagents.has_reagent("blood"))
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
return
if(istype(target, /mob/living/carbon))
if(istype(target, /mob/living/carbon/slime))
user << "<span class='warning'>You are unable to locate any blood.</span>"
return
var/amount = reagents.get_free_space()
var/mob/living/carbon/T = target
if(!T.dna)
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
user << "<span class='warning'>You are unable to locate any blood.</span>"
return
var/datum/reagent/B
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
B = T.take_blood(src, amount)
else
B = T.take_blood(src,amount)
if (B)
reagents.reagent_list += B
reagents.update_total()
on_reagent_change()
reagents.handle_reactions()
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)
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))
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)
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)
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))
user << "<span class='notice'>You cannot directly fill this object.</span>"
return
if(!target.reagents.get_free_space())
user << "<span class='notice'>[target] is full.</span>"
return
var/mob/living/carbon/human/H = target
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
user << "<span class='danger'>\The [H] is missing that limb!</span>"
return
else if(affected.status & ORGAN_ROBOT)
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
return
if(ismob(target) && target != user)
var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
if(istype(H))
if(H.wear_suit)
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
injtime = injtime * 2
else if(!H.can_inject(user, 1))
return
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>")
else
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
if(!do_mob(user, target, injtime))
return
user.visible_message("<span class='warning'>[user] injects [target] with the syringe!</span>")
var/trans
if(ismob(target))
var/contained = reagentlist()
trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
admin_inject_log(user, target, src, contained, trans)
else
trans = reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
mode = SYRINGE_DRAW
update_icon()
return
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
update_icon()
overlays.Cut()
if(mode == SYRINGE_BROKEN)
icon_state = "broken"
/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()
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"
overlays += injoverlay
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
/obj/item/weapon/reagent_containers/syringe/attack_hand()
..()
update_icon()
if(reagents.total_volume)
filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob)
return
filling.icon_state = "syringe[rounded_vol]"
/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity)
if(!proximity || !target.reagents)
return
filling.color = reagents.get_color()
overlays += filling
if(mode == SYRINGE_BROKEN)
user << "<span class='warning'>This syringe is broken!</span>"
return
proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
if(user.a_intent == I_HURT && ismob(target))
if((CLUMSY in user.mutations) && prob(50))
target = user
syringestab(target, user)
return
if(istype(target, /mob/living/carbon/human))
switch(mode)
if(SYRINGE_DRAW)
if(!reagents.get_free_space())
user << "<span class='warning'>The syringe is full.</span>"
mode = SYRINGE_INJECT
return
if(ismob(target))//Blood!
if(reagents.has_reagent("blood"))
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
return
if(istype(target, /mob/living/carbon))
if(istype(target, /mob/living/carbon/slime))
user << "<span class='warning'>You are unable to locate any blood.</span>"
return
var/amount = reagents.get_free_space()
var/mob/living/carbon/T = target
if(!T.dna)
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
user << "<span class='warning'>You are unable to locate any blood.</span>"
return
var/datum/reagent/B
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
B = T.take_blood(src, amount)
else
B = T.take_blood(src,amount)
if (B)
reagents.reagent_list += B
reagents.update_total()
on_reagent_change()
reagents.handle_reactions()
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)
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))
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)
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)
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))
user << "<span class='notice'>You cannot directly fill this object.</span>"
return
if(!target.reagents.get_free_space())
user << "<span class='notice'>[target] is full.</span>"
return
var/mob/living/carbon/human/H = target
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
user << "<span class='danger'>\The [H] is missing that limb!</span>"
return
else if(affected.status & ORGAN_ROBOT)
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
return
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
if(ismob(target) && target != user)
if (!affecting || affecting.is_stump())
user << "<span class='danger'>They are missing that limb!</span>"
return
var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
var/hit_area = affecting.name
if(istype(H))
if(H.wear_suit)
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
injtime = injtime * 2
else if(!H.can_inject(user, 1))
return
if((user != target) && H.check_shields(7, src, user, "\the [src]"))
return
else if(isliving(target))
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <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)
var/mob/living/M = target
if(!M.can_inject(user, 1))
return
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM).</font>"
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM).</font>"
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
if(injtime == time)
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>")
else
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
return
if(!do_mob(user, target, injtime))
return
user.visible_message("<span class='danger'>[user] stabs [target] in \the [hit_area] with [src.name]!</span>")
user.visible_message("<span class='warning'>[user] injects [target] with the syringe!</span>")
if(affecting.take_damage(3))
H.UpdateDamageIcon()
var/trans
if(ismob(target))
var/contained = reagentlist()
trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
admin_inject_log(user, target, src, contained, trans)
else
trans = reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
mode = SYRINGE_DRAW
update_icon()
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
return
/obj/item/weapon/reagent_containers/syringe/update_icon()
overlays.Cut()
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"
overlays += 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()
overlays += 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())
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(text("\red <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)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM).</font>"
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM).</font>"
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
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(0, (reagents.total_volume - 5)) //nerfed by popular demand
var/contained_reagents = reagents.get_reagents()
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
if(isnull(trans)) trans = 0
admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
break_syringe(target, user)
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
var/contained_reagents = reagents.get_reagents()
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
if(isnull(trans)) trans = 0
admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
break_syringe(target, user)
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/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"
@@ -287,13 +285,13 @@
visible_name = "a giant syringe"
time = 300
afterattack(obj/target, mob/user, flag)
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
return
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
..()
/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
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
return
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
..()
////////////////////////////////////////////////////////////////////////////////
/// Syringes. END
@@ -302,44 +300,47 @@
/obj/item/weapon/reagent_containers/syringe/inaprovaline
name = "Syringe (inaprovaline)"
desc = "Contains inaprovaline - used to stabilize patients."
New()
..()
reagents.add_reagent("inaprovaline", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/inaprovaline/New()
..()
reagents.add_reagent("inaprovaline", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/antitoxin
name = "Syringe (anti-toxin)"
desc = "Contains anti-toxins."
New()
..()
reagents.add_reagent("anti_toxin", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/antitoxin/New()
..()
reagents.add_reagent("anti_toxin", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/antiviral
name = "Syringe (spaceacillin)"
desc = "Contains antiviral agents."
New()
..()
reagents.add_reagent("spaceacillin", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/antiviral/New()
..()
reagents.add_reagent("spaceacillin", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/drugs
name = "Syringe (drugs)"
desc = "Contains aggressive drugs meant for torture."
New()
..()
reagents.add_reagent("space_drugs", 5)
reagents.add_reagent("mindbreaker", 5)
reagents.add_reagent("cryptobiolin", 5)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral
New()
..()
reagents.add_reagent("chloralhydrate", 50)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/drugs/New()
..()
reagents.add_reagent("space_drugs", 5)
reagents.add_reagent("mindbreaker", 5)
reagents.add_reagent("cryptobiolin", 5)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/New()
..()
reagents.add_reagent("chloralhydrate", 50)
mode = SYRINGE_INJECT
update_icon()