more work

This commit is contained in:
Fox-McCloud
2017-01-22 01:46:48 -05:00
parent ea76990b7a
commit 10c0e734c3
19 changed files with 1046 additions and 524 deletions
@@ -3,62 +3,84 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "juicer1"
layer = 2.9
density = 1
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 100
var/inuse = 0
pass_flags = PASSTABLE
var/operating = 0
var/obj/item/weapon/reagent_containers/beaker = null
var/limit = 10
//IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent
var/list/blend_items = list (
//Sheets
/obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20),
/obj/item/stack/sheet/mineral/uranium = list("uranium" = 20),
/obj/item/stack/sheet/mineral/bananium = list("banana" = 20),
/obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20),
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
/obj/item/weapon/grown/novaflower = list("capsaicin" = 0),
//Sheets
/obj/item/stack/sheet/mineral/plasma = list("plasma" = 20),
/obj/item/stack/sheet/metal = list("iron" = 20),
/obj/item/stack/sheet/plasteel = list("iron" = 20, "plasma" = 20),
/obj/item/stack/sheet/wood = list("carbon" = 20),
/obj/item/stack/sheet/glass = list("silicon" = 20),
/obj/item/stack/sheet/rglass = list("silicon" = 20, "iron" = 20),
/obj/item/stack/sheet/mineral/uranium = list("uranium" = 20),
/obj/item/stack/sheet/mineral/bananium = list("banana" = 20),
/obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20),
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
/obj/item/weapon/grown/nettle/basic = list("sacid" = 0),
/obj/item/weapon/grown/nettle/death = list("facid" = 0, "sacid" = 0),
/obj/item/weapon/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0),
//archaeology!
///obj/item/weapon/rocksliver = list("ground_rock" = 50),
//Blender Stuff
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/oat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/egg = list("eggyolk" = -5),
//Grinder stuff, but only if dry
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0),
//All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.!
/obj/item/weapon/reagent_containers/food = list(),
/obj/item/weapon/reagent_containers/honeycomb = list()
)
var/list/blend_tags = list (
"nettle" = list("sacid" = 0),
"deathnettle" = list("facid" = 0),
"soybeans" = list("soymilk" = 0),
"tomato" = list("ketchup" = 0),
"wheat" = list("flour" = -5),
"rice" = list("rice" = -5),
"cherries" = list("cherryjelly" = 0),
//All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.!
/obj/item/slime_extract = list(),
/obj/item/weapon/reagent_containers/food = list(),
/obj/item/weapon/reagent_containers/honeycomb = list()
)
var/list/juice_items = list (
/obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0),
//Juicer Stuff
/obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/banana = list("banana" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/potato = list("potato" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0),
)
var/list/juice_tags = list (
"tomato" = list("tomatojuice" = 0),
"carrot" = list("carrotjuice" = 0),
"berries" = list("berryjuice" = 0),
"banana" = list("banana" = 0),
"potato" = list("potato" = 0),
"lemon" = list("lemonjuice" = 0),
"orange" = list("orangejuice" = 0),
"lime" = list("limejuice" = 0),
"poisonberries" = list("poisonberryjuice" = 0),
"grapes" = list("grapejuice" = 0),
"corn" = list("cornoil" = 0),
var/list/dried_items = list(
//Grinder stuff, but only if dry,
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0)
)
var/list/holdingitems = list()
@@ -68,348 +90,352 @@
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
return
/obj/machinery/reagentgrinder/Destroy()
if(beaker)
qdel(beaker)
beaker = null
return ..()
/obj/machinery/reagentgrinder/ex_act(severity)
if(beaker)
beaker.ex_act(severity)
..()
/obj/machinery/reagentgrinder/update_icon()
icon_state = "juicer"+num2text(!isnull(beaker))
return
if(beaker)
icon_state = "juicer1"
else
icon_state = "juicer0"
/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params)
if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker))
if(beaker)
return 1
else
if(!user.drop_item())
to_chat(user, "<span class='warning'>[O] is stuck to you!</span>")
/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params)
if(default_unfasten_wrench(user, I))
return
beaker = O
O.forceMove(src)
update_icon()
updateUsrDialog()
return 0
if(holdingitems && holdingitems.len >= limit)
to_chat(usr, "<span class='warning'>The machine cannot hold anymore items.</span>")
return 1
if (istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER) )
if (!beaker)
if(!user.drop_item())
return 1
beaker = I
beaker.loc = src
update_icon()
src.updateUsrDialog()
else
user << "<span class='warning'>There's already a container inside.</span>"
return 1 //no afterattack
//Fill machine with a plantbag!
if(istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/storage/bag/plants/PB = O
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents)
PB.remove_from_storage(G, src)
holdingitems += G
if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill
to_chat(user, "<span class='notice>You fill the All-In-One grinder to the brim.</span>")
break
if(is_type_in_list(I, dried_items))
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I
if(!G.dry)
user << "<span class='warning'>You must dry that first!</span>"
return 1
if(!PB.contents.len)
to_chat(user, "<span class='notice'>You empty [PB] into the All-In-One grinder.</span>")
if(holdingitems && holdingitems.len >= limit)
usr << "The machine cannot hold anymore items."
return 1
updateUsrDialog()
return 0
//Fill machine with a bag!
if(istype(I, /obj/item/weapon/storage/bag))
var/obj/item/weapon/storage/bag/B = I
for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in B.contents)
B.remove_from_storage(G, src)
holdingitems += G
if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill
user << "<span class='notice'>You fill the All-In-One grinder to the brim.</span>"
break
if(!I.contents.len)
user << "<span class='notice'>You empty the plant bag into the All-In-One grinder.</span>"
if(!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items))
to_chat(user, "<span class='warning'>Cannot refine into a reagent.</span>")
return 1
src.updateUsrDialog()
return 1
user.unEquip(O)
O.forceMove(src)
holdingitems += O
updateUsrDialog()
return 0
if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items))
if(user.a_intent == I_HARM)
return ..()
else
user << "<span class='warning'>Cannot refine into a reagent!</span>"
return 1
if(user.drop_item())
I.loc = src
holdingitems += I
src.updateUsrDialog()
return 0
/obj/machinery/reagentgrinder/attack_ai(mob/user)
return 0
return 0
/obj/machinery/reagentgrinder/attack_hand(mob/user)
user.set_machine(src)
interact(user)
user.set_machine(src)
interact(user)
/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu
var/is_chamber_empty = 0
var/is_beaker_ready = 0
var/processing_chamber = ""
var/beaker_contents = ""
var/dat = ""
var/is_chamber_empty = 0
var/is_beaker_ready = 0
var/processing_chamber = ""
var/beaker_contents = ""
var/dat = ""
if(!inuse)
for(var/obj/item/O in holdingitems)
processing_chamber += "\A [O.name]<BR>"
if(!operating)
for (var/obj/item/O in holdingitems)
processing_chamber += "\A [O.name]<BR>"
if(!processing_chamber)
is_chamber_empty = 1
processing_chamber = "Nothing."
if(!beaker)
beaker_contents = "<B>No beaker attached.</B><br>"
if (!processing_chamber)
is_chamber_empty = 1
processing_chamber = "Nothing."
if (!beaker)
beaker_contents = "<B>No beaker attached.</B><br>"
else
is_beaker_ready = 1
beaker_contents = "<B>The beaker contains:</B><br>"
var/anything = 0
for(var/datum/reagent/R in beaker.reagents.reagent_list)
anything = 1
beaker_contents += "[R.volume] - [R.name]<br>"
if(!anything)
beaker_contents += "Nothing<br>"
dat = {"
<b>Processing chamber contains:</b><br>
[processing_chamber]<br>
[beaker_contents]<hr>
"}
if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
dat += "<A href='?src=\ref[src];action=grind'>Grind the reagents</a><BR>"
dat += "<A href='?src=\ref[src];action=juice'>Juice the reagents</a><BR><BR>"
if(holdingitems && holdingitems.len > 0)
dat += "<A href='?src=\ref[src];action=eject'>Eject the reagents</a><BR>"
if (beaker)
dat += "<A href='?src=\ref[src];action=detach'>Detach the beaker</a><BR>"
else
is_beaker_ready = 1
beaker_contents = "<B>The beaker contains:</B><br>"
var/anything = 0
for(var/datum/reagent/R in beaker.reagents.reagent_list)
anything = 1
beaker_contents += "[R.volume] - [R.name]<br>"
if(!anything)
beaker_contents += "Nothing<br>"
dat += "Please wait..."
dat = {"
<b>Processing chamber contains:</b><br>
[processing_chamber]<br>
[beaker_contents]<hr>
"}
if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
dat += "<A href='?src=[UID()];action=grind'>Grind the reagents</a><BR>"
dat += "<A href='?src=[UID()];action=juice'>Juice the reagents</a><BR><BR>"
if(holdingitems && holdingitems.len > 0)
dat += "<A href='?src=[UID()];action=eject'>Eject the reagents</a><BR>"
if(beaker)
dat += "<A href='?src=[UID()];action=detach'>Detach the beaker</a><BR>"
else
dat += "Please wait..."
user << browse("<HEAD><TITLE>All-In-One Grinder</TITLE></HEAD><TT>[dat]</TT>", "window=reagentgrinder")
onclose(user, "reagentgrinder")
return
var/datum/browser/popup = new(user, "reagentgrinder", "All-In-One Grinder")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open(1)
return
/obj/machinery/reagentgrinder/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
if(operating)
updateUsrDialog()
return
switch(href_list["action"])
if("grind")
if ("grind")
grind()
if("juice")
juice()
if("eject")
eject()
if("detach")
if ("detach")
detach()
updateUsrDialog()
return
/obj/machinery/reagentgrinder/proc/detach()
if(usr.stat != 0)
return
if(!beaker)
return
beaker.forceMove(loc)
beaker = null
update_icon()
if (usr.stat != 0)
return
if (!beaker)
return
beaker.loc = src.loc
beaker = null
update_icon()
updateUsrDialog()
/obj/machinery/reagentgrinder/proc/eject()
if(usr.stat != 0)
return
if(holdingitems && holdingitems.len == 0)
return
if (usr.stat != 0)
return
if (holdingitems && holdingitems.len == 0)
return
for(var/obj/item/O in holdingitems)
O.forceMove(loc)
holdingitems -= O
holdingitems = list()
for(var/obj/item/O in holdingitems)
O.loc = src.loc
holdingitems -= O
holdingitems = list()
updateUsrDialog()
/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O)
for(var/i in blend_items)
if(istype(O, i))
return 1
return 0
for (var/i in blend_items)
if(istype(O, i))
return 1
return 0
/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O)
for(var/i in blend_items)
if(istype(O, i))
return blend_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/O)
for (var/i in blend_items)
if (istype(O, i))
return blend_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O)
for(var/i in blend_items)
if(istype(O, i))
return blend_items[i]
for(var/i in blend_items)
if(istype(O, i))
return blend_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O)
for(var/i in juice_items)
if(istype(O, i))
return juice_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O)
for(var/i in blend_tags)
if(O.seed.kitchen_tag == i)
return blend_tags[i]
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O)
for(var/i in juice_tags)
if(O.seed.kitchen_tag == i)
return juice_tags[i]
for(var/i in juice_items)
if(istype(O, i))
return juice_items[i]
/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O)
if(!istype(O))
return 5
else if(O.potency == -1)
return 5
else
return round(O.potency)
if (!istype(O) || !O.seed)
return 5
else if (O.seed.potency == -1)
return 5
else
return round(O.seed.potency)
/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O)
if(!istype(O))
return 5
else if(O.potency == -1)
return 5
else
return round(5*sqrt(O.potency))
if (!istype(O) || !O.seed)
return 5
else if (O.seed.potency == -1)
return 5
else
return round(5*sqrt(O.seed.potency))
/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O)
holdingitems -= O
qdel(O)
holdingitems -= O
qdel(O)
/obj/machinery/reagentgrinder/proc/juice()
power_change()
if(stat & (NOPOWER|BROKEN))
return
if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume))
return
playsound(loc, 'sound/machines/juicer.ogg', 20, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
inuse = 1
spawn(50)
pixel_x = initial(pixel_x) //return to its spot after shaking
inuse = 0
interact(usr)
//Snacks
for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
power_change()
if(stat & (NOPOWER|BROKEN))
return
if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume))
return
playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking
operating = 1
updateUsrDialog()
spawn(50)
pixel_x = initial(pixel_x) //return to its spot after shaking
operating = 0
updateUsrDialog()
var/allowed = null
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
allowed = get_allowed_juice_by_tag(O)
else
allowed = get_allowed_juice_by_id(O)
if(isnull(allowed))
break
//Snacks
for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
for(var/r_id in allowed)
var/allowed = get_allowed_juice_by_id(O)
if(isnull(allowed))
break
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = get_juice_amount(O)
for (var/r_id in allowed)
beaker.reagents.add_reagent(r_id, min(amount, space))
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = get_juice_amount(O)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
beaker.reagents.add_reagent(r_id, min(amount, space))
remove_object(O)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
remove_object(O)
/obj/machinery/reagentgrinder/proc/grind()
power_change()
if(stat & (NOPOWER|BROKEN))
return
if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume))
return
playsound(loc, 'sound/machines/blender.ogg', 50, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
inuse = 1
spawn(60)
pixel_x = initial(pixel_x) //return to its spot after shaking
inuse = 0
interact(usr)
//Snacks and Plants
for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
power_change()
if(stat & (NOPOWER|BROKEN))
return
if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume))
return
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking
operating = 1
updateUsrDialog()
spawn(60)
pixel_x = initial(pixel_x) //return to its spot after shaking
operating = 0
updateUsrDialog()
var/allowed = null
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
allowed = get_allowed_snack_by_tag(O)
else
allowed = get_allowed_snack_by_id(O)
if(isnull(allowed))
break
//Snacks and Plants
for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
for(var/r_id in allowed)
var/allowed = get_allowed_snack_by_id(O)
if(isnull(allowed))
break
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5")
if(amount == 0)
if(O.reagents != null && O.reagents.has_reagent("nutriment"))
beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space))
O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space))
if(O.reagents != null && O.reagents.has_reagent("plantmatter"))
beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space))
O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space))
else
if(O.reagents != null && O.reagents.has_reagent("nutriment"))
beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space))
O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space))
if(O.reagents != null && O.reagents.has_reagent("plantmatter"))
beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space))
O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space))
for (var/r_id in allowed)
else
O.reagents.trans_id_to(beaker, r_id, min(amount, space))
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
if(amount <= 0)
if(amount == 0)
if (O.reagents != null && O.reagents.has_reagent("nutriment"))
beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space))
O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space))
else
if (O.reagents != null && O.reagents.has_reagent("nutriment"))
beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space))
O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space))
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
else
O.reagents.trans_id_to(beaker, r_id, min(amount, space))
if(O.reagents.reagent_list.len == 0)
remove_object(O)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
//Sheets
for(var/obj/item/stack/sheet/O in holdingitems)
var/allowed = get_allowed_by_id(O)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
for(var/i = 1; i <= round(O.amount, 1); i++)
for(var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
beaker.reagents.add_reagent(r_id,min(amount, space))
if(space < amount)
break
if(i == round(O.amount, 1))
if(O.reagents.reagent_list.len == 0)
remove_object(O)
//Sheets
for (var/obj/item/stack/sheet/O in holdingitems)
var/allowed = get_allowed_by_id(O)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
for(var/i = 1; i <= round(O.amount, 1); i++)
for (var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
beaker.reagents.add_reagent(r_id,min(amount, space))
if (space < amount)
break
if (i == round(O.amount, 1))
remove_object(O)
break
//Plants
for (var/obj/item/weapon/grown/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/allowed = get_allowed_by_id(O)
for (var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
if (amount == 0)
if (O.reagents != null && O.reagents.has_reagent(r_id))
beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space))
else
beaker.reagents.add_reagent(r_id,min(amount, space))
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
remove_object(O)
break
//Plants
for(var/obj/item/weapon/grown/O in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/allowed = get_allowed_by_id(O)
for(var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
if(amount == 0)
if(O.reagents != null && O.reagents.has_reagent(r_id))
beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space))
else
beaker.reagents.add_reagent(r_id,min(amount, space))
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
remove_object(O)
//Slime Extractis
for (var/obj/item/slime_extract/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
if (O.reagents != null)
var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, min(amount, space))
if (O.Uses > 0)
beaker.reagents.add_reagent("slimejelly",min(20, space))
remove_object(O)
//xenoarch
/*for(var/obj/item/weapon/rocksliver/O in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/allowed = get_allowed_by_id(O)
for(var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
remove_object(O)*/
//Everything else - Transfers reagents from it into beaker
for(var/obj/item/weapon/reagent_containers/O in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, amount)
if(!O.reagents.total_volume)
remove_object(O)
//Everything else - Transfers reagents from it into beaker
for (var/obj/item/weapon/reagent_containers/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, amount)
if(!O.reagents.total_volume)
remove_object(O)
@@ -925,8 +925,8 @@
alien_weeds.healthcheck()
else if(istype(O, /obj/effect/glowshroom)) //even a small amount is enough to kill it
qdel(O)
else if(istype(O,/obj/structure/spacevine))
var/obj/structure/spacevine/SV = O
else if(istype(O,/obj/effect/spacevine))
var/obj/effect/spacevine/SV = O
SV.on_chem_effect(src)
/datum/reagent/atrazine/reaction_mob(mob/living/M, method=TOUCH, volume)