diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index edbe871320a..33f79cd8fe2 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -6,7 +6,13 @@ var/time = 30 //time in deciseconds var/parts[] = list() //type paths of items that will be placed in the result var/chem_catalists[] = list() //like tools but for reagents + var/fruit[] = list() //grown products required by the recipe +/datum/table_recipe/proc/AdjustChems(var/obj/resultobj as obj) + //This proc is to replace the make_food proc of recipes from microwaves and such that are being converted to table crafting recipes. + //Use it to handle the removal of reagents after the food has been created (like removing toxins from a salad made with ambrosia) + //If a recipe does not require it's chems adjusted, don't bother declaring this for the recipe, as it will call this placeholder + return /datum/table_recipe/IED name = "IED" diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm index 1d4bfa561e9..bf3847b5658 100644 --- a/code/modules/crafting/table.dm +++ b/code/modules/crafting/table.dm @@ -11,6 +11,13 @@ /obj/structure/table/proc/check_contents(datum/table_recipe/R) check_table() main_loop: + if(R.fruit) + for(var/A in R.fruit) + for(var/B in table_contents) + if(B == A) + if(table_contents[B] >= R.fruit[A]) + continue main_loop + return 0 for(var/A in R.reqs) for(var/B in table_contents) if(ispath(B, A)) @@ -28,6 +35,10 @@ if(istype(I, /obj/item/stack)) var/obj/item/stack/S = I table_contents[I.type] += S.amount + else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I + if(G.seed && G.seed.kitchen_tag) + table_contents[G.seed.kitchen_tag] += 1 else if(istype(I, /obj/item/weapon/reagent_containers)) var/obj/item/weapon/reagent_containers/RC = I @@ -75,6 +86,7 @@ I.reagents = new /datum/reagents() I.reagents.reagent_list.Add(A) I.CheckParts() + R.AdjustChems(I) return 1 return 0 @@ -84,6 +96,19 @@ var/reagenttransfer = 0 if(istype(resultobject,/obj/item/weapon/reagent_containers)) reagenttransfer = 1 + if(R.fruit) + for(var/A in R.fruit) + amt = R.fruit[A] + fruit_loop: //ha + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in loc) + if(G.seed && G.seed.kitchen_tag && (G.seed.kitchen_tag == A)) + amt-- + G.loc = null //remove it from the table loc so that we don't locate the same fruit every time + if(reagenttransfer) + G.reagents.trans_to(resultobject, G.reagents.total_volume) + qdel(G) + if(amt <= 0) + break fruit_loop for(var/A in R.reqs) amt = R.reqs[A] if(ispath(A, /obj/item/stack)) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 27c47f30fde..2a72efedc30 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -327,19 +327,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips -/datum/recipe/microwave/sandwich - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meatsteak, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sandwich - /datum/recipe/microwave/toastedsandwich items = list( /obj/item/weapon/reagent_containers/food/snacks/sandwich ) + result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich /datum/recipe/microwave/tomatosoup reagents = list("water" = 10) @@ -453,20 +445,6 @@ fruit = list("apple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple -/datum/recipe/microwave/slimeburger - reagents = list("slimejelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime - -/datum/recipe/microwave/jellyburger - reagents = list("cherryjelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry - /datum/recipe/microwave/twobread reagents = list("wine" = 5) items = list( @@ -475,22 +453,6 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/twobread -/datum/recipe/microwave/slimesandwich - reagents = list("slimejelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime - -/datum/recipe/microwave/cherrysandwich - reagents = list("cherryjelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry - /datum/recipe/microwave/bloodsoup reagents = list("blood" = 10) fruit = list("bloodtomato" = 2) @@ -556,39 +518,8 @@ fruit = list("whitebeet" = 1, "cabbage" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup -/datum/recipe/microwave/herbsalad - fruit = list("ambrosia" = 3, "apple" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked - -/datum/recipe/microwave/aesirsalad - fruit = list("ambrosiadeus" = 3, "goldapple" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad - -/datum/recipe/microwave/validsalad - fruit = list("ambrosia" = 3, "potato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meatball, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/validsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked - ////////////////////////////FOOD ADDITTIONS/////////////////////////////// -/datum/recipe/microwave/wrap - reagents = list("soysauce" = 10) - fruit = list("cabbage" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/friedegg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/wrap - /datum/recipe/microwave/beans reagents = list("ketchup" = 5) fruit = list("soybeans" = 2) @@ -618,14 +549,6 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich -/datum/recipe/microwave/notasandwich - items = list( - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/clothing/mask/fakemoustache, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich - /datum/recipe/microwave/friedbanana reagents = list("sugar" = 10, "cornoil" = 5) fruit = list("banana" = 1) diff --git a/code/modules/food/recipes_table.dm b/code/modules/food/recipes_table.dm new file mode 100644 index 00000000000..c501db81375 --- /dev/null +++ b/code/modules/food/recipes_table.dm @@ -0,0 +1,96 @@ +/* Example for reference when defining recipes +/datum/table_recipe/food + name = "" //in-game display name + reqs[] = list() //type paths of items/reagents consumed associated with how many are needed (equivalent to var/list/items and var/list/reagents combined) + result //type path of item resulting from this craft + tools[] = list() //type paths of items needed but not consumed + time = 30 //time in deciseconds + parts[] = list() //type paths of items that will be placed in the result + fruit[] = list() //grown products required by the recipe +*/ + +/datum/table_recipe/sandwich + name = "Sandwich" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/meatsteak = 1, + /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sandwich + +/datum/table_recipe/slimesandwich + name = "Slime Jelly Sandwich" + reqs = list( + /datum/reagent/slimejelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime + +/datum/table_recipe/cherrysandwich + name = "Cherry Jelly Sandwich" + reqs = list( + /datum/reagent/cherryjelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry + +/datum/table_recipe/slimeburger + name = "Slime Jelly Burger" + reqs = list( + /datum/reagent/slimejelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/bun = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime + +/datum/table_recipe/jellyburger + name = "Cherry Jelly Burger" + reqs = list( + /datum/reagent/cherryjelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/bun = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry + +/datum/table_recipe/herbsalad + name = "herb salad" + fruit = list("ambrosia" = 3, "apple" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad + +/datum/table_recipe/herbsalad/AdjustChems(var/obj/resultobj as obj) + if(istype(resultobj, /obj/item/weapon/reagent_containers)) + var/obj/item/weapon/reagent_containers/RC = resultobj + RC.reagents.del_reagent("toxin") + +/datum/table_recipe/aesirsalad + name = "Aesir salad" + fruit = list("ambrosiadeus" = 3, "goldapple" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad + +/datum/table_recipe/validsalad + name = "valid salad" + fruit = list("ambrosia" = 3, "potato" = 1) + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/meatball = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/validsalad + +/datum/table_recipe/validsalad/AdjustChems(var/obj/resultobj as obj) + if(istype(resultobj, /obj/item/weapon/reagent_containers)) + var/obj/item/weapon/reagent_containers/RC = resultobj + RC.reagents.del_reagent("toxin") + +/datum/table_recipe/notasandwich + name = "not-a-sandwich" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, + /obj/item/clothing/mask/fakemoustache = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich + +/datum/table_recipe/wrap + name = "egg wrap" + fruit = list("cabbage" = 1) + reqs = list( + /datum/reagent/soysauce = 10, + /obj/item/weapon/reagent_containers/food/snacks/friedegg = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/wrap diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index e8acb8f0f99..0f3fa0eaac9 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -144,34 +144,36 @@ ..() // -> item/attackby(, params) if(istype(W,/obj/item/weapon/kitchen/utensil)) + //This will allow forks/spoons/plastic cutlery to pick up sliceables, but requires it to be unsliceable for the knife to pick it up + if((istype(W, /obj/item/weapon/kitchen/utensil/knife) && !slice_path) || !istype(W, /obj/item/weapon/kitchen/utensil/knife)) - var/obj/item/weapon/kitchen/utensil/U = W + var/obj/item/weapon/kitchen/utensil/U = W - if(!U.reagents) - U.create_reagents(5) + if(!U.reagents) + U.create_reagents(5) - if (U.reagents.total_volume > 0) - user << "\red You already have something on your [U]." + if (U.reagents.total_volume > 0) + user << "\red You already have something on your [U]." + return + + user.visible_message( \ + "[user] scoops up some [src] with \the [U]!", \ + "\blue You scoop up some [src] with \the [U]!" \ + ) + + src.bitecount++ + U.overlays.Cut() + U.loaded = "[src]" + var/image/I = new(U.icon, "loadedfood") + I.color = src.filling_color + U.overlays += I + + reagents.trans_to(U,min(reagents.total_volume,5)) + + if (reagents.total_volume <= 0) + qdel(src) return - user.visible_message( \ - "[user] scoops up some [src] with \the [U]!", \ - "\blue You scoop up some [src] with \the [U]!" \ - ) - - src.bitecount++ - U.overlays.Cut() - U.loaded = "[src]" - var/image/I = new(U.icon, "loadedfood") - I.color = src.filling_color - U.overlays += I - - reagents.trans_to(U,min(reagents.total_volume,5)) - - if (reagents.total_volume <= 0) - qdel(src) - return - if((slices_num <= 0 || !slices_num) || !slice_path) return 0 diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index b05478ca01b..e22613e12d1 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -10,7 +10,12 @@ src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/kitchen/utensil/knife)) + if( \ + istype(W, /obj/item/weapon/kitchenknife) || \ + istype(W, /obj/item/weapon/butch) || \ + istype(W, /obj/item/weapon/scalpel) || \ + istype(W, /obj/item/weapon/kitchen/utensil/knife) \ + ) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) diff --git a/paradise.dme b/paradise.dme index 4b9658b90ab..7e7ae3846cf 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1151,6 +1151,7 @@ #include "code\modules\food\recipes_grill.dm" #include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_oven.dm" +#include "code\modules\food\recipes_table.dm" #include "code\modules\garbage collection\garbage_collector.dm" #include "code\modules\garbage collection\gc_testing.dm" #include "code\modules\genetics\side_effects.dm"