diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
deleted file mode 100644
index 48bfa320890..00000000000
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ /dev/null
@@ -1,3140 +0,0 @@
-
-/obj/effect/syringe_gun_dummy
- name = ""
- desc = ""
- icon = 'icons/obj/chemical.dmi'
- icon_state = "null"
- anchored = 1
- density = 0
-
- New()
- var/datum/reagents/R = new/datum/reagents(15)
- reagents = R
- R.my_atom = src
-
-/obj/item/weapon/gun/grenadelauncher
- name = "grenade launcher"
- icon = 'icons/obj/gun.dmi'
- icon_state = "riotgun"
- item_state = "riotgun"
- w_class = 4.0
- throw_speed = 2
- throw_range = 10
- force = 5.0
- var/list/grenades = new/list()
- var/max_grenades = 3
- m_amt = 2000
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\icon [src] Grenade launcher:"
- usr << "\blue [grenades] / [max_grenades] Grenades."
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- if((istype(I, /obj/item/weapon/grenade)))
- if(grenades.len < max_grenades)
- user.drop_item()
- I.loc = src
- grenades += I
- user << "\blue You put the grenade in the grenade launcher."
- user << "\blue [grenades.len] / [max_grenades] Grenades."
- else
- usr << "\red The grenade launcher cannot hold more grenades."
-
- afterattack(obj/target, mob/user , flag)
-
- if (istype(target, /obj/item/weapon/storage/backpack ))
- return
-
- else if (locate (/obj/structure/table, src.loc))
- return
-
- else if(target == user)
- return
-
- if(grenades.len)
- spawn(0) fire_grenade(target,user)
- else
- usr << "\red The grenade launcher is empty."
-
- proc
- fire_grenade(atom/target, mob/user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] fired a grenade!", user), 1)
- user << "\red You fire the grenade launcher!"
- var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
- log_game("[key_name_admin(user)] used a grenade ([src.name]).")
- F.active = 1
- F.icon_state = initial(icon_state) + "_active"
- playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
-
-
-/obj/item/weapon/gun/syringe
- name = "syringe gun"
- desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance."
- icon = 'icons/obj/gun.dmi'
- icon_state = "syringegun"
- item_state = "syringegun"
- w_class = 3.0
- throw_speed = 2
- throw_range = 10
- force = 4.0
- var/list/syringes = new/list()
- var/max_syringes = 1
- m_amt = 2000
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue [syringes.len] / [max_syringes] syringes."
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- if(istype(I, /obj/item/weapon/reagent_containers/syringe))
- if(syringes.len < max_syringes)
- user.drop_item()
- I.loc = src
- syringes += I
- user << "\blue You put the syringe in [src]."
- user << "\blue [syringes.len] / [max_syringes] syringes."
- else
- usr << "\red [src] cannot hold more syringes."
-
- afterattack(obj/target, mob/user , flag)
- if(!isturf(target.loc) || target == user) return
-
- if(syringes.len)
- spawn(0) fire_syringe(target,user)
- else
- usr << "\red [src] is empty."
-
- proc
- fire_syringe(atom/target, mob/user)
- if (locate (/obj/structure/table, src.loc))
- return
- else
- var/turf/trg = get_turf(target)
- var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src))
- var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
- if((!S) || (!S.reagents)) //ho boy! wot runtimes!
- return
- S.reagents.trans_to(D, S.reagents.total_volume)
- syringes -= S
- del(S)
- D.icon_state = "syringeproj"
- D.name = "syringe"
- playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
-
- for(var/i=0, i<6, i++)
- if(!D) break
- if(D.loc == trg) break
- step_towards(D,trg)
-
- if(D)
- for(var/mob/living/carbon/M in D.loc)
- if(!istype(M,/mob/living/carbon)) continue
- if(M == user) continue
- //Syringe gun attack logging by Yvarov
- var/R
- if(D.reagents)
- for(var/datum/reagent/A in D.reagents.reagent_list)
- R += A.id + " ("
- R += num2text(A.volume) + "),"
- if (istype(M, /mob))
- M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
- user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
- log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])")
- else
- M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])"
- log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])")
- if(D.reagents)
- D.reagents.trans_to(M, 15)
- M.take_organ_damage(5)
- for(var/mob/O in viewers(world.view, D))
- O.show_message("\red [M.name] is hit by the syringe!", 1)
-
- del(D)
- if(D)
- for(var/atom/A in D.loc)
- if(A == user) continue
- if(A.density) del(D)
-
- sleep(1)
-
- if (D) spawn(10) del(D)
-
- return
-
-/obj/item/weapon/gun/syringe/rapidsyringe
- name = "rapid syringe gun"
- desc = "A modification of the syringe gun design, using a rotating cylinder to store up to four syringes."
- icon_state = "rapidsyringegun"
- max_syringes = 4
-
-/obj/structure/reagent_dispensers
- name = "Dispenser"
- desc = "..."
- icon = 'icons/obj/objects.dmi'
- icon_state = "watertank"
- density = 1
- anchored = 0
- flags = FPRINT
- pressure_resistance = 2*ONE_ATMOSPHERE
-
- var/amount_per_transfer_from_this = 10
- var/possible_transfer_amounts = list(10,25,50,100)
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- return
-
- New()
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
- if (!possible_transfer_amounts)
- src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
- ..()
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in view(1)
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- new /obj/effect/effect/water(src.loc)
- del(src)
- return
- if(3.0)
- if (prob(5))
- new /obj/effect/effect/water(src.loc)
- del(src)
- return
- else
- return
-
- blob_act()
- if(prob(50))
- new /obj/effect/effect/water(src.loc)
- del(src)
-
-
-
-/obj/item/weapon/reagent_containers
- name = "Container"
- desc = "..."
- icon = 'icons/obj/chemical.dmi'
- icon_state = null
- w_class = 1
- var/amount_per_transfer_from_this = 5
- var/possible_transfer_amounts = list(5,10,15,25,30)
- var/volume = 30
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in range(0)
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- New()
- ..()
- if (!possible_transfer_amounts)
- src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
- var/datum/reagents/R = new/datum/reagents(volume)
- reagents = R
- R.my_atom = src
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- return
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
- afterattack(obj/target, mob/user , flag)
- return
-
- proc/reagentlist(var/obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills
- var/data
- if(snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries
- for (var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind
- data += "[R.id]([R.volume] units); " //Using IDs because SOME chemicals(I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
- return data
- else return "No reagents"
-////////////////////////////////////////////////////////////////////////////////
-/// (Mixing)Glass.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/glass
- name = " "
- desc = " "
- icon = 'icons/obj/chemical.dmi'
- icon_state = "null"
- item_state = "null"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50)
- volume = 50
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
- var/list/can_be_placed_into = list(
- /obj/machinery/chem_master/,
- /obj/machinery/chem_dispenser/,
- /obj/machinery/reagentgrinder,
- /obj/structure/table,
- /obj/structure/closet,
- /obj/structure/sink,
- /obj/item/weapon/storage,
- /obj/machinery/atmospherics/unary/cryo_cell,
- /obj/item/weapon/grenade/chem_grenade,
- /obj/machinery/bot/medbot,
- /obj/machinery/computer/pandemic,
- /obj/item/weapon/secstorage/ssafe,
- /obj/machinery/disposal
- )
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- afterattack(obj/target, mob/user , flag)
- for(var/type in src.can_be_placed_into)
- if(istype(target, type))
- return
-
- if(ismob(target) && target.reagents && reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
- return
- else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume && target.reagents)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- //Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary.
- else if(istype(target, /obj/item/clothing/suit/space/space_ninja))
- return
-
- else if(reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// (Mixing)Glass. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Droppers.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/dropper
- name = "Dropper"
- desc = "A dropper. Transfers 5 units."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "dropper0"
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = list(1,2,3,4,5)
- volume = 5
- var/filled = 0
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- if(filled)
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
- user << "\red You cannot directly fill this object."
- return
-
- var/trans = 0
-
- if(ismob(target))
- 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.flags & MASKCOVERSEYES )
- safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
- safe_thing = victim.head
- if(victim.glasses)
- if ( !safe_thing )
- safe_thing = victim.glasses
-
- if(safe_thing)
- if(!safe_thing.reagents)
- safe_thing.create_reagents(100)
- trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
- spawn(5)
- src.reagents.reaction(safe_thing, TOUCH)
-
-
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
- return
-
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
- src.reagents.reaction(target, TOUCH)
-
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
-
- else
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from [target]."
- return
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
-
- user << "\blue You fill the dropper with [trans] units of the solution."
-
- filled = 1
- icon_state = "dropper[filled]"
-
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// Droppers. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Syringes.
-////////////////////////////////////////////////////////////////////////////////
-#define SYRINGE_DRAW 0
-#define SYRINGE_INJECT 1
-
-/obj/item/weapon/reagent_containers/syringe
- name = "Syringe"
- desc = "A syringe."
- icon = 'icons/obj/syringe.dmi'
- item_state = "syringe_0"
- icon_state = "0"
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = null //list(5,10,15)
- volume = 15
- var/mode = SYRINGE_DRAW
-
- 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
-*/
- mode = !mode
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attack_paw()
- return attack_hand()
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
-
- if(ismob(target))//Blood!
- if(istype(target, /mob/living/carbon/metroid))
- user << "\red You are unable to locate any blood."
- return
- if(src.reagents.has_reagent("blood"))
- user << "\red There is already a blood sample in this syringe"
- return
- if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
- var/amount = src.reagents.maximum_volume - src.reagents.total_volume
- var/mob/living/carbon/T = target
- var/datum/reagent/B = new /datum/reagent/blood
- if(!T.dna)
- usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
- return
- if(NOCLONE in T.mutations) //target done been et, no more blood in him
- user << "\red You are unable to locate any blood."
- return
- B.holder = src
- B.volume = amount
- //set reagent data
- B.data["donor"] = T
- /*
- if(T.virus && T.virus.spread_type != SPECIAL)
- B.data["virus"] = new T.virus.type(0)
- */
-
-
-
- for(var/datum/disease/D in T.viruses)
- if(!B.data["viruses"])
- B.data["viruses"] = list()
-
-
- B.data["viruses"] += new D.type
-
-
- B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
- if(T.resistances&&T.resistances.len)
- B.data["resistances"] = T.resistances.Copy()
- if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
- var/mob/living/carbon/human/HT = target
- B.data["blood_type"] = copytext(HT.dna.b_type,1,0)
- var/list/temp_chem = list()
- for(var/datum/reagent/R in target.reagents.reagent_list)
- temp_chem += R.name
- temp_chem[R.name] = R.volume
- B.data["trace_chem"] = list2params(temp_chem)
-
- src.reagents.reagent_list += B
- src.reagents.update_total()
- src.on_reagent_change()
- src.reagents.handle_reactions()
- user << "\blue You take a blood sample from [target]"
- for(var/mob/O in viewers(4, user))
- O.show_message("\red [user] takes a blood sample from [target].", 1)
-
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
- user << "\red You cannot directly remove reagents from this object."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
-
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- 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/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(istype(target, /obj/item/metroid_core))
- var/obj/item/metroid_core/core = target
- core.Flush = 30 // reset flush counter
-
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to inject []!", user, target), 1)
- if(!do_mob(user, target)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
-
- return
-
- update_icon()
- var/rounded_vol = round(reagents.total_volume,5)
- overlays = null
- 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)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10", src.layer)
-
- switch(rounded_vol)
- if(5) filling.icon_state = "syringe5"
- if(10) filling.icon_state = "syringe10"
- if(15) filling.icon_state = "syringe15"
-
- filling.icon += mix_color_from_reagents(reagents.reagent_list)
- overlays += filling
-
-
-/obj/item/weapon/reagent_containers/ld50_syringe
- name = "Lethal Injection Syringe"
- desc = "A syringe used for lethal injections."
- icon = 'icons/obj/syringe.dmi'
- item_state = "syringe_0"
- icon_state = "0"
- amount_per_transfer_from_this = 50
- possible_transfer_amounts = null //list(5,10,15)
- volume = 50
- var/mode = SYRINGE_DRAW
-
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_self(mob/user as mob)
- mode = !mode
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attack_paw()
- return attack_hand()
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
-
- if(ismob(target))
- if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
- usr << "This needle isn't designed for drawing blood."
- return
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from this object."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
-
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- 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))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to inject [] with a giant syringe!", user, target), 1)
- if(!do_mob(user, target, 300)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume >= reagents.maximum_volume && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
-
- return
-
- update_icon()
- var/rounded_vol = round(reagents.total_volume,50)
- if(ismob(loc))
- var/mode_t
- switch(mode)
- if (SYRINGE_DRAW)
- mode_t = "d"
- if (SYRINGE_INJECT)
- mode_t = "i"
- icon_state = "[mode_t][rounded_vol]"
- else
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
-
-////////////////////////////////////////////////////////////////////////////////
-/// Syringes. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// 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'
- item_state = "hypo"
- icon_state = "hypo"
- amount_per_transfer_from_this = 5
- volume = 30
- possible_transfer_amounts = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- slot_flags = SLOT_BELT
-
-/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-
-/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
- ..()
- reagents.add_reagent("tricordrazine", 30)
- return
-
-/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
- if(!reagents.total_volume)
- user << "\red The hypospray is empty."
- return
- if (!( istype(M, /mob) ))
- return
- if (reagents.total_volume)
- user << "\blue You inject [M] with the hypospray."
- M << "\red You feel a tiny prick!"
-
- M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.ckey])")
-
- log_attack("[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
-
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining in the hypospray."
- 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
- flags = FPRINT
- var/mode = 1
- var/charge_cost = 50
- var/charge_tick = 0
- var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
-
- New()
- ..()
- processing_objects.Add(src)
-
-
- Del()
- processing_objects.Remove(src)
- ..()
-
- process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
- charge_tick++
- if(charge_tick < recharge_time) return 0
- charge_tick = 0
-
- if(isrobot(src.loc))
- var/mob/living/silicon/robot/R = src.loc
- if(R && R.cell)
- if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
- R.cell.use(charge_cost) //Take power from borg...
- reagents.add_reagent("tricordrazine",5) //And fill hypo with reagent.
- if(mode == 2 && reagents.total_volume < 30)
- R.cell.use(charge_cost)
- reagents.add_reagent("inaprovaline", 5)
- if(mode == 3 && reagents.total_volume < 30)
- R.cell.use(charge_cost)
- reagents.add_reagent("spaceacillin", 5)
- //update_icon()
- return 1
-
-/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
- if(!reagents.total_volume)
- user << "\red The injector is empty."
- return
- if (!( istype(M, /mob) ))
- return
- if (reagents.total_volume)
- user << "\blue You inject [M] with the injector."
- M << "\red You feel a tiny prick!"
-
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining."
- return
-
-/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
- playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) //Change the mode
- if(mode == 1)
- mode = 2
- charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
- reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
- user << "\blue Synthesizer is now producing 'Inaprovaline'."
- return
- if(mode == 2)
- mode = 3
- charge_tick = 0
- reagents.clear_reagents()
- user << "\blue Synthesizer is now producing 'Spaceacillin'."
- return
- if(mode == 3)
- mode = 1
- charge_tick = 0
- reagents.clear_reagents()
- user << "\blue Synthesizer is now producing 'Tricordrazine'."
- return
-
-/obj/item/weapon/reagent_containers/borghypo/examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
-
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue It currently has [R.volume] units of [R.name] stored."
- else
- usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// Food.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food
- possible_transfer_amounts = null
- volume = 50 //Sets the default container amount for all food items.
-
- New()
- ..()
- src.pixel_x = rand(-5.0, 5) //Randomizes postion slightly.
- src.pixel_y = rand(-5.0, 5)
-
-/obj/item/weapon/reagent_containers/food/snacks //Food items that are eaten normally and don't leave anything behind.
- name = "snack"
- desc = "yummy"
- icon = 'icons/obj/food.dmi'
- icon_state = null
- var/bitesize = 1
- var/bitecount = 0
- var/trash = null
-
- //Placeholder for effect that trigger on eating that aren't tied to reagents.
- proc/On_Consume()
- if(!usr) return
- if(!reagents.total_volume)
- usr.visible_message("[usr] finishes eating [src].","You finish eating [src].")
- usr.drop_from_inventory(src) //so icons update :[
-
- if(trash)
- if(ispath(trash,/obj/item))
- var/obj/item/TrashItem = new trash(usr)
- usr.put_in_hands(TrashItem)
- else if(istype(trash,/obj/item))
- usr.put_in_hands(trash)
- del(src)
- return
-
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
- user << "\red None of [src] left, oh no!"
- M.drop_from_inventory(src) //so icons update :[
- del(src)
- return 0
- if(istype(M, /mob/living/carbon))
- if(M == user) //If you're eating it yourself.
- var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
- if (fullness <= 50)
- M << "\red You hungrily chew out a piece of [src] and gobble it!"
- if (fullness > 50 && fullness <= 150)
- M << "\blue You hungrily begin to eat [src]."
- if (fullness > 150 && fullness <= 350)
- M << "\blue You take a bite of [src]."
- if (fullness > 350 && fullness <= 550)
- M << "\blue You unwillingly chew a bit of [src]."
- if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "\red You cannot force any more of [src] to go down your throat."
- return 0
- else
- if(!istype(M, /mob/living/carbon/metroid)) //If you're feeding it to someone else.
- var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
- if (fullness <= (550 * (1 + M.overeatduration / 1000)))
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- else
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
- return 0
-
- if(!do_mob(user, M)) return
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- else
- user << "This creature does not seem to have a mouth!"
- return
-
- if(reagents) //Handle ingestion of the reagent.
- playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- if(reagents.total_volume > bitesize)
- /*
- * I totally cannot understand what this code supposed to do.
- * Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
- var/temp_bitesize = max(reagents.total_volume /2, bitesize)
- reagents.trans_to(M, temp_bitesize)
- */
- reagents.trans_to(M, bitesize)
- else
- reagents.trans_to(M, reagents.total_volume)
- bitecount++
- On_Consume()
- return 1
-
- return 0
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
- afterattack(obj/target, mob/user , flag)
- return
-
- examine()
- set src in view()
- ..()
- if (!(usr in range(0)) && usr!=src.loc) return
- if (bitecount==0)
- return
- else if (bitecount==1)
- usr << "\blue \The [src] was bitten by someone!"
- else if (bitecount<=3)
- usr << "\blue \The [src] was bitten [bitecount] times!"
- else
- usr << "\blue \The [src] was bitten multiple times!"
-
-/obj/item/weapon/reagent_containers/food/snacks
- var/slice_path
- var/slices_num
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if((slices_num <= 0 || !slices_num) || !slice_path)
- return 1
- var/inaccurate = 0
- if( \
- istype(W, /obj/item/weapon/kitchenknife) || \
- istype(W, /obj/item/weapon/butch) || \
- istype(W, /obj/item/weapon/scalpel) || \
- istype(W, /obj/item/weapon/kitchen/utensil/knife) \
- )
- else if( \
- istype(W, /obj/item/weapon/circular_saw) || \
- istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \
- istype(W, /obj/item/weapon/melee/energy/blade) || \
- istype(W, /obj/item/weapon/shovel) || \
- istype(W, /obj/item/weapon/hatchet) \
- )
- inaccurate = 1
- else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
- user << "\red You slip [W] inside [src]."
- user.u_equip(W)
- if ((user.client && user.s_active != src))
- user.client.screen -= W
- W.dropped(user)
- add_fingerprint(user)
- contents += W
- return
- else
- return 1
- if ( \
- !isturf(src.loc) || \
- !(locate(/obj/structure/table) in src.loc) && \
- !(locate(/obj/machinery/optable) in src.loc) && \
- !(locate(/obj/item/weapon/tray) in src.loc) \
- )
- user << "\red You cannot slice [src] here! You need a table or at least a tray to do it."
- return 1
- var/slices_lost = 0
- if (!inaccurate)
- user.visible_message( \
- "\blue [user] slices \the [src]!", \
- "\blue You slice \the [src]!" \
- )
- else
- user.visible_message( \
- "\blue [user] inaccurately slices \the [src] with [W]!", \
- "\blue You inaccurately slice \the [src] with your [W]!" \
- )
- slices_lost = rand(1,min(1,round(slices_num/2)))
- var/reagents_per_slice = reagents.total_volume/slices_num
- for(var/i=1 to (slices_num-slices_lost))
- var/obj/slice = new slice_path (src.loc)
- reagents.trans_to(slice,reagents_per_slice)
- del(src)
- return
-
- Del()
- if(contents)
- for(var/atom/movable/something in contents)
- something.loc = get_turf(src)
- ..()
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// FOOD END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food/drinks
- name = "drink"
- desc = "yummy"
- icon = 'icons/obj/drinks.dmi'
- icon_state = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
- possible_transfer_amounts = list(5,10,25)
- volume = 50
-
- on_reagent_change()
- if (gulp_size < 5) gulp_size = 5
- else gulp_size = max(round(reagents.total_volume / 5), 5)
-
- attack_self(mob/user as mob)
- return
-
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
- var/fillevel = gulp_size
-
- if(!R.total_volume || !R)
- user << "\red None of [src] left, oh no!"
- return 0
-
- if(M == user)
- M << "\blue You swallow a gulp of [src]."
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, gulp_size)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, gulp_size)
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = R.get_master_reagent_id()
- spawn(600)
- R.add_reagent(refill, fillevel)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
-
- return 0
-
-
- afterattack(obj/target, mob/user , flag)
-
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = reagents.get_master_reagent_id()
- spawn(600)
- reagents.add_reagent(refill, trans)
-
- return
-
- examine()
- set src in view()
- ..()
- if (!(usr in range(0)) && usr!=src.loc) return
- if(!reagents || reagents.total_volume==0)
- usr << "\blue \The [src] is empty!"
- else if (reagents.total_volumeHas been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
-
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, reagents.total_volume)
- del(src)
- else
- del(src)
-
- return 1
-
- return 0
-
- afterattack(obj/target, mob/user , flag)
-
- if(target.is_open_container() == 1 && target.reagents)
- if(!target.reagents.total_volume)
- user << "\red [target] is empty. Cant dissolve pill."
- return
- user << "\blue You dissolve the pill in [target]"
- reagents.trans_to(target, reagents.total_volume)
- for(var/mob/O in viewers(2, user))
- O.show_message("\red [user] puts something in [target].", 1)
- spawn(5)
- del(src)
-
- return
-
-////////////////////////////////////////////////////////////////////////////////
-/// Pills. END
-////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////
-/// Subtypes.
-////////////////////////////////////////////////////////////////////////////////
-
-//Glasses
-/obj/item/weapon/reagent_containers/glass/bucket
- desc = "It's a bucket."
- name = "bucket"
- icon = 'icons/obj/janitor.dmi'
- icon_state = "bucket"
- item_state = "bucket"
- m_amt = 200
- g_amt = 0
- w_class = 3.0
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(10,20,30,50,70)
- volume = 70
- flags = FPRINT | OPENCONTAINER
-
- attackby(var/obj/D, mob/user as mob)
- if(isprox(D))
- user << "You add [D] to [src]."
- del(D)
- user.put_in_hands(new /obj/item/weapon/bucket_sensor)
- user.drop_from_inventory(src)
- del(src)
-
-/*
-/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
- flags = FPRINT
-*/
-
-/obj/item/weapon/reagent_containers/glass/dispenser
- name = "reagent glass"
- desc = "A reagent glass."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beaker0"
- amount_per_transfer_from_this = 10
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
- name = "reagent glass (surfactant)"
- icon_state = "liquid"
-
- New()
- ..()
- reagents.add_reagent("fluorosurfactant", 20)
-
-/obj/item/weapon/reagent_containers/glass/beaker
- name = "beaker"
- desc = "A beaker. Can hold up to 50 units."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beaker0"
- item_state = "beaker"
- m_amt = 0
- g_amt = 500
-
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- update_icon()
- overlays = null
-
- if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10", src.layer)
-
- 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.icon += mix_color_from_reagents(reagents.reagent_list)
- overlays += filling
-
-/obj/item/weapon/reagent_containers/glass/beaker/large
- name = "large beaker"
- desc = "A large beaker. Can hold up to 100 units."
- icon_state = "beakerlarge"
- g_amt = 5000
- volume = 100
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50,100)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
-
-/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/bottle
- name = "bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = null
- item_state = "atoxinbottle"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- volume = 30
-
- New()
- ..()
- if(!icon_state)
- icon_state = "bottle[rand(1,20)]"
-
-/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
- name = "inaprovaline bottle"
- desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle16"
-
- New()
- ..()
- reagents.add_reagent("inaprovaline", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/toxin
- name = "toxin bottle"
- desc = "A small bottle of toxins. Do not drink, it is poisonous."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle12"
-
- New()
- ..()
- reagents.add_reagent("toxin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/cyanide
- name = "cyanide bottle"
- desc = "A small bottle of cyanide. Bitter almonds?"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle12"
-
- New()
- ..()
- reagents.add_reagent("cyanide", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/stoxin
- name = "sleep-toxin bottle"
- desc = "A small bottle of sleep toxins. Just the fumes make you sleepy."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("stoxin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
- name = "Chloral Hydrate Bottle"
- desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 15) //Intentionally low since it is so strong. Still enough to knock someone out.
-
-/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
- name = "anti-toxin bottle"
- desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle17"
-
- New()
- ..()
- reagents.add_reagent("anti_toxin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/ammonia
- name = "ammonia bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle20"
-
- New()
- ..()
- reagents.add_reagent("ammonia", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
- name = "diethylamine bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle17"
-
- New()
- ..()
- reagents.add_reagent("diethylamine", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/flu_virion
- name = "Flu virion culture bottle"
- desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/flu(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat
- name = "Pierrot's Throat culture bottle"
- desc = "A small bottle. Contains H0NI<42 virion culture in synthblood medium."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/pierrot_throat(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/cold
- name = "Rhinovirus culture bottle"
- desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/cold(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/retrovirus
- name = "Retrovirus culture bottle"
- desc = "A small bottle. Contains a retrovirus culture in a synthblood medium."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/dna_retrovirus(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/gbs
- name = "GBS culture bottle"
- desc = "A small bottle. Contains Gravitokinetic Bipotential SADS+ culture in synthblood medium."//Or simply - General BullShit
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- amount_per_transfer_from_this = 5
-
- New()
- var/datum/reagents/R = new/datum/reagents(20)
- reagents = R
- R.my_atom = src
- var/datum/disease/F = new /datum/disease/gbs
- var/list/data = list("virus"= F)
- R.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/fake_gbs
- name = "GBS culture bottle"
- desc = "A small bottle. Contains Gravitokinetic Bipotential SADS- culture in synthblood medium."//Or simply - General BullShit
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/fake_gbs(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-/*
-/obj/item/weapon/reagent_containers/glass/bottle/rhumba_beat
- name = "Rhumba Beat culture bottle"
- desc = "A small bottle. Contains The Rhumba Beat culture in synthblood medium."//Or simply - General BullShit
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- amount_per_transfer_from_this = 5
-
- New()
- var/datum/reagents/R = new/datum/reagents(20)
- reagents = R
- R.my_atom = src
- var/datum/disease/F = new /datum/disease/rhumba_beat
- var/list/data = list("virus"= F)
- R.add_reagent("blood", 20, data)
-*/
-
-/obj/item/weapon/reagent_containers/glass/bottle/brainrot
- name = "Brainrot culture bottle"
- desc = "A small bottle. Contains Cryptococcus Cosmosis culture in synthblood medium."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/brainrot(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/magnitis
- name = "Magnitis culture bottle"
- desc = "A small bottle. Contains a small dosage of Fukkos Miracos."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/magnitis(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/wizarditis
- name = "Wizarditis culture bottle"
- desc = "A small bottle. Contains a sample of Rincewindus Vulgaris."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- var/datum/disease/F = new /datum/disease/wizarditis(0)
- var/list/data = list("viruses"= list(F))
- reagents.add_reagent("blood", 20, data)
-
-/obj/item/weapon/reagent_containers/glass/bottle/pacid
- name = "Polytrinic Acid Bottle"
- desc = "A small bottle. Contains a small amount of Polytrinic Acid"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle17"
- New()
- ..()
- reagents.add_reagent("pacid", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
- name = "Adminordrazine Bottle"
- desc = "A small bottle. Contains the liquid essence of the gods."
- icon = 'icons/obj/drinks.dmi'
- icon_state = "holyflask"
- New()
- ..()
- reagents.add_reagent("adminordrazine", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
- name = "Capsaicin Bottle"
- desc = "A small bottle. Contains hot sauce."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle3"
- New()
- ..()
- reagents.add_reagent("capsaicin", 30)
-
-/obj/item/weapon/reagent_containers/glass/bottle/frostoil
- name = "Frost Oil Bottle"
- desc = "A small bottle. Contains cold sauce."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle17"
- New()
- ..()
- reagents.add_reagent("frostoil", 30)
-
-/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
- name = "beaker"
- desc = "A beaker. Can hold up to 50 units."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beaker0"
- item_state = "beaker"
-
- New()
- ..()
- reagents.add_reagent("cryoxadone", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup
- desc = "A golden cup"
- name = "golden cup"
- icon_state = "golden_cup"
- item_state = "" //nope :(
- w_class = 4
- force = 14
- throwforce = 10
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = null
- volume = 150
- flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011
- desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
-
-//Syringes
-/obj/item/weapon/reagent_containers/syringe/robot/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/robot/inoprovaline
- name = "Syringe (inoprovaline)"
- desc = "Contains inaprovaline - used to stabilize patients."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/robot/mixed
- name = "Syringe (mixed)"
- desc = "Contains inaprovaline & anti-toxins."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 7)
- reagents.add_reagent("anti_toxin", 8)
- mode = SYRINGE_INJECT
- update_icon()
-
-/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/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/antiviral
- name = "Syringe (spaceacillin)"
- desc = "Contains antiviral agents."
- New()
- ..()
- reagents.add_reagent("spaceacillin", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/ld50_syringe/choral
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 50)
- mode = SYRINGE_INJECT
- update_icon()
-
-////////////////////////////////////////////////////////////////////////////////
-/// Concrete food moved to code/modules/food/food.dm
-/////////////////////////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////Condiments
-//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
-// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
-// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
-
-/obj/item/weapon/reagent_containers/food/condiment //Food items that aren't eaten normally and leave an empty container behind.
- name = "Condiment Container"
- desc = "Just your average condiment container."
- icon = 'icons/obj/food.dmi'
- icon_state = "emptycondiment"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
- possible_transfer_amounts = list(1,5,10)
- volume = 50
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
-
- if(!R || !R.total_volume)
- user << "\red None of [src] left, oh no!"
- return 0
-
- if(M == user)
- M << "\blue You swallow some of contents of the [src]."
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
-
-
- log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- return 0
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- //Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red you can't add anymore to [target]."
- return
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the condiment to [target]."
-
- on_reagent_change()
- if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall")
- return
- 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"
- if("capsaicin")
- name = "Hotsauce"
- desc = "You can almost TASTE the stomach ulcers now!"
- icon_state = "hotsauce"
- if("enzyme")
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
- if("soysauce")
- name = "Soy Sauce"
- desc = "A salty soy-based flavoring."
- icon_state = "soysauce"
- if("frostoil")
- name = "Coldsauce"
- desc = "Leaves the tongue numb in its passage."
- icon_state = "coldsauce"
- if("sodiumchloride")
- name = "Salt Shaker"
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshaker"
- if("blackpepper")
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- if("cornoil")
- name = "Corn Oil"
- desc = "A delicious oil used in cooking. Made from corn."
- icon_state = "oliveoil"
- if("sugar")
- name = "Sugar"
- desc = "Tastey space sugar!"
- 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"
- else
- icon_state = "emptycondiment"
- name = "Condiment Bottle"
- desc = "An empty condiment bottle."
- 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/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"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
- New()
- ..()
- reagents.add_reagent("sodiumchloride", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/peppermill
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
- New()
- ..()
- reagents.add_reagent("blackpepper", 20)
-
-
-///////////////////////////////////////////////Drinks
-//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
-// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
-// Formatting is the same as food.
-
-/obj/item/weapon/reagent_containers/food/drinks/milk
- name = "Space Milk"
- desc = "It's milk. White and nutritious goodness!"
- icon_state = "milk"
- item_state = "carton"
- New()
- ..()
- reagents.add_reagent("milk", 50)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/soymilk
- name = "SoyMilk"
- desc = "It's soy milk. White and nutritious goodness!"
- icon_state = "soymilk"
- item_state = "carton"
- New()
- ..()
- reagents.add_reagent("soymilk", 50)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/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"
- New()
- ..()
- reagents.add_reagent("coffee", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/tea
- name = "Duke Purple Tea"
- desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
- icon_state = "tea"
- item_state = "coffee"
- New()
- ..()
- reagents.add_reagent("tea", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/ice
- name = "Ice Cup"
- desc = "Careful, cold ice, do not chew."
- icon_state = "coffee"
- New()
- ..()
- reagents.add_reagent("ice", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
- name = "Dutch Hot Coco"
- desc = "Made in Space South America."
- icon_state = "tea"
- item_state = "coffee"
- New()
- ..()
- reagents.add_reagent("hot_coco", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/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"
- New()
- ..()
- reagents.add_reagent("dry_ramen", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/cola
- name = "Space Cola"
- desc = "Cola. in space."
- icon_state = "cola"
- New()
- ..()
- reagents.add_reagent("cola", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/beer
- name = "Space Beer"
- desc = "Beer. In space."
- icon_state = "beer"
- New()
- ..()
- reagents.add_reagent("beer", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/ale
- name = "Magm-Ale"
- desc = "A true dorf's drink of choice."
- icon_state = "alebottle"
- item_state = "beer"
- New()
- ..()
- reagents.add_reagent("ale", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind
- name = "Space Mountain Wind"
- desc = "Blows right through you like a space wind."
- icon_state = "space_mountain_wind"
- New()
- ..()
- reagents.add_reagent("spacemountainwind", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/thirteenloko
- name = "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 Responsably."
- icon_state = "thirteen_loko"
- New()
- ..()
- reagents.add_reagent("thirteenloko", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/dr_gibb
- name = "Dr. Gibb"
- desc = "A delicious mixture of 42 different flavors."
- icon_state = "dr_gibb"
- New()
- ..()
- reagents.add_reagent("dr_gibb", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/starkist
- name = "Star-kist"
- desc = "The taste of a star in liquid form. And, a bit of tuna...?"
- icon_state = "starkist"
- New()
- ..()
- reagents.add_reagent("cola", 15)
- reagents.add_reagent("orangejuice", 15)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/space_up
- name = "Space-Up"
- desc = "Tastes like a hull breach in your mouth."
- icon_state = "space-up"
- New()
- ..()
- reagents.add_reagent("space_up", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-/obj/item/weapon/reagent_containers/food/drinks/lemon_lime
- name = "Lemon-Lime"
- desc = "You wanted ORANGE. It gave you Lemon Lime."
- icon_state = "lemon-lime"
- New()
- ..()
- reagents.add_reagent("lemon_lime", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
-
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup
- name = "Paper Cup"
- desc = "A paper water cup."
- icon_state = "water_cup_e"
- possible_transfer_amounts = null
- volume = 10
- New()
- ..()
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
- on_reagent_change()
- if(reagents.total_volume)
- icon_state = "water_cup"
- else
- icon_state = "water_cup_e"
-
-///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
-//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
-//Bottles now weaken and break when smashed on people's heads. - Giacom
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle
- amount_per_transfer_from_this = 10
- volume = 100
- item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
- var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
- var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target as mob, mob/living/user as mob)
-
- //Creates a shattering noise and replaces the bottle with a broken_bottle
- user.drop_item()
- var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc)
- user.put_in_active_hand(B)
- if(prob(33))
- new/obj/item/weapon/shard(target.loc) // Create a glass shard at the target's location!
- B.icon_state = src.icon_state
-
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
-
- playsound(src, "shatter", 70, 1)
- user.put_in_active_hand(B)
- src.transfer_fingerprints_to(B)
-
- del(src)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target as mob, mob/living/user as mob)
-
- if(!target)
- return
-
- if(user.a_intent != "hurt" || !isGlass)
- return ..()
-
-
- force = 15 //Smashing bottles over someoen's head hurts.
-
- var/datum/organ/external/affecting = user.zone_sel.selecting //Find what the player is aiming at
-
- var/armor_block = 0 //Get the target's armour values for normal attack damage.
- var/armor_duration = 0 //The more force the bottle has, the longer the duration.
-
- //Calculating duration and calculating damage.
- if(ishuman(target))
-
- var/mob/living/carbon/human/H = target
- var/headarmor = 0 // Target's head armour
- armor_block = H.run_armor_check(affecting, "melee") // For normal attack damage
-
- //If they have a hat/helmet and the user is targeting their head.
- if(istype(H.head, /obj/item/clothing/head) && affecting == "head")
-
- // If their head has an armour value, assign headarmor to it, else give it 0.
- if(H.head.armor["melee"])
- headarmor = H.head.armor["melee"]
- else
- headarmor = 0
- else
- headarmor = 0
-
- //Calculate the weakening duration for the target.
- armor_duration = (duration - headarmor) + force
-
- else
- //Only humans can have armour, right?
- armor_block = target.run_armor_check(affecting, "melee")
- if(affecting == "head")
- armor_duration = duration + force
- armor_duration /= 10
-
- //Apply the damage!
- target.apply_damage(force, BRUTE, affecting, armor_block)
-
- // You are going to knock someone out for longer if they are not wearing a helmet.
- if(affecting == "head" && istype(target, /mob/living/carbon/))
-
- //Display an attack message.
- for(var/mob/O in viewers(user, null))
- if(target != user) O.show_message(text("\red [target] has been hit over the head with a bottle of [src.name], by [user]!"), 1)
- else O.show_message(text("\red [target] hit himself with a bottle of [src.name] on the head!"), 1)
- //Weaken the target for the duration that we calculated and divide it by 5.
- if(armor_duration)
- target.apply_effect(min(armor_duration, 10) , WEAKEN) // Never weaken more than a flash!
-
- else
- //Default attack message and don't weaken the target.
- for(var/mob/O in viewers(user, null))
- if(target != user) O.show_message(text("\red [target] has been attacked with a bottle of [src.name], by [user]!"), 1)
- else O.show_message(text("\red [target] has attacked himself with a bottle of [src.name]!"), 1)
-
- //Attack logs
- user.attack_log += text("\[[time_stamp()]\] Has attacked [target.name] ([target.ckey]) with a bottle!")
- target.attack_log += text("\[[time_stamp()]\] Has been smashed with a bottle by [user.name] ([user.ckey])")
- log_attack("[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])")
-
- //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
- if(src.reagents)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\blue The contents of the [src] splashes all over [target]!"), 1)
- src.reagents.reaction(target, TOUCH)
-
- //Finally, smash the bottle. This kills (del) the bottle.
- src.smash(target, user)
-
- return
-
-//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'
- icon_state = "broken_bottle"
- force = 9.0
- throwforce = 5.0
- throw_speed = 3
- throw_range = 5
- item_state = "beer"
- //item_state - Need to find a bottle sprite
- attack_verb = list("stabbed", "slashed", "attacked")
- var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
-
-
-
-
-/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"
- 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"
- New()
- ..()
- reagents.add_reagent("whiskey", 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- New()
- ..()
- reagents.add_reagent("wine", 100)
-
-//////////////////////////JUICES AND STUFF ///////////////////////
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
- name = "Orange Juice"
- desc = "Full of vitamins and deliciousness!"
- icon_state = "orangejuice"
- item_state = "carton"
- isGlass = 0
- New()
- ..()
- reagents.add_reagent("orangejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
- name = "Milk Cream"
- desc = "It's cream. Made from milk. What else did you think you'd find in there?"
- icon_state = "cream"
- item_state = "carton"
- isGlass = 0
- New()
- ..()
- reagents.add_reagent("cream", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
- name = "Tomato Juice"
- desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
- icon_state = "tomatojuice"
- item_state = "carton"
- isGlass = 0
- New()
- ..()
- reagents.add_reagent("tomatojuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
- name = "Lime Juice"
- desc = "Sweet-sour goodness."
- icon_state = "limejuice"
- item_state = "carton"
- isGlass = 0
- New()
- ..()
- reagents.add_reagent("limejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/tonic
- name = "T-Borg's Tonic Water"
- desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
- icon_state = "tonic"
- New()
- ..()
- reagents.add_reagent("tonic", 50)
-
-/obj/item/weapon/reagent_containers/food/drinks/sodawater
- name = "Soda Water"
- desc = "A can of soda water. Why not make a scotch and soda?"
- icon_state = "sodawater"
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
-
-
-//Pills
-/obj/item/weapon/reagent_containers/pill/antitox
- name = "Anti-toxins pill"
- desc = "Neutralizes many common toxins."
- icon_state = "pill17"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 50)
-
-/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/cyanide
- name = "Cyanide pill"
- desc = "Don't swallow this."
- icon_state = "pill5"
- 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/stox
- name = "Sleeping pill"
- desc = "Commonly used to treat insomnia."
- icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("stoxin", 30)
-
-/obj/item/weapon/reagent_containers/pill/kelotane
- name = "Kelotane pill"
- desc = "Used to treat burns."
- icon_state = "pill11"
- New()
- ..()
- reagents.add_reagent("kelotane", 30)
-
-/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/dexalin
- name = "Dexalin pill"
- desc = "Used to treat oxygen deprivation."
- icon_state = "pill16"
- New()
- ..()
- reagents.add_reagent("dexalin", 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", 30)
-
-//Dispensers
-/obj/structure/reagent_dispensers/watertank
- name = "watertank"
- desc = "A watertank"
- icon = 'icons/obj/objects.dmi'
- icon_state = "watertank"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("water",1000)
-
-/obj/structure/reagent_dispensers/fueltank
- name = "fueltank"
- desc = "A fueltank"
- icon = 'icons/obj/objects.dmi'
- icon_state = "weldtank"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("fuel",1000)
-
-
- bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
- explosion(src.loc,-1,0,2)
- if(src)
- del(src)
-
-
-
- blob_act()
- explosion(src.loc,0,1,5,7,10)
- if(src)
- del(src)
-
- ex_act()
- explosion(src.loc,-1,0,2)
- if(src)
- del(src)
-
-/obj/structure/reagent_dispensers/peppertank
- name = "Pepper Spray Refiller"
- desc = "Refill pepper spray canisters."
- icon = 'icons/obj/objects.dmi'
- icon_state = "peppertank"
- anchored = 1
- density = 0
- amount_per_transfer_from_this = 45
- New()
- ..()
- reagents.add_reagent("condensedcapsaicin",1000)
-
-
-/obj/structure/reagent_dispensers/water_cooler
- name = "Water-Cooler"
- desc = "A machine that dispenses water to drink"
- amount_per_transfer_from_this = 5
- icon = 'icons/obj/vending.dmi'
- icon_state = "water_cooler"
- possible_transfer_amounts = null
- anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
-
-
-/obj/structure/reagent_dispensers/beerkeg
- name = "beer keg"
- desc = "A beer keg"
- icon = 'icons/obj/objects.dmi'
- icon_state = "beertankTEMP"
- amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("beer",1000)
-
-/obj/structure/reagent_dispensers/beerkeg/blob_act()
- explosion(src.loc,0,3,5,7,10)
- del(src)
-
-
-//////////////////////////drinkingglass and shaker//
-//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
-// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
-// icon states.
-
-/obj/item/weapon/reagent_containers/food/drinks/shaker
- name = "Shaker"
- desc = "A metal shaker to mix drinks in."
- icon_state = "shaker"
- amount_per_transfer_from_this = 10
- volume = 100
-
-/obj/item/weapon/reagent_containers/food/drinks/flask
- name = "Captain's Flask"
- desc = "A metal flask belonging to the captain"
- icon_state = "flask"
- volume = 60
-
-/obj/item/weapon/reagent_containers/food/drinks/britcup
- name = "cup"
- desc = "A cup with the british flag emblazoned on it."
- icon_state = "britcup"
- volume = 30
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass
- name = "glass"
- desc = "Your standard drinking glass."
- icon_state = "glass_empty"
- amount_per_transfer_from_this = 10
- volume = 50
-
- on_reagent_change()
- /*if(reagents.reagent_list.len > 1 )
- icon_state = "glass_brown"
- name = "Glass of Hooch"
- desc = "Two or more drinks, mixed together."*/
- /*else if(reagents.reagent_list.len == 1)
- for(var/datum/reagent/R in reagents.reagent_list)
- switch(R.id)*/
- if (reagents.reagent_list.len > 0)
- //mrid = R.get_master_reagent_id()
- switch(reagents.get_master_reagent_id())
- if("beer")
- icon_state = "beerglass"
- name = "Beer glass"
- desc = "A freezing pint of beer"
- if("beer2")
- icon_state = "beerglass"
- name = "Beer glass"
- desc = "A freezing pint of beer"
- if("ale")
- icon_state = "aleglass"
- name = "Ale glass"
- desc = "A freezing pint of delicious Ale"
- if("milk")
- icon_state = "glass_white"
- name = "Glass of milk"
- desc = "White and nutritious goodness!"
- if("cream")
- icon_state = "glass_white"
- name = "Glass of cream"
- desc = "Ewwww..."
- if("chocolate")
- icon_state = "chocolateglass"
- name = "Glass of chocolate"
- desc = "Tasty"
- if("lemon")
- icon_state = "lemonglass"
- name = "Glass of lemon"
- desc = "Sour..."
- if("cola")
- icon_state = "glass_brown"
- name = "Glass of Space Cola"
- desc = "A glass of refreshing Space Cola"
- if("nuka_cola")
- icon_state = "nuka_colaglass"
- name = "Nuka Cola"
- desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
- if("orangejuice")
- icon_state = "glass_orange"
- name = "Glass of Orange juice"
- desc = "Vitamins! Yay!"
- if("tomatojuice")
- icon_state = "glass_red"
- name = "Glass of Tomato juice"
- desc = "Are you sure this is tomato juice?"
- if("blood")
- icon_state = "glass_red"
- name = "Glass of Tomato juice"
- desc = "Are you sure this is tomato juice?"
- if("limejuice")
- icon_state = "glass_green"
- name = "Glass of Lime juice"
- desc = "A glass of sweet-sour lime juice."
- if("whiskey")
- icon_state = "whiskeyglass"
- name = "Glass of whiskey"
- desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
- if("gin")
- icon_state = "ginvodkaglass"
- name = "Glass of gin"
- desc = "A crystal clear glass of Griffeater gin."
- if("vodka")
- icon_state = "ginvodkaglass"
- name = "Glass of vodka"
- desc = "The glass contain wodka. Xynta."
- if("goldschlager")
- icon_state = "ginvodkaglass"
- name = "Glass of goldschlager"
- desc = "100 proof that teen girls will drink anything with gold in it."
- if("wine")
- icon_state = "wineglass"
- name = "Glass of wine"
- desc = "A very classy looking drink."
- if("cognac")
- icon_state = "cognacglass"
- name = "Glass of cognac"
- desc = "Damn, you feel like some kind of French aristocrat just by holding this."
- if ("kahlua")
- icon_state = "kahluaglass"
- name = "Glass of RR coffee Liquor"
- desc = "DAMN, THIS THING LOOKS ROBUST"
- if("vermouth")
- icon_state = "vermouthglass"
- name = "Glass of Vermouth"
- desc = "You wonder why you're even drinking this straight."
- if("tequilla")
- icon_state = "tequillaglass"
- name = "Glass of Tequilla"
- desc = "Now all that's missing is the weird colored shades!"
- if("patron")
- icon_state = "patronglass"
- name = "Glass of Patron"
- desc = "Drinking patron in the bar, with all the subpar ladies."
- if("rum")
- icon_state = "rumglass"
- name = "Glass of Rum"
- desc = "Now you want to Pray for a pirate suit, don't you?"
- if("gintonic")
- icon_state = "gintonicglass"
- name = "Gin and Tonic"
- desc = "A mild but still great cocktail. Drink up, like a true Englishman."
- if("whiskeycola")
- icon_state = "whiskeycolaglass"
- name = "Whiskey Cola"
- desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
- if("whiterussian")
- icon_state = "whiterussianglass"
- name = "White Russian"
- desc = "A very nice looking drink. But that's just, like, your opinion, man."
- if("screwdrivercocktail")
- icon_state = "screwdriverglass"
- name = "Screwdriver"
- desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
- if("bloodymary")
- icon_state = "bloodymaryglass"
- name = "Bloody Mary"
- desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
- if("martini")
- icon_state = "martiniglass"
- name = "Classic Martini"
- desc = "Damn, the bartender even stirred it, not shook it."
- if("vodkamartini")
- icon_state = "martiniglass"
- name = "Vodka martini"
- desc ="A bastardisation of the classic martini. Still great."
- if("gargleblaster")
- icon_state = "gargleblasterglass"
- name = "Pan-Galactic Gargle Blaster"
- desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
- if("bravebull")
- icon_state = "bravebullglass"
- name = "Brave Bull"
- desc = "Tequilla and Coffee liquor, brought together in a mouthwatering mixture. Drink up."
- if("tequillasunrise")
- icon_state = "tequillasunriseglass"
- name = "Tequilla Sunrise"
- desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
- if("toxinsspecial")
- icon_state = "toxinsspecialglass"
- name = "Toxins Special"
- desc = "Whoah, this thing is on FIRE"
- if("beepskysmash")
- icon_state = "beepskysmashglass"
- name = "Beepsky Smash"
- desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
- if("doctorsdelight")
- icon_state = "doctorsdelightglass"
- name = "Doctor's Delight"
- desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
- if("manlydorf")
- icon_state = "manlydorfglass"
- name = "The Manly Dorf"
- desc = "A manly concotion made from Ale and Beer. Intended for true men only."
- if("irishcream")
- icon_state = "irishcreamglass"
- name = "Irish Cream"
- desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
- if("cubalibre")
- icon_state = "cubalibreglass"
- name = "Cuba Libre"
- desc = "A classic mix of rum and cola."
- if("b52")
- icon_state = "b52glass"
- name = "B-52"
- desc = "Kahlua, Irish Cream, and congac. You will get bombed."
- if("atomicbomb")
- icon_state = "atomicbombglass"
- name = "Atomic Bomb"
- desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
- if("longislandicedtea")
- icon_state = "longislandicedteaglass"
- name = "Long Island Iced Tea"
- desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- if("threemileisland")
- icon_state = "threemileislandglass"
- name = "Three Mile Island Ice Tea"
- desc = "A glass of this is sure to prevent a meltdown."
- if("margarita")
- icon_state = "margaritaglass"
- name = "Margarita"
- desc = "On the rocks with salt on the rim. Arriba~!"
- if("blackrussian")
- icon_state = "blackrussianglass"
- name = "Black Russian"
- desc = "For the lactose-intolerant. Still as classy as a White Russian."
- if("vodkatonic")
- icon_state = "vodkatonicglass"
- name = "Vodka and Tonic"
- desc = "For when a gin and tonic isn't russian enough."
- if("manhattan")
- icon_state = "manhattanglass"
- name = "Manhattan"
- desc = "The Detective's undercover drink of choice. He never could stomach gin..."
- if("manhattan_proj")
- icon_state = "proj_manhattanglass"
- name = "Manhattan Project"
- desc = "A scienitst drink of choice, for thinking how to blow up the station."
- if("ginfizz")
- icon_state = "ginfizzglass"
- name = "Gin Fizz"
- desc = "Refreshingly lemony, deliciously dry."
- if("irishcoffee")
- icon_state = "irishcoffeeglass"
- name = "Irish Coffee"
- desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
- if("hooch")
- icon_state = "glass_brown2"
- name = "Hooch"
- desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
- if("whiskeysoda")
- icon_state = "whiskeysodaglass2"
- name = "Whiskey Soda"
- desc = "Ultimate refreshment."
- if("tonic")
- icon_state = "glass_clear"
- name = "Glass of Tonic Water"
- desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
- if("sodawater")
- icon_state = "glass_clear"
- name = "Glass of Soda Water"
- desc = "Soda water. Why not make a scotch and soda?"
- if("water")
- icon_state = "glass_clear"
- name = "Glass of Water"
- desc = "The father of all refreshments."
- if("spacemountainwind")
- icon_state = "Space_mountain_wind_glass"
- name = "Glass of Space Mountain Wind"
- desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
- if("thirteenloko")
- icon_state = "thirteen_loko_glass"
- name = "Glass of Thirteen Loko"
- desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass"
- if("dr_gibb")
- icon_state = "dr_gibb_glass"
- name = "Glass of Dr. Gibb"
- desc = "Dr. Gibb. Not as dangerous as the name might imply."
- if("space_up")
- icon_state = "space-up_glass"
- name = "Glass of Space-up"
- desc = "Space-up. It helps keep your cool."
- if("moonshine")
- icon_state = "glass_clear"
- name = "Moonshine"
- desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
- if("soymilk")
- icon_state = "glass_white"
- name = "Glass of soy milk"
- desc = "White and nutritious soy goodness!"
- if("berryjuice")
- icon_state = "berryjuice"
- name = "Glass of berry juice"
- desc = "Berry juice. Or maybe its jam. Who cares?"
- if("poisonberryjuice")
- icon_state = "poisonberryjuice"
- name = "Glass of poison berry juice"
- desc = "A glass of deadly juice."
- if("carrotjuice")
- icon_state = "carrotjuice"
- name = "Glass of carrot juice"
- desc = "It is just like a carrot but without crunching."
- if("banana")
- icon_state = "banana"
- name = "Glass of banana juice"
- desc = "The raw essence of a banana. HONK"
- if("bahama_mama")
- icon_state = "bahama_mama"
- name = "Bahama Mama"
- desc = "Tropic cocktail"
- if("singulo")
- icon_state = "singulo"
- name = "Singulo"
- desc = "A blue-space beverage."
- if("alliescocktail")
- icon_state = "alliescocktail"
- name = "Allies cocktail"
- desc = "A drink made from your allies."
- if("antifreeze")
- icon_state = "antifreeze"
- name = "Anti-freeze"
- desc = "The ultimate refreshment."
- if("barefoot")
- icon_state = "b&p"
- name = "Barefoot"
- desc = "Barefoot and pregnant"
- if("demonsblood")
- icon_state = "demonsblood"
- name = "Demons Blood"
- desc = "Just looking at this thing makes the hair at the back of your neck stand up."
- if("booger")
- icon_state = "booger"
- name = "Booger"
- desc = "Ewww..."
- if("snowwhite")
- icon_state = "snowwhite"
- name = "Snow White"
- desc = "A cold refreshment."
- if("aloe")
- icon_state = "aloe"
- name = "Aloe"
- desc = "Very, very, very good."
- if("andalusia")
- icon_state = "andalusia"
- name = "Andalusia"
- desc = "A nice, strange named drink."
- if("sbiten")
- icon_state = "sbitenglass"
- name = "Sbiten"
- desc = "A spicy mix of Vodka and Spice. Very hot."
- if("red_mead")
- icon_state = "red_meadglass"
- name = "Red Mead"
- desc = "A True Vikings Beverage, though its color is strange."
- if("mead")
- icon_state = "meadglass"
- name = "Mead"
- desc = "A Vikings Beverage, though a cheap one."
- if("iced_beer")
- icon_state = "iced_beerglass"
- name = "Iced Beer"
- desc = "A beer so frosty, the air around it freezes."
- if("grog")
- icon_state = "grogglass"
- name = "Grog"
- desc = "A fine and cepa drink for Space."
- if("soy_latte")
- icon_state = "soy_latte"
- name = "Soy Latte"
- desc = "A nice and refrshing beverage while you are reading."
- if("cafe_latte")
- icon_state = "cafe_latte"
- name = "Cafe Latte"
- desc = "A nice, strong and refreshing beverage while you are reading."
- if("acidspit")
- icon_state = "acidspitglass"
- name = "Acid Spit"
- desc = "A drink from Nanotrasen. Made from live aliens."
- if("amasec")
- icon_state = "amasecglass"
- name = "Amasec"
- desc = "Always handy before COMBAT!!!"
- if("neurotoxin")
- icon_state = "neurotoxinglass"
- name = "Neurotoxin"
- desc = "A drink that is guaranteed to knock you silly."
- if("hippiesdelight")
- icon_state = "hippiesdelightglass"
- name = "Hippie's Delight"
- desc = "A drink enjoyed by people during the 1960's."
- if("bananahonk")
- icon_state = "bananahonkglass"
- name = "Banana Honk"
- desc = "A drink from Clown Heaven."
- if("silencer")
- icon_state = "silencerglass"
- name = "Silencer"
- desc = "A drink from mime Heaven."
- if("nothing")
- icon_state = "nothing"
- name = "Nothing"
- desc = "Absolutely nothing."
- if("devilskiss")
- icon_state = "devilskiss"
- name = "Devils Kiss"
- desc = "Creepy time!"
- if("changelingsting")
- icon_state = "changelingsting"
- name = "Changeling Sting"
- desc = "A stingy drink."
- if("irishcarbomb")
- icon_state = "irishcarbomb"
- name = "Irish Car Bomb"
- desc = "An irish car bomb."
- if("syndicatebomb")
- icon_state = "syndicatebomb"
- name = "Syndicate Bomb"
- desc = "A syndicate bomb."
- if("erikasurprise")
- icon_state = "erikasurprise"
- name = "Erika Surprise"
- desc = "The surprise is, it's green!"
- if("driestmartini")
- icon_state = "driestmartiniglass"
- name = "Driest Martini"
- desc = "Only for the experienced. You think you see sand floating in the glass."
- if("ice")
- icon_state = "iceglass"
- name = "Glass of ice"
- desc = "Generally, you're supposed to put something else in there too..."
- if("icecoffee")
- icon_state = "icedcoffeeglass"
- name = "Iced Coffee"
- desc = "A drink to perk you up and refresh you!"
- if("coffee")
- icon_state = "glass_brown"
- name = "Glass of coffee"
- desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
- if("bilk")
- icon_state = "glass_brown"
- name = "Glass of bilk"
- desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
- if("fuel")
- icon_state = "dr_gibb_glass"
- name = "Glass of welder fuel"
- desc = "Unless you are an industrial tool, this is probably not safe for consumption."
- else
- icon_state ="glass_brown"
- name = "Glass of ..what?"
- desc = "You can't really tell what this is."
- else
- icon_state = "glass_empty"
- name = "Drinking glass"
- desc = "Your standard drinking glass"
- return
-
-// for /obj/machinery/vending/sovietsoda
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
- on_reagent_change()
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola
- New()
- ..()
- reagents.add_reagent("cola", 50)
- on_reagent_change()
-
-///jar
-
-/obj/item/weapon/reagent_containers/food/drinks/jar
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- icon_state = "jar"
- item_state = "beaker"
- New()
- ..()
- reagents.add_reagent("metroid", 50)
-
- on_reagent_change()
- if (reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("metroid")
- icon_state = "jar_metroid"
- name = "metroid jam"
- desc = "A jar of metroid jam. Delicious!"
- else
- icon_state ="jar_what"
- name = "jar of something"
- desc = "You can't really tell what this is."
- else
- icon_state = "jar"
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- return
diff --git a/code/modules/chemical/grenade_launcher.dm b/code/modules/chemical/grenade_launcher.dm
new file mode 100644
index 00000000000..0ee9962e908
--- /dev/null
+++ b/code/modules/chemical/grenade_launcher.dm
@@ -0,0 +1,66 @@
+
+
+/obj/item/weapon/gun/grenadelauncher
+ name = "grenade launcher"
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "riotgun"
+ item_state = "riotgun"
+ w_class = 4.0
+ throw_speed = 2
+ throw_range = 10
+ force = 5.0
+ var/list/grenades = new/list()
+ var/max_grenades = 3
+ m_amt = 2000
+
+ examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\icon [src] Grenade launcher:"
+ usr << "\blue [grenades] / [max_grenades] Grenades."
+
+ attackby(obj/item/I as obj, mob/user as mob)
+
+ if((istype(I, /obj/item/weapon/grenade)))
+ if(grenades.len < max_grenades)
+ user.drop_item()
+ I.loc = src
+ grenades += I
+ user << "\blue You put the grenade in the grenade launcher."
+ user << "\blue [grenades.len] / [max_grenades] Grenades."
+ else
+ usr << "\red The grenade launcher cannot hold more grenades."
+
+ afterattack(obj/target, mob/user , flag)
+
+ if (istype(target, /obj/item/weapon/storage/backpack ))
+ return
+
+ else if (locate (/obj/structure/table, src.loc))
+ return
+
+ else if(target == user)
+ return
+
+ if(grenades.len)
+ spawn(0) fire_grenade(target,user)
+ else
+ usr << "\red The grenade launcher is empty."
+
+ proc
+ fire_grenade(atom/target, mob/user)
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] fired a grenade!", user), 1)
+ user << "\red You fire the grenade launcher!"
+ var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
+ grenades -= F
+ F.loc = user.loc
+ F.throw_at(target, 30, 2)
+ message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
+ log_game("[key_name_admin(user)] used a grenade ([src.name]).")
+ F.active = 1
+ F.icon_state = initial(icon_state) + "_active"
+ playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
+ spawn(15)
+ F.prime()
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_container/robodropper.dm b/code/modules/chemical/reagent_container/robodropper.dm
new file mode 100644
index 00000000000..e7663111950
--- /dev/null
+++ b/code/modules/chemical/reagent_container/robodropper.dm
@@ -0,0 +1,88 @@
+
+/obj/item/weapon/reagent_containers/robodropper
+ name = "Industrial Dropper"
+ desc = "A larger dropper. Transfers 10 units."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "dropper0"
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
+ volume = 10
+ var/filled = 0
+
+ afterattack(obj/target, mob/user , flag)
+ if(!target.reagents) return
+
+ if(filled)
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit.
+ user << "\red You cannot directly fill this object."
+ return
+
+
+ var/trans = 0
+
+ if(ismob(target))
+ 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.flags & MASKCOVERSEYES )
+ safe_thing = victim.wear_mask
+ if( victim.head )
+ if ( victim.head.flags & MASKCOVERSEYES )
+ safe_thing = victim.head
+ if(victim.glasses)
+ if ( !safe_thing )
+ safe_thing = victim.glasses
+
+ if(safe_thing)
+ if(!safe_thing.reagents)
+ safe_thing.create_reagents(100)
+ trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
+ spawn(5)
+ src.reagents.reaction(safe_thing, TOUCH)
+
+
+ user << "\blue You transfer [trans] units of the solution."
+ if (src.reagents.total_volume<=0)
+ filled = 0
+ icon_state = "dropper[filled]"
+ return
+
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
+ src.reagents.reaction(target, TOUCH)
+
+ trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You transfer [trans] units of the solution."
+ if (src.reagents.total_volume<=0)
+ filled = 0
+ icon_state = "dropper[filled]"
+
+ else
+
+ if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
+ user << "\red You cannot directly remove reagents from [target]."
+ return
+
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
+
+ user << "\blue You fill the dropper with [trans] units of the solution."
+
+ filled = 1
+ icon_state = "dropper[filled]"
+
+ return
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers.dm b/code/modules/chemical/reagent_containers.dm
new file mode 100644
index 00000000000..13d023336fc
--- /dev/null
+++ b/code/modules/chemical/reagent_containers.dm
@@ -0,0 +1,45 @@
+/obj/item/weapon/reagent_containers
+ name = "Container"
+ desc = "..."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = null
+ w_class = 1
+ var/amount_per_transfer_from_this = 5
+ var/possible_transfer_amounts = list(5,10,15,25,30)
+ var/volume = 30
+
+/obj/item/weapon/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in range(0)
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
+
+/obj/item/weapon/reagent_containers/New()
+ ..()
+ if (!possible_transfer_amounts)
+ src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
+ var/datum/reagents/R = new/datum/reagents(volume)
+ reagents = R
+ R.my_atom = src
+
+/obj/item/weapon/reagent_containers/attack_self(mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone)
+ return
+
+/obj/item/weapon/reagent_containers/attackby(obj/item/I as obj, mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag)
+ return
+
+/obj/item/weapon/reagent_containers/proc/reagentlist(var/obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills
+ var/data
+ if(snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries
+ for (var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind
+ data += "[R.id]([R.volume] units); " //Using IDs because SOME chemicals(I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
+ return data
+ else return "No reagents"
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/borghydro.dm b/code/modules/chemical/reagent_containers/borghydro.dm
new file mode 100644
index 00000000000..50fe47b800e
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/borghydro.dm
@@ -0,0 +1,93 @@
+
+
+/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
+ flags = FPRINT
+ var/mode = 1
+ var/charge_cost = 50
+ var/charge_tick = 0
+ var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
+
+ New()
+ ..()
+ processing_objects.Add(src)
+
+
+ Del()
+ processing_objects.Remove(src)
+ ..()
+
+ process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
+ charge_tick++
+ if(charge_tick < recharge_time) return 0
+ charge_tick = 0
+
+ if(isrobot(src.loc))
+ var/mob/living/silicon/robot/R = src.loc
+ if(R && R.cell)
+ if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
+ R.cell.use(charge_cost) //Take power from borg...
+ reagents.add_reagent("tricordrazine",5) //And fill hypo with reagent.
+ if(mode == 2 && reagents.total_volume < 30)
+ R.cell.use(charge_cost)
+ reagents.add_reagent("inaprovaline", 5)
+ if(mode == 3 && reagents.total_volume < 30)
+ R.cell.use(charge_cost)
+ reagents.add_reagent("spaceacillin", 5)
+ //update_icon()
+ return 1
+
+/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
+ if(!reagents.total_volume)
+ user << "\red The injector is empty."
+ return
+ if (!( istype(M, /mob) ))
+ return
+ if (reagents.total_volume)
+ user << "\blue You inject [M] with the injector."
+ M << "\red You feel a tiny prick!"
+
+ src.reagents.reaction(M, INGEST)
+ if(M.reagents)
+ var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
+ user << "\blue [trans] units injected. [reagents.total_volume] units remaining."
+ return
+
+/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
+ playsound(src.loc, 'pop.ogg', 50, 0) //Change the mode
+ if(mode == 1)
+ mode = 2
+ charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
+ reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
+ user << "\blue Synthesizer is now producing 'Inaprovaline'."
+ return
+ if(mode == 2)
+ mode = 3
+ charge_tick = 0
+ reagents.clear_reagents()
+ user << "\blue Synthesizer is now producing 'Spaceacillin'."
+ return
+ if(mode == 3)
+ mode = 1
+ charge_tick = 0
+ reagents.clear_reagents()
+ user << "\blue Synthesizer is now producing 'Tricordrazine'."
+ return
+
+/obj/item/weapon/reagent_containers/borghypo/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+
+ if(reagents && reagents.reagent_list.len)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "\blue It currently has [R.volume] units of [R.name] stored."
+ else
+ usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/dropper.dm b/code/modules/chemical/reagent_containers/dropper.dm
new file mode 100644
index 00000000000..fc18d449ebb
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/dropper.dm
@@ -0,0 +1,93 @@
+////////////////////////////////////////////////////////////////////////////////
+/// Droppers.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/dropper
+ name = "Dropper"
+ desc = "A dropper. Transfers 5 units."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "dropper0"
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = list(1,2,3,4,5)
+ volume = 5
+ var/filled = 0
+
+ afterattack(obj/target, mob/user , flag)
+ if(!target.reagents) return
+
+ if(filled)
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
+ user << "\red You cannot directly fill this object."
+ return
+
+ var/trans = 0
+
+ if(ismob(target))
+ 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.flags & MASKCOVERSEYES )
+ safe_thing = victim.wear_mask
+ if( victim.head )
+ if ( victim.head.flags & MASKCOVERSEYES )
+ safe_thing = victim.head
+ if(victim.glasses)
+ if ( !safe_thing )
+ safe_thing = victim.glasses
+
+ if(safe_thing)
+ if(!safe_thing.reagents)
+ safe_thing.create_reagents(100)
+ trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
+ spawn(5)
+ src.reagents.reaction(safe_thing, TOUCH)
+
+
+ user << "\blue You transfer [trans] units of the solution."
+ if (src.reagents.total_volume<=0)
+ filled = 0
+ icon_state = "dropper[filled]"
+ return
+
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
+ src.reagents.reaction(target, TOUCH)
+
+ trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You transfer [trans] units of the solution."
+ if (src.reagents.total_volume<=0)
+ filled = 0
+ icon_state = "dropper[filled]"
+
+ else
+
+ if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
+ user << "\red You cannot directly remove reagents from [target]."
+ return
+
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
+
+ user << "\blue You fill the dropper with [trans] units of the solution."
+
+ filled = 1
+ icon_state = "dropper[filled]"
+
+ return
+
+////////////////////////////////////////////////////////////////////////////////
+/// Droppers. END
+////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food.dm b/code/modules/chemical/reagent_containers/food.dm
new file mode 100644
index 00000000000..4f14338886f
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food.dm
@@ -0,0 +1,11 @@
+////////////////////////////////////////////////////////////////////////////////
+/// Food.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food
+ possible_transfer_amounts = null
+ volume = 50 //Sets the default container amount for all food items.
+
+/obj/item/weapon/reagent_containers/food/New()
+ ..()
+ src.pixel_x = rand(-5.0, 5) //Randomizes postion slightly.
+ src.pixel_y = rand(-5.0, 5)
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food/condiment.dm b/code/modules/chemical/reagent_containers/food/condiment.dm
new file mode 100644
index 00000000000..31a3019c379
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/condiment.dm
@@ -0,0 +1,176 @@
+
+///////////////////////////////////////////////Condiments
+//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
+// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
+// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
+
+//Food items that aren't eaten normally and leave an empty container behind.
+/obj/item/weapon/reagent_containers/food/condiment
+ name = "Condiment Container"
+ desc = "Just your average condiment container."
+ icon = 'icons/obj/food.dmi'
+ icon_state = "emptycondiment"
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ possible_transfer_amounts = list(1,5,10)
+ volume = 50
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ return
+ attack_self(mob/user as mob)
+ return
+ attack(mob/M as mob, mob/user as mob, def_zone)
+ var/datum/reagents/R = src.reagents
+
+ if(!R || !R.total_volume)
+ user << "\red None of [src] left, oh no!"
+ return 0
+
+ if(M == user)
+ M << "\blue You swallow some of contents of the [src]."
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, 10)
+
+ playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ return 1
+ else if( istype(M, /mob/living/carbon/human) )
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] attempts to feed [M] [src].", 1)
+ if(!do_mob(user, M)) return
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] feeds [M] [src].", 1)
+
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
+
+
+ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, 10)
+
+ playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ return 1
+ return 0
+
+ attackby(obj/item/I as obj, mob/user as mob)
+
+ return
+
+ afterattack(obj/target, mob/user , flag)
+ if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\red [src] is full."
+ return
+
+ var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ user << "\blue You fill [src] with [trans] units of the contents of [target]."
+
+ //Something like a glass or a food item. Player probably wants to transfer TO it.
+ else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
+ if(!reagents.total_volume)
+ user << "\red [src] is empty."
+ return
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red you can't add anymore to [target]."
+ return
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You transfer [trans] units of the condiment to [target]."
+
+ on_reagent_change()
+ if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall")
+ return
+ 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"
+ if("capsaicin")
+ name = "Hotsauce"
+ desc = "You can almost TASTE the stomach ulcers now!"
+ icon_state = "hotsauce"
+ if("enzyme")
+ name = "Universal Enzyme"
+ desc = "Used in cooking various dishes."
+ icon_state = "enzyme"
+ if("soysauce")
+ name = "Soy Sauce"
+ desc = "A salty soy-based flavoring."
+ icon_state = "soysauce"
+ if("frostoil")
+ name = "Coldsauce"
+ desc = "Leaves the tongue numb in its passage."
+ icon_state = "coldsauce"
+ if("sodiumchloride")
+ name = "Salt Shaker"
+ desc = "Salt. From space oceans, presumably."
+ icon_state = "saltshaker"
+ if("blackpepper")
+ name = "Pepper Mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+ if("cornoil")
+ name = "Corn Oil"
+ desc = "A delicious oil used in cooking. Made from corn."
+ icon_state = "oliveoil"
+ if("sugar")
+ name = "Sugar"
+ desc = "Tastey space sugar!"
+ 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"
+ else
+ icon_state = "emptycondiment"
+ name = "Condiment Bottle"
+ desc = "An empty condiment bottle."
+ 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/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"
+ possible_transfer_amounts = list(1,20) //for clown turning the lid off
+ amount_per_transfer_from_this = 1
+ volume = 20
+ New()
+ ..()
+ reagents.add_reagent("sodiumchloride", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/peppermill
+ name = "Pepper Mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+ possible_transfer_amounts = list(1,20) //for clown turning the lid off
+ amount_per_transfer_from_this = 1
+ volume = 20
+ New()
+ ..()
+ reagents.add_reagent("blackpepper", 20)
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food/drinks.dm b/code/modules/chemical/reagent_containers/food/drinks.dm
new file mode 100644
index 00000000000..320aef73851
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/drinks.dm
@@ -0,0 +1,368 @@
+////////////////////////////////////////////////////////////////////////////////
+/// Drinks.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food/drinks
+ name = "drink"
+ desc = "yummy"
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = null
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
+ possible_transfer_amounts = list(5,10,25)
+ volume = 50
+
+ on_reagent_change()
+ if (gulp_size < 5) gulp_size = 5
+ else gulp_size = max(round(reagents.total_volume / 5), 5)
+
+ attack_self(mob/user as mob)
+ return
+
+ attack(mob/M as mob, mob/user as mob, def_zone)
+ var/datum/reagents/R = src.reagents
+ var/fillevel = gulp_size
+
+ if(!R.total_volume || !R)
+ user << "\red None of [src] left, oh no!"
+ return 0
+
+ if(M == user)
+ M << "\blue You swallow a gulp of [src]."
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, gulp_size)
+
+ playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ return 1
+ else if( istype(M, /mob/living/carbon/human) )
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] attempts to feed [M] [src].", 1)
+ if(!do_mob(user, M)) return
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] feeds [M] [src].", 1)
+
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
+
+ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, gulp_size)
+
+ if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
+ var/mob/living/silicon/robot/bro = user
+ bro.cell.use(30)
+ var/refill = R.get_master_reagent_id()
+ spawn(600)
+ R.add_reagent(refill, fillevel)
+
+ playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ return 1
+
+ return 0
+
+
+ afterattack(obj/target, mob/user , flag)
+
+ if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\red [src] is full."
+ return
+
+ var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ user << "\blue You fill [src] with [trans] units of the contents of [target]."
+
+ else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
+ if(!reagents.total_volume)
+ user << "\red [src] is empty."
+ return
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You transfer [trans] units of the solution to [target]."
+
+ if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
+ var/mob/living/silicon/robot/bro = user
+ bro.cell.use(30)
+ var/refill = reagents.get_master_reagent_id()
+ spawn(600)
+ reagents.add_reagent(refill, trans)
+
+ return
+
+ examine()
+ set src in view()
+ ..()
+ if (!(usr in range(0)) && usr!=src.loc) return
+ if(!reagents || reagents.total_volume==0)
+ usr << "\blue \The [src] is empty!"
+ else if (reagents.total_volume[target] has been hit over the head with a bottle of [src.name], by [user]!"), 1)
+ else O.show_message(text("\red [target] hit himself with a bottle of [src.name] on the head!"), 1)
+ //Weaken the target for the duration that we calculated and divide it by 5.
+ if(armor_duration)
+ target.apply_effect(min(armor_duration, 10) , WEAKEN) // Never weaken more than a flash!
+
+ else
+ //Default attack message and don't weaken the target.
+ for(var/mob/O in viewers(user, null))
+ if(target != user) O.show_message(text("\red [target] has been attacked with a bottle of [src.name], by [user]!"), 1)
+ else O.show_message(text("\red [target] has attacked himself with a bottle of [src.name]!"), 1)
+
+ //Attack logs
+ user.attack_log += text("\[[time_stamp()]\] Has attacked [target.name] ([target.ckey]) with a bottle!")
+ target.attack_log += text("\[[time_stamp()]\] Has been smashed with a bottle by [user.name] ([user.ckey])")
+ log_attack("[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])")
+
+ //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
+ if(src.reagents)
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\blue The contents of the [src] splashes all over [target]!"), 1)
+ src.reagents.reaction(target, TOUCH)
+
+ //Finally, smash the bottle. This kills (del) the bottle.
+ src.smash(target, user)
+
+ return
+
+//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'
+ icon_state = "broken_bottle"
+ force = 9.0
+ throwforce = 5.0
+ throw_speed = 3
+ throw_range = 5
+ item_state = "beer"
+ //item_state - Need to find a bottle sprite
+ attack_verb = list("stabbed", "slashed", "attacked")
+ var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
+
+
+
+
+/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"
+ 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"
+ New()
+ ..()
+ reagents.add_reagent("whiskey", 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ New()
+ ..()
+ reagents.add_reagent("wine", 100)
+
+//////////////////////////JUICES AND STUFF ///////////////////////
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
+ name = "Orange Juice"
+ desc = "Full of vitamins and deliciousness!"
+ icon_state = "orangejuice"
+ item_state = "carton"
+ isGlass = 0
+ New()
+ ..()
+ reagents.add_reagent("orangejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
+ name = "Milk Cream"
+ desc = "It's cream. Made from milk. What else did you think you'd find in there?"
+ icon_state = "cream"
+ item_state = "carton"
+ isGlass = 0
+ New()
+ ..()
+ reagents.add_reagent("cream", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
+ name = "Tomato Juice"
+ desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
+ icon_state = "tomatojuice"
+ item_state = "carton"
+ isGlass = 0
+ New()
+ ..()
+ reagents.add_reagent("tomatojuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
+ name = "Lime Juice"
+ desc = "Sweet-sour goodness."
+ icon_state = "limejuice"
+ item_state = "carton"
+ isGlass = 0
+ New()
+ ..()
+ reagents.add_reagent("limejuice", 100)
diff --git a/code/modules/chemical/reagent_containers/food/drinks/bottle/robot.dm b/code/modules/chemical/reagent_containers/food/drinks/bottle/robot.dm
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/code/modules/chemical/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/chemical/reagent_containers/food/drinks/drinkingglass.dm
new file mode 100644
index 00000000000..e149c7c5237
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/drinks/drinkingglass.dm
@@ -0,0 +1,446 @@
+
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass
+ name = "glass"
+ desc = "Your standard drinking glass."
+ icon_state = "glass_empty"
+ amount_per_transfer_from_this = 10
+ volume = 50
+
+ on_reagent_change()
+ /*if(reagents.reagent_list.len > 1 )
+ icon_state = "glass_brown"
+ name = "Glass of Hooch"
+ desc = "Two or more drinks, mixed together."*/
+ /*else if(reagents.reagent_list.len == 1)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ switch(R.id)*/
+ if (reagents.reagent_list.len > 0)
+ //mrid = R.get_master_reagent_id()
+ switch(reagents.get_master_reagent_id())
+ if("beer")
+ icon_state = "beerglass"
+ name = "Beer glass"
+ desc = "A freezing pint of beer"
+ if("beer2")
+ icon_state = "beerglass"
+ name = "Beer glass"
+ desc = "A freezing pint of beer"
+ if("ale")
+ icon_state = "aleglass"
+ name = "Ale glass"
+ desc = "A freezing pint of delicious Ale"
+ if("milk")
+ icon_state = "glass_white"
+ name = "Glass of milk"
+ desc = "White and nutritious goodness!"
+ if("cream")
+ icon_state = "glass_white"
+ name = "Glass of cream"
+ desc = "Ewwww..."
+ if("chocolate")
+ icon_state = "chocolateglass"
+ name = "Glass of chocolate"
+ desc = "Tasty"
+ if("lemon")
+ icon_state = "lemonglass"
+ name = "Glass of lemon"
+ desc = "Sour..."
+ if("cola")
+ icon_state = "glass_brown"
+ name = "Glass of Space Cola"
+ desc = "A glass of refreshing Space Cola"
+ if("nuka_cola")
+ icon_state = "nuka_colaglass"
+ name = "Nuka Cola"
+ desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
+ if("orangejuice")
+ icon_state = "glass_orange"
+ name = "Glass of Orange juice"
+ desc = "Vitamins! Yay!"
+ if("tomatojuice")
+ icon_state = "glass_red"
+ name = "Glass of Tomato juice"
+ desc = "Are you sure this is tomato juice?"
+ if("blood")
+ icon_state = "glass_red"
+ name = "Glass of Tomato juice"
+ desc = "Are you sure this is tomato juice?"
+ if("limejuice")
+ icon_state = "glass_green"
+ name = "Glass of Lime juice"
+ desc = "A glass of sweet-sour lime juice."
+ if("whiskey")
+ icon_state = "whiskeyglass"
+ name = "Glass of whiskey"
+ desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
+ if("gin")
+ icon_state = "ginvodkaglass"
+ name = "Glass of gin"
+ desc = "A crystal clear glass of Griffeater gin."
+ if("vodka")
+ icon_state = "ginvodkaglass"
+ name = "Glass of vodka"
+ desc = "The glass contain wodka. Xynta."
+ if("goldschlager")
+ icon_state = "ginvodkaglass"
+ name = "Glass of goldschlager"
+ desc = "100 proof that teen girls will drink anything with gold in it."
+ if("wine")
+ icon_state = "wineglass"
+ name = "Glass of wine"
+ desc = "A very classy looking drink."
+ if("cognac")
+ icon_state = "cognacglass"
+ name = "Glass of cognac"
+ desc = "Damn, you feel like some kind of French aristocrat just by holding this."
+ if ("kahlua")
+ icon_state = "kahluaglass"
+ name = "Glass of RR coffee Liquor"
+ desc = "DAMN, THIS THING LOOKS ROBUST"
+ if("vermouth")
+ icon_state = "vermouthglass"
+ name = "Glass of Vermouth"
+ desc = "You wonder why you're even drinking this straight."
+ if("tequilla")
+ icon_state = "tequillaglass"
+ name = "Glass of Tequilla"
+ desc = "Now all that's missing is the weird colored shades!"
+ if("patron")
+ icon_state = "patronglass"
+ name = "Glass of Patron"
+ desc = "Drinking patron in the bar, with all the subpar ladies."
+ if("rum")
+ icon_state = "rumglass"
+ name = "Glass of Rum"
+ desc = "Now you want to Pray for a pirate suit, don't you?"
+ if("gintonic")
+ icon_state = "gintonicglass"
+ name = "Gin and Tonic"
+ desc = "A mild but still great cocktail. Drink up, like a true Englishman."
+ if("whiskeycola")
+ icon_state = "whiskeycolaglass"
+ name = "Whiskey Cola"
+ desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
+ if("whiterussian")
+ icon_state = "whiterussianglass"
+ name = "White Russian"
+ desc = "A very nice looking drink. But that's just, like, your opinion, man."
+ if("screwdrivercocktail")
+ icon_state = "screwdriverglass"
+ name = "Screwdriver"
+ desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
+ if("bloodymary")
+ icon_state = "bloodymaryglass"
+ name = "Bloody Mary"
+ desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
+ if("martini")
+ icon_state = "martiniglass"
+ name = "Classic Martini"
+ desc = "Damn, the bartender even stirred it, not shook it."
+ if("vodkamartini")
+ icon_state = "martiniglass"
+ name = "Vodka martini"
+ desc ="A bastardisation of the classic martini. Still great."
+ if("gargleblaster")
+ icon_state = "gargleblasterglass"
+ name = "Pan-Galactic Gargle Blaster"
+ desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
+ if("bravebull")
+ icon_state = "bravebullglass"
+ name = "Brave Bull"
+ desc = "Tequilla and Coffee liquor, brought together in a mouthwatering mixture. Drink up."
+ if("tequillasunrise")
+ icon_state = "tequillasunriseglass"
+ name = "Tequilla Sunrise"
+ desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
+ if("toxinsspecial")
+ icon_state = "toxinsspecialglass"
+ name = "Toxins Special"
+ desc = "Whoah, this thing is on FIRE"
+ if("beepskysmash")
+ icon_state = "beepskysmashglass"
+ name = "Beepsky Smash"
+ desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
+ if("doctorsdelight")
+ icon_state = "doctorsdelightglass"
+ name = "Doctor's Delight"
+ desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
+ if("manlydorf")
+ icon_state = "manlydorfglass"
+ name = "The Manly Dorf"
+ desc = "A manly concotion made from Ale and Beer. Intended for true men only."
+ if("irishcream")
+ icon_state = "irishcreamglass"
+ name = "Irish Cream"
+ desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
+ if("cubalibre")
+ icon_state = "cubalibreglass"
+ name = "Cuba Libre"
+ desc = "A classic mix of rum and cola."
+ if("b52")
+ icon_state = "b52glass"
+ name = "B-52"
+ desc = "Kahlua, Irish Cream, and congac. You will get bombed."
+ if("atomicbomb")
+ icon_state = "atomicbombglass"
+ name = "Atomic Bomb"
+ desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
+ if("longislandicedtea")
+ icon_state = "longislandicedteaglass"
+ name = "Long Island Iced Tea"
+ desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
+ if("threemileisland")
+ icon_state = "threemileislandglass"
+ name = "Three Mile Island Ice Tea"
+ desc = "A glass of this is sure to prevent a meltdown."
+ if("margarita")
+ icon_state = "margaritaglass"
+ name = "Margarita"
+ desc = "On the rocks with salt on the rim. Arriba~!"
+ if("blackrussian")
+ icon_state = "blackrussianglass"
+ name = "Black Russian"
+ desc = "For the lactose-intolerant. Still as classy as a White Russian."
+ if("vodkatonic")
+ icon_state = "vodkatonicglass"
+ name = "Vodka and Tonic"
+ desc = "For when a gin and tonic isn't russian enough."
+ if("manhattan")
+ icon_state = "manhattanglass"
+ name = "Manhattan"
+ desc = "The Detective's undercover drink of choice. He never could stomach gin..."
+ if("manhattan_proj")
+ icon_state = "proj_manhattanglass"
+ name = "Manhattan Project"
+ desc = "A scienitst drink of choice, for thinking how to blow up the station."
+ if("ginfizz")
+ icon_state = "ginfizzglass"
+ name = "Gin Fizz"
+ desc = "Refreshingly lemony, deliciously dry."
+ if("irishcoffee")
+ icon_state = "irishcoffeeglass"
+ name = "Irish Coffee"
+ desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
+ if("hooch")
+ icon_state = "glass_brown2"
+ name = "Hooch"
+ desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
+ if("whiskeysoda")
+ icon_state = "whiskeysodaglass2"
+ name = "Whiskey Soda"
+ desc = "Ultimate refreshment."
+ if("tonic")
+ icon_state = "glass_clear"
+ name = "Glass of Tonic Water"
+ desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
+ if("sodawater")
+ icon_state = "glass_clear"
+ name = "Glass of Soda Water"
+ desc = "Soda water. Why not make a scotch and soda?"
+ if("water")
+ icon_state = "glass_clear"
+ name = "Glass of Water"
+ desc = "The father of all refreshments."
+ if("spacemountainwind")
+ icon_state = "Space_mountain_wind_glass"
+ name = "Glass of Space Mountain Wind"
+ desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
+ if("thirteenloko")
+ icon_state = "thirteen_loko_glass"
+ name = "Glass of Thirteen Loko"
+ desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass"
+ if("dr_gibb")
+ icon_state = "dr_gibb_glass"
+ name = "Glass of Dr. Gibb"
+ desc = "Dr. Gibb. Not as dangerous as the name might imply."
+ if("space_up")
+ icon_state = "space-up_glass"
+ name = "Glass of Space-up"
+ desc = "Space-up. It helps keep your cool."
+ if("moonshine")
+ icon_state = "glass_clear"
+ name = "Moonshine"
+ desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
+ if("soymilk")
+ icon_state = "glass_white"
+ name = "Glass of soy milk"
+ desc = "White and nutritious soy goodness!"
+ if("berryjuice")
+ icon_state = "berryjuice"
+ name = "Glass of berry juice"
+ desc = "Berry juice. Or maybe its jam. Who cares?"
+ if("poisonberryjuice")
+ icon_state = "poisonberryjuice"
+ name = "Glass of poison berry juice"
+ desc = "A glass of deadly juice."
+ if("carrotjuice")
+ icon_state = "carrotjuice"
+ name = "Glass of carrot juice"
+ desc = "It is just like a carrot but without crunching."
+ if("banana")
+ icon_state = "banana"
+ name = "Glass of banana juice"
+ desc = "The raw essence of a banana. HONK"
+ if("bahama_mama")
+ icon_state = "bahama_mama"
+ name = "Bahama Mama"
+ desc = "Tropic cocktail"
+ if("singulo")
+ icon_state = "singulo"
+ name = "Singulo"
+ desc = "A blue-space beverage."
+ if("alliescocktail")
+ icon_state = "alliescocktail"
+ name = "Allies cocktail"
+ desc = "A drink made from your allies."
+ if("antifreeze")
+ icon_state = "antifreeze"
+ name = "Anti-freeze"
+ desc = "The ultimate refreshment."
+ if("barefoot")
+ icon_state = "b&p"
+ name = "Barefoot"
+ desc = "Barefoot and pregnant"
+ if("demonsblood")
+ icon_state = "demonsblood"
+ name = "Demons Blood"
+ desc = "Just looking at this thing makes the hair at the back of your neck stand up."
+ if("booger")
+ icon_state = "booger"
+ name = "Booger"
+ desc = "Ewww..."
+ if("snowwhite")
+ icon_state = "snowwhite"
+ name = "Snow White"
+ desc = "A cold refreshment."
+ if("aloe")
+ icon_state = "aloe"
+ name = "Aloe"
+ desc = "Very, very, very good."
+ if("andalusia")
+ icon_state = "andalusia"
+ name = "Andalusia"
+ desc = "A nice, strange named drink."
+ if("sbiten")
+ icon_state = "sbitenglass"
+ name = "Sbiten"
+ desc = "A spicy mix of Vodka and Spice. Very hot."
+ if("red_mead")
+ icon_state = "red_meadglass"
+ name = "Red Mead"
+ desc = "A True Vikings Beverage, though its color is strange."
+ if("mead")
+ icon_state = "meadglass"
+ name = "Mead"
+ desc = "A Vikings Beverage, though a cheap one."
+ if("iced_beer")
+ icon_state = "iced_beerglass"
+ name = "Iced Beer"
+ desc = "A beer so frosty, the air around it freezes."
+ if("grog")
+ icon_state = "grogglass"
+ name = "Grog"
+ desc = "A fine and cepa drink for Space."
+ if("soy_latte")
+ icon_state = "soy_latte"
+ name = "Soy Latte"
+ desc = "A nice and refrshing beverage while you are reading."
+ if("cafe_latte")
+ icon_state = "cafe_latte"
+ name = "Cafe Latte"
+ desc = "A nice, strong and refreshing beverage while you are reading."
+ if("acidspit")
+ icon_state = "acidspitglass"
+ name = "Acid Spit"
+ desc = "A drink from Nanotrasen. Made from live aliens."
+ if("amasec")
+ icon_state = "amasecglass"
+ name = "Amasec"
+ desc = "Always handy before COMBAT!!!"
+ if("neurotoxin")
+ icon_state = "neurotoxinglass"
+ name = "Neurotoxin"
+ desc = "A drink that is guaranteed to knock you silly."
+ if("hippiesdelight")
+ icon_state = "hippiesdelightglass"
+ name = "Hippie's Delight"
+ desc = "A drink enjoyed by people during the 1960's."
+ if("bananahonk")
+ icon_state = "bananahonkglass"
+ name = "Banana Honk"
+ desc = "A drink from Clown Heaven."
+ if("silencer")
+ icon_state = "silencerglass"
+ name = "Silencer"
+ desc = "A drink from mime Heaven."
+ if("nothing")
+ icon_state = "nothing"
+ name = "Nothing"
+ desc = "Absolutely nothing."
+ if("devilskiss")
+ icon_state = "devilskiss"
+ name = "Devils Kiss"
+ desc = "Creepy time!"
+ if("changelingsting")
+ icon_state = "changelingsting"
+ name = "Changeling Sting"
+ desc = "A stingy drink."
+ if("irishcarbomb")
+ icon_state = "irishcarbomb"
+ name = "Irish Car Bomb"
+ desc = "An irish car bomb."
+ if("syndicatebomb")
+ icon_state = "syndicatebomb"
+ name = "Syndicate Bomb"
+ desc = "A syndicate bomb."
+ if("erikasurprise")
+ icon_state = "erikasurprise"
+ name = "Erika Surprise"
+ desc = "The surprise is, it's green!"
+ if("driestmartini")
+ icon_state = "driestmartiniglass"
+ name = "Driest Martini"
+ desc = "Only for the experienced. You think you see sand floating in the glass."
+ if("ice")
+ icon_state = "iceglass"
+ name = "Glass of ice"
+ desc = "Generally, you're supposed to put something else in there too..."
+ if("icecoffee")
+ icon_state = "icedcoffeeglass"
+ name = "Iced Coffee"
+ desc = "A drink to perk you up and refresh you!"
+ if("coffee")
+ icon_state = "glass_brown"
+ name = "Glass of coffee"
+ desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
+ if("bilk")
+ icon_state = "glass_brown"
+ name = "Glass of bilk"
+ desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
+ if("fuel")
+ icon_state = "dr_gibb_glass"
+ name = "Glass of welder fuel"
+ desc = "Unless you are an industrial tool, this is probably not safe for consumption."
+ else
+ icon_state ="glass_brown"
+ name = "Glass of ..what?"
+ desc = "You can't really tell what this is."
+ else
+ icon_state = "glass_empty"
+ name = "Drinking glass"
+ desc = "Your standard drinking glass"
+ return
+
+// for /obj/machinery/vending/sovietsoda
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda
+ New()
+ ..()
+ reagents.add_reagent("sodawater", 50)
+ on_reagent_change()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola
+ New()
+ ..()
+ reagents.add_reagent("cola", 50)
+ on_reagent_change()
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food/drinks/jar.dm b/code/modules/chemical/reagent_containers/food/drinks/jar.dm
new file mode 100644
index 00000000000..d97165a4098
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/drinks/jar.dm
@@ -0,0 +1,29 @@
+
+
+///jar
+
+/obj/item/weapon/reagent_containers/food/drinks/jar
+ name = "empty jar"
+ desc = "A jar. You're not sure what it's supposed to hold."
+ icon_state = "jar"
+ item_state = "beaker"
+ New()
+ ..()
+ reagents.add_reagent("metroid", 50)
+
+ on_reagent_change()
+ if (reagents.reagent_list.len > 0)
+ switch(reagents.get_master_reagent_id())
+ if("metroid")
+ icon_state = "jar_metroid"
+ name = "metroid jam"
+ desc = "A jar of metroid jam. Delicious!"
+ else
+ icon_state ="jar_what"
+ name = "jar of something"
+ desc = "You can't really tell what this is."
+ else
+ icon_state = "jar"
+ name = "empty jar"
+ desc = "A jar. You're not sure what it's supposed to hold."
+ return
diff --git a/code/modules/chemical/reagent_containers/food/snacks.dm b/code/modules/chemical/reagent_containers/food/snacks.dm
new file mode 100644
index 00000000000..a94cc6d406b
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/snacks.dm
@@ -0,0 +1,2280 @@
+//Food items that are eaten normally and don't leave anything behind.
+/obj/item/weapon/reagent_containers/food/snacks
+ name = "snack"
+ desc = "yummy"
+ icon = 'icons/obj/food.dmi'
+ icon_state = null
+ var/bitesize = 1
+ var/bitecount = 0
+ var/trash = null
+ var/slice_path
+ var/slices_num
+
+ //Placeholder for effect that trigger on eating that aren't tied to reagents.
+/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume()
+ if(!usr) return
+ if(!reagents.total_volume)
+ usr.visible_message("[usr] finishes eating [src].","You finish eating [src].")
+ usr.drop_from_inventory(src) //so icons update :[
+
+ if(trash)
+ if(ispath(trash,/obj/item))
+ var/obj/item/TrashItem = new trash(usr)
+ usr.put_in_hands(TrashItem)
+ else if(istype(trash,/obj/item))
+ usr.put_in_hands(trash)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
+ if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
+ user << "\red None of [src] left, oh no!"
+ M.drop_from_inventory(src) //so icons update :[
+ del(src)
+ return 0
+ if(istype(M, /mob/living/carbon))
+ if(M == user) //If you're eating it yourself.
+ var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
+ if (fullness <= 50)
+ M << "\red You hungrily chew out a piece of [src] and gobble it!"
+ if (fullness > 50 && fullness <= 150)
+ M << "\blue You hungrily begin to eat [src]."
+ if (fullness > 150 && fullness <= 350)
+ M << "\blue You take a bite of [src]."
+ if (fullness > 350 && fullness <= 550)
+ M << "\blue You unwillingly chew a bit of [src]."
+ if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
+ M << "\red You cannot force any more of [src] to go down your throat."
+ return 0
+ else
+ if(!istype(M, /mob/living/carbon/metroid)) //If you're feeding it to someone else.
+ var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
+ if (fullness <= (550 * (1 + M.overeatduration / 1000)))
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] attempts to feed [M] [src].", 1)
+ else
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
+ return 0
+
+ if(!do_mob(user, M)) return
+
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
+
+ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] feeds [M] [src].", 1)
+
+ else
+ user << "This creature does not seem to have a mouth!"
+ return
+
+ if(reagents) //Handle ingestion of the reagent.
+ playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ if(reagents.total_volume > bitesize)
+ /*
+ * I totally cannot understand what this code supposed to do.
+ * Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
+ var/temp_bitesize = max(reagents.total_volume /2, bitesize)
+ reagents.trans_to(M, temp_bitesize)
+ */
+ reagents.trans_to(M, bitesize)
+ else
+ reagents.trans_to(M, reagents.total_volume)
+ bitecount++
+ On_Consume()
+ return 1
+
+ return 0
+
+/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/target, mob/user , flag)
+ return
+
+
+
+
+
+
+
+/obj/item/weapon/reagent_containers/food/snacks/examine()
+ set src in view()
+ ..()
+ if (!(usr in range(0)) && usr!=src.loc) return
+ if (bitecount==0)
+ return
+ else if (bitecount==1)
+ usr << "\blue \The [src] was bitten by someone!"
+ else if (bitecount<=3)
+ usr << "\blue \The [src] was bitten [bitecount] times!"
+ else
+ usr << "\blue \The [src] was bitten multiple times!"
+
+/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ if((slices_num <= 0 || !slices_num) || !slice_path)
+ return 1
+ var/inaccurate = 0
+ if( \
+ istype(W, /obj/item/weapon/kitchenknife) || \
+ istype(W, /obj/item/weapon/butch) || \
+ istype(W, /obj/item/weapon/scalpel) || \
+ istype(W, /obj/item/weapon/kitchen/utensil/knife) \
+ )
+ else if( \
+ istype(W, /obj/item/weapon/circular_saw) || \
+ istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \
+ istype(W, /obj/item/weapon/melee/energy/blade) || \
+ istype(W, /obj/item/weapon/shovel) || \
+ istype(W, /obj/item/weapon/hatchet) \
+ )
+ inaccurate = 1
+ else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
+ user << "\red You slip [W] inside [src]."
+ user.u_equip(W)
+ if ((user.client && user.s_active != src))
+ user.client.screen -= W
+ W.dropped(user)
+ add_fingerprint(user)
+ contents += W
+ return
+ else
+ return 1
+ if ( \
+ !isturf(src.loc) || \
+ !(locate(/obj/structure/table) in src.loc) && \
+ !(locate(/obj/machinery/optable) in src.loc) && \
+ !(locate(/obj/item/weapon/tray) in src.loc) \
+ )
+ user << "\red You cannot slice [src] here! You need a table or at least a tray to do it."
+ return 1
+ var/slices_lost = 0
+ if (!inaccurate)
+ user.visible_message( \
+ "\blue [user] slices \the [src]!", \
+ "\blue You slice \the [src]!" \
+ )
+ else
+ user.visible_message( \
+ "\blue [user] inaccurately slices \the [src] with [W]!", \
+ "\blue You inaccurately slice \the [src] with your [W]!" \
+ )
+ slices_lost = rand(1,min(1,round(slices_num/2)))
+ var/reagents_per_slice = reagents.total_volume/slices_num
+ for(var/i=1 to (slices_num-slices_lost))
+ var/obj/slice = new slice_path (src.loc)
+ reagents.trans_to(slice,reagents_per_slice)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/Del()
+ if(contents)
+ for(var/atom/movable/something in contents)
+ something.loc = get_turf(src)
+ ..()
+
+
+////////////////////////////////////////////////////////////////////////////////
+/// FOOD END
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////
+////////////////////////////////////////////Snacks
+//////////////////////////////////////////////////
+//Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created
+// already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten.
+
+//Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units Generally speaking, you don't want to go over 40
+// total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for
+// it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use Tricordrazine). On use
+// effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way).
+
+//The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to
+// 2 of the old heal_amt variable. Bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a
+// bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all
+// the bites. No more contained reagents = no more bites.
+
+//Here is an example of the new formatting for anyone who wants to add more food items.
+///obj/item/weapon/reagent_containers/food/snacks/xenoburger //Identification path for the object.
+// name = "Xenoburger" //Name that displays in the UI.
+// desc = "Smells caustic. Tastes like heresy." //Duh
+// icon_state = "xburger" //Refers to an icon in food.dmi
+// New() //Don't mess with this.
+// ..() //Same here.
+// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste
+// reagents.add_reagent("nutriment", 2) // this line of code for all the contents.
+// bitesize = 3 //This is the amount each bite consumes.
+
+/obj/item/weapon/reagent_containers/food/snacks/attack_animal(var/mob/M)
+ if(isanimal(M))
+ if(iscorgi(M))
+ if(bitecount == 0 || prob(50))
+ M.emote("nibbles away at the [src]")
+ bitecount++
+ if(bitecount >= 5)
+ var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
+ if(sattisfaction_text)
+ M.emote("[sattisfaction_text]")
+ del(src)
+
+
+
+
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
+ name = "Aesir salad"
+ desc = "Probably too incredible for mortal men to fully enjoy."
+ icon_state = "aesirsalad"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/candy
+ name = "candy"
+ desc = "Nougat love it or hate it."
+ icon_state = "candy"
+ trash = /obj/item/trash/candy
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("sugar", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn
+ name = "candy corn"
+ desc = "It's a handful of candy corn. Can be stored in a detective's hat."
+ icon_state = "candy_corn"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sugar", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chips
+ name = "chips"
+ desc = "Commander Riker's What-The-Crisps"
+ icon_state = "chips"
+ trash = /obj/item/trash/chips
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cookie
+ name = "cookie"
+ desc = "COOKIE!!!"
+ icon_state = "COOKIE!!!"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
+ name = "Chocolate Bar"
+ desc = "Such, sweet, fattening food."
+ icon_state = "chocolatebar"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
+ name = "Chocolate Egg"
+ desc = "Such, sweet, fattening food."
+ icon_state = "chocolateegg"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donut
+ name = "donut"
+ desc = "Goes great with Robust Coffee."
+ icon_state = "donut1"
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal
+ name = "donut"
+ desc = "Goes great with Robust Coffee."
+ icon_state = "donut1"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ src.bitesize = 3
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.name = "frosted donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
+ name = "Chaos Donut"
+ desc = "Like life, it never quite tastes the same."
+ icon_state = "donut1"
+ New()
+
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sprinkles", 1)
+ bitesize = 10
+ var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(chaosselect)
+ if(1)
+ reagents.add_reagent("nutriment", 3)
+ if(2)
+ reagents.add_reagent("capsaicin", 3)
+ if(3)
+ reagents.add_reagent("frostoil", 3)
+ if(4)
+ reagents.add_reagent("sprinkles", 3)
+ if(5)
+ reagents.add_reagent("plasma", 3)
+ if(6)
+ reagents.add_reagent("coco", 3)
+ if(7)
+ reagents.add_reagent("metroid", 3)
+ if(8)
+ reagents.add_reagent("banana", 3)
+ if(9)
+ reagents.add_reagent("berryjuice", 3)
+ if(10)
+ reagents.add_reagent("tricordrazine", 3)
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.name = "Frosted Chaos Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
+ name = "Jelly Donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg
+ name = "egg"
+ desc = "An egg!"
+ icon_state = "egg"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/egg_smudge(src.loc)
+ src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
+ del(src)
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype( W, /obj/item/toy/crayon ))
+ var/obj/item/toy/crayon/C = W
+ var/clr = C.colourName
+
+ if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
+ usr << "\blue The egg refuses to take on this color!"
+ return
+
+ usr << "\blue You color \the [src] [clr]"
+ icon_state = "egg-[clr]"
+ color = clr
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/blue
+ icon_state = "egg-blue"
+ color = "blue"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/green
+ icon_state = "egg-green"
+ color = "green"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/mime
+ icon_state = "egg-mime"
+ color = "mime"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/orange
+ icon_state = "egg-orange"
+ color = "orange"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/purple
+ icon_state = "egg-purple"
+ color = "purple"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
+ icon_state = "egg-rainbow"
+ color = "rainbow"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/red
+ icon_state = "egg-red"
+ color = "red"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
+ icon_state = "egg-yellow"
+ color = "yellow"
+
+/obj/item/weapon/reagent_containers/food/snacks/friedegg
+ name = "Fried egg"
+ desc = "A fried egg, with a touch of salt and pepper."
+ icon_state = "friedegg"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg
+ name = "Boiled egg"
+ desc = "A hard boiled egg."
+ icon_state = "egg"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/flour
+ name = "flour"
+ desc = "Some flour"
+ icon_state = "flour"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/appendix //yes, this is the same as meat. I might do something different in future
+ name = "appendix"
+ desc = "An appendix which looks perfectly healthy."
+ icon_state = "appendix"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/appendixinflamed
+ name = "inflamed appendix"
+ desc = "An appendix which appears to be inflamed."
+ icon_state = "appendixinflamed"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ src.bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/tofu
+ name = "Tofu"
+ icon_state = "tofu"
+ desc = "We all love tofu."
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat
+ name = "carp fillet"
+ desc = "A fillet of spess carp meat"
+ icon_state = "fishfillet"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers
+ name = "Fish Fingers"
+ desc = "A finger of fish."
+ icon_state = "fishfingers"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
+ name = "huge mushroom slice"
+ desc = "A slice from a huge mushroom."
+ icon_state = "hugemushroomslice"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("psilocybin", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
+ name = "tomato slice"
+ desc = "A slice from a huge tomato"
+ icon_state = "tomatomeat"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat
+ name = "bear meat"
+ desc = "A very manly slab of meat."
+ icon_state = "bearmeat"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 12)
+ reagents.add_reagent("hyperzine", 5)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat
+ name = "meat"
+ desc = "A slab of meat"
+ icon_state = "xenomeat"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/faggot
+ name = "Faggot"
+ desc = "A great meal all round. Not a cord of wood."
+ icon_state = "faggot"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sausage
+ name = "Sausage"
+ desc = "A piece of mixed, long meat."
+ icon_state = "sausage"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket
+ name = "Donk-pocket"
+ desc = "The food of choice for the seasoned traitor."
+ icon_state = "donkpocket"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+
+ var/warm = 0
+ proc/cooltime() //Not working, derp?
+ if (src.warm)
+ spawn( 4200 )
+ src.warm = 0
+ src.reagents.del_reagent("tricordrazine")
+ src.name = "donk-pocket"
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/brainburger
+ name = "brainburger"
+ desc = "A strange looking burger. It looks almost sentient."
+ icon_state = "brainburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("alkysine", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/ghostburger
+ name = "Ghost Burger"
+ desc = "Spooky! It doesn't look very filling."
+ icon_state = "ghostburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/human
+ var/hname = ""
+ var/job = null
+
+/obj/item/weapon/reagent_containers/food/snacks/human/burger
+ name = "-burger"
+ desc = "A bloody burger."
+ icon_state = "hburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
+ name = "burger"
+ desc = "The cornerstone of every nutritious breakfast."
+ icon_state = "hburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fishburger
+ name = "Fillet -o- Carp Sandwich"
+ desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
+ icon_state = "fishburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/tofuburger
+ name = "Tofu Burger"
+ desc = "What.. is that meat?"
+ icon_state = "tofuburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/roburger
+ name = "roburger"
+ desc = "The lettuce is the only organic component. Beep."
+ icon_state = "roburger"
+ New()
+ ..()
+ reagents.add_reagent("nanites", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
+ name = "roburger"
+ desc = "This massive patty looks like poison. Beep."
+ icon_state = "roburger"
+ volume = 100
+ New()
+ ..()
+ reagents.add_reagent("nanites", 100)
+ bitesize = 0.1
+
+/obj/item/weapon/reagent_containers/food/snacks/xenoburger
+ name = "xenoburger"
+ desc = "Smells caustic. Tastes like heresy."
+ icon_state = "xburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/clownburger
+ name = "Clown Burger"
+ desc = "This tastes funny..."
+ icon_state = "clownburger"
+ New()
+ ..()
+/*
+ var/datum/disease/F = new /datum/disease/pierrot_throat(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 4, data)
+*/
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/mimeburger
+ name = "Mime Burger"
+ desc = "Its taste defies language."
+ icon_state = "mimeburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette
+ name = "Omelette Du Fromage"
+ desc = "That's all you can say!"
+ icon_state = "omelette"
+ trash = /obj/item/trash/plate
+ //var/herp = 0
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 1
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
+ if (W.icon_state == "forkloaded")
+ user << "\red You already have omelette on your fork."
+ return
+ //W.icon = 'icons/obj/kitchen.dmi'
+ W.icon_state = "forkloaded"
+ /*if (herp)
+ world << "[user] takes a piece of omelette with his fork!"*/
+ //Why this unecessary check? Oh I know, because I'm bad >:C
+ // Yes, you are. You griefing my badmin toys. --rastaf0
+ user.visible_message( \
+ "[user] takes a piece of omelette with their fork!", \
+ "\blue You take a piece of omelette with your fork!" \
+ )
+ reagents.remove_reagent("nutriment", 1)
+ if (reagents.total_volume <= 0)
+ del(src)
+/*
+ * Unsused.
+/obj/item/weapon/reagent_containers/food/snacks/omeletteforkload
+ name = "Omelette Du Fromage"
+ desc = "That's all you can say!"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+*/
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin
+ name = "Muffin"
+ desc = "A delicious and spongy little cake"
+ icon_state = "muffin"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/pie
+ name = "Banana Cream Pie"
+ desc = "Just like back home, on clown planet! HONK!"
+ icon_state = "pie"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/pie/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("banana",5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/pie_smudge(src.loc)
+ src.visible_message("\red [src.name] splats.","\red You hear a splat.")
+ del(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
+ name = "Berry Clafoutis"
+ desc = "No black birds, this is a good sign."
+ icon_state = "berryclafoutis"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/waffles
+ name = "waffles"
+ desc = "Mmm, waffles"
+ icon_state = "waffles"
+ trash = /obj/item/trash/waffles
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/eggplantparm
+ name = "Eggplant Parmigiana"
+ desc = "The only good recipe for eggplant."
+ icon_state = "eggplantparm"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
+ name = "Soylent Green"
+ desc = "Not made of people. Honest." //Totally people.
+ icon_state = "soylent_green"
+ trash = /obj/item/trash/waffles
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
+ name = "Soylen Virdians"
+ desc = "Not made of people. Honest." //Actually honest for once.
+ icon_state = "soylent_yellow"
+ trash = /obj/item/trash/waffles
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meatpie
+ name = "Meat-pie"
+ icon_state = "meatpie"
+ desc = "An old barber recipe, very delicious!"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofupie
+ name = "Tofu-pie"
+ icon_state = "meatpie"
+ desc = "A delicious tofu pie."
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/amanita_pie
+ name = "amanita pie"
+ desc = "Sweet and tasty poison pie."
+ icon_state = "amanita_pie"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("amatoxin", 3)
+ reagents.add_reagent("psilocybin", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/plump_pie
+ name = "plump pie"
+ desc = "I bet you love stuff made out of plump helmets!"
+ icon_state = "plump_pie"
+ New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump pie"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/xemeatpie
+ name = "Xeno-pie"
+ icon_state = "xenomeatpie"
+ desc = "A delicious meatpie. Probably heretical."
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
+ name = "Wing Fang Chu"
+ desc = "A savory dish of alien wing wang in soy."
+ icon_state = "wingfangchu"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/human/kabob
+ name = "-kabob"
+ icon_state = "kabob"
+ desc = "A human meat, on a stick."
+ trash = /obj/item/stack/rods
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
+ name = "Meat-kabob"
+ icon_state = "kabob"
+ desc = "Delicious meat, on a stick."
+ trash = /obj/item/stack/rods
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofukabob
+ name = "Tofu-kabob"
+ icon_state = "kabob"
+ desc = "Vegan meat, on a stick."
+ trash = /obj/item/stack/rods
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp
+ name = "Cuban Carp"
+ desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
+ icon_state = "cubancarp"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ reagents.add_reagent("capsaicin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn
+ name = "Popcorn"
+ desc = "Now let's find some cinema."
+ icon_state = "popcorn"
+ trash = /obj/item/trash/popcorn
+ var/unpopped = 0
+ New()
+ ..()
+ unpopped = rand(1,10)
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
+ On_Consume()
+ if(prob(unpopped)) //lol ...what's the point?
+ usr << "\red You bite down on an un-popped kernel!"
+ unpopped = max(0, unpopped-1)
+ ..()
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky
+ name = "Scaredy's Private Reserve Beef Jerky"
+ icon_state = "sosjerky"
+ desc = "Beef jerky made from the finest space cows."
+ trash = /obj/item/trash/sosjerky
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin
+ name = "4no Raisins"
+ icon_state = "4no_raisins"
+ desc = "Best raisins in the universe. Not sure why."
+ trash = /obj/item/trash/raisins
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
+ name = "Space Twinkie"
+ icon_state = "space_twinkie"
+ desc = "Guaranteed to survive longer then you will."
+ New()
+ ..()
+ reagents.add_reagent("sugar", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
+ name = "Cheesie Honkers"
+ icon_state = "cheesie_honkers"
+ desc = "Bite sized cheesie snacks that will honk all over your mouth"
+ trash = /obj/item/trash/cheesie
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake
+ name = "Syndi-Cakes"
+ icon_state = "syndi_cakes"
+ desc = "An extremely moist snack cake that tastes just as good after being nuked."
+ trash = /obj/item/trash/syndi_cakes
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("syndicream", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
+ name = "Loaded Baked Potato"
+ desc = "Totally baked."
+ icon_state = "loadedbakedpotato"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fries
+ name = "Space Fries"
+ desc = "AKA: French Fries, Freedom Fries, etc"
+ icon_state = "fries"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soydope
+ name = "Soy Dope"
+ desc = "Dope from a soy."
+ icon_state = "soydope"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spagetti
+ name = "Spagetti"
+ desc = "Now thats a nice pasta!"
+ icon_state = "spagetti"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
+ name = "Cheesy Fries"
+ desc = "Fries. Covered in cheese. Duh."
+ icon_state = "cheesyfries"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
+ name = "Fortune cookie"
+ desc = "A true prophecy in each cookie!"
+ icon_state = "fortune_cookie"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe
+ name = "Burned mess"
+ desc = "Someone should be demoted from chef for this."
+ icon_state = "badrecipe"
+ New()
+ ..()
+ reagents.add_reagent("toxin", 1)
+ reagents.add_reagent("carbon", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak
+ name = "Meat steak"
+ desc = "A piece of hot spicy meat."
+ icon_state = "meatstake"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
+ name = "Spacy Liberty Duff"
+ desc = "Jello gelatin, from Alfred Hubbard's cookbook"
+ icon_state = "spacylibertyduff"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("psilocybin", 6)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
+ name = "Amanita Jelly"
+ desc = "Looks curiously toxic"
+ icon_state = "amanitajelly"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("amatoxin", 6)
+ reagents.add_reagent("psilocybin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
+ name = "Poppy pretzel"
+ desc = "It's all twisted up!"
+ icon_state = "poppypretzel"
+ bitesize = 2
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
+ name = "Meatball soup"
+ desc = "You've got balls kid, BALLS!"
+ icon_state = "meatballsoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/metroidsoup
+ name = "Metroid soup"
+ desc = "Tasty"
+ icon_state = "metroidsoup"
+ New()
+ ..()
+ reagents.add_reagent("metroid", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
+ name = "Meatball soup"
+ desc = "Smells like copper"
+ icon_state = "meatballsoup"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("blood", 10)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/clownstears
+ name = "Clown's Tears"
+ desc = "Not very funny."
+ icon_state = "clownstears"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
+ name = "Vegetable soup"
+ desc = "A true vegan meal" //TODO
+ icon_state = "vegetablesoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
+ name = "Nettle soup"
+ desc = "To think, the botanist would've beat you to death with one of these."
+ icon_state = "nettlesoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
+ name = "Mystery soup"
+ desc = "The mystery is, why aren't you eating it?"
+ icon_state = "mysterysoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(mysteryselect)
+ if(1)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(2)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(3)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ if(4)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 10)
+ if(5)
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("banana", 10)
+ if(6)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("blood", 10)
+ if(7)
+ reagents.add_reagent("metroid", 10)
+ reagents.add_reagent("water", 10)
+ if(8)
+ reagents.add_reagent("carbon", 10)
+ reagents.add_reagent("toxin", 10)
+ if(9)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("tomatojuice", 10)
+ if(10)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/wishsoup
+ name = "Wish Soup"
+ desc = "I wish this was soup."
+ icon_state = "wishsoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+ if(prob(25))
+ src.desc = "A wish come true!"
+ reagents.add_reagent("nutriment", 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotchili
+ name = "Hot Chili"
+ desc = "A five alarm Texan Chili!"
+ icon_state = "hotchili"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
+
+
+/obj/item/weapon/reagent_containers/food/snacks/coldchili
+ name = "Cold Chili"
+ desc = "This slush is barely a liquid!"
+ icon_state = "coldchili"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/telebacon
+ name = "Tele Bacon"
+ desc = "It tastes a little odd but it is still delicious."
+ icon_state = "bacon"
+ var/obj/item/device/radio/beacon/bacon/baconbeacon
+ bitesize = 2
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ baconbeacon = new /obj/item/device/radio/beacon/bacon(src)
+ On_Consume()
+ if(!reagents.total_volume)
+ baconbeacon.loc = usr
+ baconbeacon.digest_delay()
+
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ name = "monkey cube"
+ desc = "Just add water!"
+ icon_state = "monkeycube"
+ bitesize = 12
+ var/wrapped = 0
+
+ New()
+ ..()
+ reagents.add_reagent("nutriment",10)
+
+ afterattack(obj/O as obj, mob/user as mob)
+ if(istype(O,/obj/structure/sink) && !wrapped)
+ user << "You place [name] under a stream of water..."
+ loc = get_turf(O)
+ return Expand()
+ ..()
+
+ attack_self(mob/user as mob)
+ if(wrapped)
+ Unwrap(user)
+
+ proc/Expand()
+ for(var/mob/M in viewers(src,7))
+ M << "\red The monkey cube expands!"
+ new /mob/living/carbon/monkey(get_turf(src))
+ del(src)
+
+ proc/Unwrap(mob/user as mob)
+ icon_state = "monkeycube"
+ desc = "Just add water!"
+ user << "You unwrap the cube."
+ wrapped = 0
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
+ desc = "Still wrapped in some paper."
+ icon_state = "monkeycubewrap"
+ wrapped = 1
+
+
+/obj/item/weapon/reagent_containers/food/snacks/spellburger
+ name = "Spell Burger"
+ desc = "This is absolutely Ei Nath."
+ icon_state = "spellburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
+ name = "Big Bite Burger"
+ desc = "Forget the Big Mac. THIS is the future!"
+ icon_state = "bigbiteburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 14)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas
+ name = "Enchiladas"
+ desc = "Viva La Mexico!"
+ icon_state = "enchiladas"
+ trash = /obj/item/trash/tray
+ New()
+ ..()
+ reagents.add_reagent("nutriment",8)
+ reagents.add_reagent("capsaicin", 6)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
+ name = "monkey's Delight"
+ desc = "Eeee Eee!"
+ icon_state = "monkeysdelight"
+ trash = /obj/item/trash/tray
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/baguette
+ name = "Baguette"
+ desc = "Bon appetit!"
+ icon_state = "baguette"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips
+ name = "Fish and Chips"
+ desc = "I do say so myself chap."
+ icon_state = "fishandchips"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/sandwich
+ name = "Sandwich"
+ desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud."
+ icon_state = "sandwich"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
+ name = "Toasted Sandwich"
+ desc = "Now if you only had a pepper bar."
+ icon_state = "toastedsandwich"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carbon", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
+ name = "Grilled Cheese Sandwich"
+ desc = "Goes great with Tomato soup!"
+ icon_state = "toastedsandwich"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 7)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
+ name = "Tomato Soup"
+ desc = "Drinking this feels like being a vampire! A tomato vampire..."
+ icon_state = "tomatosoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
+ name = "Roffle Waffles"
+ desc = "Waffles from Roffle. Co."
+ icon_state = "rofflewaffles"
+ trash = /obj/item/trash/waffles
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("psilocybin", 8)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/stew
+ name = "Stew"
+ desc = "A nice and warm stew. Healthy and strong."
+ icon_state = "stew"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ reagents.add_reagent("water", 5)
+ bitesize = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/metroidtoast
+ name = "Metroid Toast"
+ desc = "A slice of bread covered with delicious jam."
+ icon_state = "metroidtoast"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("metroid", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/metroidburger
+ name = "Metroid Burger"
+ desc = "A very toxic and tasty burger."
+ icon_state = "metroidburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("metroid", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/milosoup
+ name = "Milosoup"
+ desc = "The universes best soup! Yum!!!"
+ icon_state = "milosoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
+ name = "Stewed Soy Meat"
+ desc = "Even non-vegetarians will LOVE this!"
+ icon_state = "stewedsoymeat"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
+ name = "Boiled Spagetti"
+ desc = "A plain dish of noodles, this sucks."
+ icon_state = "spagettiboiled"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/pastatomato
+ name = "Spagetti"
+ desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"
+ icon_state = "pastatomato"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti
+ name = "Spagetti & Meatballs"
+ desc = "Now thats a nic'e meatball!"
+ icon_state = "meatballspagetti"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spesslaw
+ name = "Spesslaw"
+ desc = "A lawyers favourite"
+ icon_state = "spesslaw"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
+ name = "Poppy Pretzel"
+ desc = "A large soft pretzel full of POP!"
+ icon_state = "poppypretzel"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries
+ name = "Carrot Fries"
+ desc = "Tasty fries from fresh Carrots."
+ icon_state = "carrotfries"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("imidazoline", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/superbiteburger
+ name = "Super Bite Burger"
+ desc = "This is a mountain of a burger. FOOD!"
+ icon_state = "superbiteburger"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 40)
+ bitesize = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple
+ name = "Candied Apple"
+ desc = "An apple coated in sugary sweetness."
+ icon_state = "candiedapple"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/applepie
+ name = "Apple Pie"
+ desc = "A pie containing sweet sweet love...or apple."
+ icon_state = "applepie"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/twobread
+ name = "Two Bread"
+ desc = "It is very bitter and winy."
+ icon_state = "twobread"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/metroidsandwich
+ name = "Metroid Sandwich"
+ desc = "A sandwich is green stuff."
+ icon_state = "metroidsandwich"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("metroid", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledmetroidcore
+ name = "Boiled Metroid Core"
+ desc = "A boiled red thing."
+ icon_state = "boiledmetroidcore"
+ New()
+ ..()
+ reagents.add_reagent("metroid", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/mint
+ name = "mint"
+ desc = "it is only wafer thin."
+ icon_state = "mint"
+ New()
+ ..()
+ reagents.add_reagent("minttoxin", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
+ name = "chantrelle soup"
+ desc = "A delicious and hearty mushroom soup."
+ icon_state = "mushroomsoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+ name = "plump helmet biscuit"
+ desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
+ icon_state = "phelmbiscuit"
+ New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump helmet biscuit"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
+ name = "chawanmushi"
+ desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
+ icon_state = "chawanmushi"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/beetsoup
+ name = "beet soup"
+ desc = "Wait, how do you spell it again..?"
+ icon_state = "beetsoup"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ switch(rand(1,6))
+ if(1)
+ name = "borsch"
+ if(2)
+ name = "bortsch"
+ if(3)
+ name = "borstch"
+ if(4)
+ name = "borsh"
+ if(5)
+ name = "borshch"
+ if(6)
+ name = "borscht"
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/herbsalad
+ name = "herb salad"
+ desc = "A tasty salad with apples on top."
+ icon_state = "herbsalad"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/validsalad
+ name = "valid salad"
+ desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it."
+ icon_state = "validsalad"
+ trash = /obj/item/trash/snack_bowl
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("syndicream", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/appletart
+ name = "golden apple streusel tart"
+ desc = "A tasty dessert that won't make it through a metal detector."
+ icon_state = "gappletart"
+ trash = /obj/item/trash/plate
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("gold", 5)
+ bitesize = 3
+
+/////////////////////////////////////////////////Sliceable////////////////////////////////////////
+// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
+
+// sliceable is just an organization type path, it doesn't have any additional code or variables tied to it.
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
+ name = "meatbread loaf"
+ desc = "The culinary base of every self-respecting eloquen/tg/entleman."
+ icon_state = "meatbread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
+ name = "meatbread slice"
+ desc = "A slice of delicious meatbread."
+ icon_state = "meatbreadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
+ name = "xenomeatbread loaf"
+ desc = "The culinary base of every self-respecting eloquen/tg/entleman. Extra Heretical."
+ icon_state = "xenomeatbread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
+ name = "xenomeatbread slice"
+ desc = "A slice of delicious meatbread. Extra Heretical."
+ icon_state = "xenobreadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
+ name = "Banana-nut bread"
+ desc = "A heavenly and filling treat."
+ icon_state = "bananabread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("banana", 20)
+ reagents.add_reagent("nutriment", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice
+ name = "Banana-nut bread slice"
+ desc = "A slice of delicious banana bread."
+ icon_state = "bananabreadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
+ name = "Tofubread"
+ icon_state = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
+ icon_state = "tofubread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
+ name = "Tofubread slice"
+ desc = "A slice of delicious tofubread."
+ icon_state = "tofubreadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
+ name = "Carrot Cake"
+ desc = "A favorite desert of a certain wascally wabbit. Not a lie."
+ icon_state = "carrotcake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 25)
+ reagents.add_reagent("imidazoline", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice
+ name = "Carrot Cake slice"
+ desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
+ icon_state = "carrotcake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
+ name = "Brain Cake"
+ desc = "A squishy cake-thing."
+ icon_state = "braincake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/braincakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 25)
+ reagents.add_reagent("alkysine", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/braincakeslice
+ name = "Brain Cake slice"
+ desc = "Lemme tell you something about prions. THEY'RE DELICIOUS."
+ icon_state = "braincakeslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
+ name = "Cheese Cake"
+ desc = "DANGEROUSLY cheesy."
+ icon_state = "cheesecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 25)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice
+ name = "Cheese Cake slice"
+ desc = "Slice of pure cheestisfaction"
+ icon_state = "cheesecake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
+ name = "Vanilla Cake"
+ desc = "A plain cake, not a lie."
+ icon_state = "plaincake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+
+/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice
+ name = "Vanilla Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "plaincake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
+ name = "Orange Cake"
+ desc = "A cake with added orange."
+ icon_state = "orangecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+
+/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice
+ name = "Orange Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "orangecake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
+ name = "Lime Cake"
+ desc = "A cake with added lime."
+ icon_state = "limecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+
+/obj/item/weapon/reagent_containers/food/snacks/limecakeslice
+ name = "Lime Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "limecake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
+ name = "Lemon Cake"
+ desc = "A cake with added lemon."
+ icon_state = "lemoncake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+
+/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice
+ name = "Lemon Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "lemoncake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
+ name = "Chocolate Cake"
+ desc = "A cake with added chocolate"
+ icon_state = "chocolatecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice
+ name = "Chocolate Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "chocolatecake_slice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
+ name = "Cheese wheel"
+ desc = "A big wheel of delcious Cheddar."
+ icon_state = "cheesewheel"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
+ name = "Cheese wedge"
+ desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
+ icon_state = "cheesewedge"
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
+ name = "Birthday Cake"
+ desc = "Happy Birthday little clown..."
+ icon_state = "birthdaycake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+ reagents.add_reagent("sprinkles", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice
+ name = "Birthday Cake slice"
+ desc = "A slice of your birthday"
+ icon_state = "birthdaycakeslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
+ name = "Bread"
+ icon_state = "Some plain old Earthen bread."
+ icon_state = "bread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/breadslice
+ name = "Bread slice"
+ desc = "A slice of home."
+ icon_state = "breadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
+ name = "Cream Cheese Bread"
+ desc = "Yum yum yum!"
+ icon_state = "creamcheesebread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice
+ name = "Cream Cheese Bread slice"
+ desc = "A slice of yum!"
+ icon_state = "creamcheesebreadslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/watermelonslice
+ name = "Watermelon Slice"
+ desc = "A slice of watery goodness."
+ icon_state = "watermelonslice"
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
+ name = "Apple Cake"
+ desc = "A cake centred with Apple"
+ icon_state = "applecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 15)
+
+/obj/item/weapon/reagent_containers/food/snacks/applecakeslice
+ name = "Apple Cake slice"
+ desc = "A slice of heavenly cake."
+ icon_state = "applecakeslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
+ name = "Pumpkin Pie"
+ desc = "A delicious treat for the autumn months."
+ icon_state = "pumpkinpie"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 15)
+
+/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice
+ name = "Pumpkin Pie slice"
+ desc = "A slice of pumpkin pie, with whipped cream on top. Perfection."
+ icon_state = "pumpkinpieslice"
+ trash = /obj/item/trash/plate
+ bitesize = 2
+
+
+
+/////////////////////////////////////////////////PIZZA////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza
+ slices_num = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
+ name = "Margherita"
+ desc = "The most cheezy pizza in galaxy"
+ icon_state = "pizzamargherita"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/margheritaslice
+ slices_num = 6
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 40)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/margheritaslice
+ name = "Margherita slice"
+ desc = "A slice of the most cheezy pizza in galaxy"
+ icon_state = "pizzamargheritaslice"
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
+ name = "Meatpizza"
+ desc = "" //TODO:
+ icon_state = "meatpizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice
+ slices_num = 6
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 50)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice
+ name = "Meatpizza slice"
+ desc = "A slice of " //TODO:
+ icon_state = "meatpizzaslice"
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
+ name = "Mushroompizza"
+ desc = "Very special pizza"
+ icon_state = "mushroompizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice
+ slices_num = 6
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 35)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice
+ name = "Mushroompizza slice"
+ desc = "Maybe it is the last slice of pizza in your life."
+ icon_state = "mushroompizzaslice"
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
+ name = "Vegetable pizza"
+ desc = "No one of Tomatos Sapiens were harmed during making this pizza"
+ icon_state = "vegetablepizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice
+ slices_num = 6
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("tomatojuice", 6)
+ reagents.add_reagent("imidazoline", 12)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice
+ name = "Vegetable pizza slice"
+ desc = "A slice of the most green pizza of all pizzas not containing green ingredients "
+ icon_state = "vegetablepizzaslice"
+ bitesize = 2
+
+/obj/item/pizzabox
+ name = "pizza box"
+ desc = "A box suited for pizzas."
+ icon = 'icons/obj/food.dmi'
+ icon_state = "pizzabox1"
+
+ var/open = 0 // Is the box open?
+ var/ismessy = 0 // Fancy mess on the lid
+ var/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza
+ var/list/boxes = list() // If the boxes are stacked, they come here
+ var/boxtag = ""
+
+/obj/item/pizzabox/update_icon()
+
+ overlays = list()
+
+ // Set appropriate description
+ if( open && pizza )
+ desc = "A box suited for pizzas. It appears to have a [pizza.name] inside."
+ else if( boxes.len > 0 )
+ desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile."
+
+ var/obj/item/pizzabox/topbox = boxes[boxes.len]
+ var/toptag = topbox.boxtag
+ if( toptag != "" )
+ desc = "[desc] The box on top has a tag, it reads: '[toptag]'."
+ else
+ desc = "A box suited for pizzas."
+
+ if( boxtag != "" )
+ desc = "[desc] The box has a tag, it reads: '[boxtag]'."
+
+ // Icon states and overlays
+ if( open )
+ if( ismessy )
+ icon_state = "pizzabox_messy"
+ else
+ icon_state = "pizzabox_open"
+
+ if( pizza )
+ var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state)
+ pizzaimg.pixel_y = -3
+ overlays += pizzaimg
+
+ return
+ else
+ // Stupid code because byondcode sucks
+ var/doimgtag = 0
+ if( boxes.len > 0 )
+ var/obj/item/pizzabox/topbox = boxes[boxes.len]
+ if( topbox.boxtag != "" )
+ doimgtag = 1
+ else
+ if( boxtag != "" )
+ doimgtag = 1
+
+ if( doimgtag )
+ var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag")
+ tagimg.pixel_y = boxes.len * 3
+ overlays += tagimg
+
+ icon_state = "pizzabox[boxes.len+1]"
+
+/obj/item/pizzabox/attack_hand( mob/user as mob )
+
+ if( open && pizza )
+ user.put_in_hands( pizza )
+
+ user << "\red You take the [src.pizza] out of the [src]."
+ src.pizza = null
+ update_icon()
+ return
+
+ if( boxes.len > 0 )
+ if( user.get_inactive_hand() != src )
+ ..()
+ return
+
+ var/obj/item/pizzabox/box = boxes[boxes.len]
+ boxes -= box
+
+ user.put_in_hands( box )
+ user << "\red You remove the topmost [src] from your hand."
+ box.update_icon()
+ update_icon()
+ return
+ ..()
+
+/obj/item/pizzabox/attack_self( mob/user as mob )
+
+ if( boxes.len > 0 )
+ return
+
+ open = !open
+
+ if( open && pizza )
+ ismessy = 1
+
+ update_icon()
+
+/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob )
+ if( istype(I, /obj/item/pizzabox/) )
+ var/obj/item/pizzabox/box = I
+
+ if( !box.open && !src.open )
+ // Make a list of all boxes to be added
+ var/list/boxestoadd = list()
+ boxestoadd += box
+ for(var/obj/item/pizzabox/i in box.boxes)
+ boxestoadd += i
+
+ if( (boxes.len+1) + boxestoadd.len <= 5 )
+ user.drop_item()
+
+ box.loc = src
+ box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit
+ src.boxes.Add( boxestoadd )
+
+ box.update_icon()
+ update_icon()
+
+ user << "\red You put the [box] ontop of the [src]!"
+ else
+ user << "\red The stack is too high!"
+ else
+ user << "\red Close the [box] first!"
+
+ return
+
+ if( istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/) ) // Long ass fucking object name
+
+ if( src.open )
+ user.drop_item()
+ I.loc = src
+ src.pizza = I
+
+ update_icon()
+
+ user << "\red You put the [I] in the [src]!"
+ else
+ user << "\red You try to push the [I] through the lid but it doesn't work!"
+ return
+
+ if( istype(I, /obj/item/weapon/pen/) )
+
+ if( src.open )
+ return
+
+ var/t = input("Enter what you want to add to the tag:", "Write", null, null) as text
+
+ var/obj/item/pizzabox/boxtotagto = src
+ if( boxes.len > 0 )
+ boxtotagto = boxes[boxes.len]
+
+ boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30)
+
+ update_icon()
+ return
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/cracker
+ name = "Cracker"
+ desc = "It's a salted cracker."
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food/snacks/grown.dm b/code/modules/chemical/reagent_containers/food/snacks/grown.dm
new file mode 100644
index 00000000000..57d87150d00
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/snacks/grown.dm
@@ -0,0 +1,925 @@
+
+
+// ***********************************************************
+// Foods that are produced from hydroponics ~~~~~~~~~~
+// Data from the seeds carry over to these grown foods
+// ***********************************************************
+
+//Grown foods
+//Subclass so we can pass on values
+/obj/item/weapon/reagent_containers/food/snacks/grown/
+ var/seed = ""
+ var/plantname = ""
+ var/productname = ""
+ var/species = ""
+ var/lifespan = 0
+ var/endurance = 0
+ var/maturation = 0
+ var/production = 0
+ var/yield = 0
+ var/potency = -1
+ var/plant_type = 0
+ icon = 'icons/obj/harvest.dmi'
+ New(newloc,newpotency)
+ if (!isnull(newpotency))
+ potency = newpotency
+ ..()
+ src.pixel_x = rand(-5.0, 5)
+ src.pixel_y = rand(-5.0, 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ var/msg
+ msg = "*---------*\n This is \a [src]\n"
+ switch(plant_type)
+ if(0)
+ msg += "- Plant type: Normal plant\n"
+ if(1)
+ msg += "- Plant type: Weed\n"
+ if(2)
+ msg += "- Plant type: Mushroom\n"
+ msg += "- Potency: [potency]\n"
+ msg += "- Yield: [yield]\n"
+ msg += "- Maturation speed: [maturation]\n"
+ msg += "- Production speed: [production]\n"
+ msg += "- Endurance: [endurance]\n"
+ msg += "- Healing properties: [reagents.get_reagent_amount("nutriment")]\n"
+ msg += "*---------*"
+ usr << msg
+ return
+
+ if (istype(O, /obj/item/weapon/plantbag))
+ var/obj/item/weapon/plantbag/S = O
+ if (S.mode == 1)
+ for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in locate(src.x,src.y,src.z))
+ if (S.contents.len < S.capacity)
+ S.contents += G;
+ else
+ user << "\blue The plant bag is full."
+ return
+ user << "\blue You pick up all the plants."
+ else
+ if (S.contents.len < S.capacity)
+ S.contents += src;
+ else
+ user << "\blue The plant bag is full."
+ return
+
+/obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ var/msg
+ msg = "*---------*\n This is \a [src]\n"
+ switch(plant_type)
+ if(0)
+ msg += "- Plant type: Normal plant\n"
+ if(1)
+ msg += "- Plant type: Weed\n"
+ if(2)
+ msg += "- Plant type: Mushroom\n"
+ msg += "- Acid strength: [potency]\n"
+ msg += "- Yield: [yield]\n"
+ msg += "- Maturation speed: [maturation]\n"
+ msg += "- Production speed: [production]\n"
+ msg += "- Endurance: [endurance]\n"
+ msg += "*---------*"
+ usr << msg
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/corn
+ seed = "/obj/item/seeds/cornseed"
+ name = "ear of corn"
+ desc = "Needs some butter!"
+ icon_state = "corn"
+ potency = 40
+ trash = /obj/item/weapon/corncob
+
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/poppy
+ seed = "/obj/item/seeds/poppyseed"
+ name = "poppy"
+ desc = "Long-used as a symbol of rest, peace, and death."
+ icon_state = "poppy"
+ potency = 30
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ reagents.add_reagent("bicaridine", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 3, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
+ seed = "obj/item/seeds/harebellseed"
+ name = "harebell"
+ desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\""
+ icon_state = "harebell"
+ potency = 1
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 3, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/potato
+ seed = "/obj/item/seeds/potatoseed"
+ name = "potato"
+ desc = "Boil 'em! Mash 'em! Stick 'em in a stew!"
+ icon_state = "potato"
+ potency = 25
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ spawn(5) //So potency can be set in the proc that creates these crops
+ bitesize = reagents.total_volume
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if(istype(W, /obj/item/weapon/cable_coil))
+ if(W:amount >= 5)
+ W:amount -= 5
+ if(!W:amount) del(W)
+ user << "You add some cable to the potato and slide it inside the battery encasing."
+ new /obj/item/weapon/cell/potato(user.loc)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/grapes
+ seed = "/obj/item/seeds/grapeseed"
+ name = "bunch of grapes"
+ desc = "Nutritious!"
+ icon_state = "grapes"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ reagents.add_reagent("sugar", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes
+ seed = "/obj/item/seeds/greengrapeseed"
+ name = "bunch of green grapes"
+ desc = "Nutritious!"
+ icon_state = "greengrapes"
+ potency = 25
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ reagents.add_reagent("kelotane", 3+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage
+ seed = "/obj/item/seeds/cabbageseed"
+ name = "cabbage"
+ desc = "Ewwwwwwwwww. Cabbage."
+ icon_state = "cabbage"
+ potency = 25
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = reagents.total_volume
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/berries
+ seed = "/obj/item/seeds/berryseed"
+ name = "bunch of berries"
+ desc = "Nutritious!"
+ icon_state = "berrypile"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries
+ seed = "/obj/item/seeds/glowberryseed"
+ name = "bunch of glow-berries"
+ desc = "Nutritious!"
+ var/on = 1
+ var/brightness_on = 2 //luminosity when on
+ icon_state = "glowberrypile"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", round((potency / 10), 1))
+ reagents.add_reagent("radium", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Del()
+ if(istype(loc,/mob))
+ loc.sd_SetLuminosity(loc.luminosity - potency/5)
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user)
+ src.sd_SetLuminosity(0)
+ user.total_luminosity += potency/5
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/dropped(mob/user)
+ user.total_luminosity -= potency/5
+ src.sd_SetLuminosity(potency/5)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod
+ seed = "/obj/item/seeds/cocoapodseed"
+ name = "cocoa pod"
+ desc = "Fattening... Mmmmm... chucklate."
+ icon_state = "cocoapod"
+ potency = 50
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ reagents.add_reagent("coco", 4+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
+ seed = "/obj/item/seeds/sugarcaneseed"
+ name = "sugarcane"
+ desc = "Sickly sweet."
+ icon_state = "sugarcane"
+ potency = 50
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("sugar", 4+round((potency / 5), 1))
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries
+ seed = "/obj/item/seeds/poisonberryseed"
+ name = "bunch of poison-berries"
+ desc = "Taste so good, you could die!"
+ icon_state = "poisonberrypile"
+ gender = PLURAL
+ potency = 15
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("toxin", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/deathberries
+ seed = "/obj/item/seeds/deathberryseed"
+ name = "bunch of death-berries"
+ desc = "Taste so good, you could die!"
+ icon_state = "deathberrypile"
+ gender = PLURAL
+ potency = 50
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("toxin", 3+round(potency / 3, 1))
+ reagents.add_reagent("lexorin", 1+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris
+ seed = "/obj/item/seeds/ambrosiavulgaris"
+ name = "ambrosia vulgaris branch"
+ desc = "This is a plant containing various healing chemicals."
+ icon_state = "ambrosiavulgaris"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("space_drugs", 1+round(potency / 8, 1))
+ reagents.add_reagent("kelotane", 1+round(potency / 8, 1))
+ reagents.add_reagent("bicaridine", 1+round(potency / 10, 1))
+ reagents.add_reagent("toxin", 1+round(potency / 10, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
+ seed = "/obj/item/seeds/ambrosiadeus"
+ name = "ambrosia deus branch"
+ desc = "Eating this makes you feel immortal!"
+ icon_state = "ambrosiadeus"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("bicaridine", 1+round(potency / 8, 1))
+ reagents.add_reagent("synaptizine", 1+round(potency / 8, 1))
+ reagents.add_reagent("hyperzine", 1+round(potency / 10, 1))
+ reagents.add_reagent("space_drugs", 1+round(potency / 10, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/apple
+ seed = "/obj/item/seeds/appleseed"
+ name = "apple"
+ desc = "It's a little piece of Eden."
+ icon_state = "apple"
+ potency = 15
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple
+ seed = "/obj/item/seeds/goldappleseed"
+ name = "golden apple"
+ desc = "Emblazoned upon the apple is the word 'Kallisti'."
+ icon_state = "goldapple"
+ potency = 15
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ reagents.add_reagent("gold", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Mineral Content: [reagents.get_reagent_amount("gold")]%"
+
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon
+ seed = "/obj/item/seeds/watermelonseed"
+ name = "watermelon"
+ desc = "It's full of watery goodness."
+ icon_state = "watermelon"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 6), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin
+ seed = "/obj/item/seeds/pumpkinseed"
+ name = "pumpkin"
+ desc = "It's large and scary."
+ icon_state = "pumpkin"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 6), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/melee/energy))
+ user.show_message("You carve a face into [src]!", 1)
+ new /obj/item/clothing/head/pumpkinhead (user.loc)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/lime
+ seed = "/obj/item/seeds/limeseed"
+ name = "lime"
+ desc = "It's so sour, your face will twist."
+ icon_state = "lime"
+ potency = 20
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/lemon
+ seed = "/obj/item/seeds/lemonseed"
+ name = "lemon"
+ desc = "When life gives you lemons, be grateful they aren't limes."
+ icon_state = "lemon"
+ potency = 20
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/orange
+ seed = "/obj/item/seeds/orangeseed"
+ name = "orange"
+ desc = "It's an tangy fruit."
+ icon_state = "orange"
+ potency = 20
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet
+ seed = "/obj/item/seeds/whitebeetseed"
+ name = "white-beet"
+ desc = "You can't beat white-beet."
+ icon_state = "whitebeet"
+ potency = 15
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", round((potency / 20), 1))
+ reagents.add_reagent("sugar", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/banana
+ seed = "/obj/item/seeds/bananaseed"
+ name = "banana"
+ desc = "It's an excellent prop for a clown."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "banana"
+ item_state = "banana"
+ trash = /obj/item/weapon/bananapeel
+
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("banana", 1+round((potency / 10), 1))
+ bitesize = 5
+ src.pixel_x = rand(-5.0, 5)
+ src.pixel_y = rand(-5.0, 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/chili
+ seed = "/obj/item/seeds/chiliseed"
+ name = "chili"
+ desc = "It's spicy! Wait... IT'S BURNING ME!!"
+ icon_state = "chilipepper"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
+ reagents.add_reagent("capsaicin", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/chili/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Capsaicin: [reagents.get_reagent_amount("capsaicin")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant
+ seed = "/obj/item/seeds/eggplantseed"
+ name = "eggplant"
+ desc = "Maybe there's a chicken inside?"
+ icon_state = "eggplant"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans
+ seed = "/obj/item/seeds/soyaseed"
+ name = "soybeans"
+ desc = "It's pretty bland, but oh the possibilities..."
+ gender = PLURAL
+ icon_state = "soybeans"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato
+ seed = "/obj/item/seeds/tomatoseed"
+ name = "tomato"
+ desc = "I say to-mah-to, you say tom-mae-to."
+ icon_state = "tomato"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/tomato_smudge(src.loc)
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato
+ seed = "/obj/item/seeds/killertomatoseed"
+ name = "killer-tomato"
+ desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!"
+ icon_state = "killertomato"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+ if(istype(src.loc,/mob))
+ pickup(src.loc)
+ lifespan = 120
+ endurance = 30
+ maturation = 15
+ production = 1
+ yield = 3
+ potency = 30
+ plant_type = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob)
+ if(istype(user.loc,/turf/space))
+ return
+ new /mob/living/simple_animal/tomato(user.loc)
+ del(src)
+
+ user << "You plant the killer-tomato."
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato
+ seed = "/obj/item/seeds/bloodtomatoseed"
+ name = "blood-tomato"
+ desc = "So bloody...so...very...bloody....AHHHH!!!!"
+ icon_state = "bloodtomato"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ reagents.add_reagent("blood", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/blood/splatter(src.loc)
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ src.reagents.reaction(get_turf(hit_atom))
+ for(var/atom/A in get_turf(hit_atom))
+ src.reagents.reaction(A)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato
+ seed = "/obj/item/seeds/bluetomatoseed"
+ name = "blue-tomato"
+ desc = "I say blue-mah-to, you say blue-mae-to."
+ icon_state = "bluetomato"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ reagents.add_reagent("lube", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/oil(src.loc)
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ src.reagents.reaction(get_turf(hit_atom))
+ for(var/atom/A in get_turf(hit_atom))
+ src.reagents.reaction(A)
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/HasEntered(AM as mob|obj)
+ if (istype(AM, /mob/living/carbon))
+ var/mob/M = AM
+ if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
+ return
+
+ M.stop_pulling()
+ M << "\blue You slipped on the [name]!"
+ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ M.Stun(8)
+ M.Weaken(5)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/wheat
+ seed = "/obj/item/seeds/wheatseed"
+ name = "wheat"
+ desc = "Sigh... wheat... a-grain?"
+ gender = PLURAL
+ icon_state = "wheat"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper
+ seed = "/obj/item/seeds/icepepperseed"
+ name = "ice-pepper"
+ desc = "It's a mutant strain of chili"
+ icon_state = "icepepper"
+ potency = 20
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
+ reagents.add_reagent("frostoil", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Frostoil: [reagents.get_reagent_amount("frostoil")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/carrot
+ seed = "/obj/item/seeds/carrotseed"
+ name = "carrot"
+ desc = "It's good for the eyes!"
+ icon_state = "carrot"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ reagents.add_reagent("imidazoline", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi
+ seed = "/obj/item/seeds/reishimycelium"
+ name = "reishi"
+ desc = "Ganoderma lucidum: A special fungus believed to help relieve stress."
+ icon_state = "reishi"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("stoxin", 3+round(potency / 3, 1))
+ reagents.add_reagent("space_drugs", 1+round(potency / 25, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Sleep Toxin: [reagents.get_reagent_amount("stoxin")]%"
+ user << "- Space Drugs: [reagents.get_reagent_amount("space_drugs")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita
+ seed = "/obj/item/seeds/amanitamycelium"
+ name = "fly amanita"
+ desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know."
+ icon_state = "amanita"
+ potency = 10
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("amatoxin", 3+round(potency / 3, 1))
+ reagents.add_reagent("psilocybin", 1+round(potency / 25, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%"
+ user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel
+ seed = "/obj/item/seeds/angelmycelium"
+ name = "destroying angel"
+ desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins."
+ icon_state = "angel"
+ potency = 35
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
+ reagents.add_reagent("amatoxin", 13+round(potency / 3, 1))
+ reagents.add_reagent("psilocybin", 1+round(potency / 25, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%"
+ user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap
+ seed = "/obj/item/seeds/libertymycelium"
+ name = "liberty-cap"
+ desc = "Psilocybe Semilanceata: Liberate yourself!"
+ icon_state = "libertycap"
+ potency = 15
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
+ reagents.add_reagent("psilocybin", 3+round(potency / 5, 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ . = ..()
+ if (istype(O, /obj/item/device/analyzer/plant_analyzer))
+ user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet
+ seed = "/obj/item/seeds/plumpmycelium"
+ name = "plump-helmet"
+ desc = "Plumus Hellmus: Plump, soft and s-so inviting~"
+ icon_state = "plumphelmet"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 2+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom
+ seed = "/obj/item/seeds/walkingmushroom"
+ name = "walking mushroom"
+ desc = "Plumus Locomotus: The beginning of the great walk."
+ icon_state = "walkingmushroom"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 2+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+ if(istype(src.loc,/mob))
+ pickup(src.loc)
+ lifespan = 120
+ endurance = 30
+ maturation = 15
+ production = 1
+ yield = 3
+ potency = 30
+ plant_type = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob)
+ if(istype(user.loc,/turf/space))
+ return
+ new /mob/living/simple_animal/mushroom(user.loc)
+ del(src)
+
+ user << "You plant the walking mushroom."
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle
+ seed = "/obj/item/seeds/chantermycelium"
+ name = "chanterelle cluster"
+ desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!"
+ icon_state = "chanterelle"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment",1+round((potency / 25), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom
+ seed = "/obj/item/seeds/glowshroom"
+ name = "glowshroom cluster"
+ desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?"
+ icon_state = "glowshroom"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("radium",1+round((potency / 20), 1))
+ if(istype(src.loc,/mob))
+ pickup(src.loc)
+ else
+ src.sd_SetLuminosity(potency/10)
+ lifespan = 120 //ten times that is the delay
+ endurance = 30
+ maturation = 15
+ production = 1
+ yield = 3
+ potency = 30
+ plant_type = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user as mob)
+ if(istype(user.loc,/turf/space))
+ return
+ var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc)
+
+ planted.delay = lifespan * 50
+ planted.endurance = endurance
+ planted.yield = yield
+ planted.potency = potency
+ del(src)
+
+ user << "You plant the glowshroom."
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/Del()
+ if(istype(loc,/mob))
+ loc.sd_SetLuminosity(loc.luminosity - potency/10)
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user)
+ src.sd_SetLuminosity(0)
+ user.total_luminosity += potency/10
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/dropped(mob/user)
+ user.total_luminosity -= potency/10
+ src.sd_SetLuminosity(potency/10)
+
+// *************************************
+// Complex Grown Object Defines -
+// Putting these at the bottom so they don't clutter the list up. -Cheridan
+// *************************************
+
+//This object is just a transition object. All it does is make a grass tile and delete itself.
+/obj/item/weapon/reagent_containers/food/snacks/grown/grass
+ seed = "/obj/item/seeds/grassseed"
+ name = "grass"
+ desc = "Green and lush."
+ icon_state = "spawner"
+ potency = 20
+ New()
+ new/obj/item/stack/tile/grass(src.loc)
+ spawn(5) //Workaround to keep harvesting from working weirdly.
+ del(src)
+
+//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
+/obj/item/weapon/reagent_containers/food/snacks/grown/money
+ seed = "/obj/item/seeds/cashseed"
+ name = "dosh"
+ desc = "Green and lush."
+ icon_state = "spawner"
+ potency = 10
+ New()
+ switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
+ if(0 to 10)
+ new/obj/item/weapon/spacecash/(src.loc)
+ if(11 to 20)
+ new/obj/item/weapon/spacecash/c10(src.loc)
+ if(21 to 30)
+ new/obj/item/weapon/spacecash/c20(src.loc)
+ if(31 to 40)
+ new/obj/item/weapon/spacecash/c50(src.loc)
+ if(41 to 50)
+ new/obj/item/weapon/spacecash/c100(src.loc)
+ if(51 to 60)
+ new/obj/item/weapon/spacecash/c200(src.loc)
+ if(61 to 80)
+ new/obj/item/weapon/spacecash/c500(src.loc)
+ else
+ new/obj/item/weapon/spacecash/c1000(src.loc)
+ spawn(5) //Workaround to keep harvesting from working weirdly.
+ del(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
+ seed = "/obj/item/seeds/bluespacetomatoseed"
+ name = "blue-space tomato"
+ desc = "So lubricated, you might slip through space-time."
+ icon_state = "bluespacetomato"
+ potency = 20
+ origin_tech = "bluespace=3"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ reagents.add_reagent("singulo", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+ throw_impact(atom/hit_atom)
+ ..()
+ var/mob/M = usr
+ var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport.
+ var/inner_teleport_radius = potency/15
+ var/list/turfs = new/list()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats.
+ new/obj/effect/decal/cleanable/oil(src.loc)
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ del(src)
+ return
+ for(var/turf/T in orange(M,outer_teleport_radius))
+ if(T in orange(M,inner_teleport_radius)) continue
+ if(istype(T,/turf/space)) continue
+ if(T.density) continue
+ if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.")
+ del(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon
+ name = "Watermelon"
+ icon_state = "A juicy watermelon"
+ icon_state = "watermelon"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice
+ slices_num = 5
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/food/snacks/meat.dm b/code/modules/chemical/reagent_containers/food/snacks/meat.dm
new file mode 100644
index 00000000000..cc9af086000
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/food/snacks/meat.dm
@@ -0,0 +1,27 @@
+/obj/item/weapon/reagent_containers/food/snacks/meat
+ name = "meat"
+ desc = "A slab of meat"
+ icon_state = "meat"
+ health = 180
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
+ name = "synthetic meat"
+ desc = "A synthetic slab of flesh."
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/human
+ name = "-meat"
+ var/subjectname = ""
+ var/subjectjob = null
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
+ //same as plain meat
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
+ name = "Corgi meat"
+ desc = "Tastes like... well you know..."
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/glass.dm b/code/modules/chemical/reagent_containers/glass.dm
new file mode 100644
index 00000000000..7ec8325c627
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/glass.dm
@@ -0,0 +1,231 @@
+
+////////////////////////////////////////////////////////////////////////////////
+/// (Mixing)Glass.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/glass
+ name = " "
+ desc = " "
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "null"
+ item_state = "null"
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30,50)
+ volume = 50
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+
+ var/list/can_be_placed_into = list(
+ /obj/machinery/chem_master/,
+ /obj/machinery/chem_dispenser/,
+ /obj/machinery/reagentgrinder,
+ /obj/structure/table,
+ /obj/structure/closet,
+ /obj/structure/sink,
+ /obj/item/weapon/storage,
+ /obj/machinery/atmospherics/unary/cryo_cell,
+ /obj/item/weapon/grenade/chem_grenade,
+ /obj/machinery/bot/medbot,
+ /obj/machinery/computer/pandemic,
+ /obj/item/weapon/secstorage/ssafe,
+ /obj/machinery/disposal
+ )
+
+ examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\blue It contains:"
+ if(reagents && reagents.reagent_list.len)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "\blue [R.volume] units of [R.name]"
+ else
+ usr << "\blue Nothing."
+
+ afterattack(obj/target, mob/user , flag)
+ for(var/type in src.can_be_placed_into)
+ if(istype(target, type))
+ return
+
+ if(ismob(target) && target.reagents && reagents.total_volume)
+ user << "\blue You splash the solution onto [target]."
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
+ src.reagents.reaction(target, TOUCH)
+ spawn(5) src.reagents.clear_reagents()
+ return
+ else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if(!target.reagents.total_volume && target.reagents)
+ user << "\red [target] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\red [src] is full."
+ return
+
+ var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ user << "\blue You fill [src] with [trans] units of the contents of [target]."
+
+ else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
+ if(!reagents.total_volume)
+ user << "\red [src] is empty."
+ return
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You transfer [trans] units of the solution to [target]."
+
+ //Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary.
+ else if(istype(target, /obj/item/clothing/suit/space/space_ninja))
+ return
+
+ else if(reagents.total_volume)
+ user << "\blue You splash the solution onto [target]."
+ src.reagents.reaction(target, TOUCH)
+ spawn(5) src.reagents.clear_reagents()
+ return
+
+////////////////////////////////////////////////////////////////////////////////
+/// (Mixing)Glass. END
+////////////////////////////////////////////////////////////////////////////////
+
+
+//Glasses
+/obj/item/weapon/reagent_containers/glass/bucket
+ desc = "It's a bucket."
+ name = "bucket"
+ icon = 'icons/obj/janitor.dmi'
+ icon_state = "bucket"
+ item_state = "bucket"
+ m_amt = 200
+ g_amt = 0
+ w_class = 3.0
+ amount_per_transfer_from_this = 20
+ possible_transfer_amounts = list(10,20,30,50,70)
+ volume = 70
+ flags = FPRINT | OPENCONTAINER
+
+ attackby(var/obj/D, mob/user as mob)
+ if(isprox(D))
+ user << "You add [D] to [src]."
+ del(D)
+ user.put_in_hands(new /obj/item/weapon/bucket_sensor)
+ user.drop_from_inventory(src)
+ del(src)
+
+/*
+/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
+ flags = FPRINT
+*/
+
+/obj/item/weapon/reagent_containers/glass/dispenser
+ name = "reagent glass"
+ desc = "A reagent glass."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "beaker0"
+ amount_per_transfer_from_this = 10
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
+ name = "reagent glass (surfactant)"
+ icon_state = "liquid"
+
+ New()
+ ..()
+ reagents.add_reagent("fluorosurfactant", 20)
+
+/obj/item/weapon/reagent_containers/glass/beaker
+ name = "beaker"
+ desc = "A beaker. Can hold up to 50 units."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "beaker0"
+ item_state = "beaker"
+ m_amt = 0
+ g_amt = 500
+
+ on_reagent_change()
+ update_icon()
+
+ pickup(mob/user)
+ ..()
+ update_icon()
+
+ dropped(mob/user)
+ ..()
+ update_icon()
+
+ attack_hand()
+ ..()
+ update_icon()
+
+ update_icon()
+ overlays = null
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10", src.layer)
+
+ 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.icon += mix_color_from_reagents(reagents.reagent_list)
+ overlays += filling
+
+/obj/item/weapon/reagent_containers/glass/beaker/large
+ name = "large beaker"
+ desc = "A large beaker. Can hold up to 100 units."
+ icon_state = "beakerlarge"
+ g_amt = 5000
+ volume = 100
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30,50,100)
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+
+/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/beaker/cryoxadone
+ name = "beaker"
+ desc = "A beaker. Can hold up to 50 units."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "beaker0"
+ item_state = "beaker"
+
+ New()
+ ..()
+ reagents.add_reagent("cryoxadone", 30)
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/glass/bottle.dm b/code/modules/chemical/reagent_containers/glass/bottle.dm
new file mode 100644
index 00000000000..3ba689303b5
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/glass/bottle.dm
@@ -0,0 +1,255 @@
+
+//Not to be confused with /obj/item/weapon/reagent_containers/food/drinks/bottle
+
+/obj/item/weapon/reagent_containers/glass/bottle
+ name = "bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = null
+ item_state = "atoxinbottle"
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30)
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ volume = 30
+
+ New()
+ ..()
+ if(!icon_state)
+ icon_state = "bottle[rand(1,20)]"
+
+/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
+ name = "inaprovaline bottle"
+ desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+
+ New()
+ ..()
+ reagents.add_reagent("inaprovaline", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/toxin
+ name = "toxin bottle"
+ desc = "A small bottle of toxins. Do not drink, it is poisonous."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle12"
+
+ New()
+ ..()
+ reagents.add_reagent("toxin", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/cyanide
+ name = "cyanide bottle"
+ desc = "A small bottle of cyanide. Bitter almonds?"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle12"
+
+ New()
+ ..()
+ reagents.add_reagent("cyanide", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/stoxin
+ name = "sleep-toxin bottle"
+ desc = "A small bottle of sleep toxins. Just the fumes make you sleepy."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle20"
+
+ New()
+ ..()
+ reagents.add_reagent("stoxin", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
+ name = "Chloral Hydrate Bottle"
+ desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle20"
+
+ New()
+ ..()
+ reagents.add_reagent("chloralhydrate", 15) //Intentionally low since it is so strong. Still enough to knock someone out.
+
+/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
+ name = "anti-toxin bottle"
+ desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle17"
+
+ New()
+ ..()
+ reagents.add_reagent("anti_toxin", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/ammonia
+ name = "ammonia bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle20"
+
+ New()
+ ..()
+ reagents.add_reagent("ammonia", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
+ name = "diethylamine bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle17"
+
+ New()
+ ..()
+ reagents.add_reagent("diethylamine", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/flu_virion
+ name = "Flu virion culture bottle"
+ desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/flu(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat
+ name = "Pierrot's Throat culture bottle"
+ desc = "A small bottle. Contains H0NI<42 virion culture in synthblood medium."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/pierrot_throat(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/cold
+ name = "Rhinovirus culture bottle"
+ desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/cold(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/retrovirus
+ name = "Retrovirus culture bottle"
+ desc = "A small bottle. Contains a retrovirus culture in a synthblood medium."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/dna_retrovirus(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/gbs
+ name = "GBS culture bottle"
+ desc = "A small bottle. Contains Gravitokinetic Bipotential SADS+ culture in synthblood medium."//Or simply - General BullShit
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ amount_per_transfer_from_this = 5
+
+ New()
+ var/datum/reagents/R = new/datum/reagents(20)
+ reagents = R
+ R.my_atom = src
+ var/datum/disease/F = new /datum/disease/gbs
+ var/list/data = list("virus"= F)
+ R.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/fake_gbs
+ name = "GBS culture bottle"
+ desc = "A small bottle. Contains Gravitokinetic Bipotential SADS- culture in synthblood medium."//Or simply - General BullShit
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/fake_gbs(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+/*
+/obj/item/weapon/reagent_containers/glass/bottle/rhumba_beat
+ name = "Rhumba Beat culture bottle"
+ desc = "A small bottle. Contains The Rhumba Beat culture in synthblood medium."//Or simply - General BullShit
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ amount_per_transfer_from_this = 5
+
+ New()
+ var/datum/reagents/R = new/datum/reagents(20)
+ reagents = R
+ R.my_atom = src
+ var/datum/disease/F = new /datum/disease/rhumba_beat
+ var/list/data = list("virus"= F)
+ R.add_reagent("blood", 20, data)
+*/
+
+/obj/item/weapon/reagent_containers/glass/bottle/brainrot
+ name = "Brainrot culture bottle"
+ desc = "A small bottle. Contains Cryptococcus Cosmosis culture in synthblood medium."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/brainrot(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/magnitis
+ name = "Magnitis culture bottle"
+ desc = "A small bottle. Contains a small dosage of Fukkos Miracos."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/magnitis(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/wizarditis
+ name = "Wizarditis culture bottle"
+ desc = "A small bottle. Contains a sample of Rincewindus Vulgaris."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ var/datum/disease/F = new /datum/disease/wizarditis(0)
+ var/list/data = list("viruses"= list(F))
+ reagents.add_reagent("blood", 20, data)
+
+/obj/item/weapon/reagent_containers/glass/bottle/pacid
+ name = "Polytrinic Acid Bottle"
+ desc = "A small bottle. Contains a small amount of Polytrinic Acid"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle17"
+ New()
+ ..()
+ reagents.add_reagent("pacid", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
+ name = "Adminordrazine Bottle"
+ desc = "A small bottle. Contains the liquid essence of the gods."
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "holyflask"
+ New()
+ ..()
+ reagents.add_reagent("adminordrazine", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
+ name = "Capsaicin Bottle"
+ desc = "A small bottle. Contains hot sauce."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
+ New()
+ ..()
+ reagents.add_reagent("capsaicin", 30)
+
+/obj/item/weapon/reagent_containers/glass/bottle/frostoil
+ name = "Frost Oil Bottle"
+ desc = "A small bottle. Contains cold sauce."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle17"
+ New()
+ ..()
+ reagents.add_reagent("frostoil", 30)
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/glass/bottle/robot.dm b/code/modules/chemical/reagent_containers/glass/bottle/robot.dm
new file mode 100644
index 00000000000..9286e5ab03b
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/glass/bottle/robot.dm
@@ -0,0 +1,33 @@
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30,50,100)
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ volume = 60
+ var/reagent = ""
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline
+ name = "internal inaprovaline bottle"
+ desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+ reagent = "inaprovaline"
+
+ New()
+ ..()
+ reagents.add_reagent("inaprovaline", 60)
+ return
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
+ name = "internal anti-toxin bottle"
+ desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle17"
+ reagent = "anti_toxin"
+
+ New()
+ ..()
+ reagents.add_reagent("anti_toxin", 60)
+ return
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/hypospray.dm b/code/modules/chemical/reagent_containers/hypospray.dm
new file mode 100644
index 00000000000..5779fea6967
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/hypospray.dm
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+/// 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'
+ item_state = "hypo"
+ icon_state = "hypo"
+ amount_per_transfer_from_this = 5
+ volume = 30
+ possible_transfer_amounts = null
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ slot_flags = SLOT_BELT
+
+/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+
+/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
+ ..()
+ reagents.add_reagent("tricordrazine", 30)
+ return
+
+/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
+ if(!reagents.total_volume)
+ user << "\red The hypospray is empty."
+ return
+ if (!( istype(M, /mob) ))
+ return
+ if (reagents.total_volume)
+ user << "\blue You inject [M] with the hypospray."
+ M << "\red You feel a tiny prick!"
+
+ M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.ckey])")
+
+ log_attack("[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+
+ src.reagents.reaction(M, INGEST)
+ if(M.reagents)
+ var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
+ user << "\blue [trans] units injected. [reagents.total_volume] units remaining in the hypospray."
+ return
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/pill.dm b/code/modules/chemical/reagent_containers/pill.dm
new file mode 100644
index 00000000000..a9fb85e131c
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/pill.dm
@@ -0,0 +1,171 @@
+////////////////////////////////////////////////////////////////////////////////
+/// Pills.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/pill
+ name = "pill"
+ desc = "a pill."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = null
+ item_state = "pill"
+ possible_transfer_amounts = null
+ volume = 50
+
+ New()
+ ..()
+ if(!icon_state)
+ icon_state = "pill[rand(1,20)]"
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/storage/pill_bottle))
+ var/obj/item/weapon/storage/pill_bottle/P = W
+ if (P.mode == 1)
+ for (var/obj/item/weapon/reagent_containers/pill/O in locate(src.x,src.y,src.z))
+ if(P.contents.len < P.storage_slots)
+ O.loc = P
+ P.orient2hud(user)
+ else
+ user << "\blue The pill bottle is full."
+ return
+ user << "\blue You pick up all the pills."
+ else
+ if (P.contents.len < P.storage_slots)
+ loc = P
+ P.orient2hud(user)
+ else
+ user << "\blue The pill bottle is full."
+ return
+ attack_self(mob/user as mob)
+ return
+ attack(mob/M as mob, mob/user as mob, def_zone)
+ if(M == user)
+ M << "\blue You swallow [src]."
+ M.drop_from_inventory(src) //icon update
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, reagents.total_volume)
+ del(src)
+ else
+ del(src)
+ return 1
+
+ else if(istype(M, /mob/living/carbon/human) )
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] attempts to force [M] to swallow [src].", 1)
+
+ if(!do_mob(user, M)) return
+
+ user.drop_from_inventory(src) //icon update
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("\red [user] forces [M] to swallow [src].", 1)
+
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
+
+
+ log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, reagents.total_volume)
+ del(src)
+ else
+ del(src)
+
+ return 1
+
+ return 0
+
+ afterattack(obj/target, mob/user , flag)
+
+ if(target.is_open_container() == 1 && target.reagents)
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty. Cant dissolve pill."
+ return
+ user << "\blue You dissolve the pill in [target]"
+ reagents.trans_to(target, reagents.total_volume)
+ for(var/mob/O in viewers(2, user))
+ O.show_message("\red [user] puts something in [target].", 1)
+ spawn(5)
+ del(src)
+
+ return
+
+////////////////////////////////////////////////////////////////////////////////
+/// Pills. END
+////////////////////////////////////////////////////////////////////////////////
+
+//Pills
+/obj/item/weapon/reagent_containers/pill/antitox
+ name = "Anti-toxins pill"
+ desc = "Neutralizes many common toxins."
+ icon_state = "pill17"
+ New()
+ ..()
+ reagents.add_reagent("anti_toxin", 50)
+
+/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/cyanide
+ name = "Cyanide pill"
+ desc = "Don't swallow this."
+ icon_state = "pill5"
+ 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/stox
+ name = "Sleeping pill"
+ desc = "Commonly used to treat insomnia."
+ icon_state = "pill8"
+ New()
+ ..()
+ reagents.add_reagent("stoxin", 30)
+
+/obj/item/weapon/reagent_containers/pill/kelotane
+ name = "Kelotane pill"
+ desc = "Used to treat burns."
+ icon_state = "pill11"
+ New()
+ ..()
+ reagents.add_reagent("kelotane", 30)
+
+/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/dexalin
+ name = "Dexalin pill"
+ desc = "Used to treat oxygen deprivation."
+ icon_state = "pill16"
+ New()
+ ..()
+ reagents.add_reagent("dexalin", 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", 30)
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_containers/spray.dm b/code/modules/chemical/reagent_containers/spray.dm
new file mode 100644
index 00000000000..b62765df964
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/spray.dm
@@ -0,0 +1,219 @@
+/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"
+ flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ slot_flags = SLOT_BELT
+ throwforce = 3
+ w_class = 2.0
+ throw_speed = 2
+ throw_range = 10
+ amount_per_transfer_from_this = 5
+ volume = 250
+ possible_transfer_amounts = null
+
+
+/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
+ if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
+ || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
+ return
+
+ if(istype(A, /obj/effect/proc_holder/spell))
+ return
+
+ if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution
+ if(!A.reagents.total_volume && A.reagents)
+ user << "\The [A] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\The [src] is full."
+ return
+
+ var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this)
+ user << "You fill \the [src] with [trans] units of the contents of \the [A]."
+ return
+
+ if(reagents.total_volume < amount_per_transfer_from_this)
+ user << "\The [src] is empty!"
+ return
+
+ var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
+ D.create_reagents(amount_per_transfer_from_this)
+ reagents.trans_to(D, amount_per_transfer_from_this)
+
+ D.name = "chemicals"
+ D.icon = 'icons/obj/chempuff.dmi'
+
+ D.icon += mix_color_from_reagents(D.reagents.reagent_list)
+
+ spawn(0)
+ for(var/i=0, i<3, i++)
+ step_towards(D,A)
+ D.reagents.reaction(get_turf(D))
+ for(var/atom/T in get_turf(D))
+ D.reagents.reaction(T)
+ sleep(3)
+ del(D)
+
+ playsound(src.loc, 'spray2.ogg', 50, 1, -6)
+
+ if(reagents.has_reagent("sacid"))
+ message_admins("[key_name_admin(user)] fired sulphuric acid from a spray bottle.")
+ log_game("[key_name(user)] fired sulphuric acid from a spray bottle.")
+ if(reagents.has_reagent("pacid"))
+ message_admins("[key_name_admin(user)] fired Polyacid from a spray bottle.")
+ log_game("[key_name(user)] fired Polyacid from a spray bottle.")
+ if(reagents.has_reagent("lube"))
+ message_admins("[key_name_admin(user)] fired Space lube from a spray bottle.")
+ log_game("[key_name(user)] fired Space lube from a spray bottle.")
+ return
+
+
+/obj/item/weapon/reagent_containers/spray/examine()
+ set src in usr
+ ..()
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "[round(R.volume)] units of [R.name] left."
+ return
+
+
+//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/New()
+ ..()
+ reagents.add_reagent("cleaner", 250)
+
+//pepperspray
+/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"
+ volume = 40
+ amount_per_transfer_from_this = 10
+
+
+/obj/item/weapon/reagent_containers/spray/pepper/New()
+ ..()
+ reagents.add_reagent("condensedcapsaicin", 40)
+
+
+//chemsprayer
+/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"
+ throwforce = 3
+ w_class = 3.0
+ volume = 600
+ origin_tech = "combat=3;materials=3;engineering=3"
+
+
+//this is a big copypasta clusterfuck, but it's still better than it used to be!
+/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user as mob)
+ if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
+ || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
+ return
+
+ if(istype(A, /obj/effect/proc_holder/spell))
+ return
+
+ if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution
+ if(!A.reagents.total_volume && A.reagents)
+ user << "\The [A] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\The [src] is full."
+ return
+
+ var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this)
+ user << "You fill \the [src] with [trans] units of the contents of \the [A]."
+ return
+
+ if(reagents.total_volume < amount_per_transfer_from_this)
+ user << "\The [src] is empty!"
+ return
+
+ var/Sprays[3]
+ for(var/i=1, i<=3, i++) // intialize sprays
+ if(src.reagents.total_volume < 1) break
+ var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src))
+ D.name = "chemicals"
+ D.icon = 'icons/obj/chempuff.dmi'
+ D.create_reagents(amount_per_transfer_from_this)
+ src.reagents.trans_to(D, amount_per_transfer_from_this)
+
+ D.icon += mix_color_from_reagents(D.reagents.reagent_list)
+
+ Sprays[i] = D
+
+ 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/i=1, i<=Sprays.len, i++)
+ spawn()
+ var/obj/effect/decal/D = Sprays[i]
+ if(!D) continue
+
+ // Spreads the sprays a little bit
+ var/turf/my_target = pick(the_targets)
+ the_targets -= my_target
+
+ for(var/j=1, j<=rand(6,8), j++)
+ step_towards(D, my_target)
+ D.reagents.reaction(get_turf(D))
+ for(var/atom/t in get_turf(D))
+ D.reagents.reaction(t)
+ sleep(2)
+ del(D)
+
+ playsound(src.loc, 'spray2.ogg', 50, 1, -6)
+
+ if(reagents.has_reagent("sacid"))
+ message_admins("[key_name_admin(user)] fired sulphuric acid from a chem sprayer.")
+ log_game("[key_name(user)] fired sulphuric acid from a chem sprayer.")
+ if(reagents.has_reagent("pacid"))
+ message_admins("[key_name_admin(user)] fired Polyacid from a chem sprayer.")
+ log_game("[key_name(user)] fired Polyacid from a chem sprayer.")
+ if(reagents.has_reagent("lube"))
+ message_admins("[key_name_admin(user)] fired Space lube from a chem sprayer.")
+ log_game("[key_name(user)] fired Space lube from a chem sprayer.")
+ return
+
+// Plant-B-Gone
+/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie
+ name = "Plant-B-Gone"
+ desc = "Kills those pesky weeds!"
+ icon = 'icons/obj/hydroponics.dmi'
+ icon_state = "plantbgone"
+ item_state = "plantbgone"
+ volume = 100
+
+
+/obj/item/weapon/reagent_containers/spray/plantbgone/New()
+ ..()
+ reagents.add_reagent("plantbgone", 100)
+
+
+/obj/item/weapon/reagent_containers/spray/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob)
+ if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray
+ return
+
+ if (istype(A, /obj/effect/blob)) // blob damage in blob code
+ return
+
+ ..()
diff --git a/code/modules/chemical/reagent_containers/syringes.dm b/code/modules/chemical/reagent_containers/syringes.dm
new file mode 100644
index 00000000000..1feb3c3e065
--- /dev/null
+++ b/code/modules/chemical/reagent_containers/syringes.dm
@@ -0,0 +1,376 @@
+////////////////////////////////////////////////////////////////////////////////
+/// Syringes.
+////////////////////////////////////////////////////////////////////////////////
+#define SYRINGE_DRAW 0
+#define SYRINGE_INJECT 1
+
+/obj/item/weapon/reagent_containers/syringe
+ name = "Syringe"
+ desc = "A syringe."
+ icon = 'icons/obj/syringe.dmi'
+ item_state = "syringe_0"
+ icon_state = "0"
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = null //list(5,10,15)
+ volume = 15
+ var/mode = SYRINGE_DRAW
+
+ 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
+*/
+ mode = !mode
+ update_icon()
+
+ attack_hand()
+ ..()
+ update_icon()
+
+ attack_paw()
+ return attack_hand()
+
+ attackby(obj/item/I as obj, mob/user as mob)
+
+ return
+
+ afterattack(obj/target, mob/user , flag)
+ if(!target.reagents) return
+
+ switch(mode)
+ if(SYRINGE_DRAW)
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\red The syringe is full."
+ return
+
+ if(ismob(target))//Blood!
+ if(istype(target, /mob/living/carbon/metroid))
+ user << "\red You are unable to locate any blood."
+ return
+ if(src.reagents.has_reagent("blood"))
+ user << "\red There is already a blood sample in this syringe"
+ return
+ if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
+ var/amount = src.reagents.maximum_volume - src.reagents.total_volume
+ var/mob/living/carbon/T = target
+ var/datum/reagent/B = new /datum/reagent/blood
+ if(!T.dna)
+ usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
+ return
+ if(NOCLONE in T.mutations) //target done been et, no more blood in him
+ user << "\red You are unable to locate any blood."
+ return
+ B.holder = src
+ B.volume = amount
+ //set reagent data
+ B.data["donor"] = T
+ /*
+ if(T.virus && T.virus.spread_type != SPECIAL)
+ B.data["virus"] = new T.virus.type(0)
+ */
+
+
+
+ for(var/datum/disease/D in T.viruses)
+ if(!B.data["viruses"])
+ B.data["viruses"] = list()
+
+
+ B.data["viruses"] += new D.type
+
+
+ B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
+ if(T.resistances&&T.resistances.len)
+ B.data["resistances"] = T.resistances.Copy()
+ if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
+ var/mob/living/carbon/human/HT = target
+ B.data["blood_type"] = copytext(HT.dna.b_type,1,0)
+ var/list/temp_chem = list()
+ for(var/datum/reagent/R in target.reagents.reagent_list)
+ temp_chem += R.name
+ temp_chem[R.name] = R.volume
+ B.data["trace_chem"] = list2params(temp_chem)
+
+ src.reagents.reagent_list += B
+ src.reagents.update_total()
+ src.on_reagent_change()
+ src.reagents.handle_reactions()
+ user << "\blue You take a blood sample from [target]"
+ for(var/mob/O in viewers(4, user))
+ O.show_message("\red [user] takes a blood sample from [target].", 1)
+
+ else //if not mob
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
+ user << "\red You cannot directly remove reagents from this object."
+ return
+
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
+
+ user << "\blue You fill the syringe with [trans] units of the solution."
+ if (reagents.total_volume >= reagents.maximum_volume)
+ mode=!mode
+ update_icon()
+
+ if(SYRINGE_INJECT)
+ if(!reagents.total_volume)
+ user << "\red The Syringe is empty."
+ 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/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
+ user << "\red You cannot directly fill this object."
+ return
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ if(istype(target, /obj/item/metroid_core))
+ var/obj/item/metroid_core/core = target
+ core.Flush = 30 // reset flush counter
+
+ if(ismob(target) && target != user)
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] is trying to inject []!", user, target), 1)
+ if(!do_mob(user, target)) return
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
+ src.reagents.reaction(target, INGEST)
+ if(ismob(target) && target == user)
+ src.reagents.reaction(target, INGEST)
+ spawn(5)
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
+ if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ update_icon()
+
+ return
+
+ update_icon()
+ var/rounded_vol = round(reagents.total_volume,5)
+ overlays = null
+ 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)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10", src.layer)
+
+ switch(rounded_vol)
+ if(5) filling.icon_state = "syringe5"
+ if(10) filling.icon_state = "syringe10"
+ if(15) filling.icon_state = "syringe15"
+
+ filling.icon += mix_color_from_reagents(reagents.reagent_list)
+ overlays += filling
+
+
+/obj/item/weapon/reagent_containers/ld50_syringe
+ name = "Lethal Injection Syringe"
+ desc = "A syringe used for lethal injections."
+ icon = 'icons/obj/syringe.dmi'
+ item_state = "syringe_0"
+ icon_state = "0"
+ amount_per_transfer_from_this = 50
+ possible_transfer_amounts = null //list(5,10,15)
+ volume = 50
+ var/mode = SYRINGE_DRAW
+
+ on_reagent_change()
+ update_icon()
+
+ pickup(mob/user)
+ ..()
+ update_icon()
+
+ dropped(mob/user)
+ ..()
+ update_icon()
+
+ attack_self(mob/user as mob)
+ mode = !mode
+ update_icon()
+
+ attack_hand()
+ ..()
+ update_icon()
+
+ attack_paw()
+ return attack_hand()
+
+ attackby(obj/item/I as obj, mob/user as mob)
+
+ return
+
+ afterattack(obj/target, mob/user , flag)
+ if(!target.reagents) return
+
+ switch(mode)
+ if(SYRINGE_DRAW)
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "\red The syringe is full."
+ return
+
+ if(ismob(target))
+ if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
+ usr << "This needle isn't designed for drawing blood."
+ return
+ else //if not mob
+ if(!target.reagents.total_volume)
+ user << "\red [target] is empty."
+ return
+
+ if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
+ user << "\red You cannot directly remove reagents from this object."
+ return
+
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
+
+ user << "\blue You fill the syringe with [trans] units of the solution."
+ if (reagents.total_volume >= reagents.maximum_volume)
+ mode=!mode
+ update_icon()
+
+ if(SYRINGE_INJECT)
+ if(!reagents.total_volume)
+ user << "\red The Syringe is empty."
+ 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))
+ user << "\red You cannot directly fill this object."
+ return
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "\red [target] is full."
+ return
+
+ if(ismob(target) && target != user)
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] is trying to inject [] with a giant syringe!", user, target), 1)
+ if(!do_mob(user, target, 300)) return
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
+ src.reagents.reaction(target, INGEST)
+ if(ismob(target) && target == user)
+ src.reagents.reaction(target, INGEST)
+ spawn(5)
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
+ if (reagents.total_volume >= reagents.maximum_volume && mode==SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ update_icon()
+
+ return
+
+ update_icon()
+ var/rounded_vol = round(reagents.total_volume,50)
+ if(ismob(loc))
+ var/mode_t
+ switch(mode)
+ if (SYRINGE_DRAW)
+ mode_t = "d"
+ if (SYRINGE_INJECT)
+ mode_t = "i"
+ icon_state = "[mode_t][rounded_vol]"
+ else
+ icon_state = "[rounded_vol]"
+ item_state = "syringe_[rounded_vol]"
+
+////////////////////////////////////////////////////////////////////////////////
+/// Syringes. END
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+/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/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/antiviral
+ name = "Syringe (spaceacillin)"
+ desc = "Contains antiviral agents."
+ New()
+ ..()
+ reagents.add_reagent("spaceacillin", 15)
+ mode = SYRINGE_INJECT
+ update_icon()
+
+/obj/item/weapon/reagent_containers/ld50_syringe/choral
+ New()
+ ..()
+ reagents.add_reagent("chloralhydrate", 50)
+ mode = SYRINGE_INJECT
+ update_icon()
+
+
+//Robot syringes
+//Not special in any way, code wise. They don't have added variables or procs.
+/obj/item/weapon/reagent_containers/syringe/robot/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/robot/inoprovaline
+ name = "Syringe (inoprovaline)"
+ desc = "Contains inaprovaline - used to stabilize patients."
+ New()
+ ..()
+ reagents.add_reagent("inaprovaline", 15)
+ mode = SYRINGE_INJECT
+ update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/robot/mixed
+ name = "Syringe (mixed)"
+ desc = "Contains inaprovaline & anti-toxins."
+ New()
+ ..()
+ reagents.add_reagent("inaprovaline", 7)
+ reagents.add_reagent("anti_toxin", 8)
+ mode = SYRINGE_INJECT
+ update_icon()
\ No newline at end of file
diff --git a/code/modules/chemical/reagent_dispenser.dm b/code/modules/chemical/reagent_dispenser.dm
new file mode 100644
index 00000000000..454395f5006
--- /dev/null
+++ b/code/modules/chemical/reagent_dispenser.dm
@@ -0,0 +1,153 @@
+
+
+/obj/structure/reagent_dispensers
+ name = "Dispenser"
+ desc = "..."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "watertank"
+ density = 1
+ anchored = 0
+ flags = FPRINT
+ pressure_resistance = 2*ONE_ATMOSPHERE
+
+ var/amount_per_transfer_from_this = 10
+ var/possible_transfer_amounts = list(10,25,50,100)
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ return
+
+ New()
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ if (!possible_transfer_amounts)
+ src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
+ ..()
+
+ examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\blue It contains:"
+ if(reagents && reagents.reagent_list.len)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "\blue [R.volume] units of [R.name]"
+ else
+ usr << "\blue Nothing."
+
+ verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in view(1)
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
+
+ ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ new /obj/effect/effect/water(src.loc)
+ del(src)
+ return
+ if(3.0)
+ if (prob(5))
+ new /obj/effect/effect/water(src.loc)
+ del(src)
+ return
+ else
+ return
+
+ blob_act()
+ if(prob(50))
+ new /obj/effect/effect/water(src.loc)
+ del(src)
+
+
+
+
+
+
+
+//Dispensers
+/obj/structure/reagent_dispensers/watertank
+ name = "watertank"
+ desc = "A watertank"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "watertank"
+ amount_per_transfer_from_this = 10
+ New()
+ ..()
+ reagents.add_reagent("water",1000)
+
+/obj/structure/reagent_dispensers/fueltank
+ name = "fueltank"
+ desc = "A fueltank"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "weldtank"
+ amount_per_transfer_from_this = 10
+ New()
+ ..()
+ reagents.add_reagent("fuel",1000)
+
+
+ bullet_act(var/obj/item/projectile/Proj)
+ if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
+ explosion(src.loc,-1,0,2)
+ if(src)
+ del(src)
+
+
+
+ blob_act()
+ explosion(src.loc,0,1,5,7,10)
+ if(src)
+ del(src)
+
+ ex_act()
+ explosion(src.loc,-1,0,2)
+ if(src)
+ del(src)
+
+/obj/structure/reagent_dispensers/peppertank
+ name = "Pepper Spray Refiller"
+ desc = "Refill pepper spray canisters."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "peppertank"
+ anchored = 1
+ density = 0
+ amount_per_transfer_from_this = 45
+ New()
+ ..()
+ reagents.add_reagent("condensedcapsaicin",1000)
+
+
+/obj/structure/reagent_dispensers/water_cooler
+ name = "Water-Cooler"
+ desc = "A machine that dispenses water to drink"
+ amount_per_transfer_from_this = 5
+ icon = 'icons/obj/vending.dmi'
+ icon_state = "water_cooler"
+ possible_transfer_amounts = null
+ anchored = 1
+ New()
+ ..()
+ reagents.add_reagent("water",500)
+
+
+/obj/structure/reagent_dispensers/beerkeg
+ name = "beer keg"
+ desc = "A beer keg"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "beertankTEMP"
+ amount_per_transfer_from_this = 10
+ New()
+ ..()
+ reagents.add_reagent("beer",1000)
+
+/obj/structure/reagent_dispensers/beerkeg/blob_act()
+ explosion(src.loc,0,3,5,7,10)
+ del(src)
diff --git a/code/modules/chemical/syringe_gun.dm b/code/modules/chemical/syringe_gun.dm
new file mode 100644
index 00000000000..75cdf2913bd
--- /dev/null
+++ b/code/modules/chemical/syringe_gun.dm
@@ -0,0 +1,119 @@
+
+
+
+/obj/item/weapon/gun/syringe
+ name = "syringe gun"
+ desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "syringegun"
+ item_state = "syringegun"
+ w_class = 3.0
+ throw_speed = 2
+ throw_range = 10
+ force = 4.0
+ var/list/syringes = new/list()
+ var/max_syringes = 1
+ m_amt = 2000
+
+ examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\blue [syringes.len] / [max_syringes] syringes."
+
+ attackby(obj/item/I as obj, mob/user as mob)
+
+ if(istype(I, /obj/item/weapon/reagent_containers/syringe))
+ if(syringes.len < max_syringes)
+ user.drop_item()
+ I.loc = src
+ syringes += I
+ user << "\blue You put the syringe in [src]."
+ user << "\blue [syringes.len] / [max_syringes] syringes."
+ else
+ usr << "\red [src] cannot hold more syringes."
+
+ afterattack(obj/target, mob/user , flag)
+ if(!isturf(target.loc) || target == user) return
+
+ if(syringes.len)
+ spawn(0) fire_syringe(target,user)
+ else
+ usr << "\red [src] is empty."
+
+ proc
+ fire_syringe(atom/target, mob/user)
+ if (locate (/obj/structure/table, src.loc))
+ return
+ else
+ var/turf/trg = get_turf(target)
+ var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src))
+ var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
+ if((!S) || (!S.reagents)) //ho boy! wot runtimes!
+ return
+ S.reagents.trans_to(D, S.reagents.total_volume)
+ syringes -= S
+ del(S)
+ D.icon_state = "syringeproj"
+ D.name = "syringe"
+ playsound(user.loc, 'syringeproj.ogg', 50, 1)
+
+ for(var/i=0, i<6, i++)
+ if(!D) break
+ if(D.loc == trg) break
+ step_towards(D,trg)
+
+ if(D)
+ for(var/mob/living/carbon/M in D.loc)
+ if(!istype(M,/mob/living/carbon)) continue
+ if(M == user) continue
+ //Syringe gun attack logging by Yvarov
+ var/R
+ if(D.reagents)
+ for(var/datum/reagent/A in D.reagents.reagent_list)
+ R += A.id + " ("
+ R += num2text(A.volume) + "),"
+ if (istype(M, /mob))
+ M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
+ user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])"
+ log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])")
+ else
+ M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])"
+ log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])")
+ if(D.reagents)
+ D.reagents.trans_to(M, 15)
+ M.take_organ_damage(5)
+ for(var/mob/O in viewers(world.view, D))
+ O.show_message("\red [M.name] is hit by the syringe!", 1)
+
+ del(D)
+ if(D)
+ for(var/atom/A in D.loc)
+ if(A == user) continue
+ if(A.density) del(D)
+
+ sleep(1)
+
+ if (D) spawn(10) del(D)
+
+ return
+
+/obj/item/weapon/gun/syringe/rapidsyringe
+ name = "rapid syringe gun"
+ desc = "A modification of the syringe gun design, using a rotating cylinder to store up to four syringes."
+ icon_state = "rapidsyringegun"
+ max_syringes = 4
+
+
+/obj/effect/syringe_gun_dummy
+ name = ""
+ desc = ""
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "null"
+ anchored = 1
+ density = 0
+
+ New()
+ var/datum/reagents/R = new/datum/reagents(15)
+ reagents = R
+ R.my_atom = src
\ No newline at end of file