diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm
index 4f2750c0c06..0f7dcd15b4a 100644
--- a/code/datums/recipe.dm
+++ b/code/datums/recipe.dm
@@ -38,6 +38,7 @@
var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo
var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
var/time = 100 // 1/10 part of second
+ var/byproduct //example: = /obj/item/weapon/kitchen/mould // byproduct to return, such as a mould or trash
/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous
@@ -118,3 +119,9 @@
i_count = N_i
. = recipe
return .
+
+/datum/recipe/proc/get_byproduct()
+ if(byproduct)
+ return byproduct
+ else
+ return null
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 546b5956f0b..f1aae4943e3 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -344,12 +344,45 @@ to destroy them and players will be able to make replacements.
build_path = /obj/machinery/microwave
board_type = "machine"
origin_tech = "programming=1"
- frame_desc = "Requires 1 Micro Laser, 1 piece of cable and 1 Console Screen."
+ frame_desc = "Requires 1 Micro Laser, 2 pieces of cable and 1 Console Screen."
req_components = list(
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
+/obj/item/weapon/circuitboard/oven
+ name = "circuit board (Oven)"
+ build_path = /obj/machinery/oven
+ board_type = "machine"
+ origin_tech = "programming=1;plasmatech=1"
+ frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen."
+ req_components = list(
+ /obj/item/weapon/stock_parts/micro_laser = 2,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/console_screen = 1)
+
+/obj/item/weapon/circuitboard/grill
+ name = "circuit board (Grill)"
+ build_path = /obj/machinery/grill
+ board_type = "machine"
+ origin_tech = "programming=1;plasmatech=1"
+ frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen."
+ req_components = list(
+ /obj/item/weapon/stock_parts/micro_laser = 2,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/console_screen = 1)
+
+/obj/item/weapon/circuitboard/candy_maker
+ name = "circuit board (Candy Maker)"
+ build_path = /obj/machinery/candy_maker
+ board_type = "machine"
+ origin_tech = "programming=2"
+ frame_desc = "Requires 1 Manipulator, 5 pieces of cable and 1 Console Screen."
+ req_components = list(
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/console_screen = 1)
+
/obj/item/weapon/circuitboard/chem_dispenser
name = "circuit board (Portable Chem Dispenser)"
build_path = /obj/machinery/chem_dispenser/constructable
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index cd8e806fbb0..064bb7ff475 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -32,11 +32,11 @@
reagents.my_atom = src
if (!available_recipes)
available_recipes = new
- for (var/type in (typesof(/datum/recipe)-/datum/recipe))
+ for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave))
available_recipes+= new type
acceptable_items = new
acceptable_reagents = new
- for (var/datum/recipe/recipe in available_recipes)
+ for (var/datum/recipe/microwave/recipe in available_recipes)
for (var/item in recipe.items)
acceptable_items |= item
for (var/reagent in recipe.reagents)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index c8987cccad0..5ce8365adf4 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -786,11 +786,11 @@
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
- products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6,
+ products = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candybar = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 6)
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6)
- prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 20,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 30,/obj/item/weapon/reagent_containers/food/snacks/chips =25,
+ prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candybar = 20,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 30,/obj/item/weapon/reagent_containers/food/snacks/chips =25,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 30,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 20,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 30,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 25)
refill_canister = /obj/item/weapon/vending_refill/snack
@@ -1057,7 +1057,15 @@
desc = "A kitchen and restaurant equipment vendor"
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
- products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/utensil/fork = 6,/obj/item/weapon/kitchenknife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/chef/classic = 2,/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5,/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5)
+ products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/utensil/fork = 6,
+ /obj/item/weapon/kitchenknife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,
+ /obj/item/clothing/suit/chef/classic = 2,
+ /obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5,
+ /obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5,
+ /obj/item/weapon/kitchen/mould/bear = 1, /obj/item/weapon/kitchen/mould/worm = 1,
+ /obj/item/weapon/kitchen/mould/bean = 1, /obj/item/weapon/kitchen/mould/ball = 1,
+ /obj/item/weapon/kitchen/mould/cane = 1, /obj/item/weapon/kitchen/mould/cash = 1,
+ /obj/item/weapon/kitchen/mould/coin = 1, /obj/item/weapon/kitchen/mould/loli = 1)
contraband = list(/obj/item/weapon/kitchen/utensil/spoon = 2,/obj/item/weapon/kitchen/utensil/knife = 2,/obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/butch = 2)
/obj/machinery/vending/sovietsoda
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 4ad71cb9c93..5a5ae43957a 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -47,6 +47,14 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \
new/datum/stack_recipe("plastic spoon", /obj/item/weapon/kitchen/utensil/pspoon, 1, on_floor = 1), \
new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/utensil/pknife, 1, on_floor = 1), \
new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \
+ new/datum/stack_recipe("bear mould", /obj/item/weapon/kitchen/mould/bear, 1, on_floor = 1), \
+ new/datum/stack_recipe("worm mould", /obj/item/weapon/kitchen/mould/worm, 1, on_floor = 1), \
+ new/datum/stack_recipe("bean mould", /obj/item/weapon/kitchen/mould/bean, 1, on_floor = 1), \
+ new/datum/stack_recipe("ball mould", /obj/item/weapon/kitchen/mould/ball, 1, on_floor = 1), \
+ new/datum/stack_recipe("cane mould", /obj/item/weapon/kitchen/mould/cane, 1, on_floor = 1), \
+ new/datum/stack_recipe("cash mould", /obj/item/weapon/kitchen/mould/cash, 1, on_floor = 1), \
+ new/datum/stack_recipe("coin mould", /obj/item/weapon/kitchen/mould/coin, 1, on_floor = 1), \
+ new/datum/stack_recipe("sucker mould", /obj/item/weapon/kitchen/mould/loli, 1, on_floor = 1), \
)
var/global/list/datum/stack_recipe/clown_recipes = list ( \
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 320f9331427..69ab0899003 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -81,7 +81,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
throwforce = 10.0
flags = CONDUCT
origin_tech = "materials=1"
-
+
/obj/item/stack/sheet/metal/full/New()
..()
amount = 50
@@ -126,7 +126,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
recipes = plasteel_recipes
return ..()
-
+
/obj/item/stack/sheet/plasteel/full/New(var/loc, var/amount=null)
amount = 50
..(loc, amount)
@@ -188,6 +188,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
+ new/datum/stack_recipe("cardboard tube", /obj/item/weapon/c_tube), \
)
/obj/item/stack/sheet/cardboard //BubbleWrap
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 67f28494dea..eb6b59b95cd 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -56,6 +56,10 @@
can
name = "crushed can"
icon_state = "cola"
+ gum
+ name = "chewed gum"
+ desc = "NOT free candy."
+ icon_state = "gum"
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index b4288c7033c..9268883a017 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -7,6 +7,7 @@
* Kitchen knives
* Butcher's cleaver
* Rolling Pins
+ * Candy Moulds
*/
/obj/item/weapon/kitchen
@@ -214,4 +215,59 @@
w_class = 3.0
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
-/* Trays moved to /obj/item/weapon/storage/bag */
\ No newline at end of file
+/* Trays moved to /obj/item/weapon/storage/bag */
+
+/*
+ * Candy Moulds
+ */
+
+/obj/item/weapon/kitchen/mould
+ name = "generic candy mould"
+ desc = "You aren't sure what it's supposed to be."
+ icon_state = "mould"
+ force = 5
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 3
+ w_class = 2.0
+ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
+
+/obj/item/weapon/kitchen/mould/bear
+ name = "bear-shaped candy mould"
+ desc = "It has the shape of a small bear imprinted into it."
+ icon_state = "mould_bear"
+
+/obj/item/weapon/kitchen/mould/worm
+ name = "worm-shaped candy mould"
+ desc = "It has the shape of a worm imprinted into it."
+ icon_state = "mould_worm"
+
+/obj/item/weapon/kitchen/mould/bean
+ name = "bean-shaped candy mould"
+ desc = "It has the shape of a bean imprinted into it."
+ icon_state = "mould_bean"
+
+/obj/item/weapon/kitchen/mould/ball
+ name = "ball-shaped candy mould"
+ desc = "It has a small sphere imprinted into it."
+ icon_state = "mould_ball"
+
+/obj/item/weapon/kitchen/mould/cane
+ name = "cane-shaped candy mould"
+ desc = "It has the shape of a cane imprinted into it."
+ icon_state = "mould_cane"
+
+/obj/item/weapon/kitchen/mould/cash
+ name = "cash-shaped candy mould"
+ desc = "It has the shape and design of fake money imprinted into it."
+ icon_state = "mould_cash"
+
+/obj/item/weapon/kitchen/mould/coin
+ name = "coin-shaped candy mould"
+ desc = "It has the shape of a coin imprinted into it."
+ icon_state = "mould_coin"
+
+/obj/item/weapon/kitchen/mould/loli
+ name = "sucker mould"
+ desc = "It has the shape of a sucker imprinted into it."
+ icon_state = "mould_loli"
diff --git a/code/modules/food/candy_maker.dm b/code/modules/food/candy_maker.dm
new file mode 100644
index 00000000000..643d89b88e6
--- /dev/null
+++ b/code/modules/food/candy_maker.dm
@@ -0,0 +1,427 @@
+
+/obj/machinery/candy_maker
+ name = "candy machine"
+ desc = "Get yer box of deep fried deep fried deep fried deep fried cotton candy cereal sandwich cookies here!"
+ icon = 'icons/obj/cooking_machines.dmi'
+ icon_state = "candymaker_off"
+ layer = 2.9
+ density = 1
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 5
+ active_power_usage = 100
+ flags = OPENCONTAINER | NOREACT
+ var/operating = 0 // Is it on?
+ var/dirty = 0 // = {0..100} Does it need cleaning?
+ var/broken = 0 // ={0,1,2} How broken is it???
+ var/global/list/datum/recipe/available_recipes // List of the recipes you can use
+ var/global/list/acceptable_items // List of the items you can put in
+ var/global/list/acceptable_reagents // List of the reagents you can put in
+ var/global/max_n_of_items = 0
+ var/efficiency
+
+// see code/modules/food/recipes_candy.dm for recipes
+
+/*******************
+* Initialising
+********************/
+
+/obj/machinery/candy_maker/New()
+ //..() //do not need this
+ reagents = new/datum/reagents(100)
+ reagents.my_atom = src
+ if (!available_recipes)
+ available_recipes = new
+ for (var/type in (typesof(/datum/recipe/candy)-/datum/recipe/candy))
+ available_recipes+= new type
+ acceptable_items = new
+ acceptable_reagents = new
+ for (var/datum/recipe/candy/recipe in available_recipes)
+ for (var/item in recipe.items)
+ acceptable_items |= item
+ for (var/reagent in recipe.reagents)
+ acceptable_reagents |= reagent
+ if (recipe.items)
+ max_n_of_items = max(max_n_of_items,recipe.items.len)
+
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/candy_maker(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 5)
+ RefreshParts()
+
+
+/obj/machinery/candy_maker/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/candy_maker(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 5)
+ RefreshParts()
+
+/obj/machinery/candy_maker/RefreshParts()
+ var/E
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ E += M.rating
+ efficiency = E
+
+/*******************
+* Item Adding
+********************/
+
+/obj/machinery/candy_maker/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
+ if(operating)
+ return
+ if(!broken && dirty < 100)
+ if(default_deconstruction_screwdriver(user, "candymaker_open", "candymaker_off", O))
+ return
+ if(exchange_parts(user, O))
+ return
+ if(istype(O, /obj/item/weapon/wrench))
+ playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
+ if(anchored)
+ anchored = 0
+ user << "The [src] can now be moved."
+ return
+ else if(!anchored)
+ anchored = 1
+ user << "The [src] is now secured."
+ return
+
+ default_deconstruction_crowbar(O)
+
+ if(src.broken > 0)
+ if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
+ user.visible_message( \
+ "\blue [user] starts to fix part of the candy maker.", \
+ "\blue You start to fix part of the candy maker." \
+ )
+ if (do_after(user,20))
+ user.visible_message( \
+ "\blue [user] fixes part of the candy maker.", \
+ "\blue You have fixed part of the candy maker." \
+ )
+ src.broken = 1 // Fix it a bit
+ else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
+ user.visible_message( \
+ "\blue [user] starts to fix part of the candy maker.", \
+ "\blue You start to fix part of the candy maker." \
+ )
+ if (do_after(user,20))
+ user.visible_message( \
+ "\blue [user] fixes the candy maker.", \
+ "\blue You have fixed the candy maker." \
+ )
+ src.icon_state = "candymaker_off"
+ src.broken = 0 // Fix it!
+ src.dirty = 0 // just to be sure
+ src.flags = OPENCONTAINER
+ else
+ user << "\red It's broken!"
+ return 1
+ else if(src.dirty==100) // The candy_maker is all dirty so can't be used!
+ if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
+ user.visible_message( \
+ "\blue [user] starts to clean the candy maker.", \
+ "\blue You start to clean the candy maker." \
+ )
+ if (do_after(user,20))
+ user.visible_message( \
+ "\blue [user] has cleaned the candy maker.", \
+ "\blue You have cleaned the candy maker." \
+ )
+ src.dirty = 0 // It's clean!
+ src.broken = 0 // just to be sure
+ src.icon_state = "candymaker_off"
+ src.flags = OPENCONTAINER
+ else //Otherwise bad luck!!
+ user << "\red It's dirty!"
+ return 1
+ else if(is_type_in_list(O,acceptable_items))
+ if (contents.len>=max_n_of_items)
+ user << "\red This [src] is full of ingredients, you cannot put more."
+ return 1
+ if (istype(O,/obj/item/stack) && O:amount>1)
+ new O.type (src)
+ O:use(1)
+ user.visible_message( \
+ "\blue [user] has added one of [O] to \the [src].", \
+ "\blue You add one of [O] to \the [src].")
+ else
+ // user.unEquip(O) //This just causes problems so far as I can tell. -Pete
+ if(!user.drop_item())
+ user << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ return 0
+ O.loc = src
+ user.visible_message( \
+ "\blue [user] has added \the [O] to \the [src].", \
+ "\blue You add \the [O] to \the [src].")
+ else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
+ istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
+ istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
+ )
+ if (!O.reagents)
+ return 1
+ for (var/datum/reagent/R in O.reagents.reagent_list)
+ if (!(R.id in acceptable_reagents))
+ user << "\red Your [O] contains components unsuitable for cookery."
+ return 1
+ //G.reagents.trans_to(src,G.amount_per_transfer_from_this)
+ else if(istype(O,/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = O
+ user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]."
+ return 1
+ else
+ user << "\red You have no idea what you can cook with this [O]."
+ return 1
+ src.updateUsrDialog()
+
+/obj/machinery/candy_maker/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/candy_maker/attack_ai(mob/user as mob)
+ return 0
+
+/obj/machinery/candy_maker/attack_hand(mob/user as mob)
+ user.set_machine(src)
+ interact(user)
+
+/*******************
+* candy_maker Menu
+********************/
+
+/obj/machinery/candy_maker/interact(mob/user as mob) // The Candy Maker Menu
+ if(panel_open || !anchored)
+ return
+ var/dat = ""
+ if(src.broken > 0)
+ dat = {"Bzzzzttttt"}
+ else if(src.operating)
+ var/whimsy_word = pick("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction")
+ dat = {"[whimsy_word] in progress!
Please wait...!"}
+ else if(src.dirty==100)
+ dat = {"This candy maker is dirty!
Please clean it before use!"}
+ else
+ var/list/items_counts = new
+ var/list/items_measures = new
+ var/list/items_measures_p = new
+ for (var/obj/O in contents)
+ var/display_name = O.name
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
+ items_measures[display_name] = "egg"
+ items_measures_p[display_name] = "eggs"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
+ items_measures[display_name] = "tofu chunk"
+ items_measures_p[display_name] = "tofu chunks"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
+ items_measures[display_name] = "slab of meat"
+ items_measures_p[display_name] = "slabs of meat"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
+ display_name = "Turnovers"
+ items_measures[display_name] = "turnover"
+ items_measures_p[display_name] = "turnovers"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
+ items_measures[display_name] = "fillet of meat"
+ items_measures_p[display_name] = "fillets of meat"
+ items_counts[display_name]++
+ for (var/O in items_counts)
+ var/N = items_counts[O]
+ if (!(O in items_measures))
+ dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
+ else
+ if (N==1)
+ dat += {"[capitalize(O)]: [N] [items_measures[O]]
"}
+ else
+ dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"}
+
+ for (var/datum/reagent/R in reagents.reagent_list)
+ var/display_name = R.name
+ if (R.id == "capsaicin")
+ display_name = "Hotsauce"
+ if (R.id == "frostoil")
+ display_name = "Coldsauce"
+ dat += {"[display_name]: [R.volume] unit\s
"}
+
+ if (items_counts.len==0 && reagents.reagent_list.len==0)
+ dat = {"The candy maker is empty
"}
+ else
+ dat = {"Ingredients:
[dat]"}
+ dat += {"