Files
Bubberstation/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
Ghom 1f3894e793 Crafting refactor, implementing materials (#89465)
My original plan was to just implement materials into crafting so that
items would inherit the materials of their components, allowing for some
interesting stuff if the material flags of the item allow it. However to
my dismay crafting is a pile of old tech debt, starting from the old
`del_reqs` and `CheckParts` which still contain lines about old janky
bandaids that are no longer in use nor reachable, up to the
`customizable_reagent_holder` component which has some harddel issues
when your custom food is sliced, and items used in food recipes not
being deleted and instead stored inside the result with no purpose as
well as other inconsistencies like stack recipes that transfer materials
having counterparts in the UI that don't do that.

EDIT: Several things have come up while working on this, so I apologise
that it ended up changing over 100+ files. I managed to atomize some of
the changes, but it's a bit tedious.

EDIT: TLDR because I was told this section is too vague and there's too
much going on. This PR:
- Improves the dated crafting code (not the UI).
- replaced `atom/CheckParts` and `crafting_recipe/on_craft_completion`
with `atom/on_craft_completion`.
- Reqs used in food recipes are now deleted by default and not stored
inside the result (they did nothing).
- Renames the customizable_reagent_holder comp and improves it (No
harddels/ref issues).
- Adds a unit test that tries to craft all recipes to see what's wrong
(it skips some of the much more specific reqs for now).
- In the unit test is also the code to make sure materials of the
crafted item and a non-crafted item of the same type are roughly the
same, so far only applied to food.
- Some mild material/food refactoring around the fact that food item
code has been changed to support materials.

Improving the backbone of the crafting system. Also materials and food
code.

🆑
refactor: Refactored crafting backend. Report possible pesky bugs.
balance: the MEAT backpack (from the MEAT cargo pack) may be a smidge
different because of code standardization.
/🆑
2025-06-05 20:05:13 -04:00

576 lines
15 KiB
Plaintext

// see code/module/crafting/table.dm
// MISC
/datum/crafting_recipe/food/candiedapple
name = "Candied apple"
reqs = list(
/datum/reagent/consumable/caramel = 5,
/obj/item/food/grown/apple = 1
)
result = /obj/item/food/candiedapple
added_foodtypes = JUNKFOOD|SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/spiderlollipop
name = "Spider Lollipop"
reqs = list(/obj/item/stack/rods = 1,
/datum/reagent/consumable/sugar = 5,
/datum/reagent/water = 5,
/obj/item/food/spiderling = 1
)
result = /obj/item/food/spiderlollipop
added_foodtypes = JUNKFOOD|SUGAR
removed_foodtypes = TOXIC
category = CAT_MISCFOOD
/datum/crafting_recipe/food/chococoin
name = "Choco coin"
reqs = list(/obj/item/food/chocolatebar = 1)
tool_paths = list(/obj/item/coin)
result = /obj/item/food/chococoin
category = CAT_MISCFOOD
/datum/crafting_recipe/food/fudgedice
name = "Fudge dice"
reqs = list(
/obj/item/dice = 1,
/obj/item/food/chocolatebar = 1,
)
result = /obj/item/food/fudgedice
category = CAT_MISCFOOD
/datum/crafting_recipe/food/chocoorange
name = "Choco orange"
reqs = list(
/obj/item/food/grown/citrus/orange = 1,
/obj/item/food/chocolatebar = 1,
)
result = /obj/item/food/chocoorange
category = CAT_MISCFOOD
/datum/crafting_recipe/food/cheesyfries
name = "Cheesy fries"
reqs = list(
/obj/item/food/fries = 1,
/obj/item/food/cheese/wedge = 1
)
result = /obj/item/food/cheesyfries
category = CAT_MISCFOOD
/datum/crafting_recipe/food/poutine
name = "Poutine"
reqs = list(
/obj/item/food/fries = 1,
/obj/item/food/cheese/wedge = 1,
/datum/reagent/consumable/gravy = 3
)
result = /obj/item/food/poutine
added_foodtypes = MEAT
category = CAT_MISCFOOD
/datum/crafting_recipe/food/beans
name = "Beans"
time = 40
reqs = list(/datum/reagent/consumable/ketchup = 5,
/obj/item/food/grown/soybeans = 2
)
result = /obj/item/food/canned/beans
category = CAT_MISCFOOD
/datum/crafting_recipe/food/eggplantparm
name ="Eggplant parmigiana"
reqs = list(
/obj/item/food/cheese/wedge = 2,
/obj/item/food/grown/eggplant = 1
)
result = /obj/item/food/eggplantparm
category = CAT_MISCFOOD
/datum/crafting_recipe/food/melonkeg
name ="Melon keg"
reqs = list(
/datum/reagent/consumable/ethanol/vodka = 25,
/obj/item/food/grown/holymelon = 1,
/obj/item/reagent_containers/cup/glass/bottle/vodka = 1
)
result = /obj/item/food/melonkeg
added_foodtypes = ALCOHOL
category = CAT_MISCFOOD
/datum/crafting_recipe/food/honeybar
name = "Honey nut bar"
reqs = list(
/obj/item/food/grown/oat = 1,
/datum/reagent/consumable/honey = 5
)
result = /obj/item/food/honeybar
added_foodtypes = SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/powercrepe
name = "Powercrepe"
time = 40
reqs = list(
/obj/item/food/flatdough = 1,
/datum/reagent/consumable/milk = 1,
/datum/reagent/consumable/cherryjelly = 5,
/obj/item/stock_parts/power_store/cell/super =1,
/obj/item/melee/sabre = 1
)
result = /obj/item/food/powercrepe
added_foodtypes = FRUIT|SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/branrequests
name = "Bran Requests Cereal"
reqs = list(
/obj/item/food/grown/wheat = 1,
/obj/item/food/no_raisin = 1,
)
result = /obj/item/food/branrequests
removed_foodtypes = JUNKFOOD
added_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/ricepudding
name = "Rice pudding"
reqs = list(
/obj/item/reagent_containers/cup/bowl = 1,
/datum/reagent/consumable/milk = 5,
/datum/reagent/consumable/sugar = 5,
/obj/item/food/boiledrice = 1
)
result = /obj/item/food/salad/ricepudding
added_foodtypes = DAIRY|SUGAR
removed_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/risotto
name = "Risotto"
reqs = list(
/obj/item/reagent_containers/cup/bowl = 1,
/obj/item/food/cheese/wedge = 1,
/datum/reagent/consumable/ethanol/wine = 5,
/obj/item/food/boiledrice = 1,
/obj/item/food/grown/mushroom/chanterelle = 1
)
result = /obj/item/food/salad/risotto
removed_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/butterbear //ITS ALIVEEEEEE!
name = "Living bear/butter hybrid"
reqs = list(
/obj/item/organ/brain = 1,
/obj/item/organ/heart = 1,
/obj/item/food/butter = 4,
/obj/item/food/meat/slab = 5,
/datum/reagent/blood = 50,
/datum/reagent/teslium = 1 //To shock the whole thing into life
)
result = /mob/living/basic/bear/butter
category = CAT_MISCFOOD
/datum/crafting_recipe/food/crab_rangoon
name = "Crab Rangoon"
reqs = list(
/obj/item/food/doughslice = 1,
/datum/reagent/consumable/cream = 5,
/obj/item/food/cheese/wedge = 1,
/obj/item/food/meat/slab/rawcrab = 1
)
result = /obj/item/food/crab_rangoon
removed_foodtypes = RAW
category = CAT_SEAFOOD
/datum/crafting_recipe/food/royalcheese
name = "Royal Cheese"
reqs = list(
/obj/item/food/cheese/wheel = 1,
/obj/item/clothing/head/costume/crown = 1,
/datum/reagent/medicine/strange_reagent = 5,
/datum/reagent/toxin/mutagen = 5
)
result = /obj/item/food/cheese/royal
category = CAT_MISCFOOD
/datum/crafting_recipe/food/ant_candy
name = "Ant Candy"
reqs = list(/obj/item/stack/rods = 1,
/datum/reagent/consumable/sugar = 5,
/datum/reagent/water = 5,
/datum/reagent/ants = 10
)
result = /obj/item/food/ant_candy
category = CAT_MISCFOOD
/datum/crafting_recipe/food/pesto
name = "Pesto"
reqs = list(
/obj/item/food/cheese/firm_cheese_slice = 1,
/datum/reagent/consumable/salt = 5,
/obj/item/food/grown/herbs = 2,
/obj/item/food/grown/garlic = 1,
/datum/reagent/consumable/nutriment/fat/oil/olive = 5,
/obj/item/food/canned/pine_nuts = 1
)
result = /obj/item/food/pesto
category = CAT_MISCFOOD
/datum/crafting_recipe/food/tomato_sauce
name = "Tomato sauce"
reqs = list(
/obj/item/food/canned/tomatoes = 1,
/datum/reagent/consumable/salt = 2,
/obj/item/food/grown/herbs = 1,
/datum/reagent/consumable/nutriment/fat/oil/olive = 5
)
result = /obj/item/food/tomato_sauce
category = CAT_MISCFOOD
/datum/crafting_recipe/food/bechamel_sauce
name = "Bechamel sauce"
reqs = list(
/datum/reagent/consumable/milk = 10,
/datum/reagent/consumable/flour = 5,
/obj/item/food/butterslice = 1
)
result = /obj/item/food/bechamel_sauce
added_foodtypes = GRAIN
category = CAT_MISCFOOD
/datum/crafting_recipe/food/pierogi
name = "Pierogi"
reqs = list(
/obj/item/food/doughslice = 1,
/obj/item/food/grown/potato = 1,
/obj/item/food/grown/onion = 1,
)
result = /obj/item/food/pierogi
category = CAT_MISCFOOD
/datum/crafting_recipe/food/stuffed_cabbage
name = "Stuffed cabbage"
reqs = list(
/obj/item/food/meat/cutlet = 2,
/obj/item/food/boiledrice = 1,
/obj/item/food/grown/cabbage = 1,
/obj/item/food/grown/tomato = 1,
)
result = /obj/item/food/stuffed_cabbage
removed_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/granola_bar
name = "Granola bar"
reqs = list(
/obj/item/food/grown/oat = 1,
/obj/item/food/grown/peanut = 1,
/obj/item/food/chocolatebar = 1,
/obj/item/food/no_raisin = 1,
)
result = /obj/item/food/granola_bar
removed_foodtypes = JUNKFOOD
category = CAT_MISCFOOD
/datum/crafting_recipe/food/onigiri
name = "Onigiri"
reqs = list(
/obj/item/food/boiledrice = 1,
/obj/item/food/seaweedsheet = 1,
)
result = /obj/item/food/onigiri
removed_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/mashed_potatoes
name = "Mashed potatoes"
reqs = list(
/obj/item/food/grown/potato = 2,
/obj/item/food/grown/garlic = 1,
/obj/item/food/butterslice = 1,
)
result = /obj/item/food/mashed_potatoes
category = CAT_MISCFOOD
/datum/crafting_recipe/food/pacoca
name = "Paçoca"
reqs = list(
/obj/item/food/grown/peanut = 2,
/datum/reagent/consumable/sugar = 5,
/datum/reagent/consumable/salt = 2,
)
result = /obj/item/food/pacoca
added_foodtypes = SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/springroll
name = "Spring roll"
reqs = list(
/obj/item/food/grown/carrot = 1,
/obj/item/food/grown/cucumber = 1,
/obj/item/food/grown/chili = 1,
/datum/reagent/consumable/rice = 10,
/datum/reagent/water = 10,
)
result = /obj/item/food/springroll
added_foodtypes = GRAIN
category = CAT_MISCFOOD
/datum/crafting_recipe/food/caramel_popcorn
name = "Caramel popcorn"
reqs = list(
/obj/item/food/popcorn = 1,
/datum/reagent/consumable/caramel = 3,
)
result = /obj/item/food/popcorn/caramel
added_foodtypes = SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/salty_popcorn
name = "Salty popcorn"
reqs = list(
/obj/item/food/popcorn = 1,
/datum/reagent/consumable/salt = 3,
)
result = /obj/item/food/popcorn/salty
category = CAT_MISCFOOD
/datum/crafting_recipe/food/spacylibertyduff
name = "Spacy liberty duff"
reqs = list(
/datum/reagent/consumable/ethanol/vodka = 5,
/obj/item/reagent_containers/cup/bowl = 1,
/obj/item/food/grown/mushroom/libertycap = 3
)
result = /obj/item/food/bowled/spacylibertyduff
category = CAT_MISCFOOD
/datum/crafting_recipe/food/amanitajelly
name = "Amanita jelly"
reqs = list(
/datum/reagent/consumable/ethanol/vodka = 5,
/obj/item/reagent_containers/cup/bowl = 1,
/obj/item/food/grown/mushroom/amanita = 3
)
result = /obj/item/food/bowled/amanitajelly
added_foodtypes = TOXIC
category = CAT_MISCFOOD
/datum/crafting_recipe/food/buttered_baked_potato
name = "Buttered baked potato"
reqs = list(
/obj/item/food/baked_potato = 1,
/obj/item/food/butterslice = 1,
)
result = /obj/item/food/buttered_baked_potato
category = CAT_MISCFOOD
/datum/crafting_recipe/food/loaded_baked_potato
name = "Loaded baked potato"
reqs = list(
/obj/item/food/baked_potato = 1,
/obj/item/food/cheese/wedge = 1,
/obj/item/food/meat/bacon = 1,
/obj/item/food/grown/cabbage = 1,
)
result = /obj/item/food/loaded_baked_potato
removed_foodtypes = BREAKFAST
category = CAT_MISCFOOD
/datum/crafting_recipe/food/cheese_pierogi
name = "Cheese pierogi"
reqs = list(
/obj/item/food/doughslice = 1,
/obj/item/food/grown/potato = 1,
/obj/item/food/cheese/wedge = 1,
)
result = /obj/item/food/cheese_pierogi
category = CAT_MISCFOOD
/datum/crafting_recipe/food/meat_pierogi
name = "Meat pierogi"
reqs = list(
/obj/item/food/doughslice = 1,
/obj/item/food/grown/potato = 1,
/obj/item/food/meat/cutlet = 1,
)
result = /obj/item/food/meat_pierogi
category = CAT_MISCFOOD
/datum/crafting_recipe/food/bonbon/caramel_truffle
name = "Caramel truffle"
reqs = list(
/obj/item/food/chocolatebar = 1,
/datum/reagent/consumable/caramel = 2,
)
result = /obj/item/food/bonbon/caramel_truffle
category = CAT_MISCFOOD
/datum/crafting_recipe/food/bonbon/chocolate_truffle
name = "Chocolate truffle"
reqs = list(
/obj/item/food/chocolatebar = 1,
/datum/reagent/consumable/sugar = 2,
)
result = /obj/item/food/bonbon/chocolate_truffle
category = CAT_MISCFOOD
/datum/crafting_recipe/food/bonbon/peanut_truffle
name = "Peanut truffle"
reqs = list(
/obj/item/food/chocolatebar = 1,
/obj/item/food/grown/peanut = 1,
)
result = /obj/item/food/bonbon/peanut_truffle
category = CAT_MISCFOOD
/datum/crafting_recipe/food/bonbon/peanut_butter_cup
name = "Peanut butter cup"
reqs = list(
/obj/item/food/chocolatebar = 1,
/datum/reagent/consumable/peanut_butter = 2,
)
result = /obj/item/food/bonbon/peanut_butter_cup
added_foodtypes = NUTS
category = CAT_MISCFOOD
/datum/crafting_recipe/pickles_jar
name = "Jar of pickles"
reqs = list(
/obj/item/reagent_containers/cup/beaker/large = 1,
/obj/item/food/grown/cucumber = 10,
/datum/reagent/water/salt = 20,
)
result = /obj/item/storage/fancy/pickles_jar
category = CAT_MISCFOOD
delete_contents = FALSE
/datum/crafting_recipe/food/sauteed_eggplant
name = "Sauteed eggplant"
reqs = list(
/obj/item/food/grown/eggplant = 1,
/obj/item/food/grown/garlic = 1,
/datum/reagent/consumable/nutriment/fat/oil/olive = 3,
)
result = /obj/item/food/sauteed_eggplant
category = CAT_MISCFOOD
/datum/crafting_recipe/food/stuffed_eggplant
name = "Stuffed eggplant"
reqs = list(
/obj/item/food/grown/eggplant = 1,
/obj/item/food/grown/garlic = 1,
/obj/item/food/grown/cabbage = 1,
/obj/item/food/cheese/wedge = 1,
/obj/item/food/meat/cutlet = 1,
)
result = /obj/item/food/stuffed_eggplant
category = CAT_MISCFOOD
/datum/crafting_recipe/food/baba_ghanoush
name = "Baba ghanoush"
reqs = list(
/obj/item/reagent_containers/cup/bowl = 1,
/obj/item/food/pita_bread = 1,
/obj/item/food/grown/eggplant = 1,
/obj/item/food/grown/garlic = 1,
/datum/reagent/consumable/nutriment/fat/oil/olive = 5,
/datum/reagent/consumable/lemonjuice = 3,
)
result = /obj/item/food/baba_ghanoush
category = CAT_MISCFOOD
/datum/crafting_recipe/food/moussaka
name = "Moussaka"
reqs = list(
/obj/item/food/grown/eggplant = 2,
/obj/item/food/grown/garlic = 1,
/obj/item/food/grown/onion = 1,
/obj/item/food/meat/cutlet = 1,
/obj/item/food/bechamel_sauce = 1,
)
result = /obj/item/food/moussaka
category = CAT_MISCFOOD
/datum/crafting_recipe/food/falafel
name = "Falafel"
reqs = list(
/obj/item/food/grown/soybeans = 1,
/obj/item/food/grown/garlic = 1,
/obj/item/food/grown/onion = 1,
/obj/item/food/grown/herbs = 1,
)
result = /obj/item/food/falafel
category = CAT_MISCFOOD
/datum/crafting_recipe/food/candied_pineapple
name = "Candied pineapple"
reqs = list(
/obj/item/food/pineappleslice = 1,
/datum/reagent/consumable/sugar = 2,
/datum/reagent/water = 2,
)
result = /obj/item/food/candied_pineapple
added_foodtypes = SUGAR
category = CAT_MISCFOOD
/datum/crafting_recipe/food/tzatziki_sauce
name = "Tzatziki sauce"
reqs = list(
/obj/item/food/grown/cucumber = 1,
/datum/reagent/consumable/nutriment/fat/oil/olive = 2,
/obj/item/food/grown/garlic = 1,
/datum/reagent/consumable/salt = 1,
)
result = /obj/item/food/tzatziki_sauce
category = CAT_MISCFOOD
/datum/crafting_recipe/food/tzatziki_and_pita_bread
name = "Tzatziki and pita bread"
reqs = list(
/obj/item/food/tzatziki_sauce = 1,
/obj/item/food/pita_bread = 1,
)
result = /obj/item/food/tzatziki_and_pita_bread
category = CAT_MISCFOOD
/datum/crafting_recipe/food/grilled_beef_gyro
name = "Grilled beef gyro"
reqs = list(
/obj/item/food/tzatziki_sauce = 1,
/obj/item/food/pita_bread = 1,
/obj/item/food/meat/cutlet = 2,
/obj/item/food/grown/cabbage = 1,
/obj/item/food/grown/tomato = 1,
/obj/item/food/grown/onion = 1,
)
result = /obj/item/food/grilled_beef_gyro
category = CAT_MISCFOOD
/datum/crafting_recipe/food/vegetarian_gyro
name = "Vegetarian gyro"
reqs = list(
/obj/item/food/tzatziki_sauce = 1,
/obj/item/food/pita_bread = 1,
/obj/item/food/grown/cucumber = 1,
/obj/item/food/grown/cabbage = 1,
/obj/item/food/grown/tomato = 1,
/obj/item/food/grown/onion = 1,
)
result = /obj/item/food/vegetarian_gyro
category = CAT_MISCFOOD
/datum/crafting_recipe/food/raw_pita_bread
name = "Raw pita bread"
reqs = list(
/datum/reagent/consumable/flour = 10,
/datum/reagent/water = 5,
/datum/reagent/consumable/nutriment/fat/oil/olive = 2,
/datum/reagent/consumable/sugar = 2,
)
result = /obj/item/food/raw_pita_bread
category = CAT_MISCFOOD