diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index c3da908ee1..04ce1bbe36 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -8,6 +8,8 @@
#define ismovableatom(A) (istype(A, /atom/movable))
+#define isatom(A) (istype(A, /atom))
+
//Turfs
//#define isturf(A) (istype(A, /turf)) This is actually a byond built-in. Added here for completeness sake.
diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index d4b75e3892..0c025aab44 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -20,6 +20,7 @@
var/last_inserted_id
var/last_amount_inserted
var/last_insert_success
+ var/precise_insertion = FALSE
var/datum/callback/precondition
//MAX_STACK_SIZE = 50
//MINERAL_MATERIAL_AMOUNT = 2000
@@ -70,10 +71,21 @@
if(!has_space(material_amount))
to_chat(user, "[parent] is full. Please remove metal or glass from [parent] in order to insert more.")
return
+ INVOKE_ASYNC(src, .proc/user_insert, I, user)
+
+/datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user)
+ var/requested_amount
+ if(istype(I, /obj/item/stack) && precise_insertion)
+ var/atom/current_parent = parent
+ requested_amount = input(user, "How much do you want to insert?", "Inserting sheets") as num|null
+ if(isnull(requested_amount) || (requested_amount <= 0))
+ return
+ if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || !user.canUseTopic(current_parent) || !user.is_holding(I) || !user.Adjacent(current_parent))
+ return
if(!user.temporarilyRemoveItemFromInventory(I))
to_chat(user, "[I] is stuck to you and cannot be placed into [parent].")
return
- var/inserted = insert_item(I)
+ var/inserted = insert_item(I, stack_amt = requested_amount)
if(inserted)
last_insert_success = TRUE
if(istype(I, /obj/item/stack))
@@ -84,7 +96,7 @@
to_chat(user, "You insert a material total of [inserted] into [parent].")
qdel(I)
else
- user.put_in_active_hand(I)
+ user.put_in_active_hand(I)
//For inserting an amount of material
/datum/component/material_container/proc/insert_amount(amt, id = null)
@@ -101,21 +113,25 @@
M.amount += amt
total_amount += amt
return (total_amount - total_amount_saved)
- return 0
+ return FALSE
/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt = 0)
+ if(isnull(amt))
+ amt = S.amount
+
if(amt <= 0)
- return 0
+ return FALSE
+
if(amt > S.amount)
amt = S.amount
var/material_amt = get_item_material_amount(S)
if(!material_amt)
- return 0
+ return FALSE
amt = min(amt, round(((max_amount - total_amount) / material_amt)))
if(!amt)
- return 0
+ return FALSE
last_inserted_id = insert_materials(S,amt)
last_inserted_type = S.type
@@ -123,16 +139,15 @@
last_amount_inserted = amt
return amt
-/datum/component/material_container/proc/insert_item(obj/item/I, multiplier = 1)
+/datum/component/material_container/proc/insert_item(obj/item/I, multiplier = 1, stack_amt)
if(!I)
- return 0
+ return FALSE
if(istype(I, /obj/item/stack))
- var/obj/item/stack/S = I
- return insert_stack(I, S.amount)
+ return insert_stack(I, stack_amt)
var/material_amount = get_item_material_amount(I)
if(!material_amount || !has_space(material_amount))
- return 0
+ return FALSE
last_inserted_id = insert_materials(I, multiplier)
last_inserted_type = I.type
@@ -155,13 +170,13 @@
//mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200)
/datum/component/material_container/proc/use_amount(list/mats, multiplier=1)
if(!mats || !mats.len)
- return 0
+ return FALSE
var/datum/material/M
for(var/MAT in materials)
M = materials[MAT]
if(M.amount < (mats[MAT] * multiplier))
- return 0
+ return FALSE
var/total_amount_save = total_amount
for(var/MAT in materials)
@@ -179,7 +194,7 @@
M.amount -= amt
total_amount -= amt
return amt
- return 0
+ return FALSE
/datum/component/material_container/proc/can_use_amount(amt, id, list/mats)
if(amt && id)
@@ -198,7 +213,7 @@
//For spawning mineral sheets; internal use only
/datum/component/material_container/proc/retrieve(sheet_amt, datum/material/M, target = null)
if(!M.sheet_type)
- return 0
+ return FALSE
if(sheet_amt > 0)
if(M.amount < (sheet_amt * MINERAL_MATERIAL_AMOUNT))
sheet_amt = round(M.amount / MINERAL_MATERIAL_AMOUNT)
@@ -215,12 +230,12 @@
count += sheet_amt
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.id)
return count
- return 0
+ return FALSE
/datum/component/material_container/proc/retrieve_sheets(sheet_amt, id, target = null)
if(materials[id])
return retrieve(sheet_amt, materials[id], target)
- return 0
+ return FALSE
/datum/component/material_container/proc/retrieve_amount(amt, id, target)
return retrieve_sheets(amount2sheet(amt), id, target)
@@ -238,24 +253,24 @@
/datum/component/material_container/proc/has_materials(list/mats, multiplier=1)
if(!mats || !mats.len)
- return 0
+ return FALSE
var/datum/material/M
for(var/MAT in mats)
M = materials[MAT]
if(M.amount < (mats[MAT] * multiplier))
- return 0
- return 1
+ return FALSE
+ return TRUE
/datum/component/material_container/proc/amount2sheet(amt)
if(amt >= MINERAL_MATERIAL_AMOUNT)
return round(amt / MINERAL_MATERIAL_AMOUNT)
- return 0
+ return FALSE
/datum/component/material_container/proc/sheet2amount(sheet_amt)
if(sheet_amt > 0)
return sheet_amt * MINERAL_MATERIAL_AMOUNT
- return 0
+ return FALSE
/datum/component/material_container/proc/amount(id)
var/datum/material/M = materials[id]
@@ -265,7 +280,7 @@
//if this container does not support glass, any glass in 'I' will not be taken into account
/datum/component/material_container/proc/get_item_material_amount(obj/item/I)
if(!istype(I))
- return 0
+ return FALSE
var/material_amount = 0
for(var/MAT in materials)
material_amount += I.materials[MAT]
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 5d7be7fbd8..a6fffea19a 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -56,6 +56,7 @@
. = ..()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE)
materials.insert_amount(starting_amount)
+ materials.precise_insertion = TRUE
using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost)
/obj/machinery/droneDispenser/preloaded
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 747647b1a5..524dc4e5b5 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -35,9 +35,10 @@
)
/obj/machinery/mecha_part_fabricator/Initialize()
- AddComponent(/datum/component/material_container,
+ var/datum/component/material_container/materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE),
FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready))
+ materials.precise_insertion = TRUE
. = ..()
files = new /datum/research(src) //Setup the research data holder.
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 311efd0140..a341121390 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -1,94 +1,99 @@
+
+#define MILK_TO_BUTTER_COEFF 15
+
/obj/machinery/reagentgrinder
- name = "All-In-One Grinder"
- desc = "From BlenderTech. Will It Blend? Let's test it out!"
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "juicer1"
- layer = BELOW_OBJ_LAYER
- anchored = TRUE
- use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
- pass_flags = PASSTABLE
- resistance_flags = ACID_PROOF
- var/operating = FALSE
- var/obj/item/reagent_containers/beaker = null
- var/limit = 10
+ name = "All-In-One Grinder"
+ desc = "From BlenderTech. Will It Blend? Let's test it out!"
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "juicer1"
+ layer = BELOW_OBJ_LAYER
+ anchored = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 5
+ active_power_usage = 100
+ pass_flags = PASSTABLE
+ resistance_flags = ACID_PROOF
+ var/operating = FALSE
+ var/obj/item/reagent_containers/beaker = null
+ var/limit = 10
- var/static/list/blend_items = list(
- //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/mineral/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/silver = list("silver" = 20),
- /obj/item/stack/sheet/mineral/gold = list("gold" = 20),
- /obj/item/stack/sheet/bluespace_crystal = list("bluespace" = 20),
- /obj/item/ore/bluespace_crystal = list("bluespace" = 20),
- /obj/item/grown/nettle/basic = list("sacid" = 0),
- /obj/item/grown/nettle/death = list("facid" = 0, "sacid" = 0),
- /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0),
- //Blender Stuff
- /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
- /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
- /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
- /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5),
- /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5),
- /obj/item/reagent_containers/food/snacks/donut = list("sprinkles" = -2, "sugar" = 1),
- /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
- /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0),
- /obj/item/reagent_containers/food/snacks/egg = list("eggyolk" = -5),
- //Grinder stuff, but only if dry
- /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
- /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
- /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
- /obj/item/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/slime_extract = list(),
- /obj/item/reagent_containers/pill = list(),
- /obj/item/reagent_containers/food = list(),
- /obj/item/reagent_containers/honeycomb = list(),
- /obj/item/toy/crayon = list())
+ var/static/list/blend_items = list(
+ //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/mineral/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/silver = list("silver" = 20),
+ /obj/item/stack/sheet/mineral/gold = list("gold" = 20),
+ /obj/item/stack/sheet/bluespace_crystal = list("bluespace" = 20),
+ /obj/item/ore/bluespace_crystal = list("bluespace" = 20),
+ /obj/item/grown/nettle/basic = list("sacid" = 0),
+ /obj/item/grown/nettle/death = list("facid" = 0, "sacid" = 0),
+ /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0),
+ //Blender Stuff
+ /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
+ /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5),
+ /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5),
+ /obj/item/reagent_containers/food/snacks/donut = list("sprinkles" = -2, "sugar" = 1),
+ /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0),
+ /obj/item/reagent_containers/food/snacks/egg = list("eggyolk" = -5),
+ //Grinder stuff, but only if dry
+ /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
+ /obj/item/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/slime_extract = list(),
+ /obj/item/reagent_containers/pill = list(),
+ /obj/item/reagent_containers/food = list(),
+ /obj/item/reagent_containers/honeycomb = list(),
+ /obj/item/toy/crayon = list())
- var/static/list/juice_items = list(
- //Juicer Stuff
- /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0),
- /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0),
- /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0),
- /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0),
- /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0),
- /obj/item/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0))
+ var/static/list/juice_items = list(
+ //Juicer Stuff
+ /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0))
- var/static/list/dried_items = list(
- //Grinder stuff, but only if dry,
- /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
- /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
- /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
- /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0))
+ var/static/list/dried_items = list(
+ //Grinder stuff, but only if dry,
+ /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0),
+ /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0))
- var/list/holdingitems = list()
+ var/list/holdingitems
/obj/machinery/reagentgrinder/Initialize()
. = ..()
+ holdingitems = list()
beaker = new /obj/item/reagent_containers/glass/beaker/large(src)
beaker.desc += " May contain blended dust. Don't breathe this in!"
/obj/machinery/reagentgrinder/Destroy()
QDEL_NULL(beaker)
+ drop_all_items()
return ..()
/obj/machinery/reagentgrinder/contents_explosion(severity, target)
@@ -96,14 +101,22 @@
beaker.ex_act(severity, target)
/obj/machinery/reagentgrinder/handle_atom_del(atom/A)
- ..()
+ . = ..()
if(A == beaker)
beaker = null
update_icon()
updateUsrDialog()
+ if(holdingitems[A])
+ holdingitems -= A
+
+/obj/machinery/reagentgrinder/proc/drop_all_items()
+ for(var/i in holdingitems)
+ var/atom/movable/AM = i
+ AM.forceMove(drop_location())
+ holdingitems = list()
/obj/machinery/reagentgrinder/deconstruct(disassembled = TRUE)
- new /obj/item/stack/sheet/metal (loc, 3)
+ new /obj/item/stack/sheet/metal (drop_location(), 3)
qdel(src)
/obj/machinery/reagentgrinder/update_icon()
@@ -113,380 +126,344 @@
icon_state = "juicer0"
/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params)
- if(default_unfasten_wrench(user, I))
- return
+ if(default_unfasten_wrench(user, I))
+ return
- if (istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1) )
- if (!beaker)
- if(!user.transferItemToLoc(I, src))
- return 1
- beaker = I
- update_icon()
- src.updateUsrDialog()
- else
- to_chat(user, "There's already a container inside [src].")
- return 1 //no afterattack
+ if (istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1) )
+ if (!beaker)
+ if(!user.transferItemToLoc(I, src))
+ to_chat(user, "[I] is stuck to your hand!")
+ return TRUE
+ beaker = I
+ update_icon()
+ updateUsrDialog()
+ else
+ to_chat(user, "There's already a container inside [src].")
+ return TRUE //no afterattack
- if(is_type_in_list(I, dried_items))
- if(istype(I, /obj/item/reagent_containers/food/snacks/grown))
- var/obj/item/reagent_containers/food/snacks/grown/G = I
- if(!G.dry)
- to_chat(user, "You must dry [G] first!")
- return 1
+ if(is_type_in_list(I, dried_items))
+ if(istype(I, /obj/item/reagent_containers/food/snacks/grown))
+ var/obj/item/reagent_containers/food/snacks/grown/G = I
+ if(!G.dry)
+ to_chat(user, "You must dry [G] first!")
+ return TRUE
- if(holdingitems && holdingitems.len >= limit)
- to_chat(usr, "The machine cannot hold anymore items.")
- return 1
+ if(length(holdingitems) >= limit)
+ to_chat(user, "The machine cannot hold anymore items.")
+ return TRUE
- //Fill machine with a bag!
- if(istype(I, /obj/item/storage/bag))
- var/obj/item/storage/bag/B = I
- for (var/obj/item/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
- to_chat(user, "You fill [src] to the brim.")
- break
+ //Fill machine with a bag!
+ if(istype(I, /obj/item/storage/bag))
+ var/obj/item/storage/bag/B = I
+ for (var/obj/item/reagent_containers/food/snacks/grown/G in B.contents)
+ B.remove_from_storage(G, src)
+ holdingitems[G] = TRUE
+ if(length(holdingitems) >= limit) //Sanity checking so the blender doesn't overfill
+ to_chat(user, "You fill [src] to the brim.")
+ break
- if(!I.contents.len)
- to_chat(user, "You empty [I] into [src].")
+ if(!I.contents.len)
+ to_chat(user, "You empty [I] into [src].")
- src.updateUsrDialog()
- return 1
+ updateUsrDialog()
+ return TRUE
- if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items))
- if(user.a_intent == INTENT_HARM)
- return ..()
- else
- to_chat(user, "Cannot refine into a reagent!")
- return 1
+ if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items))
+ if(user.a_intent == INTENT_HARM)
+ return ..()
+ else
+ to_chat(user, "Cannot refine into a reagent!")
+ return TRUE
- if(user.transferItemToLoc(I, src))
- holdingitems += I
- src.updateUsrDialog()
- return 0
+ if(user.transferItemToLoc(I, src))
+ holdingitems[I] = TRUE
+ updateUsrDialog()
+ return FALSE
/obj/machinery/reagentgrinder/attack_paw(mob/user)
- return src.attack_hand(user)
+ return attack_hand(user)
/obj/machinery/reagentgrinder/attack_ai(mob/user)
- return 0
+ return FALSE
/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 = FALSE
+ var/is_beaker_ready = FALSE
+ var/processing_chamber = ""
+ var/beaker_contents = ""
+ var/dat = ""
- if(!operating)
- for (var/obj/item/O in holdingitems)
- processing_chamber += "\A [O.name]
"
+ if(!operating)
+ for (var/i in holdingitems)
+ var/obj/item/O = i
+ processing_chamber += "\A [O.name]
"
- if (!processing_chamber)
- is_chamber_empty = 1
- processing_chamber = "Nothing."
- if (!beaker)
- beaker_contents = "No beaker attached.
"
- else
- is_beaker_ready = 1
- beaker_contents = "The beaker contains:
"
- var/anything = 0
- for(var/datum/reagent/R in beaker.reagents.reagent_list)
- anything = 1
- beaker_contents += "[R.volume] - [R.name]
"
- if(!anything)
- beaker_contents += "Nothing
"
-
-
- dat = {"
- Processing chamber contains:
- [processing_chamber]
- [beaker_contents]