diff --git a/baystation12.dme b/baystation12.dme index e6ff26dfa36..34150e695b8 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -924,6 +924,12 @@ #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" +#include "code\modules\food\cereal_maker.dm" +#include "code\modules\food\customizables.dm" +#include "code\modules\food\deep_fryer.dm" +#include "code\modules\food\food_grill.dm" +#include "code\modules\food\icecream_vat.dm" +#include "code\modules\food\oven.dm" #include "code\modules\food\recipes_microwave.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\library\lib_items.dm" diff --git a/code/modules/food/cereal_maker.dm b/code/modules/food/cereal_maker.dm new file mode 100644 index 00000000000..920b4906905 --- /dev/null +++ b/code/modules/food/cereal_maker.dm @@ -0,0 +1,43 @@ +/obj/machinery/cerealmaker + name = "cereal maker" + desc = "Now with Dann O's available!" + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "cereal_off" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + var/on = FALSE //Is it making cereal already? + +/obj/machinery/cerealmaker/attackby(obj/item/I, mob/user) + if(on) + user << "[src] is already processing, please wait." + return + if(!istype(I, /obj/item/weapon/reagent_containers/food/snacks/)) + user << "Budget cuts won't let you put that in there." + return + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/cereal/)) + user << "That isn't going to fit." + return + else + user << "You put [I] into [src]." + on = TRUE + user.drop_item() + I.loc = src + icon_state = "cereal_on" + sleep(200) + icon_state = "cereal_off" + var/obj/item/weapon/reagent_containers/food/snacks/cereal/S = new(get_turf(src)) + var/image/img = new(I.icon, I.icon_state) + img.transform *= 0.7 + if(istype(I, /obj/item/weapon/reagent_containers/)) + var/obj/item/weapon/reagent_containers/food = I + food.reagents.trans_to(S, food.reagents.total_volume) + S.overlays += img + S.overlays += I.overlays + S.name = "box of [I] cereal" + playsound(loc, 'sound/machines/ding.ogg', 50, 1) + on = FALSE + qdel(I) + diff --git a/code/modules/food/customizables.dm b/code/modules/food/customizables.dm new file mode 100644 index 00000000000..632b1915b1c --- /dev/null +++ b/code/modules/food/customizables.dm @@ -0,0 +1,371 @@ +/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W as obj, mob/user as mob) + + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) + +/obj/item/trash/plate/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) + +/obj/item/trash/bowl + name = "bowl" + desc = "An empty bowl. Put some food in it to start making a soup." + icon = 'icons/obj/food.dmi' + icon_state = "soup" + +/obj/item/trash/bowl/attackby(obj/item/W as obj, mob/user as mob) + + if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) + S.attackby(W,user) + qdel(src) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable + name = "sandwich" + desc = "A sandwich! A timeless classic." + icon_state = "breadslice" + var/baseicon = "sandwich" + var/basename = "sandwich" + var/top = 1 //Do we have a top? + var/add_overlays = 1 //Do we stack? +// var/offsetstuff = 1 //Do we offset the overlays? + var/sandwich_limit = 10 + var/fullycustom = 0 + trash = /obj/item/trash/plate + bitesize = 2 + + var/list/ingredients = list() + + New() + ..() + reagents.add_reagent("nutriment", 8) + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza + name = "personal pizza" + desc = "A personalized pan pizza meant for only one person." + icon_state = "personal_pizza" + baseicon = "personal_pizza" + basename = "personal pizza" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta + name = "spagetti" + desc = "Noodles. With stuff. Delicious." + icon_state = "pasta_bot" + baseicon = "pasta_bot" + basename = "spagetti" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/bread + name = "bread" + desc = "Tasty bread." + icon_state = "breadcustom" + baseicon = "breadcustom" + basename = "bread" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/pie + name = "pie" + desc = "Tasty pie." + icon_state = "piecustom" + baseicon = "piecustom" + basename = "pie" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/cake + name = "cake" + desc = "A popular band." + icon_state = "cakecustom" + baseicon = "cakecustom" + basename = "cake" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/jelly + name = "jelly" + desc = "Totally jelly." + icon_state = "jellycustom" + baseicon = "jellycustom" + basename = "jelly" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/donkpocket + name = "donk pocket" + desc = "You wanna put a bangin-Oh nevermind." + icon_state = "donkcustom" + baseicon = "donkcustom" + basename = "donk pocket" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/kebab + name = "kebab" + desc = "Kebab or Kabab?" + icon_state = "kababcustom" + baseicon = "kababcustom" + basename = "kebab" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/salad + name = "salad" + desc = "Very tasty." + icon_state = "saladcustom" + baseicon = "saladcustom" + basename = "salad" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/waffles + name = "waffles" + desc = "Made with love." + icon_state = "wafflecustom" + baseicon = "wafflecustom" + basename = "waffles" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cookie + name = "cookie" + desc = "COOKIE!!1!" + icon_state = "cookiecustom" + baseicon = "cookiecustom" + basename = "cookie" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cotton + name = "flavored cotton candy" + desc = "Who can take a sunrise, sprinkle it with dew," + icon_state = "cottoncandycustom" + baseicon = "cottoncandycustom" + basename = "flavored cotton candy" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gummybear + name = "flavored giant gummy bear" + desc = "Cover it in chocolate and a miracle or two," + icon_state = "gummybearcustom" + baseicon = "gummybearcustom" + basename = "flavored giant gummy bear" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gummyworm + name = "flavored giant gummy worm" + desc = "The Candy Man can 'cause he mixes it with love," + icon_state = "gummywormcustom" + baseicon = "gummywormcustom" + basename = "flavored giant gummy worm" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/jellybean + name = "flavored giant jelly bean" + desc = "And makes the world taste good." + icon_state = "jellybeancustom" + baseicon = "jellybeancustom" + basename = "flavored giant jelly bean" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/jawbreaker + name = "flavored jawbreaker" + desc = "Who can take a rainbow, Wrap it in a sigh," + icon_state = "jawbreakercustom" + baseicon = "jawbreakercustom" + basename = "flavored jawbreaker" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/candycane + name = "flavored candy cane" + desc = "Soak it in the sun and make strawberry-lemon pie," + icon_state = "candycanecustom" + baseicon = "candycanecustom" + basename = "flavored candy cane" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gum + name = "flavored gum" + desc = "The Candy Man can 'cause he mixes it with love and makes the world taste good. And the world tastes good 'cause the Candy Man thinks it should..." + icon_state = "gumcustom" + baseicon = "gumcustom" + basename = "flavored gum" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/donut + name = "filled donut" + desc = "Donut eat this!" // kill me + icon_state = "donutcustom" + baseicon = "donutcustom" + basename = "filled donut" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/bar + name = "flavored chocolate bar" + desc = "Made in a factory downtown." + icon_state = "barcustom" + baseicon = "barcustom" + basename = "flavored chocolate bar" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/sucker + name = "flavored sucker" + desc = "Suck suck suck." + icon_state = "suckercustom" + baseicon = "suckercustom" + basename = "flavored sucker" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cash + name = "flavored chocolate cash" + desc = "I got piles!" + icon_state = "cashcustom" + baseicon = "cashcustom" + basename = "flavored cash" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/coin + name = "flavored chocolate coin" + desc = "Clink, clink, clink." + icon_state = "coincustom" + baseicon = "coincustom" + basename = "flavored coin" + add_overlays = 0 + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom // In the event you fuckers find something I forgot to add a customizable food for. + name = "on a plate" + desc = "A unique dish." + icon_state = "fullycustom" + baseicon = "fullycustom" + basename = "on a plate" + add_overlays = 0 + top = 0 + sandwich_limit = 20 + fullycustom = 1 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/soup + name = "soup" + desc = "A bowl with liquid and... stuff in it." + icon_state = "soup" + baseicon = "soup" + basename = "soup" + add_overlays = 0 + trash = /obj/item/trash/bowl + top = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/burger + name = "burger bun" + desc = "A bun for a burger. Delicious." + icon_state = "burger" + baseicon = "burger" + basename = "burger" + +/obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/W as obj, mob/user as mob) + if(src.contents.len > sandwich_limit) + user << "If you put anything else in or on [src] it's going to make a mess." + return + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + user << " You add [W] to [src]." + var/obj/item/weapon/reagent_containers/F = W + F.reagents.trans_to(src, F.reagents.total_volume) + user.drop_item() + W.loc = src + ingredients += W + update() + return + ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/update() + var/fullname = "" //We need to build this from the contents of the var. + var/i = 0 + + overlays.Cut() + + for(var/obj/item/weapon/reagent_containers/food/snacks/O in ingredients) + + i++ + if(i == 1) + fullname += "[O.name]" + else if(i == ingredients.len) + fullname += " and [O.name]" + else + fullname += ", [O.name]" + + if(!fullycustom) + var/image/I = new(src.icon, "[baseicon]_filling") + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/food = O + if(!food.filling_color == "#FFFFFF") + I.color = food.filling_color + else + I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + if(add_overlays) + I.pixel_x = pick(list(-1,0,1)) + I.pixel_y = (i*2)+1 + overlays += I + else + var/image/F = new(O.icon, O.icon_state) + F.pixel_x = pick(list(-1,0,1)) + F.pixel_y = pick(list(-1,0,1)) + overlays += F + overlays += O.overlays + + if(top) + var/image/T = new(src.icon, "[baseicon]_top") + T.pixel_x = pick(list(-1,0,1)) + T.pixel_y = (ingredients.len * 2)+1 + overlays += T + + name = lowertext("[fullname] [basename]") + if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]" + w_class = n_ceil(Clamp((ingredients.len/2),1,3)) + +/obj/item/weapon/reagent_containers/food/snacks/customizable/Del() + for(var/obj/item/O in ingredients) + del(O) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/examine() + ..() + var/whatsinside = pick(ingredients) + + usr << " You think you can see [whatsinside] in there." \ No newline at end of file diff --git a/code/modules/food/deep_fryer.dm b/code/modules/food/deep_fryer.dm new file mode 100644 index 00000000000..c317eedb5e7 --- /dev/null +++ b/code/modules/food/deep_fryer.dm @@ -0,0 +1,62 @@ +/obj/machinery/deepfryer + name = "deep fryer" + desc = "Deep fried everything." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "fryer_off" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + var/on = FALSE //Is it deep frying already? + var/obj/item/frying = null //What's being fried RIGHT NOW? + +/obj/machinery/deepfryer/examine() + ..() + if(frying) + usr << "You can make out [frying] in the oil." + +/obj/machinery/deepfryer/attackby(obj/item/I, mob/user) + if(on) + user << "[src] is still active!" + return + if(!istype(I, /obj/item/weapon/reagent_containers/food/snacks/)) + user << "Budget cuts won't let you put that in there." + return + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/deepfryholder)) + user << "You cannot doublefry." + return + else + user << "You put [I] into [src]." + on = TRUE + user.drop_item() + frying = I + frying.loc = src + icon_state = "fryer_on" + sleep(200) + + if(frying && frying.loc == src) + var/obj/item/weapon/reagent_containers/food/snacks/deepfryholder/S = new(get_turf(src)) + if(istype(frying, /obj/item/weapon/reagent_containers/)) + var/obj/item/weapon/reagent_containers/food = frying + food.reagents.trans_to(S, food.reagents.total_volume) + S.color = "#FFAD33" + S.icon = frying.icon + S.overlays = I.overlays + S.icon_state = frying.icon_state + S.name = "deep fried [frying.name]" + S.desc = I.desc + frying.loc = S //this might be a bad idea. + + icon_state = "fryer_off" + on = FALSE + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + + +/obj/machinery/deepfryer/attack_hand(mob/user) + if(on && frying) + user << "You pull [frying] from [src]! It looks like you were just in time!" + user.put_in_hands(frying) + frying = null + return + ..() \ No newline at end of file diff --git a/code/modules/food/food_grill.dm b/code/modules/food/food_grill.dm new file mode 100644 index 00000000000..9e179793ab4 --- /dev/null +++ b/code/modules/food/food_grill.dm @@ -0,0 +1,51 @@ +/obj/machinery/foodgrill + name = "grill" + desc = "Backyard grilling, IN SPACE." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "grill_off" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + var/on = FALSE //Is it grilling food already? + +/obj/machinery/foodgrill/attackby(obj/item/I, mob/user) + if(on) + user << "[src] is already processing, please wait." + return + if(istype(I, /obj/item/weapon/grab)||istype(I, /obj/item/tk_grab)) + user << "That isn't going to fit." + return + else + user << "You put [I] onto [src]." + on = TRUE + user.drop_item() + I.loc = src + icon_state = "grill_on" + + var/image/img = new(I.icon, I.icon_state) + img.pixel_y = 5 + overlays += img + sleep(200) + overlays.Cut() + img.color = "#C28566" + overlays += img + sleep(200) + overlays.Cut() + img.color = "#A34719" + overlays += img + sleep(50) + overlays.Cut() + + on = FALSE + icon_state = "grill_off" + + if(istype(I, /obj/item/weapon/reagent_containers/)) + var/obj/item/weapon/reagent_containers/food = I + food.reagents.add_reagent("nutriment", 10) + food.reagents.trans_to(I, food.reagents.total_volume) + I.loc = get_turf(src) + I.color = "#A34719" + var/tempname = I.name + I.name = "grilled [tempname]" \ No newline at end of file diff --git a/code/modules/food/icecream_vat.dm b/code/modules/food/icecream_vat.dm new file mode 100644 index 00000000000..17a2e505720 --- /dev/null +++ b/code/modules/food/icecream_vat.dm @@ -0,0 +1,254 @@ +//ICE CREAM MACHINE +//Code made by Sawu at Sawu-Station. + +/obj/machinery/icemachine + name = "\improper Cream-Master Deluxe" + density = 1 + anchored = 1 + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "icecream_vat" + use_power = 1 + idle_power_usage = 20 + var/obj/item/weapon/reagent_containers/glass/beaker = null + var/useramount = 15 //Last used amount + + +/obj/machinery/icemachine/proc/generate_name(reagent_name) + var/name_prefix = pick("Mr.","Mrs.","Super","Happy","Whippy") + var/name_suffix = pick(" Whippy "," Slappy "," Creamy "," Dippy "," Swirly "," Swirl ") + var/cone_name = null //Heart failure prevention. + cone_name += name_prefix + cone_name += name_suffix + cone_name += "[reagent_name]" + return cone_name + + +/obj/machinery/icemachine/New() + var/datum/reagents/R = new/datum/reagents(500) + reagents = R + R.my_atom = src + + +/obj/machinery/icemachine/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(beaker) + user << "A container is already inside [src]." + return + beaker = I + user.drop_item() + I.loc = src + user << "You add [I] to [src]" + updateUsrDialog() + return + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/icecream)) + if(!I.reagents.has_reagent("sprinkles")) + if(I.reagents.total_volume > 29) I.reagents.remove_any(1) + I.reagents.add_reagent("sprinkles",1) + var/image/sprinkles = image('icons/obj/kitchen.dmi', src, "sprinkles") + I.overlays += sprinkles + I.name += " with sprinkles" + I.desc += ". This also has sprinkles." + else + user << "This [I] already has sprinkles." + + +/obj/machinery/icemachine/proc/validexchange(reag) + if(reag == "sprinkles" | reag == "cola" | reag == "kahlua" | reag == "dr_gibb" | reag == "vodka" | reag == "space_up" | reag == "rum" | reag == "spacemountainwind" | reag == "gin" | reag == "cream" | reag == "water") + return 1 + else + if(reagents.total_volume < 500) + usr << "[src] vibrates for a moment, apparently accepting the unknown liquid." + playsound(loc, 'sound/machines/twobeep.ogg', 10, 1) + return 1 + + +/obj/machinery/icemachine/Topic(href, href_list) + if(..()) return + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["close"]) + usr << browse(null, "window=cream_master") + usr.unset_machine() + return + + var/obj/item/weapon/reagent_containers/glass/A = null + var/datum/reagents/R = null + + if(beaker) + A = beaker + R = A.reagents + + if(href_list["add"]) + if(href_list["amount"]) + var/id = href_list["add"] + var/amount = text2num(href_list["amount"]) + if(validexchange(id)) + R.trans_id_to(src, id, amount) + + else if(href_list["remove"]) + if(href_list["amount"]) + var/id = href_list["remove"] + var/amount = text2num(href_list["amount"]) + if(beaker == null) + reagents.remove_reagent(id,amount) + else + if(validexchange(id)) + reagents.trans_id_to(A, id, amount) + else + reagents.remove_reagent(id,amount) + + else if(href_list["main"]) + attack_hand(usr) + return + + else if(href_list["eject"]) + if(beaker) + A.loc = loc + beaker = null + reagents.trans_to(A,reagents.total_volume) + + else if(href_list["synthcond"]) + if(href_list["type"]) + var/ID = text2num(href_list["type"]) + /* + if(ID == 1) + reagents.add_reagent("sprinkles",1) + */ //Sprinkles are now created by using the ice cream on the machine + if(ID == 2 | ID == 3) + var/brand = pick(1,2,3,4) + if(brand == 1) + if(ID == 2) + reagents.add_reagent("cola",5) + else + reagents.add_reagent("kahlua",5) + else if(brand == 2) + if(ID == 2) + reagents.add_reagent("dr_gibb",5) + else + reagents.add_reagent("vodka",5) + else if(brand == 3) + if(ID == 2) + reagents.add_reagent("space_up",5) + else + reagents.add_reagent("rum",5) + else if(brand == 4) + if(ID == 2) + reagents.add_reagent("spacemountainwind",5) + else + reagents.add_reagent("gin",5) + else if(ID == 4) + if(reagents.total_volume <= 500 & reagents.total_volume >= 15) + reagents.add_reagent("cream",(30 - reagents.total_volume)) + else if(reagents.total_volume <= 15) + reagents.add_reagent("cream",(15 - reagents.total_volume)) + else if(ID == 5) + if(reagents.total_volume <= 500 & reagents.total_volume >= 15) + reagents.add_reagent("water",(30 - reagents.total_volume)) + else if(reagents.total_volume <= 15) + reagents.add_reagent("water",(15 - reagents.total_volume)) + + else if(href_list["createcup"]) + var/name = generate_name(reagents.get_master_reagent_name()) + name += " Chocolate Cone" + var/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcup/C + C = new/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcup(loc) + C.name = "[name]" + C.pixel_x = rand(-8, 8) + C.pixel_y = -16 + reagents.trans_to(C,30) + if(reagents) + reagents.clear_reagents() + C.update_icon() + + else if(href_list["createcone"]) + var/name = generate_name(reagents.get_master_reagent_name()) + name += " Cone" + var/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcone/C + C = new/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcone(loc) + C.name = "[name]" + C.pixel_x = rand(-8, 8) + C.pixel_y = -16 + reagents.trans_to(C,15) + if(reagents) + reagents.clear_reagents() + C.update_icon() + updateUsrDialog() + + +/obj/machinery/icemachine/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/icemachine/attack_paw(mob/user) + return attack_hand(user) + + +/obj/machinery/icemachine/proc/show_toppings() + var/dat = "" + if(reagents.total_volume <= 500) + dat += "
" + dat += "Add fillings:
" + dat += "Soda
" + dat += "Alcohol
" + dat += "Finish With:
" + dat += "Cream
" + dat += "Water
" + dat += "Dispense in:
" + dat += "Chocolate Cone
" + dat += "Cone
" + dat += "" + return dat + + +/obj/machinery/icemachine/proc/show_reagents(container) + //1 = beaker / 2 = internal + var/dat = "" + if(container == 1) + var/obj/item/weapon/reagent_containers/glass/A = beaker + var/datum/reagents/R = A.reagents + dat += "The container has:
" + for(var/datum/reagent/G in R.reagent_list) + dat += "[G.volume] unit(s) of [G.name] | " + dat += "(5) " + dat += "(10) " + dat += "(15) " + dat += "(All)" + dat += "
" + else if(container == 2) + dat += "
The Cream-Master has:
" + if(reagents.total_volume) + for(var/datum/reagent/N in reagents.reagent_list) + dat += "[N.volume] unit(s) of [N.name] | " + dat += "(5) " + dat += "(10) " + dat += "(15) " + dat += "(All)" + dat += "
" + else + dat += "
SOMEONE ENTERED AN INVALID REAGENT CONTAINER; QUICK, BUG REPORT!
" + return dat + + +/obj/machinery/icemachine/attack_hand(mob/user) + if(..()) return + user.set_machine(src) + var/dat = "" + if(!beaker) + dat += "No container is loaded into the machine, external transfer offline.
" + dat += show_reagents(2) + dat += show_toppings() + dat += "Close" + else + var/obj/item/weapon/reagent_containers/glass/A = beaker + var/datum/reagents/R = A.reagents + dat += "Eject container and end transfer.
" + if(!R.total_volume) + dat += "Container is empty.

" + else + dat += show_reagents(1) + dat += show_reagents(2) + dat += show_toppings() + var/datum/browser/popup = new(user, "cream_master","Cream-Master Deluxe", 700, 400, src) + popup.set_content(dat) + popup.open() \ No newline at end of file diff --git a/code/modules/food/oven.dm b/code/modules/food/oven.dm new file mode 100644 index 00000000000..5427aa67969 --- /dev/null +++ b/code/modules/food/oven.dm @@ -0,0 +1,82 @@ +/obj/machinery/cooking + name = "oven" + desc = "Cookies are ready, dear." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "oven_off" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + var/candy = 0 + idle_power_usage = 5 + var/on = FALSE //Is it making food already? + var/list/food_choices = list() +/obj/machinery/cooking/New() + ..() + updatefood() + +/obj/machinery/cooking/attackby(obj/item/I, mob/user) + if(on) + user << "The machine is already running." + return + if(!istype(I,/obj/item/weapon/reagent_containers/food/snacks/)) + user << "That isn't food." + return + else + var/obj/item/weapon/reagent_containers/food/snacks/F = I + var/obj/item/weapon/reagent_containers/food/snacks/customizable/C + C = input("Select food to make.", "Cooking", C) in food_choices + if(!C) + return + else + user << "You put [F] into [src] for cooking." + user.drop_item() + F.loc = src + on = TRUE + if(!candy) + icon_state = "oven_on" + else + icon_state = "mixer_on" + sleep(100) + on = FALSE + if(!candy) + icon_state = "oven_off" + else + icon_state = "mixer_off" + C.loc = get_turf(src) + C.attackby(F,user) + playsound(loc, 'sound/machines/ding.ogg', 50, 1) + updatefood() + return + +/obj/machinery/cooking/proc/updatefood() + return + +/obj/machinery/cooking/oven + name = "oven" + desc = "Cookies are ready, dear." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "oven_off" + +/obj/machinery/cooking/oven/updatefood() + for(var/U in food_choices) + food_choices.Remove(U) + for(var/U in typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/cook)-(/obj/item/weapon/reagent_containers/food/snacks/customizable/cook)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/V = new U + src.food_choices += V + return + +/obj/machinery/cooking/candy + 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 = "mixer_off" + candy = 1 + +/obj/machinery/cooking/candy/updatefood() + for(var/U in food_choices) + food_choices.Remove(U) + for(var/U in typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/candy)-(/obj/item/weapon/reagent_containers/food/snacks/customizable/candy)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/V = new U + src.food_choices += V + return diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 4003ee86a4c..a43ab940196 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -20,6 +20,12 @@ result = /obj/item/weapon/reagent_containers/food/snacks/telebacon +/datum/recipe/bun + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bun + /datum/recipe/friedegg reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 3d758ca64a7..fc3e1004a06 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -9,6 +9,11 @@ var/trash = null var/slice_path var/slices_num + var/eatverb + var/wrapped = 0 + var/dried_type = null + var/deepfried = 0 + //Placeholder for effect that trigger on eating that aren't tied to reagents. /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M) @@ -128,9 +133,13 @@ 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(istype(W,/obj/item/weapon/storage)) - ..() // -> item/attackby() + +/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W, mob/user) + if(istype(W,/obj/item/weapon/pen)) + var/n_name = copytext(sanitize(input(usr, "What would you like to name this dish?", "Food Renaming", null) as text), 1, MAX_NAME_LEN) + if((loc == usr && usr.stat == 0)) + name = "[n_name]" + return if(istype(W,/obj/item/weapon/storage)) ..() // -> item/attackby() if((slices_num <= 0 || !slices_num) || !slice_path) @@ -1591,7 +1600,7 @@ bitesize = 12 filling_color = "#ADAC7F" - var/wrapped = 0 + wrapped = 0 New() ..() @@ -1632,7 +1641,7 @@ desc = "Just add water!" icon_state = "monkeycube" bitesize = 12 - var/wrapped = 0 + wrapped = 0 New() ..() @@ -1667,7 +1676,7 @@ desc = "Just add water!" icon_state = "monkeycube" bitesize = 12 - var/wrapped = 0 + wrapped = 0 New() ..() @@ -1701,7 +1710,7 @@ desc = "Just add water!" icon_state = "monkeycube" bitesize = 12 - var/wrapped = 0 + wrapped = 0 New() ..() @@ -3131,9 +3140,68 @@ bitesize = 3 -/////////////////////////////////////////// -// new old food stuff from bs12 -/////////////////////////////////////////// +////////////////////////////////ICE CREAM/////////////////////////////////// +/obj/item/weapon/reagent_containers/food/snacks/icecream + name = "ice cream" + desc = "Delicious ice cream." + icon = 'icons/obj/kitchen.dmi' + icon_state = "icecream_cone" + New() + ..() + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("sugar",1) + bitesize = 1 + update_icon() + + update_icon() + overlays.Cut() + var/image/filling = image('icons/obj/kitchen.dmi', src, "icecream_color") + filling.icon += mix_color_from_reagents(reagents.reagent_list) + overlays += filling + +/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcone + name = "ice cream cone" + desc = "Delicious ice cream." + icon_state = "icecream_cone" + volume = 500 + New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sugar",6) + reagents.add_reagent("ice",2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/icecream/icecreamcup + name = "chocolate ice cream cone" + desc = "Delicious ice cream." + icon_state = "icecream_cup" + volume = 500 + New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar",8) + reagents.add_reagent("ice",2) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/cereal + name = "box of cereal" + desc = "A box of cereal." + icon = 'icons/obj/food.dmi' + icon_state = "cereal_box" + bitesize = 2 + New() + ..() + reagents.add_reagent("nutriment", 30) +/obj/item/weapon/reagent_containers/food/snacks/deepfryholder + name = "Deep Fried Foods Holder Obj" + desc = "If you can see this description the code for the deep fryer fucked up." + icon = 'icons/obj/food.dmi' + icon_state = "deepfried_holder_icon" + bitesize = 2 + deepfried = 1 + New() + ..() + reagents.add_reagent("nutriment", 30) // Flour + egg = dough /obj/item/weapon/reagent_containers/food/snacks/flour/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -3162,18 +3230,23 @@ reagents.add_reagent("nutriment", 3) // Dough + rolling pin = flat dough -/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/kitchen/rollingpin)) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src) - user << "You flatten the dough." - del(src) +/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/kitchen/rollingpin)) + if(isturf(loc)) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(loc) + user << "You flatten [src]." + qdel(src) + else + user << "You need to put [src] on a surface to roll it out!" + else + ..() // slicable into 3xdoughslices /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough name = "flat dough" - desc = "A flattened dough." + desc = "Some flattened dough." icon = 'icons/obj/food_ingredients.dmi' - icon_state = "flatdough" + icon_state = "flat dough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 New() @@ -3182,7 +3255,7 @@ /obj/item/weapon/reagent_containers/food/snacks/doughslice name = "dough slice" - desc = "A building block of an impressive dish." + desc = "The building block of an impressive dish." icon = 'icons/obj/food_ingredients.dmi' icon_state = "doughslice" bitesize = 2 @@ -3192,57 +3265,14 @@ /obj/item/weapon/reagent_containers/food/snacks/bun name = "bun" - desc = "A base for any self-respecting burger." + desc = "The base for any self-respecting burger." icon = 'icons/obj/food_ingredients.dmi' icon_state = "bun" bitesize = 2 New() ..() reagents.add_reagent("nutriment", 4) - -/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob) - // Bun + meatball = burger - if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meatball)) - new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) - user << "You make a burger." - del(W) - del(src) - - // Bun + cutlet = hamburger - else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/cutlet)) - new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) - user << "You make a burger." - del(W) - del(src) - - // Bun + sausage = hotdog - else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/sausage)) - new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src) - user << "You make a hotdog." - del(W) - del(src) - -// Burger + cheese wedge = cheeseburger -/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) - if(istype(W))// && !istype(src,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge)) - new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src) - user << "You make a cheeseburger." - del(W) - del(src) - return - else - ..() - -// Human Burger + cheese wedge = cheeseburger -/obj/item/weapon/reagent_containers/food/snacks/human/burger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) - if(istype(W)) - new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src) - user << "You make a cheeseburger." - del(W) - del(src) - return - else - ..() + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/taco name = "taco" diff --git a/icons/obj/cooking_machines.dmi b/icons/obj/cooking_machines.dmi new file mode 100644 index 00000000000..933b54802de Binary files /dev/null and b/icons/obj/cooking_machines.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 7c522283bec..906e80c68d1 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/food_ingredients.dmi b/icons/obj/food_ingredients.dmi index 127d5ffb794..3e30f51153c 100644 Binary files a/icons/obj/food_ingredients.dmi and b/icons/obj/food_ingredients.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index b40aca43099..27efc926838 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ