From f0b265b6bbd93311ded8ddce70d0c6044ab9ab85 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 4 Sep 2023 02:47:17 +0200 Subject: [PATCH] [MIRROR] Foodening [MDB IGNORE] (#23440) * Foodening * Update chem_dispenser.dm * Juicening? * Update big_mortar.dm * Adds crafting complexities to modular foods * Olive oil repath * Cooking oil repath --------- Co-authored-by: Andrew Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- .../SpaceRuins/skyrat/interdynefob.dmm | 2 +- .../SpaceRuins/skyrat/piratefort.dmm | 4 +- _maps/map_files/generic/CentCom_skyrat_z2.dmm | 10 +- code/__DEFINES/food.dm | 68 ++++- code/datums/components/bakeable.dm | 3 +- code/datums/components/food/edible.dm | 154 +++++++++-- code/datums/components/grillable.dm | 3 +- code/datums/components/udder.dm | 6 +- code/datums/elements/dryable.dm | 8 +- code/datums/elements/food/food_trash.dm | 8 +- code/datums/elements/food/microwavable.dm | 4 +- code/datums/materials/meat.dm | 2 +- code/datums/materials/pizza.dm | 2 +- code/datums/mood.dm | 7 +- code/datums/mood_events/food_events.dm | 46 ++++ code/datums/mood_events/needs_events.dm | 20 -- .../datums/status_effects/buffs/food_haste.dm | 20 ++ .../status_effects/buffs/food_traits.dm | 8 + code/datums/status_effects/food_effects.dm | 52 ++++ .../orders/order_items/cook/order_reagents.dm | 6 +- .../effects/spawners/random/food_or_drink.dm | 2 +- code/game/objects/items.dm | 29 +- code/game/objects/items/food/_food.dm | 16 +- code/game/objects/items/food/bread.dm | 29 ++ code/game/objects/items/food/burgers.dm | 40 ++- code/game/objects/items/food/cake.dm | 61 ++++- code/game/objects/items/food/cheese.dm | 17 +- code/game/objects/items/food/donkpocket.dm | 6 +- code/game/objects/items/food/donuts.dm | 18 +- code/game/objects/items/food/dough.dm | 9 + code/game/objects/items/food/egg.dm | 13 + code/game/objects/items/food/frozen.dm | 13 + code/game/objects/items/food/lizard.dm | 53 +++- code/game/objects/items/food/martian.dm | 6 +- code/game/objects/items/food/meatdish.dm | 46 ++++ code/game/objects/items/food/meatslab.dm | 52 +++- code/game/objects/items/food/mexican.dm | 22 ++ code/game/objects/items/food/misc.dm | 35 ++- code/game/objects/items/food/moth.dm | 56 ++++ code/game/objects/items/food/packaged.dm | 2 + code/game/objects/items/food/pancakes.dm | 4 + code/game/objects/items/food/pastries.dm | 32 +++ code/game/objects/items/food/pie.dm | 26 ++ code/game/objects/items/food/pizza.dm | 25 +- code/game/objects/items/food/salad.dm | 19 ++ code/game/objects/items/food/sandwichtoast.dm | 16 ++ code/game/objects/items/food/snacks.dm | 24 +- code/game/objects/items/food/soup.dm | 3 + code/game/objects/items/food/spaghetti.dm | 11 + code/game/objects/items/food/sweets.dm | 13 +- code/game/objects/items/food/vegetables.dm | 12 + code/game/objects/items/robot/items/hypo.dm | 12 +- .../objects/items/storage/boxes/food_boxes.dm | 4 +- code/modules/cargo/packs/organic.dm | 1 + code/modules/events/holiday/easter.dm | 3 + code/modules/events/holiday/halloween.dm | 2 + .../food_and_drinks/machinery/deep_fryer.dm | 8 +- .../food_and_drinks/machinery/processor.dm | 2 +- .../recipes/drinks/drinks_alcoholic.dm | 2 +- .../food_and_drinks/recipes/food_mixtures.dm | 32 +-- .../food_and_drinks/recipes/soup_guide.dm | 5 - .../food_and_drinks/recipes/soup_mixtures.dm | 4 +- .../recipes/tablecraft/recipes_burger.dm | 2 +- .../recipes/tablecraft/recipes_cake.dm | 10 +- .../recipes/tablecraft/recipes_guide.dm | 28 +- .../recipes/tablecraft/recipes_lizard.dm | 14 +- .../recipes/tablecraft/recipes_martian.dm | 2 +- .../recipes/tablecraft/recipes_misc.dm | 14 +- .../recipes/tablecraft/recipes_moth.dm | 8 +- .../recipes/tablecraft/recipes_salad.dm | 10 +- .../hydroponics/beekeeping/honeycomb.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 6 +- code/modules/hydroponics/grown.dm | 52 ++-- code/modules/hydroponics/grown/aloe.dm | 2 +- code/modules/hydroponics/grown/apple.dm | 2 +- code/modules/hydroponics/grown/banana.dm | 3 +- code/modules/hydroponics/grown/beans.dm | 2 +- code/modules/hydroponics/grown/berries.dm | 10 +- code/modules/hydroponics/grown/cereals.dm | 3 +- code/modules/hydroponics/grown/citrus.dm | 8 +- .../hydroponics/grown/cocoa_vanilla.dm | 2 +- code/modules/hydroponics/grown/corn.dm | 4 +- code/modules/hydroponics/grown/cucumber.dm | 2 +- code/modules/hydroponics/grown/flowers.dm | 2 +- code/modules/hydroponics/grown/herbs.dm | 2 +- code/modules/hydroponics/grown/korta_nut.dm | 4 +- code/modules/hydroponics/grown/melon.dm | 4 +- code/modules/hydroponics/grown/peas.dm | 2 +- code/modules/hydroponics/grown/pineapple.dm | 2 +- code/modules/hydroponics/grown/plum.dm | 2 +- code/modules/hydroponics/grown/potato.dm | 2 +- code/modules/hydroponics/grown/pumpkin.dm | 4 +- code/modules/hydroponics/grown/root.dm | 4 +- code/modules/hydroponics/grown/tomato.dm | 2 +- code/modules/hydroponics/seed_extractor.dm | 13 + code/modules/hydroponics/seeds.dm | 18 +- .../basic/farm_animals/chicken/chicken.dm | 2 +- .../mob/living/basic/farm_animals/cow/_cow.dm | 2 +- .../mob/living/basic/farm_animals/deer.dm | 2 +- .../mob/living/basic/farm_animals/rabbit.dm | 2 +- .../mob/living/basic/farm_animals/sheep.dm | 2 +- code/modules/mob/living/carbon/life.dm | 2 +- code/modules/mob/living/life.dm | 2 +- code/modules/mob/living/living.dm | 2 +- .../simple_animal/friendly/farm_animals.dm | 2 +- .../mob/living/simple_animal/hostile/ooze.dm | 2 +- .../simple_animal/hostile/retaliate/goose.dm | 2 +- .../plumbing/plumbers/grinder_chemical.dm | 18 +- code/modules/reagents/chemistry/holder.dm | 55 +++- .../chemistry/machinery/chem_dispenser.dm | 9 +- .../chemistry/machinery/chem_master.dm | 4 +- .../chemistry/machinery/reagentgrinder.dm | 29 +- .../reagents/drinks/alcohol_reagents.dm | 30 +-- .../reagents/drinks/drink_reagents.dm | 30 +-- .../chemistry/reagents/food_reagents.dm | 251 +++++++++--------- .../chemistry/reagents/other_reagents.dm | 2 +- .../reagents/chemistry/recipes/others.dm | 4 +- .../chemistry/recipes/slime_extracts.dm | 4 +- .../reagents/reagent_containers/condiment.dm | 10 +- .../reagents/reagent_containers/cups/_cup.dm | 50 ++-- code/modules/reagents/reagent_dispenser.dm | 2 +- .../research/designs/biogenerator_designs.dm | 18 +- .../vatgrowing/samples/cell_lines/common.dm | 12 +- .../modules/unit_tests/hydroponics_harvest.dm | 2 +- icons/hud/screen_alert.dmi | Bin 137800 -> 138468 bytes .../modules/basic_mobs/code/bananaspider.dm | 2 +- modular_skyrat/modules/cargo/code/packs.dm | 24 +- .../food_and_drinks/food/hemophage_food.dm | 16 +- .../modules/food_and_drinks/food/scottish.dm | 28 +- .../food_and_drinks/food/teshari_food.dm | 80 +++--- .../food_and_drinks/recipes/drinks_recipes.dm | 2 +- .../modules/hydroponics/grown/muli.dm | 2 +- .../modules/modular_items/code/pastries.dm | 2 + .../code/big_mortar.dm | 20 +- .../code/modules/hydroponics/amauri.dm | 2 +- .../code/modules/hydroponics/gelthi.dm | 2 +- .../code/modules/hydroponics/jurlmah.dm | 2 +- .../code/modules/hydroponics/nofruit.dm | 2 +- .../code/modules/hydroponics/shand.dm | 2 +- .../code/modules/hydroponics/surik.dm | 2 +- .../code/modules/hydroponics/telriis.dm | 2 +- .../code/modules/hydroponics/thaadra.dm | 2 +- .../xenoarch/code/modules/hydroponics/vale.dm | 2 +- .../code/modules/hydroponics/vaporsac.dm | 2 +- tgstation.dme | 4 + .../tgui/interfaces/PersonalCrafting.tsx | 8 +- .../tgui/interfaces/SeedExtractor.tsx | 92 ++++--- 147 files changed, 1644 insertions(+), 673 deletions(-) create mode 100644 code/datums/mood_events/food_events.dm create mode 100644 code/datums/status_effects/buffs/food_haste.dm create mode 100644 code/datums/status_effects/buffs/food_traits.dm create mode 100644 code/datums/status_effects/food_effects.dm diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm index dcc29862a51..58d2b1b0804 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm @@ -1994,7 +1994,7 @@ pixel_x = 10; pixel_y = -9 }, -/obj/item/reagent_containers/condiment/quality_oil{ +/obj/item/reagent_containers/condiment/olive_oil{ pixel_x = 3; pixel_y = -2 }, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm index ef9ab04ab16..8a0bb4b3eec 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm @@ -501,8 +501,8 @@ /area/ruin/space/has_grav/powered) "ru" = ( /obj/structure/closet/secure_closet/freezer/fridge/all_access, -/obj/item/reagent_containers/condiment/quality_oil, -/obj/item/reagent_containers/condiment/quality_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/powered) "rA" = ( diff --git a/_maps/map_files/generic/CentCom_skyrat_z2.dmm b/_maps/map_files/generic/CentCom_skyrat_z2.dmm index 4ee78940736..70b2de9965b 100644 --- a/_maps/map_files/generic/CentCom_skyrat_z2.dmm +++ b/_maps/map_files/generic/CentCom_skyrat_z2.dmm @@ -2682,11 +2682,11 @@ /obj/item/reagent_containers/condiment/yoghurt, /obj/item/reagent_containers/condiment/yoghurt, /obj/item/reagent_containers/condiment/yoghurt, -/obj/item/reagent_containers/condiment/quality_oil, -/obj/item/reagent_containers/condiment/quality_oil, -/obj/item/reagent_containers/condiment/quality_oil, -/obj/item/reagent_containers/condiment/quality_oil, -/obj/item/reagent_containers/condiment/quality_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/item/reagent_containers/condiment/olive_oil, /obj/item/food/canned/larvae, /obj/item/food/canned/larvae, /obj/item/food/canned/larvae, diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 7c6a10644ad..73e8e31fe09 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -106,6 +106,69 @@ DEFINE_BITFIELD(foodtypes, list( #define FOOD_AMAZING 6 #define RACE_DRINK 7 // SKYRAT ADDITION +#define FOOD_QUALITY_NORMAL 1 +#define FOOD_QUALITY_NICE 2 +#define FOOD_QUALITY_GOOD 3 +#define FOOD_QUALITY_VERYGOOD 4 +#define FOOD_QUALITY_FANTASTIC 5 +#define FOOD_QUALITY_AMAZING 6 +#define FOOD_QUALITY_TOP 7 + +#define FOOD_COMPLEXITY_0 0 +#define FOOD_COMPLEXITY_1 1 +#define FOOD_COMPLEXITY_2 2 +#define FOOD_COMPLEXITY_3 3 +#define FOOD_COMPLEXITY_4 4 +#define FOOD_COMPLEXITY_5 5 + +/// Labels for food quality +GLOBAL_LIST_INIT(food_quality_description, list( + FOOD_QUALITY_NORMAL = "okay", + FOOD_QUALITY_NICE = "nice", + FOOD_QUALITY_GOOD = "good", + FOOD_QUALITY_VERYGOOD = "very good", + FOOD_QUALITY_FANTASTIC = "fantastic", + FOOD_QUALITY_AMAZING = "amazing", + FOOD_QUALITY_TOP = "godlike", +)) + +/// Mood events for food quality +GLOBAL_LIST_INIT(food_quality_events, list( + FOOD_QUALITY_NORMAL = /datum/mood_event/food, + FOOD_QUALITY_NICE = /datum/mood_event/food/nice, + FOOD_QUALITY_GOOD = /datum/mood_event/food/good, + FOOD_QUALITY_VERYGOOD = /datum/mood_event/food/verygood, + FOOD_QUALITY_FANTASTIC = /datum/mood_event/food/fantastic, + FOOD_QUALITY_AMAZING = /datum/mood_event/food/amazing, + FOOD_QUALITY_TOP = /datum/mood_event/food/top, +)) + +/// Crafted food buffs grouped by crafting_complexity +GLOBAL_LIST_INIT(food_buffs, list( + FOOD_COMPLEXITY_1 = list( + /datum/status_effect/food/haste = 1, + ), + FOOD_COMPLEXITY_2 = list( + /datum/status_effect/food/haste = 1, + ), + FOOD_COMPLEXITY_3 = list( + /datum/status_effect/food/haste = 1, + ), + FOOD_COMPLEXITY_4 = list( + /datum/status_effect/food/haste = 1, + /datum/status_effect/food/trait/shockimmune = 1, + ), + FOOD_COMPLEXITY_5 = list( + /datum/status_effect/food/haste = 1, + /datum/status_effect/food/trait/shockimmune = 2, + ), +)) + +/// Food quality change according to species diet +#define TOXIC_FOOD_QUALITY_CHANGE -4 +#define DISLIKED_FOOD_QUALITY_CHANGE -2 +#define LIKED_FOOD_QUALITY_CHANGE 2 + /// Food is "in a container", not in a code sense, but in a literal sense (canned foods) #define FOOD_IN_CONTAINER (1<<0) /// Finger food can be eaten while walking / running around @@ -123,11 +186,6 @@ DEFINE_BITFIELD(food_flags, list( #define FOOD_MEAT_MUTANT 100 #define FOOD_MEAT_MUTANT_RARE 200 -///Amount of reagents you start with on crafted food excluding the used parts -#define CRAFTED_FOOD_BASE_REAGENT_MODIFIER 0.7 -///Modifier of reagents you get when crafting food from the parts used -#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5 - #define IS_EDIBLE(O) (O.GetComponent(/datum/component/edible)) diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index a5367769f68..8b4964abf45 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -66,7 +66,8 @@ /datum/component/bakeable/proc/finish_baking(atom/used_oven) var/atom/original_object = parent var/obj/item/plate/oven_tray/used_tray = original_object.loc - var/atom/baked_result = new bake_result(used_tray) + var/atom/baked_result = new bake_result(used_tray, no_base_reagents = TRUE) + original_object.reagents?.trans_to(baked_result, original_object.reagents.total_volume) if(who_baked_us) ADD_TRAIT(baked_result, TRAIT_FOOD_CHEF_MADE, who_baked_us) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 9a2ad6973f8..f436d168476 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -54,6 +54,7 @@ Behavior that's still missing from this component that original food items had t datum/callback/after_eat, datum/callback/on_consume, datum/callback/check_liked, + reagent_purity = 0.5, ) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -70,7 +71,7 @@ Behavior that's still missing from this component that original food items had t src.tastes = string_assoc_list(tastes) src.check_liked = check_liked - setup_initial_reagents(initial_reagents) + setup_initial_reagents(initial_reagents, reagent_purity) /datum/component/edible/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) @@ -193,7 +194,7 @@ Behavior that's still missing from this component that original food items had t return ..() /// Sets up the initial reagents of the food. -/datum/component/edible/proc/setup_initial_reagents(list/reagents) +/datum/component/edible/proc/setup_initial_reagents(list/reagents, reagent_purity) var/atom/owner = parent if(owner.reagents) owner.reagents.maximum_volume = volume @@ -203,31 +204,61 @@ Behavior that's still missing from this component that original food items had t for(var/rid in reagents) var/amount = reagents[rid] if(length(tastes) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) - owner.reagents.add_reagent(rid, amount, tastes.Copy()) + owner.reagents.add_reagent(rid, amount, tastes.Copy(), added_purity = reagent_purity) else - owner.reagents.add_reagent(rid, amount) + owner.reagents.add_reagent(rid, amount, added_purity = reagent_purity) /datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER + var/atom/owner = parent + if(foodtypes) var/list/types = bitfield_to_list(foodtypes, FOOD_FLAGS) examine_list += span_notice("It is [lowertext(english_list(types))].") + var/quality = get_perceived_food_quality(user) + if(quality > 0) + var/quality_label = GLOB.food_quality_description[quality] + examine_list += span_green("You find this meal [quality_label].") + else if (quality == 0) + examine_list += span_notice("You find this meal edible.") + else + examine_list += span_warning("You find this meal inedible.") + + if(owner.reagents.total_volume > 0) + var/purity = owner.reagents.get_average_purity(/datum/reagent/consumable) + switch(purity) + if(0 to 0.2) + examine_list += span_warning("It is made of terrible ingredients shortening the effect...") + if(0.2 to 0.4) + examine_list += span_warning("It is made of synthetic ingredients shortening the effect.") + if(0.4 to 0.6) + examine_list += span_notice("It is made of average quality ingredients.") + if(0.6 to 0.8) + examine_list += span_green("It is made of organic ingredients prolonging the effect.") + if(0.8 to 1) + examine_list += span_green("It is made of finest ingredients prolonging the effect!") + var/datum/mind/mind = user.mind - if(mind && HAS_TRAIT_FROM(parent, TRAIT_FOOD_CHEF_MADE, REF(mind))) - examine_list += span_green("[parent] was made by you!") + if(mind && HAS_TRAIT_FROM(owner, TRAIT_FOOD_CHEF_MADE, REF(mind))) + examine_list += span_green("[owner] was made by you!") if(!(food_flags & FOOD_IN_CONTAINER)) switch(bitecount) if(0) // pass if(1) - examine_list += span_notice("[parent] was bitten by someone!") + examine_list += span_notice("[owner] was bitten by someone!") if(2, 3) - examine_list += span_notice("[parent] was bitten [bitecount] times!") + examine_list += span_notice("[owner] was bitten [bitecount] times!") else - examine_list += span_notice("[parent] was bitten multiple times!") + examine_list += span_notice("[owner] was bitten multiple times!") + + if(GLOB.Debug2) + examine_list += span_notice("Reagent purities:") + for(var/datum/reagent/reagent as anything in owner.reagents.reagent_list) + examine_list += span_notice("- [reagent.name] [reagent.volume]u: [round(reagent.purity * 100)]% pure") /datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) SIGNAL_HANDLER @@ -267,15 +298,11 @@ Behavior that's still missing from this component that original food items had t var/atom/this_food = parent - this_food.reagents.multiply_reagents(CRAFTED_FOOD_BASE_REAGENT_MODIFIER) - this_food.reagents.maximum_volume *= CRAFTED_FOOD_BASE_REAGENT_MODIFIER - for(var/obj/item/food/crafted_part in parts_list) if(!crafted_part.reagents) continue - - this_food.reagents.maximum_volume += crafted_part.reagents.maximum_volume * CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER - crafted_part.reagents.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume, CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER) + this_food.reagents.maximum_volume += crafted_part.reagents.maximum_volume + crafted_part.reagents.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume) this_food.reagents.maximum_volume = ROUND_UP(this_food.reagents.maximum_volume) // Just because I like whole numbers for this. @@ -428,10 +455,17 @@ Behavior that's still missing from this component that original food items had t if(sig_return & DESTROY_FOOD) qdel(owner) return + + //Give a buff when the dish is hand-crafted and unbitten + if(bitecount == 0) + apply_buff(eater) + var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, methods = INGEST) bitecount++ + checkLiked(fraction, eater) + if(!owner.reagents.total_volume) On_Consume(eater, feeder) @@ -465,6 +499,24 @@ Behavior that's still missing from this component that original food items had t return return TRUE +///Applies food buffs according to the crafting complexity +/datum/component/edible/proc/apply_buff(mob/eater) + var/buff + var/recipe_complexity = get_recipe_complexity() + if(recipe_complexity == 0) + return + var/obj/item/food/food = parent + if(!isnull(food.crafted_food_buff)) + buff = food.crafted_food_buff + else + buff = pick_weight(GLOB.food_buffs[recipe_complexity]) + if(!isnull(buff)) + var/mob/living/living_eater = eater + var/atom/owner = parent + var/timeout_mod = owner.reagents.get_average_purity(/datum/reagent/consumable) * 2 // buff duration is 100% at average purity of 50% + var/strength = recipe_complexity + living_eater.apply_status_effect(buff, timeout_mod, strength) + ///Check foodtypes to see if we should send a moodlet /datum/component/edible/proc/checkLiked(fraction, mob/eater) if(last_check_time + 50 > world.time) @@ -478,25 +530,71 @@ Behavior that's still missing from this component that original food items had t last_check_time = world.time var/food_taste_reaction + + if(HAS_TRAIT(parent, TRAIT_FOOD_SILVER) && !isjellyperson(gourmand)) // it's not real food + food_taste_reaction = FOOD_TOXIC + if(check_liked) //Callback handling; use this as an override for special food like donuts food_taste_reaction = check_liked.Invoke(fraction, gourmand) if(!food_taste_reaction) food_taste_reaction = gourmand.get_food_taste_reaction(parent, foodtypes) - switch(food_taste_reaction) - if(FOOD_TOXIC) - to_chat(gourmand,span_warning("What the hell was that thing?!")) - gourmand.adjust_disgust(25 + 30 * fraction) - gourmand.add_mood_event("toxic_food", /datum/mood_event/disgusting_food) - if(FOOD_DISLIKED) - to_chat(gourmand,span_notice("That didn't taste very good...")) - gourmand.adjust_disgust(11 + 15 * fraction) - gourmand.add_mood_event("gross_food", /datum/mood_event/gross_food) - if(FOOD_LIKED) - to_chat(gourmand,span_notice("I love this taste!")) - gourmand.adjust_disgust(-5 + -2.5 * fraction) - gourmand.add_mood_event("fav_food", /datum/mood_event/favorite_food) + if(food_taste_reaction == FOOD_TOXIC) + to_chat(gourmand,span_warning("What the hell was that thing?!")) + gourmand.adjust_disgust(25 + 30 * fraction) + gourmand.add_mood_event("toxic_food", /datum/mood_event/disgusting_food) + return + + var/food_quality = get_perceived_food_quality(gourmand, parent) + if(food_quality < 0) + to_chat(gourmand,span_notice("That didn't taste very good...")) + gourmand.adjust_disgust(11 + 15 * fraction) + gourmand.add_mood_event("gross_food", /datum/mood_event/gross_food) + else if(food_quality > 0) + food_quality = min(food_quality, FOOD_QUALITY_TOP) + var/atom/owner = parent + var/timeout_mod = owner.reagents.get_average_purity(/datum/reagent/consumable) * 2 // mood event duration is 100% at average purity of 50% + var/event = GLOB.food_quality_events[food_quality] + gourmand.add_mood_event("quality_food", event, timeout_mod) + gourmand.adjust_disgust(-5 + -2 * food_quality * fraction) + var/quality_label = GLOB.food_quality_description[food_quality] + to_chat(gourmand, span_notice("That's \an [quality_label] meal.")) + + if(istype(parent, /obj/item/food)) + var/obj/item/food/food = parent + if(food.venue_value >= FOOD_PRICE_EXOTIC) + gourmand.add_mob_memory(/datum/memory/good_food, food = parent) + +/// Get the complexity of the crafted food +/datum/component/edible/proc/get_recipe_complexity() + if(!HAS_TRAIT(parent, TRAIT_FOOD_CHEF_MADE) || !istype(parent, /obj/item/food)) + return 0 // It is factory made. Soulless. + var/obj/item/food/food = parent + return food.crafting_complexity + +/// Get food quality adjusted according to eater's preferences +/datum/component/edible/proc/get_perceived_food_quality(mob/living/carbon/human/eater) + var/food_quality = get_recipe_complexity() + + if(HAS_TRAIT(parent, TRAIT_FOOD_SILVER)) // it's not real food + food_quality += isjellyperson(eater) ? 2 : -4 + + food_quality += TOXIC_FOOD_QUALITY_CHANGE * count_matching_foodtypes(foodtypes, eater.get_toxic_foodtypes()) + food_quality += DISLIKED_FOOD_QUALITY_CHANGE * count_matching_foodtypes(foodtypes, eater.get_disliked_foodtypes()) + food_quality += LIKED_FOOD_QUALITY_CHANGE * count_matching_foodtypes(foodtypes, eater.get_liked_foodtypes()) + + return food_quality + +/// Get the number of matching food types in provided bitfields +/datum/component/edible/proc/count_matching_foodtypes(bitfield_one, bitfield_two) + var/count = 0 + var/matching_bits = bitfield_one & bitfield_two + while (matching_bits > 0) + if (matching_bits & 1) + count++ + matching_bits >>= 1 + return count ///Delete the item when it is fully eaten /datum/component/edible/proc/On_Consume(mob/living/eater, mob/living/feeder) diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm index bd9ab66fb31..0c73e349523 100644 --- a/code/datums/components/grillable.dm +++ b/code/datums/components/grillable.dm @@ -104,12 +104,13 @@ grilled_result = new cook_result(original_object.loc, stack_parent.amount) else - grilled_result = new cook_result(original_object.loc) + grilled_result = new cook_result(original_object.loc, no_base_reagents = TRUE) if(original_object.custom_materials) grilled_result.set_custom_materials(original_object.custom_materials) if(IS_EDIBLE(grilled_result)) BLACKBOX_LOG_FOOD_MADE(grilled_result.type) + original_object.reagents?.trans_to(grilled_result, original_object.reagents.total_volume) SEND_SIGNAL(parent, COMSIG_ITEM_GRILLED, grilled_result) if(who_placed_us) diff --git a/code/datums/components/udder.dm b/code/datums/components/udder.dm index bd622a944d7..66732aac333 100644 --- a/code/datums/components/udder.dm +++ b/code/datums/components/udder.dm @@ -94,7 +94,7 @@ * also useful for changing initial amounts in reagent holder (cows start with milk, gutlunches start empty) */ /obj/item/udder/proc/initial_conditions() - reagents.add_reagent(reagent_produced_typepath, 20) + reagents.add_reagent(reagent_produced_typepath, 20, added_purity = 1) START_PROCESSING(SSobj, src) /** @@ -102,7 +102,7 @@ */ /obj/item/udder/proc/generate() if(prob(5)) - reagents.add_reagent(reagent_produced_typepath, rand(5, 10)) + reagents.add_reagent(reagent_produced_typepath, rand(5, 10), added_purity = 1) if(on_generate_callback) on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) @@ -163,7 +163,7 @@ /obj/item/udder/gutlunch/generate() var/made_something = FALSE if(prob(60)) - reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5)) + reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5), added_purity = 1) made_something = TRUE if(prob(45)) reagents.add_reagent(/datum/reagent/medicine/salglu_solution, rand(2,5)) diff --git a/code/datums/elements/dryable.dm b/code/datums/elements/dryable.dm index 2985f4b7f1e..2be70556b84 100644 --- a/code/datums/elements/dryable.dm +++ b/code/datums/elements/dryable.dm @@ -29,7 +29,6 @@ ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) resulting_atom.forceMove(source.drop_location()) return - else if(isstack(source)) //Check if its a sheet var/obj/item/stack/itemstack = dried_atom for(var/i in 1 to itemstack.amount) @@ -37,6 +36,13 @@ ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) qdel(source) return + else if(istype(source, /obj/item/food) && ispath(dry_result, /obj/item/food)) + var/obj/item/food/source_food = source + var/obj/item/food/resulting_food = new dry_result(source.drop_location(), no_base_reagents = TRUE) + source_food.reagents.trans_to(resulting_food, source_food.reagents.total_volume) + ADD_TRAIT(resulting_food, TRAIT_DRIED, ELEMENT_TRAIT(type)) + qdel(source) + return else var/atom/movable/resulting_atom = new dry_result(source.drop_location()) ADD_TRAIT(resulting_atom, TRAIT_DRIED, ELEMENT_TRAIT(type)) diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm index 6d2b21a400d..bae5e399405 100644 --- a/code/datums/elements/food/food_trash.dm +++ b/code/datums/elements/food/food_trash.dm @@ -48,8 +48,14 @@ /datum/element/food_trash/proc/async_generate_trash(datum/source) var/atom/edible_object = source + var/obj/item/trash_item - var/obj/item/trash_item = generate_trash_procpath ? call(source, generate_trash_procpath)() : new trash(edible_object.drop_location()) + if(istype(source, /obj/item/food/grown) && ispath(trash, /obj/item/food)) + var/obj/item/food/grown/plant = source + var/reagent_purity = plant.seed.get_reagent_purity() + trash_item = new trash(edible_object.drop_location(), starting_reagent_purity = reagent_purity) + else + trash_item = generate_trash_procpath ? call(source, generate_trash_procpath)() : new trash(edible_object.drop_location()) if(isliving(edible_object.loc)) var/mob/living/food_holding_mob = edible_object.loc diff --git a/code/datums/elements/food/microwavable.dm b/code/datums/elements/food/microwavable.dm index 86a43c0603c..daf9518a8b3 100644 --- a/code/datums/elements/food/microwavable.dm +++ b/code/datums/elements/food/microwavable.dm @@ -35,9 +35,8 @@ if(isstack(source)) var/obj/item/stack/stack_source = source result = new result_typepath(result_loc, stack_source.amount) - else - result = new result_typepath(result_loc) + result = new result_typepath(result_loc, no_base_reagents = TRUE) var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, source, efficiency) @@ -46,7 +45,6 @@ if(microwaver && microwaver.mind) ADD_TRAIT(result, TRAIT_FOOD_CHEF_MADE, REF(microwaver.mind)) - result.reagents?.multiply_reagents(efficiency * CRAFTED_FOOD_BASE_REAGENT_MODIFIER) source.reagents?.trans_to(result, source.reagents.total_volume) BLACKBOX_LOG_FOOD_MADE(result.type) diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index 07b477b39d8..eebf3abe29a 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -31,7 +31,7 @@ var/nutriment_count = 3 * (amount / SHEET_MATERIAL_AMOUNT) var/oil_count = 2 * (amount / SHEET_MATERIAL_AMOUNT) source.AddComponent(/datum/component/edible, \ - initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), \ + initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/nutriment/fat/oil = oil_count), \ foodtypes = RAW | MEAT | GROSS, \ eat_time = 3 SECONDS, \ tastes = list("Fleshy")) diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm index 6a7c4a6922a..588018576be 100644 --- a/code/datums/materials/pizza.dm +++ b/code/datums/materials/pizza.dm @@ -29,7 +29,7 @@ var/nutriment_count = 3 * (amount / SHEET_MATERIAL_AMOUNT) var/oil_count = 2 * (amount / SHEET_MATERIAL_AMOUNT) source.AddComponent(/datum/component/edible, \ - initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), \ + initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/nutriment/fat/oil = oil_count), \ foodtypes = GRAIN | MEAT | DAIRY | VEGETABLES, \ eat_time = 3 SECONDS, \ tastes = list("crust", "tomato", "cheese", "meat")) diff --git a/code/datums/mood.dm b/code/datums/mood.dm index fa5fe5563ff..76f08641ecb 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -139,8 +139,9 @@ * Arguments: * * category - (text) category of the mood event - see /datum/mood_event for category explanation * * type - (path) any /datum/mood_event + * * timeout_mod - (number) /datum/mood_event timeout modifier */ -/datum/mood/proc/add_mood_event(category, type, ...) +/datum/mood/proc/add_mood_event(category, type, timeout_mod = 1, ...) if (!ispath(type, /datum/mood_event)) CRASH("A non path ([type]), was used to add a mood event. This shouldn't be happening.") if (!istext(category)) @@ -153,6 +154,7 @@ clear_mood_event(category) else if (the_event.timeout) + the_event.timeout = initial(the_event.timeout) * timeout_mod addtimer(CALLBACK(src, PROC_REF(clear_mood_event), category), the_event.timeout, (TIMER_UNIQUE|TIMER_OVERRIDE)) return // Don't need to update the event. var/list/params = args.Copy(3) @@ -162,8 +164,9 @@ if (QDELETED(the_event)) // the mood event has been deleted for whatever reason (requires a job, etc) return - mood_events[category] = the_event + the_event.timeout *= timeout_mod the_event.category = category + mood_events[category] = the_event update_mood() if (the_event.timeout) diff --git a/code/datums/mood_events/food_events.dm b/code/datums/mood_events/food_events.dm new file mode 100644 index 00000000000..7d2dcc439de --- /dev/null +++ b/code/datums/mood_events/food_events.dm @@ -0,0 +1,46 @@ +/datum/mood_event/favorite_food + description = "I really enjoyed eating that." + mood_change = 5 + timeout = 4 MINUTES + +/datum/mood_event/gross_food + description = "I really didn't like that food." + mood_change = -2 + timeout = 4 MINUTES + +/datum/mood_event/disgusting_food + description = "That food was disgusting!" + mood_change = -6 + timeout = 4 MINUTES + +/datum/mood_event/breakfast + description = "Nothing like a hearty breakfast to start the shift." + mood_change = 2 + timeout = 10 MINUTES + +/datum/mood_event/food + timeout = 5 MINUTES + var/quality = FOOD_QUALITY_NORMAL + +/datum/mood_event/food/New(mob/M, ...) + . = ..() + mood_change = 2 + 2 * quality + description = "That food was [GLOB.food_quality_description[quality]]." + +/datum/mood_event/food/nice + quality = FOOD_QUALITY_NICE + +/datum/mood_event/food/good + quality = FOOD_QUALITY_GOOD + +/datum/mood_event/food/verygood + quality = FOOD_QUALITY_VERYGOOD + +/datum/mood_event/food/fantastic + quality = FOOD_QUALITY_FANTASTIC + +/datum/mood_event/food/amazing + quality = FOOD_QUALITY_AMAZING + +/datum/mood_event/food/top + quality = FOOD_QUALITY_TOP diff --git a/code/datums/mood_events/needs_events.dm b/code/datums/mood_events/needs_events.dm index 01281963cc1..ceee687918e 100644 --- a/code/datums/mood_events/needs_events.dm +++ b/code/datums/mood_events/needs_events.dm @@ -67,26 +67,6 @@ timeout = 4 MINUTES //Generic needs events -/datum/mood_event/favorite_food - description = "I really enjoyed eating that." - mood_change = 5 - timeout = 4 MINUTES - -/datum/mood_event/gross_food - description = "I really didn't like that food." - mood_change = -2 - timeout = 4 MINUTES - -/datum/mood_event/disgusting_food - description = "That food was disgusting!" - mood_change = -6 - timeout = 4 MINUTES - -/datum/mood_event/breakfast - description = "Nothing like a hearty breakfast to start the shift." - mood_change = 2 - timeout = 10 MINUTES - /datum/mood_event/nice_shower description = "I have recently had a nice shower." mood_change = 4 diff --git a/code/datums/status_effects/buffs/food_haste.dm b/code/datums/status_effects/buffs/food_haste.dm new file mode 100644 index 00000000000..9daf859fb19 --- /dev/null +++ b/code/datums/status_effects/buffs/food_haste.dm @@ -0,0 +1,20 @@ +/// Haste makes the eater move faster +/datum/status_effect/food/haste + var/datum/movespeed_modifier/food_haste/modifier + +/datum/status_effect/food/haste/on_apply() + modifier = new() + modifier.multiplicative_slowdown = -0.04 * strength + owner.add_movespeed_modifier(modifier, update = TRUE) + return ..() + +/datum/status_effect/food/haste/be_replaced() + owner.remove_movespeed_modifier(modifier, update = TRUE) + return ..() + +/datum/status_effect/food/haste/on_remove() + owner.remove_movespeed_modifier(modifier, update = TRUE) + return ..() + +/datum/movespeed_modifier/food_haste + multiplicative_slowdown = -0.1 diff --git a/code/datums/status_effects/buffs/food_traits.dm b/code/datums/status_effects/buffs/food_traits.dm new file mode 100644 index 00000000000..ebe22116dd0 --- /dev/null +++ b/code/datums/status_effects/buffs/food_traits.dm @@ -0,0 +1,8 @@ +/datum/status_effect/food/trait/shockimmune + alert_type = /atom/movable/screen/alert/status_effect/food_trait_shockimmune + trait = TRAIT_SHOCKIMMUNE + +/atom/movable/screen/alert/status_effect/food_trait_shockimmune + name = "Grounded" + desc = "That meal made me feel like a superconductor..." + icon_state = "food_buff_4" diff --git a/code/datums/status_effects/food_effects.dm b/code/datums/status_effects/food_effects.dm new file mode 100644 index 00000000000..e41ef67ad10 --- /dev/null +++ b/code/datums/status_effects/food_effects.dm @@ -0,0 +1,52 @@ +/// Buffs given by eating hand-crafted food. The duration scales with consumable reagents purity. +/datum/status_effect/food + id = "food_buff" + duration = 5 MINUTES // Same as food mood buffs + status_type = STATUS_EFFECT_REPLACE // Only one food buff allowed + /// Buff power + var/strength + +/datum/status_effect/food/on_creation(mob/living/new_owner, timeout_mod = 1, strength = 1) + src.strength = strength + //Generate alert when not specified + if(alert_type == /atom/movable/screen/alert/status_effect) + alert_type = "/atom/movable/screen/alert/status_effect/food/buff_[strength]" + if(isnum(timeout_mod)) + duration *= timeout_mod + . = ..() + +/atom/movable/screen/alert/status_effect/food + name = "Hand-crafted meal" + desc = "Eating it made me feel better." + icon_state = "food_buff_1" + +/atom/movable/screen/alert/status_effect/food/buff_1 + icon_state = "food_buff_1" + +/atom/movable/screen/alert/status_effect/food/buff_2 + icon_state = "food_buff_2" + +/atom/movable/screen/alert/status_effect/food/buff_3 + icon_state = "food_buff_3" + +/atom/movable/screen/alert/status_effect/food/buff_4 + icon_state = "food_buff_4" + +/atom/movable/screen/alert/status_effect/food/buff_5 + icon_state = "food_buff_5" + +/// Makes you gain a trait +/datum/status_effect/food/trait + var/trait = TRAIT_DUMB // You need to override this + +/datum/status_effect/food/trait/on_apply() + ADD_TRAIT(owner, trait, type) + return ..() + +/datum/status_effect/food/trait/be_replaced() + REMOVE_TRAIT(owner, trait, type) + return ..() + +/datum/status_effect/food/trait/on_remove() + REMOVE_TRAIT(owner, trait, type) + return ..() diff --git a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm index 584403a1195..d6b4728d104 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm @@ -51,9 +51,9 @@ item_path = /obj/item/reagent_containers/condiment/vinegar cost_per_order = 30 -/datum/orderable_item/reagents/quality_oil - name = "Quality Oil" - item_path = /obj/item/reagent_containers/condiment/quality_oil +/datum/orderable_item/reagents/olive_oil + name = "Olive Oil" + item_path = /obj/item/reagent_containers/condiment/olive_oil cost_per_order = 50 //Extra Virgin, just like you, the reader /datum/orderable_item/reagents/peanut_butter diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm index b9d01e8081a..5338eb52897 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -243,7 +243,7 @@ /obj/item/reagent_containers/condiment/soysauce = 1, /obj/item/reagent_containers/condiment/vinegar = 1, /obj/item/reagent_containers/condiment/peanut_butter = 1, - /obj/item/reagent_containers/condiment/quality_oil = 1, + /obj/item/reagent_containers/condiment/olive_oil = 1, /obj/item/reagent_containers/condiment/cherryjelly = 1, ) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4cc3a963b5f..0724d990f26 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -207,8 +207,8 @@ ///Grinder var:A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only var/list/grind_results - //Grinder var:A reagent list containing blah blah... but when JUICED in a grinder! - var/list/juice_results + ///A reagent the nutriments are converted into when the item is juiced. + var/datum/reagent/consumable/juice_typepath var/canMouseDown = FALSE @@ -971,13 +971,36 @@ /obj/item/proc/grind_requirements(obj/machinery/reagentgrinder/R) //Used to check for extra requirements for grinding an object return TRUE -///Called BEFORE the object is ground up - use this to change grind results based on conditions. Use "return -1" to prevent the grinding from occurring +///Called BEFORE the object is ground up - use this to change grind results based on conditions. Return "-1" to prevent the grinding from occurring /obj/item/proc/on_grind() return SEND_SIGNAL(src, COMSIG_ITEM_ON_GRIND) +///Grind item, adding grind_results to item's reagents and transfering to target_holder if specified +/obj/item/proc/grind(datum/reagents/target_holder, mob/user) + if(on_grind() == -1) + return FALSE + if(!reagents) + reagents = new() + reagents.add_reagent_list(grind_results) + if(reagents && target_holder) + reagents.trans_to(target_holder, reagents.total_volume, transfered_by = user) + return TRUE + +///Called BEFORE the object is ground up - use this to change grind results based on conditions. Return "-1" to prevent the grinding from occurring /obj/item/proc/on_juice() + if(!juice_typepath) + return -1 return SEND_SIGNAL(src, COMSIG_ITEM_ON_JUICE) +///Juice item, converting nutriments into juice_typepath and transfering to target_holder if specified +/obj/item/proc/juice(datum/reagents/target_holder, mob/user) + if(on_juice() == -1) + return FALSE + reagents.convert_reagent(/datum/reagent/consumable, juice_typepath, include_source_subtypes = TRUE) + if(reagents && target_holder) + reagents.trans_to(target_holder, reagents.total_volume, transfered_by = user) + return TRUE + /obj/item/proc/set_force_string() switch(force) if(0 to 4) diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index 1df4a78b9fe..6d4362cb67f 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -10,7 +10,7 @@ righthand_file = 'icons/mob/inhands/items/food_righthand.dmi' obj_flags = UNIQUE_RENAME grind_results = list() - ///List of reagents this food gets on creation + ///List of reagents this food gets on creation during reaction or map spawn var/list/food_reagents ///Extra flags for things such as if the food is in a container or not var/food_flags @@ -48,6 +48,18 @@ var/decomposition_time = 0 ///Used to set decomposition stink particles for food, will have no particles if null var/decomposition_particles = /particles/stink + ///Used to set custom starting reagent purity for synthetic and natural food. Ignored when set to null. + var/starting_reagent_purity = null + ///How exquisite the meal is. Applicable to crafted food, increasing its quality. Spans from 0 to 5. + var/crafting_complexity = 0 + ///Buff given when a hand-crafted version of this item is consumed. Randomized according to crafting_complexity if not assigned. + var/datum/status_effect/food/crafted_food_buff = null + +/obj/item/food/New(loc, starting_reagent_purity, no_base_reagents = FALSE, ...) + src.starting_reagent_purity = starting_reagent_purity + if(no_base_reagents) + food_reagents = null + return ..() /obj/item/food/Initialize(mapload) . = ..() @@ -80,9 +92,9 @@ eatverbs = eatverbs,\ bite_consumption = bite_consumption,\ junkiness = junkiness,\ + reagent_purity = starting_reagent_purity,\ ) - ///This proc handles processable elements, overwrite this if you want to add behavior such as slicing, forking, spooning, whatever, to turn the item into something else /obj/item/food/proc/make_processable() return diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index 7608657f580..f4f935f032a 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -8,6 +8,7 @@ tastes = list("bread" = 10) foodtypes = GRAIN eat_time = 3 SECONDS + crafting_complexity = FOOD_COMPLEXITY_2 /// type is spawned 5 at a time and replaces this bread loaf when processed by cutting tool var/obj/item/food/breadslice/slice_type /// so that the yield can change if it isnt 5 @@ -32,6 +33,7 @@ food_flags = FOOD_FINGER_FOOD eat_time = 0.5 SECONDS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/breadslice/Initialize(mapload) . = ..() @@ -48,6 +50,7 @@ venue_value = FOOD_PRICE_CHEAP burns_in_oven = TRUE slice_type = /obj/item/food/breadslice/plain + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/bread/plain/Initialize(mapload) . = ..() @@ -65,6 +68,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 2) venue_value = FOOD_PRICE_TRASH decomp_type = /obj/item/food/breadslice/moldy + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/breadslice/plain/Initialize(mapload) . = ..() @@ -84,6 +88,7 @@ tastes = list("decaying fungus" = 1) foodtypes = GROSS preserved_food = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/breadslice/moldy/bacteria name = "bacteria-rich moldy 'bread' slice" @@ -107,6 +112,7 @@ foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/breadslice/meat + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/meat name = "meatbread slice" @@ -119,6 +125,7 @@ ) tastes = list("bread" = 1, "meat" = 1) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/sausage name = "sausagebread loaf" @@ -132,6 +139,7 @@ tastes = list("bread" = 10, "meat" = 10) foodtypes = GRAIN | MEAT slice_type = /obj/item/food/breadslice/sausage + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/sausage name = "sausagebread slice" @@ -144,6 +152,7 @@ ) tastes = list("bread" = 10, "meat" = 10) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/xenomeat name = "xenomeatbread loaf" @@ -157,6 +166,7 @@ tastes = list("bread" = 10, "acid" = 10) foodtypes = GRAIN | MEAT slice_type = /obj/item/food/breadslice/xenomeat + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/xenomeat name = "xenomeatbread slice" @@ -169,6 +179,7 @@ ) tastes = list("bread" = 10, "acid" = 10) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/spidermeat name = "spider meat loaf" @@ -183,6 +194,7 @@ tastes = list("bread" = 10, "cobwebs" = 5) foodtypes = GRAIN | MEAT | TOXIC slice_type = /obj/item/food/breadslice/spidermeat + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/spidermeat name = "spider meat bread slice" @@ -196,6 +208,7 @@ ) tastes = list("bread" = 10, "cobwebs" = 5) foodtypes = GRAIN | MEAT | TOXIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/banana name = "banana-nut bread" @@ -208,6 +221,7 @@ tastes = list("bread" = 10) // bananjuice will also flavour foodtypes = GRAIN | FRUIT slice_type = /obj/item/food/breadslice/banana + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/banana name = "banana-nut bread slice" @@ -219,6 +233,7 @@ ) tastes = list("bread" = 10) foodtypes = GRAIN | FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/tofu name = "Tofubread" @@ -233,6 +248,7 @@ foodtypes = GRAIN | VEGETABLES venue_value = FOOD_PRICE_TRASH slice_type = /obj/item/food/breadslice/tofu + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/tofu name = "tofubread slice" @@ -245,6 +261,7 @@ ) tastes = list("bread" = 10, "tofu" = 10) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/creamcheese name = "cream cheese bread" @@ -284,6 +301,7 @@ tastes = list("bread" = 10, "silence" = 10) foodtypes = GRAIN | FRUIT slice_type = /obj/item/food/breadslice/mimana + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/breadslice/mimana name = "mimana bread slice" @@ -297,6 +315,7 @@ ) tastes = list("bread" = 10, "silence" = 10) foodtypes = GRAIN | FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bread/empty name = "bread" @@ -334,6 +353,7 @@ tastes = list("bread" = 1) foodtypes = GRAIN venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /// whether this is in fake swordplay mode or not var/fake_swordplay = FALSE @@ -435,6 +455,7 @@ tastes = list("bread" = 1, "garlic" = 1, "butter" = 1) foodtypes = GRAIN venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/butterbiscuit name = "butter biscuit" @@ -449,6 +470,7 @@ foodtypes = GRAIN | BREAKFAST w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/butterdog name = "butterdog" @@ -463,6 +485,7 @@ tastes = list("butter" = 1, "exotic butter" = 1) foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/butterdog/Initialize(mapload) . = ..() @@ -480,6 +503,7 @@ tastes = list("raw egg" = 2, "soaked bread" = 1) foodtypes = GRAIN | RAW | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_frenchtoast/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/frenchtoast, rand(20 SECONDS, 30 SECONDS), TRUE) @@ -497,6 +521,7 @@ foodtypes = GRAIN | BREAKFAST w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_breadstick name = "raw breadstick" @@ -510,6 +535,7 @@ tastes = list("raw dough" = 1) foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_breadstick/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/breadstick, rand(15 SECONDS, 20 SECONDS), TRUE, TRUE) @@ -527,6 +553,7 @@ foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_croissant name = "raw croissant" @@ -537,6 +564,7 @@ tastes = list("raw dough" = 1) foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_croissant/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/croissant, rand(15 SECONDS, 20 SECONDS), TRUE, TRUE) @@ -551,6 +579,7 @@ foodtypes = GRAIN | DAIRY | BREAKFAST w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 // Enhanced weaponised bread /obj/item/food/croissant/throwing diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm index 3878980e78a..311d87b3192 100644 --- a/code/game/objects/items/food/burgers.dm +++ b/code/game/objects/items/food/burgers.dm @@ -12,6 +12,7 @@ foodtypes = GRAIN | MEAT //lettuce doesn't make burger a vegetable. eat_time = 15 //Quick snack w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/plain name = "plain burger" @@ -24,6 +25,7 @@ foodtypes = GRAIN | MEAT custom_price = PAYCHECK_CREW * 0.8 venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/plain/Initialize(mapload) . = ..() @@ -48,6 +50,7 @@ tastes = list("bun" = 2, "long pig" = 4) foodtypes = MEAT | GRAIN | GORE venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/human/CheckParts(list/parts_list) ..() @@ -69,6 +72,7 @@ tastes = list("bun" = 4, "corgi meat" = 2) foodtypes = GRAIN | MEAT | GORE venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/appendix name = "appendix burger" @@ -82,6 +86,7 @@ tastes = list("bun" = 4, "grass" = 2) foodtypes = GRAIN | MEAT | GORE venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/fish name = "fillet -o- carp sandwich" @@ -95,6 +100,7 @@ tastes = list("bun" = 4, "fish" = 4) foodtypes = GRAIN | SEAFOOD venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/tofu name = "tofu burger" @@ -108,6 +114,7 @@ tastes = list("bun" = 4, "tofu" = 4) foodtypes = GRAIN | VEGETABLES venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/roburger name = "roburger" @@ -143,6 +150,7 @@ tastes = list("bun" = 4, "acid" = 4) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/bearger name = "bearger" @@ -156,6 +164,7 @@ tastes = list("bun" = 2, "meat" = 2, "salmon" = 2) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/clown name = "clown burger" @@ -169,6 +178,7 @@ tastes = list("bun" = 2, "a bad joke" = 4) foodtypes = GRAIN | FRUIT venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/mime name = "mime burger" @@ -182,6 +192,7 @@ ) foodtypes = GRAIN venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/brain name = "brainburger" @@ -196,6 +207,7 @@ tastes = list("bun" = 4, "brains" = 2) foodtypes = GRAIN | MEAT | GORE venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/ghost name = "ghost burger" @@ -213,6 +225,7 @@ verb_say = "moans" verb_yell = "wails" venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/ghost/Initialize(mapload) . = ..() @@ -262,6 +275,7 @@ ) tastes = list("bun" = 2, "red" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/orange name = "orange burger" @@ -276,6 +290,7 @@ ) tastes = list("bun" = 2, "orange" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/yellow name = "yellow burger" @@ -290,6 +305,7 @@ ) tastes = list("bun" = 2, "yellow" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/green name = "green burger" @@ -304,6 +320,7 @@ ) tastes = list("bun" = 2, "green" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/blue name = "blue burger" @@ -318,6 +335,7 @@ ) tastes = list("bun" = 2, "blue" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/purple name = "purple burger" @@ -332,6 +350,7 @@ ) tastes = list("bun" = 2, "purple" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/black name = "black burger" @@ -346,6 +365,7 @@ ) tastes = list("bun" = 2, "black" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/white name = "white burger" @@ -360,6 +380,7 @@ ) tastes = list("bun" = 2, "white" = 2) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/spell name = "spell burger" @@ -373,6 +394,7 @@ tastes = list("bun" = 4, "magic" = 2) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/bigbite name = "big bite burger" @@ -387,6 +409,7 @@ w_class = WEIGHT_CLASS_NORMAL foodtypes = GRAIN | MEAT | DAIRY venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/jelly name = "jelly burger" @@ -395,6 +418,7 @@ tastes = list("bun" = 4, "jelly" = 2) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/jelly/slime food_reagents = list( @@ -427,6 +451,7 @@ tastes = list("bun" = 4, "type two diabetes" = 10) foodtypes = GRAIN | MEAT | DAIRY venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/burger/superbite/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] starts to eat [src] in one bite, it looks like [user.p_theyre()] trying to commit suicide!")) @@ -448,6 +473,7 @@ tastes = list("extreme heat" = 4, "bun" = 2) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/rat name = "rat burger" @@ -461,6 +487,7 @@ tastes = list("dead rat" = 4, "bun" = 2) foodtypes = GRAIN | MEAT | GORE venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/baseball name = "home run baseball burger" @@ -475,6 +502,7 @@ foodtypes = GRAIN | GROSS custom_price = PAYCHECK_CREW * 0.8 venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/baconburger name = "bacon burger" @@ -489,6 +517,7 @@ foodtypes = GRAIN | MEAT custom_premium_price = PAYCHECK_CREW * 1.6 venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/empoweredburger name = "empowered burger" @@ -503,6 +532,7 @@ tastes = list("bun" = 2, "pure electricity" = 4) foodtypes = GRAIN | TOXIC venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/burger/catburger name = "catburger" @@ -515,6 +545,7 @@ ) tastes = list("bun" = 4, "meat" = 2, "cat" = 2) foodtypes = GRAIN | MEAT | GORE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/crab name = "crab burger" @@ -528,6 +559,7 @@ tastes = list("bun" = 2, "crab meat" = 4) foodtypes = GRAIN | SEAFOOD venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/soylent name = "soylent burger" @@ -541,6 +573,7 @@ tastes = list("bun" = 2, "assistant" = 4) foodtypes = GRAIN | MEAT | DAIRY venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/burger/rib name = "mcrib" @@ -555,6 +588,7 @@ tastes = list("bun" = 2, "pork patty" = 4) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/mcguffin name = "mcguffin" @@ -569,6 +603,7 @@ tastes = list("muffin" = 2, "bacon" = 3) foodtypes = GRAIN | MEAT | BREAKFAST venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/chicken name = "chicken sandwich" //Apparently the proud people of Americlapstan object to this thing being called a burger. Apparently McDonald's just calls it a burger in Europe as to not scare and confuse us. @@ -579,11 +614,12 @@ /datum/reagent/consumable/mayonnaise = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 1, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, ) tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1) foodtypes = GRAIN | MEAT | FRIED venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/cheese name = "cheese burger" @@ -597,6 +633,7 @@ tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 3) foodtypes = GRAIN | MEAT | DAIRY venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/burger/cheese/Initialize(mapload) . = ..() @@ -616,6 +653,7 @@ ) tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 2, "beef soaked in chili" = 3, "a smoking flare" = 2) foodtypes = GRAIN | MEAT | DAIRY + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/burger/crazy/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm index 76ab73b970c..1a93ab96df2 100644 --- a/code/game/objects/items/food/cake.dm +++ b/code/game/objects/items/food/cake.dm @@ -8,6 +8,7 @@ ) tastes = list("cake" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_2 /// type is spawned 5 at a time and replaces this cake when processed by cutting tool var/obj/item/food/cakeslice/slice_type /// changes yield of sliced cake, default for cake is 5 @@ -30,6 +31,7 @@ tastes = list("cake" = 1) foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cake/plain name = "plain cake" @@ -59,6 +61,7 @@ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/carrot + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/carrot name = "carrot cake slice" @@ -66,6 +69,7 @@ icon_state = "carrotcake_slice" tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/brain name = "brain cake" @@ -80,6 +84,7 @@ tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) foodtypes = GRAIN | DAIRY | MEAT | GORE | SUGAR slice_type = /obj/item/food/cakeslice/brain + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/brain name = "brain cake slice" @@ -93,6 +98,7 @@ ) tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) foodtypes = GRAIN | DAIRY | MEAT | GORE | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/cheese name = "cheese cake" @@ -107,6 +113,7 @@ foodtypes = GRAIN | DAIRY venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/cheese + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/cheese name = "cheese cake slice" @@ -119,6 +126,7 @@ ) tastes = list("cake" = 4, "cream cheese" = 3) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/orange name = "orange cake" @@ -128,6 +136,7 @@ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR | ORANGES venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/orange + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/orange name = "orange cake slice" @@ -135,6 +144,7 @@ icon_state = "orangecake_slice" tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR | ORANGES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/lime name = "lime cake" @@ -148,6 +158,7 @@ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/lime + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/lime name = "lime cake slice" @@ -155,6 +166,7 @@ icon_state = "limecake_slice" tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/lemon name = "lemon cake" @@ -168,6 +180,7 @@ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/lemon + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/lemon name = "lemon cake slice" @@ -175,6 +188,7 @@ icon_state = "lemoncake_slice" tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/chocolate name = "chocolate cake" @@ -188,6 +202,7 @@ foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/chocolate + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/chocolate name = "chocolate cake slice" @@ -195,6 +210,7 @@ icon_state = "chocolatecake_slice" tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/birthday name = "birthday cake" @@ -208,6 +224,7 @@ tastes = list("cake" = 5, "sweetness" = 1) foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR slice_type = /obj/item/food/cakeslice/birthday + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/birthday/make_microwaveable() // super sekrit club AddElement(/datum/element/microwavable, /obj/item/clothing/head/utility/hardhat/cakehat) @@ -223,6 +240,7 @@ ) tastes = list("cake" = 5, "sweetness" = 1) foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/birthday/energy name = "energy cake" @@ -239,6 +257,7 @@ ) tastes = list("cake" = 3, "a Vlad's Salad" = 1) slice_type = /obj/item/food/cakeslice/birthday/energy + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cake/birthday/energy/make_microwaveable() //super sekriter club AddElement(/datum/element/microwavable, /obj/item/clothing/head/utility/hardhat/cakehat/energycake) @@ -268,6 +287,7 @@ /datum/reagent/consumable/liquidelectricity/enriched = 2, ) tastes = list("cake" = 3, "a Vlad's Salad" = 1) + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") @@ -292,6 +312,7 @@ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/apple + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/apple name = "apple cake slice" @@ -299,6 +320,7 @@ icon_state = "applecakeslice" tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/slimecake name = "Slime cake" @@ -307,6 +329,7 @@ tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) foodtypes = GRAIN | DAIRY | SUGAR slice_type = /obj/item/food/cakeslice/slimecake + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/slimecake name = "slime cake slice" @@ -314,6 +337,7 @@ icon_state = "slimecake_slice" tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) foodtypes = GRAIN | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/pumpkinspice name = "pumpkin spice cake" @@ -323,6 +347,7 @@ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/pumpkinspice + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/pumpkinspice name = "pumpkin spice cake slice" @@ -330,23 +355,26 @@ icon_state = "pumpkinspicecakeslice" tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 -/obj/item/food/cake/bsvc // blackberry strawberries vanilla cake +/obj/item/food/cake/berry_vanilla_cake // blackberry strawberries vanilla cake name = "blackberry and strawberry vanilla cake" desc = "A plain cake, filled with assortment of blackberries and strawberries!" icon_state = "blackbarry_strawberries_cake_vanilla_cake" tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR - slice_type = /obj/item/food/cakeslice/bsvc + slice_type = /obj/item/food/cakeslice/berry_vanilla_cake + crafting_complexity = FOOD_COMPLEXITY_3 -/obj/item/food/cakeslice/bsvc +/obj/item/food/cakeslice/berry_vanilla_cake name = "blackberry and strawberry vanilla cake slice" desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" icon_state = "blackbarry_strawberries_cake_vanilla_slice" tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 -/obj/item/food/cake/bscc // blackbarry strawberries chocolate cake <- this is a relic from before resprite +/obj/item/food/cake/berry_chocolate_cake // blackbarry strawberries chocolate cake <- this is a relic from before resprite name = "strawberry chocolate cake" desc = "A chocolate cake with five strawberries on top. For some reason, this configuration of cake is particularly aesthetically pleasing to AIs in SELF." icon_state = "liars_cake" @@ -357,15 +385,17 @@ ) tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2, "cake" = 3) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR - slice_type = /obj/item/food/cakeslice/bscc + slice_type = /obj/item/food/cakeslice/berry_chocolate_cake + crafting_complexity = FOOD_COMPLEXITY_4 -/obj/item/food/cakeslice/bscc +/obj/item/food/cakeslice/berry_chocolate_cake name = "strawberry chocolate cake slice" desc = "Just a slice of cake with five strawberries on top. \ For some reason, this configuration of cake is particularly aesthetically pleasing to AIs in SELF." icon_state = "liars_slice" tastes = list("strawberries" = 2, "chocolate" = 2, "sweetness" = 2, "cake" = 3) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cake/holy_cake name = "angel food cake" @@ -400,6 +430,7 @@ venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/pound_cake_slice yield = 7 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cakeslice/pound_cake_slice name = "pound cake slice" @@ -411,6 +442,7 @@ ) tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cake/hardware_cake name = "hardware cake" @@ -425,6 +457,7 @@ tastes = list("acid" = 3, "metal" = 4, "glass" = 5) foodtypes = GRAIN | GROSS slice_type = /obj/item/food/cakeslice/hardware_cake_slice + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/hardware_cake_slice name = "hardware cake slice" @@ -438,6 +471,7 @@ ) tastes = list("acid" = 3, "metal" = 4, "glass" = 5) foodtypes = GRAIN | GROSS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/vanilla_cake name = "vanilla cake" @@ -452,6 +486,7 @@ tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) foodtypes = GRAIN | SUGAR | DAIRY slice_type = /obj/item/food/cakeslice/vanilla_slice + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/vanilla_slice name = "vanilla cake slice" @@ -465,6 +500,7 @@ ) tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) foodtypes = GRAIN | SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/clown_cake name = "clown cake" @@ -478,6 +514,7 @@ tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) foodtypes = GRAIN | SUGAR | DAIRY slice_type = /obj/item/food/cakeslice/clown_slice + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/cakeslice/clown_slice name = "clown cake slice" @@ -490,6 +527,7 @@ ) tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) foodtypes = GRAIN | SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/cake/trumpet name = "spaceman's cake" @@ -505,6 +543,7 @@ tastes = list("cake" = 4, "violets" = 2, "jam" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR slice_type = /obj/item/food/cakeslice/trumpet + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cakeslice/trumpet name = "spaceman's cake slice" @@ -519,6 +558,7 @@ ) tastes = list("cake" = 4, "violets" = 2, "jam" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cake/brioche name = "brioche cake" @@ -528,6 +568,7 @@ foodtypes = GRAIN | DAIRY | SUGAR slice_type = /obj/item/food/cakeslice/brioche yield = 6 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cakeslice/brioche name = "brioche cake slice" @@ -535,6 +576,7 @@ icon_state = "briochecake_slice" tastes = list("cake" = 4, "butter" = 2, "cream" = 1) foodtypes = GRAIN | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cake/pavlova name = "pavlova" @@ -543,6 +585,7 @@ tastes = list("meringue" = 5, "creaminess" = 1, "berries" = 1) foodtypes = DAIRY | FRUIT | SUGAR slice_type = /obj/item/food/cakeslice/pavlova + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/pavlova/nuts name = "pavlova with nuts" @@ -556,6 +599,7 @@ icon_state = "pavlova_slice" tastes = list("meringue" = 5, "creaminess" = 1, "berries" = 1) foodtypes = DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/pavlova/nuts foodtypes = NUTS | FRUIT | SUGAR @@ -574,6 +618,7 @@ throwforce = 7 foodtypes = GRAIN | DAIRY | FRUIT | SUGAR slice_type = /obj/item/food/cakeslice/fruit + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cakeslice/fruit name = "english fruitcake slice" @@ -584,6 +629,7 @@ force = 2 throwforce = 2 foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cakeslice/fruit/Initialize(mapload) . = ..() @@ -602,6 +648,7 @@ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR venue_value = FOOD_PRICE_CHEAP slice_type = /obj/item/food/cakeslice/plum + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/plum name = "plum cake slice" @@ -609,6 +656,7 @@ icon_state = "plumcakeslice" tastes = list("cake" = 5, "sweetness" = 1, "plum" = 2) foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cake/wedding name = "wedding cake" @@ -622,6 +670,7 @@ tastes = list("cake" = 3, "frosting" = 1) foodtypes = GRAIN | DAIRY | SUGAR slice_type = /obj/item/food/cakeslice/wedding + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/wedding name = "wedding cake slice" diff --git a/code/game/objects/items/food/cheese.dm b/code/game/objects/items/food/cheese.dm index ed980bd2a57..1081ecb2ef1 100644 --- a/code/game/objects/items/food/cheese.dm +++ b/code/game/objects/items/food/cheese.dm @@ -7,8 +7,9 @@ name = "the concept of cheese" desc = "This probably shouldn't exist." tastes = list("cheese" = 1) - food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3) + food_reagents = list(/datum/reagent/consumable/nutriment/fat = 3) foodtypes = DAIRY + crafting_complexity = FOOD_COMPLEXITY_1 /// used to determine how much health rats/regal rats recover when they eat it. var/rat_heal = 0 @@ -27,24 +28,26 @@ desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" food_reagents = list( - /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/fat = 2, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 1, ) w_class = WEIGHT_CLASS_SMALL rat_heal = 10 + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/cheese/wheel name = "cheese wheel" desc = "A big wheel of delcious Cheddar." icon_state = "cheesewheel" food_reagents = list( - /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/fat = 10, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 5, ) //Hard cheeses contain about 25% protein w_class = WEIGHT_CLASS_NORMAL rat_heal = 35 + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/cheese/wheel/Initialize(mapload) . = ..() @@ -70,7 +73,7 @@ desc = "Ascend the throne. Consume the wheel. Feel the POWER." icon_state = "royalcheese" food_reagents = list( - /datum/reagent/consumable/nutriment = 15, + /datum/reagent/consumable/nutriment/fat = 15, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/gold = 20, /datum/reagent/toxin/mutagen = 5, @@ -78,6 +81,7 @@ w_class = WEIGHT_CLASS_BULKY tastes = list("cheese" = 4, "royalty" = 1) rat_heal = 70 + crafting_complexity = FOOD_COMPLEXITY_3 //Curd cheese, a general term which I will now proceed to stretch as thin as the toppings on a supermarket sandwich: //I'll use it as a substitute for ricotta, cottage cheese and quark, as well as any other non-aged, soft grainy cheese @@ -93,6 +97,7 @@ foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL rat_heal = 35 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cheese/curd_cheese/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/cheese/cheese_curds, rand(15 SECONDS, 20 SECONDS), TRUE, TRUE) @@ -107,6 +112,7 @@ foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL rat_heal = 35 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cheese/cheese_curds/Initialize(mapload) . = ..() @@ -120,6 +126,7 @@ foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL rat_heal = 35 + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cheese/firm_cheese/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cheese/firm_cheese_slice, 3, 3 SECONDS, screentip_verb = "Slice") @@ -133,6 +140,7 @@ w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE rat_heal = 10 + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cheese/firm_cheese_slice/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/grilled_cheese, rand(25 SECONDS, 35 SECONDS), TRUE, TRUE) @@ -145,3 +153,4 @@ foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL rat_heal = 10 + crafting_complexity = FOOD_COMPLEXITY_2 diff --git a/code/game/objects/items/food/donkpocket.dm b/code/game/objects/items/food/donkpocket.dm index 24622fccf99..f2495e0ee52 100644 --- a/code/game/objects/items/food/donkpocket.dm +++ b/code/game/objects/items/food/donkpocket.dm @@ -12,6 +12,7 @@ foodtypes = GRAIN food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /// What type of donk pocket we're warmed into via baking or microwaving. var/warm_type = /obj/item/food/donkpocket/warm @@ -53,6 +54,7 @@ ) tastes = list("meat" = 2, "dough" = 2) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/donkpocket/spicy name = "\improper Spicy-pocket" @@ -142,8 +144,8 @@ ) tastes = list("banana" = 2, "dough" = 2, "children's antibiotics" = 1) foodtypes = GRAIN - warm_type = /obj/item/food/donkpocket/warm/honk + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donkpocket/warm/honk name = "warm Honk-pocket" @@ -157,6 +159,7 @@ ) tastes = list("banana" = 2, "dough" = 2, "children's antibiotics" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donkpocket/berry name = "\improper Berry-pocket" @@ -168,7 +171,6 @@ ) tastes = list("dough" = 2, "jam" = 2) foodtypes = GRAIN - warm_type = /obj/item/food/donkpocket/warm/berry /obj/item/food/donkpocket/warm/berry diff --git a/code/game/objects/items/food/donuts.dm b/code/game/objects/items/food/donuts.dm index e9fc37a6d36..a9491b87edb 100644 --- a/code/game/objects/items/food/donuts.dm +++ b/code/game/objects/items/food/donuts.dm @@ -8,13 +8,15 @@ bite_consumption = 5 food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/sugar = 3) tastes = list("donut" = 1) - foodtypes = JUNKFOOD | GRAIN | FRIED | SUGAR | BREAKFAST + foodtypes = JUNKFOOD | GRAIN | SUGAR | BREAKFAST food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 var/decorated_icon = "donut_homer" var/is_decorated = FALSE var/extra_reagent = null var/decorated_adjective = "sprinkled" + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/donut/Initialize(mapload) . = ..() @@ -58,6 +60,7 @@ bite_consumption = 10 tastes = list("donut" = 3, "chaos" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/chaos/Initialize(mapload) . = ..() @@ -87,6 +90,7 @@ tastes = list("meat" = 1) foodtypes = JUNKFOOD | MEAT | GORE | FRIED | BREAKFAST is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/berry name = "pink donut" @@ -111,6 +115,7 @@ ) tastes = list("donut" = 3, "violets" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/apple name = "apple donut" @@ -150,6 +155,7 @@ ) //the coco reagent is just bitter. tastes = list("donut" = 4, "bitterness" = 1) decorated_icon = "donut_choc_sprinkles" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/blumpkin name = "blumpkin donut" @@ -163,6 +169,7 @@ ) tastes = list("donut" = 2, "blumpkin" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/bungo name = "bungo donut" @@ -201,6 +208,7 @@ ) tastes = list("donut" = 3, "fizzy tutti frutti" = 1,) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 //////////////////////JELLY DONUTS///////////////////////// @@ -249,6 +257,7 @@ ) tastes = list("jelly" = 1, "donut" = 3, "violets" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/apple name = "apple jelly donut" @@ -291,6 +300,7 @@ ) tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1) decorated_icon = "jelly_choc_sprinkles" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/blumpkin name = "blumpkin jelly donut" @@ -305,6 +315,7 @@ ) tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/bungo name = "bungo jelly donut" @@ -345,6 +356,7 @@ ) tastes = list("jelly" = 3, "donut" = 1, "fizzy tutti frutti" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 //////////////////////////SLIME DONUTS///////////////////////// @@ -381,6 +393,7 @@ ) tastes = list("jelly" = 1, "donut" = 3, "violets" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/slimejelly/apple name = "apple jelly donut" @@ -423,6 +436,7 @@ ) tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1) decorated_icon = "jelly_choc_sprinkles" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/slimejelly/blumpkin name = "blumpkin jelly donut" @@ -437,6 +451,7 @@ ) tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/donut/jelly/slimejelly/bungo name = "bungo jelly donut" @@ -477,5 +492,6 @@ ) tastes = list("jelly" = 3, "donut" = 1, "fizzy tutti frutti" = 1) is_decorated = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 #undef DONUT_SPRINKLE_CHANCE diff --git a/code/game/objects/items/food/dough.dm b/code/game/objects/items/food/dough.dm index 28363b3f9f9..2bd80f06b7e 100644 --- a/code/game/objects/items/food/dough.dm +++ b/code/game/objects/items/food/dough.dm @@ -8,6 +8,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 6) tastes = list("dough" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/dough/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/bread/plain, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE) @@ -24,6 +25,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 6) tastes = list("dough" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/flatdough/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizzabread, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE) @@ -41,6 +43,7 @@ tastes = list("bread" = 1) foodtypes = GRAIN burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/pizzabread/Initialize(mapload) . = ..() @@ -55,6 +58,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("dough" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/doughslice/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/bun, rand(20 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -72,6 +76,7 @@ tastes = list("bun" = 1) // the bun tastes of bun. foodtypes = GRAIN burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/bun/Initialize(mapload) . = ..() @@ -85,6 +90,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 9) tastes = list("batter" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/cakebatter/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/cake/plain, rand(70 SECONDS, 90 SECONDS), TRUE, TRUE) @@ -100,6 +106,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 9) tastes = list("dough" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/piedough/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pie/plain, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE) @@ -116,6 +123,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("raw pastry" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/rawpastrybase/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pastrybase, rand(20 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -130,3 +138,4 @@ tastes = list("pastry" = 1) foodtypes = GRAIN | DAIRY burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index fe4cb1fd8dd..d71fe0670d1 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -11,6 +11,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_2 /// Counter for number of chicks hatched by throwing eggs, minecraft style. Chicks will not emerge from thrown eggs if this value exceeds the MAX_CHICKENS define. GLOBAL_VAR_INIT(chicks_from_eggs, 0) @@ -35,6 +36,11 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) /obj/item/food/egg/make_microwaveable() AddElement(/datum/element/microwavable, /obj/item/food/boiledegg) +/obj/item/food/egg/organic + name = "organic egg" + desc = "A 100% natural egg from the best hens." + starting_reagent_purity = 1 + /obj/item/food/egg/rotten food_reagents = list(/datum/reagent/consumable/eggrot = 10, /datum/reagent/consumable/mold = 10) foodtypes = GROSS @@ -199,6 +205,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) foodtypes = MEAT | FRIED | BREAKFAST w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/rawegg name = "raw egg" @@ -231,6 +238,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) w_class = WEIGHT_CLASS_SMALL ant_attracting = FALSE decomp_type = /obj/item/food/boiledegg/rotten + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/eggsausage name = "egg with sausage" @@ -241,6 +249,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) foodtypes = MEAT | FRIED | BREAKFAST tastes = list("egg" = 4, "meat" = 4) venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/boiledegg/rotten food_reagents = list(/datum/reagent/consumable/eggrot = 10) @@ -262,6 +271,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) tastes = list("egg" = 1, "cheese" = 1) foodtypes = MEAT | BREAKFAST | DAIRY venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/omelette/attackby(obj/item/item, mob/user, params) if(istype(item, /obj/item/kitchen/fork)) @@ -295,6 +305,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) tastes = list("egg" = 1, "bacon" = 1, "bun" = 1) foodtypes = MEAT | BREAKFAST | GRAIN venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/eggwrap name = "egg wrap" @@ -309,6 +320,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) tastes = list("egg" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/chawanmushi name = "chawanmushi" @@ -322,3 +334,4 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) ) tastes = list("custard" = 1) foodtypes = MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/frozen.dm b/code/game/objects/items/food/frozen.dm index 3c0c27a2695..8951165aa80 100644 --- a/code/game/objects/items/food/frozen.dm +++ b/code/game/objects/items/food/frozen.dm @@ -11,6 +11,7 @@ tastes = list("ice cream" = 1) foodtypes = GRAIN | DAIRY | SUGAR food_flags = FOOD_FINGER_FOOD + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/strawberryicecreamsandwich name = "strawberry ice cream sandwich" @@ -25,6 +26,7 @@ tastes = list("ice cream" = 2, "berry" = 2) foodtypes = FRUIT | DAIRY | SUGAR food_flags = FOOD_FINGER_FOOD + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spacefreezy @@ -40,6 +42,7 @@ ) tastes = list("blue cherries" = 2, "ice cream" = 2) foodtypes = FRUIT | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spacefreezy/make_edible() . = ..() @@ -58,6 +61,7 @@ ) tastes = list("ice cream" = 1, "banana" = 1) foodtypes = FRUIT | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sundae/make_edible() . = ..() @@ -76,6 +80,7 @@ ) tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1) foodtypes = FRUIT | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/honkdae/make_edible() . = ..() @@ -98,6 +103,7 @@ tastes = list("ice" = 1, "water" = 1) foodtypes = SUGAR //We use SUGAR as a base line to act in as junkfood, other wise we use fruit food_flags = FOOD_FINGER_FOOD + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/snowcones/lime name = "lime snowcone" @@ -293,6 +299,7 @@ ) tastes = list("ice" = 1, "water" = 1, "flowers" = 5, "sweetness" = 5, "wax" = 1) foodtypes = SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/snowcones/rainbow name = "rainbow snowcone" @@ -322,6 +329,7 @@ w_class = WEIGHT_CLASS_SMALL foodtypes = DAIRY | SUGAR food_flags = FOOD_FINGER_FOOD + crafting_complexity = FOOD_COMPLEXITY_3 var/overlay_state = "creamsicle_o" //This is the edible part of the popsicle. var/bite_states = 4 //This value value is used for correctly setting the bite_consumption to ensure every bite changes the sprite. Do not set to zero. @@ -368,6 +376,7 @@ /datum/reagent/consumable/sugar = 4, ) foodtypes = FRUIT | DAIRY | SUGAR | ORANGES + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/popsicle/creamsicle_berry name = "berry creamsicle" @@ -380,6 +389,7 @@ ) overlay_state = "creamsicle_m" foodtypes = FRUIT | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/popsicle/jumbo name = "jumbo ice cream" @@ -391,6 +401,7 @@ /datum/reagent/consumable/sugar = 2, ) overlay_state = "jumbo" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/popsicle/licorice_creamsicle name = "Void Bar™" @@ -404,6 +415,7 @@ ) tastes = list("salty liquorice") overlay_state = "licorice_creamsicle" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cornuto name = "cornuto" @@ -421,3 +433,4 @@ tastes = list("chopped hazelnuts", "waffle") foodtypes = DAIRY | SUGAR venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/lizard.dm b/code/game/objects/items/food/lizard.dm index 6975991ea24..970df893802 100644 --- a/code/game/objects/items/food/lizard.dm +++ b/code/game/objects/items/food/lizard.dm @@ -15,6 +15,7 @@ tastes = list("meat" = 1, "black pudding" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_tiziran_sausage/Initialize(mapload) . = ..() @@ -32,6 +33,7 @@ tastes = list("meat" = 1, "black pudding" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_headcheese name = "raw headcheese block" @@ -45,6 +47,7 @@ tastes = list("meat" = 1, "salt" = 1) foodtypes = MEAT | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_headcheese/Initialize(mapload) . = ..() @@ -62,6 +65,7 @@ tastes = list("cheese" = 1, "salt" = 1) foodtypes = MEAT | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/headcheese/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/headcheese_slice, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -78,6 +82,7 @@ tastes = list("cheese" = 1, "salt" = 1) foodtypes = MEAT | GORE w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/shredded_lungs name = "crispy shredded lung stirfry" @@ -93,6 +98,7 @@ foodtypes = MEAT | VEGETABLES | GORE trash_type = /obj/item/reagent_containers/cup/bowl w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/tsatsikh name = "tsatsikh" @@ -103,6 +109,7 @@ tastes = list("assorted minced organs" = 1) foodtypes = MEAT | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/liver_pate name = "liver pate" @@ -113,6 +120,7 @@ tastes = list("liver" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/moonfish_eggs name = "moonfish eggs" @@ -126,6 +134,7 @@ tastes = list("caviar" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/moonfish_caviar name = "moonfish caviar paste" @@ -139,6 +148,7 @@ tastes = list("caviar" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/lizard_escargot name = "desert snail cocleas" @@ -153,6 +163,7 @@ tastes = list("snails" = 1, "garlic" = 1, "oil" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/fried_blood_sausage name = "fried blood sausage" @@ -163,11 +174,12 @@ /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/salt = 1, - /datum/reagent/consumable/cooking_oil = 1, + /datum/reagent/consumable/nutriment/fat/oil = 1, ) tastes = list("black pudding" = 1, "batter" = 1, "oil" = 1) foodtypes = MEAT | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Why does like, every language on the planet besides English call them pommes? Who knows, who cares- the lizards call them it too, because funny. /obj/item/food/lizard_fries @@ -184,6 +196,7 @@ tastes = list("fries" = 2, "bbq sauce" = 1, "barbecued meat" = 1) foodtypes = MEAT | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/brain_pate name = "eyeball-and-brain pate" @@ -197,6 +210,7 @@ tastes = list("brains" = 2) foodtypes = MEAT | VEGETABLES | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/crispy_headcheese name = "crispy breaded headcheese" @@ -206,11 +220,12 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, ) tastes = list("cheese" = 1, "oil" = 1) foodtypes = MEAT | VEGETABLES | NUTS | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/kebab/picoss_skewers name = "picoss skewer" @@ -226,6 +241,7 @@ tastes = list("fish" = 1, "acid" = 1, "onion" = 1, "heat" = 1) foodtypes = SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/nectar_larvae name = "nectar larvae" @@ -240,6 +256,7 @@ tastes = list("meat" = 1, "sweet" = 1, "heat" = 1) foodtypes = GORE | MEAT | BUGS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/mushroomy_stirfry name = "mushroomy stirfry" @@ -253,6 +270,7 @@ tastes = list("marvelous mushrooms" = 1, "sublime shrooms" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Fish Dishes /obj/item/food/grilled_moonfish @@ -268,6 +286,7 @@ foodtypes = SEAFOOD burns_on_grill = TRUE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/moonfish_demiglace name = "moonfish demiglace" @@ -282,6 +301,7 @@ tastes = list("fish" = 2, "potatoes" = 1, "carrots" = 1) foodtypes = SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/lizard_surf_n_turf name = "\improper Zagosk surf 'n' turf smorgasbord" @@ -296,6 +316,7 @@ tastes = list("surf" = 1, "turf" = 1) foodtypes = MEAT | SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_BULKY + crafting_complexity = FOOD_COMPLEXITY_5 //Spaghetti Dishes @@ -310,6 +331,7 @@ ) tastes = list("gnocchi" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/snail_nizaya name = "desert snail nizaya" @@ -323,6 +345,7 @@ ) tastes = list("snails" = 1, "wine" = 1, "gnocchi" = 1) foodtypes = VEGETABLES | MEAT | NUTS + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/spaghetti/garlic_nizaya name = "garlic-and-oil nizaya" @@ -335,6 +358,7 @@ ) tastes = list("garlic" = 1, "oil" = 1, "gnocchi" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spaghetti/demit_nizaya name = "demit nizaya" @@ -348,6 +372,7 @@ ) tastes = list("peppery sweet" = 1, "veggies" = 1, "gnocchi" = 1) foodtypes = VEGETABLES | SUGAR | NUTS + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/spaghetti/mushroom_nizaya name = "mushroom nizaya" @@ -360,6 +385,7 @@ ) tastes = list("savouriness" = 1, "nuttiness" = 1, "gnocchi" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_4 //Dough Dishes @@ -372,6 +398,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("potato" = 1, "earthy heat" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/rootdough/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/bread/root, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -387,6 +414,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 6) tastes = list("potato" = 1, "earthy heat" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/flatrootdough/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/rootdoughslice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -403,6 +431,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("potato" = 1, "earthy heat" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/rootdoughslice/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/spaghetti/nizaya, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -419,6 +448,7 @@ tastes = list("bread" = 1, "earthy heat" = 1) foodtypes = VEGETABLES | NUTS burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/rootroll name = "rootroll" @@ -430,6 +460,7 @@ tastes = list("roll" = 1) // the roll tastes of roll. foodtypes = VEGETABLES | NUTS burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 //Bread Dishes @@ -481,6 +512,7 @@ tastes = list("bread" = 1, "herb" = 1, "oil" = 1, "garlic" = 1) foodtypes = VEGETABLES | NUTS boxtag = "Tiziran Flatbread" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/flatbread/italic name = "\improper Italic flatbread" @@ -494,6 +526,7 @@ tastes = list("bread" = 1, "herb" = 1, "oil" = 1, "garlic" = 1, "tomato" = 1, "meat" = 1) foodtypes = VEGETABLES | NUTS | MEAT boxtag = "Italic Flatbread" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/flatbread/imperial name = "\improper Imperial flatbread" @@ -507,6 +540,7 @@ tastes = list("bread" = 1, "herb" = 1, "oil" = 1, "garlic" = 1, "tomato" = 1, "meat" = 1) foodtypes = VEGETABLES | MEAT | NUTS | GORE boxtag = "Imperial Victory Flatbread" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/flatbread/rawmeat name = "meatlovers flatbread" @@ -518,6 +552,7 @@ ) tastes = list("bread" = 1, "meat" = 1) foodtypes = MEAT | NUTS | RAW | GORE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/flatbread/stinging name = "\improper Stinging flatbread" @@ -530,6 +565,7 @@ ) tastes = list("bread" = 1, "sweetness" = 1, "stinging" = 1, "slime" = 1) foodtypes = BUGS | NUTS | SEAFOOD | GORE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/flatbread/zmorgast // Name is based off of the Swedish dish Smörgåstårta name = "\improper Zmorgast flatbread" @@ -542,6 +578,7 @@ ) tastes = list("bread" = 1, "liver" = 1, "family" = 1) foodtypes = VEGETABLES | NUTS | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/flatbread/fish name = "\improper BBQ fish flatbread" @@ -554,6 +591,7 @@ ) tastes = list("bread" = 1, "fish" = 1) foodtypes = SEAFOOD | NUTS + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/flatbread/mushroom name = "mushroom and tomato flatbread" @@ -565,6 +603,7 @@ ) tastes = list("bread" = 1, "mushroom" = 1, "tomatoes" = 1) foodtypes = VEGETABLES | NUTS + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/flatbread/nutty name = "nut paste flatbread" @@ -573,6 +612,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 20) tastes = list("bread" = 1, "nuts" = 2) foodtypes = NUTS + crafting_complexity = FOOD_COMPLEXITY_3 //Sandwiches/Toast Dishes /obj/item/food/emperor_roll @@ -589,6 +629,7 @@ foodtypes = VEGETABLES | NUTS | MEAT | GORE | SEAFOOD food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/honey_roll name = "honey sweetroll" @@ -604,6 +645,7 @@ foodtypes = VEGETABLES | NUTS | FRUIT food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 //Egg Dishes /obj/item/food/black_eggs @@ -618,6 +660,7 @@ tastes = list("eggs" = 1, "greens" = 1, "blood" = 1) foodtypes = MEAT | BREAKFAST | GORE w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/patzikula name = "patzikula" @@ -633,6 +676,7 @@ tastes = list("eggs" = 1, "tomato" = 1, "heat" = 1) foodtypes = VEGETABLES | MEAT | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Cakes/Sweets @@ -649,6 +693,7 @@ tastes = list("peppery heat" = 1, "sweetness" = 1) foodtypes = NUTS | SUGAR slice_type = /obj/item/food/cakeslice/korta_brittle + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cakeslice/korta_brittle name = "korta brittle slice" @@ -688,6 +733,7 @@ ) tastes = list("savouriness" = 1, "sweetness" = 1) foodtypes = SUGAR | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 //Misc Dishes /obj/item/food/sauerkraut @@ -699,6 +745,7 @@ tastes = list("cabbage" = 1, "acid" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/lizard_dumplings name = "\improper Tiziran dumplings" @@ -712,6 +759,7 @@ tastes = list("potato" = 1, "earthy heat" = 1) foodtypes = VEGETABLES | NUTS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/steeped_mushrooms name = "steeped seraka mushrooms" @@ -725,6 +773,7 @@ tastes = list("savouriness" = 1, "nuttiness" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/canned/jellyfish name = "canned gunner jellyfish" diff --git a/code/game/objects/items/food/martian.dm b/code/game/objects/items/food/martian.dm index ec6768bd244..8e2c1fcd291 100644 --- a/code/game/objects/items/food/martian.dm +++ b/code/game/objects/items/food/martian.dm @@ -480,7 +480,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, ) tastes = list("octopus" = 1, "batter" = 1, "onion" = 1, "worcestershire sauce" = 1) foodtypes = MEAT | GRAIN | FRIED | VEGETABLES @@ -508,7 +508,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, ) tastes = list("taco meat" = 1, "batter" = 1, "corn" = 1, "cheese" = 1) foodtypes = MEAT | GRAIN | FRIED | VEGETABLES | DAIRY @@ -1142,7 +1142,7 @@ icon_state = "frickles" food_reagents = list( /datum/reagent/consumable/nutriment = 6, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/capsaicin = 1, ) tastes = list("frickles" = 1) diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index c120b675571..48902153361 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -18,6 +18,7 @@ tastes = list("fish" = 4, "batter" = 1, "hot peppers" = 1) foodtypes = SEAFOOD | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fishmeat name = "fish fillet" @@ -112,6 +113,7 @@ foodtypes = SEAFOOD | FRIED w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fishandchips name = "fish and chips" @@ -126,6 +128,7 @@ tastes = list("fish" = 1, "chips" = 1) foodtypes = SEAFOOD | VEGETABLES | FRIED venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fishfry name = "fish fry" @@ -139,6 +142,7 @@ tastes = list("fish" = 1, "pan seared vegtables" = 1) foodtypes = SEAFOOD | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/vegetariansushiroll name = "vegetarian sushi roll" @@ -151,6 +155,7 @@ tastes = list("boiled rice" = 4, "carrots" = 2, "potato" = 2) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/vegetariansushiroll/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/vegetariansushislice, 4, screentip_verb = "Chop") @@ -166,6 +171,7 @@ tastes = list("boiled rice" = 4, "carrots" = 2, "potato" = 2) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spicyfiletsushiroll name = "spicy filet sushi roll" @@ -180,6 +186,7 @@ tastes = list("boiled rice" = 4, "fish" = 2, "spicyness" = 2) foodtypes = VEGETABLES | SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spicyfiletsushiroll/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/spicyfiletsushislice, 4, screentip_verb = "Chop") @@ -197,6 +204,7 @@ tastes = list("boiled rice" = 4, "fish" = 2, "spicyness" = 2) foodtypes = VEGETABLES | SEAFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // empty sushi for custom sushi /obj/item/food/sushi/empty @@ -205,6 +213,7 @@ tastes = list() icon_state = "vegetariansushiroll" desc = "A roll of customized sushi." + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sushi/empty/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/sushislice/empty, 4, screentip_verb = "Chop") @@ -215,6 +224,7 @@ tastes = list() icon_state = "vegetariansushislice" desc = "A slice of customized sushi." + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/nigiri_sushi name = "nigiri sushi" @@ -225,6 +235,7 @@ tastes = list("boiled rice" = 4, "fish filet" = 2, "soy sauce" = 2) foodtypes = SEAFOOD | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/meat_poke name = "meat poke" @@ -240,6 +251,7 @@ tastes = list("rice and meat" = 4, "lettuce" = 2, "soy sauce" = 2) trash_type = /obj/item/reagent_containers/cup/bowl w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/fish_poke name = "fish poke" @@ -255,6 +267,7 @@ tastes = list("rice and fish" = 4, "lettuce" = 2, "soy sauce" = 2) trash_type = /obj/item/reagent_containers/cup/bowl w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 ////////////////////////////////////////////MEATS AND ALIKE//////////////////////////////////////////// @@ -268,6 +281,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 // sliceable into 4xtempehslices /obj/item/food/tempeh/make_processable() @@ -282,6 +296,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) tastes = list("earthy" = 3, "nutty" = 2, "bland" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 //add an icon for blends /obj/item/food/tempehstarter @@ -292,6 +307,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) tastes = list("nutty" = 2, "bland" = 2) foodtypes = VEGETABLES | GROSS + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/tofu name = "tofu" @@ -302,6 +318,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/tofu/prison name = "soggy tofu" @@ -338,6 +355,7 @@ tastes = list("meat" = 1, "cabbage" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bearsteak name = "Filet migrawr" @@ -353,6 +371,7 @@ foodtypes = MEAT | ALCOHOL w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_meatball name = "raw meatball" @@ -410,6 +429,7 @@ w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meatball/human name = "strange meatball" @@ -477,6 +497,7 @@ foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 ///Exists purely for the crafting recipe (because itll take subtypes) /obj/item/food/patty/plain @@ -513,6 +534,7 @@ foodtypes = MEAT | RAW eatverbs = list("bite", "chew", "nibble", "deep throat", "gobble", "chomp") w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_sausage/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/sausage, rand(60 SECONDS, 75 SECONDS), TRUE) @@ -533,6 +555,7 @@ w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sausage/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -556,6 +579,7 @@ foodtypes = MEAT food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/rawkhinkali name = "raw khinkali" @@ -571,6 +595,7 @@ tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/rawkhinkali/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/khinkali, rand(50 SECONDS, 60 SECONDS), TRUE) @@ -591,6 +616,7 @@ foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/meatbun name = "meat bun" @@ -605,6 +631,7 @@ foodtypes = GRAIN | MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/stewedsoymeat name = "stewed soy meat" @@ -619,6 +646,7 @@ eatverbs = list("slurp", "sip", "inhale", "drink") foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/boiledspiderleg name = "boiled spider leg" @@ -634,6 +662,7 @@ foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/spidereggsham name = "green eggs and ham" @@ -648,6 +677,7 @@ tastes = list("meat" = 1, "the colour green" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sashimi name = "carp sashimi" @@ -664,6 +694,7 @@ w_class = WEIGHT_CLASS_TINY //total price of this dish is 20 and a small amount more for soy sauce, all of which are available at the orders console venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sashimi/Initialize(mapload) . = ..() @@ -685,6 +716,7 @@ food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/nugget/Initialize(mapload) . = ..() @@ -705,6 +737,7 @@ tastes = list("meat" = 1, "butter" = 1) foodtypes = MEAT | DAIRY | GRAIN w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bbqribs name = "bbq ribs" @@ -719,6 +752,7 @@ ) tastes = list("meat" = 3, "smokey sauce" = 1) foodtypes = MEAT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/meatclown name = "meat clown" @@ -733,6 +767,7 @@ tastes = list("meat" = 5, "clowns" = 3, "sixteen teslas" = 1) w_class = WEIGHT_CLASS_SMALL foodtypes = MEAT | FRUIT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/meatclown/Initialize(mapload) . = ..() @@ -750,6 +785,7 @@ tastes = list("meat" = 3, "pasta" = 3, "tomato" = 2, "cheese" = 2) foodtypes = MEAT | DAIRY | GRAIN venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 //////////////////////////////////////////// KEBABS AND OTHER SKEWERS //////////////////////////////////////////// @@ -761,6 +797,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment/protein = 14) tastes = list("meat" = 3, "metal" = 1) w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/kebab/human name = "human-kebab" @@ -837,6 +874,7 @@ ) tastes = list("tex-mex" = 3, "cumin" = 2) foodtypes = MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/fried_chicken name = "fried chicken" @@ -848,6 +886,7 @@ foodtypes = MEAT | FRIED junkiness = 25 w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/fried_chicken/Initialize(mapload) . = ..() @@ -869,6 +908,7 @@ w_class = WEIGHT_CLASS_SMALL //basic ingredients, but a lot of them. just covering costs here venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/beef_wellington name = "beef wellington" @@ -883,6 +923,7 @@ foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_NORMAL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/beef_wellington/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/beef_wellington_slice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") @@ -900,6 +941,7 @@ foodtypes = MEAT | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/full_english name = "full english breakfast" @@ -914,6 +956,7 @@ foodtypes = MEAT | VEGETABLES | GRAIN | BREAKFAST w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_meatloaf name = "raw meatloaf" @@ -928,6 +971,7 @@ tastes = list("raw meat" = 3, "onions" = 1) foodtypes = MEAT | RAW | VEGETABLES w_class = WEIGHT_CLASS_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_meatloaf/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/meatloaf, rand(30 SECONDS, 40 SECONDS), TRUE, TRUE) @@ -946,6 +990,7 @@ foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_NORMAL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/meatloaf/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meatloaf_slice, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") @@ -963,6 +1008,7 @@ tastes = list("juicy meat" = 3, "onions" = 1, "garlic" = 1, "ketchup" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sweet_and_sour_meatballs name = "sweet and sour meatballs" diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index 07638067d29..fa249234e1b 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -11,8 +11,9 @@ icon_state = "meat" bite_consumption = 3 food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 6, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/protein = 5, + /datum/reagent/consumable/nutriment/fat = 2, + /datum/reagent/consumable/nutriment/vitamin = 1, ) //Meat has fats that a food processor can process into cooking oil tastes = list("meat" = 1) foodtypes = MEAT | RAW @@ -77,6 +78,7 @@ tastes = list("meat" = 4, "scales" = 1) foodtypes = MEAT | RAW | GORE venue_value = FOOD_MEAT_MUTANT + starting_reagent_purity = 0.4 // Take a look at their diet /obj/item/food/meat/slab/human/mutant/lizard/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human/lizard, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) @@ -147,6 +149,7 @@ desc = "A synthetic slab of meat." foodtypes = RAW | MEAT //hurr durr chemicals were harmed in the production of this meat thus its non-vegan. venue_value = FOOD_PRICE_WORTHLESS + starting_reagent_purity = 0.3 /obj/item/food/meat/slab/synthmeat/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/synth, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) @@ -164,6 +167,7 @@ /obj/item/food/meat/slab/monkey name = "monkey meat" foodtypes = RAW | MEAT + starting_reagent_purity = 0.3 // Monkeys are considered synthetic life /obj/item/food/meat/slab/bugmeat name = "bug meat" @@ -229,7 +233,7 @@ /datum/reagent/consumable/nutriment/protein = 16, /datum/reagent/medicine/morphine = 5, /datum/reagent/consumable/nutriment/vitamin = 2, - /datum/reagent/consumable/cooking_oil = 6, + /datum/reagent/consumable/nutriment/fat = 6, ) tastes = list("meat" = 1, "salmon" = 1) foodtypes = RAW | MEAT @@ -286,7 +290,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/toxin = 5, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat = 3, ) icon_state = "goliathmeat" tastes = list("meat" = 1) @@ -300,7 +304,7 @@ /obj/item/food/meat/slab/meatwheat name = "meatwheat clump" desc = "This doesn't look like meat, but your standards aren't that high to begin with." - food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/blood = 5, /datum/reagent/consumable/cooking_oil = 1) + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/blood = 5, /datum/reagent/consumable/nutriment/fat = 1) icon_state = "meatwheat_clump" bite_consumption = 4 tastes = list("meat" = 1, "wheat" = 1) @@ -312,7 +316,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 1, - /datum/reagent/consumable/cooking_oil = 5, //Plenty of fat! + /datum/reagent/consumable/nutriment/fat = 5, //Plenty of fat! ) /obj/item/food/meat/rawbacon @@ -322,10 +326,11 @@ bite_consumption = 2 food_reagents = list( /datum/reagent/consumable/nutriment/protein = 2, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat = 3, ) tastes = list("bacon" = 1) foodtypes = RAW | MEAT + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meat/rawbacon/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/bacon, rand(25 SECONDS, 45 SECONDS), TRUE, TRUE) @@ -337,11 +342,12 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 1, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat = 2, ) tastes = list("bacon" = 1) foodtypes = MEAT | BREAKFAST burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meat/slab/gondola name = "gondola meat" @@ -349,7 +355,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/gondola_mutation_toxin = 5, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat = 3, ) tastes = list("meat" = 4, "tranquility" = 1) foodtypes = RAW | MEAT | GORE @@ -366,7 +372,7 @@ desc = "A slab of penguin meat." food_reagents = list( /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat = 3, ) tastes = list("beef" = 1, "cod fish" = 1) @@ -384,7 +390,7 @@ bite_consumption = 3 food_reagents = list( /datum/reagent/consumable/nutriment/protein = 3, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat = 3, ) tastes = list("raw crab" = 1) foodtypes = RAW | MEAT @@ -399,11 +405,12 @@ food_reagents = list( /datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat = 2, ) tastes = list("crab" = 1) foodtypes = SEAFOOD burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meat/slab/chicken name = "chicken meat" @@ -411,6 +418,7 @@ desc = "A slab of raw chicken. Remember to wash your hands!" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 6) //low fat tastes = list("chicken" = 1) + starting_reagent_purity = 1 /obj/item/food/meat/slab/chicken/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/chicken, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") @@ -428,10 +436,25 @@ icon_state = "pig_meat" tastes = list("pig" = 1) foodtypes = RAW | MEAT | GORE + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/consumable/nutriment/fat = 5, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) // Fatty piece + starting_reagent_purity = 1 /obj/item/food/meat/slab/pig/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/pig, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) +/obj/item/food/meat/slab/grassfed + name = "eco meat" + desc = "A slab of 100% grass fed award-winning farm meat." + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 3, + /datum/reagent/consumable/nutriment/fat = 4, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) // Marble + starting_reagent_purity = 1 ////////////////////////////////////// MEAT STEAKS /////////////////////////////////////////////////////////// /obj/item/food/meat/steak @@ -439,12 +462,14 @@ desc = "A piece of hot spicy meat." icon_state = "meatsteak" food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/protein = 5, + /datum/reagent/consumable/nutriment/fat = 2, /datum/reagent/consumable/nutriment/vitamin = 1, ) foodtypes = MEAT tastes = list("meat" = 1) burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meat/steak/Initialize(mapload) . = ..() @@ -660,6 +685,7 @@ tastes = list("meat" = 1) foodtypes = MEAT burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/meat/cutlet/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/mexican.dm b/code/game/objects/items/food/mexican.dm index a0883129576..e2f2d0a6056 100644 --- a/code/game/objects/items/food/mexican.dm +++ b/code/game/objects/items/food/mexican.dm @@ -10,6 +10,7 @@ tastes = list("tortilla" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/tortilla/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/hard_taco_shell, rand(15 SECONDS, 30 SECONDS), TRUE, TRUE) @@ -28,6 +29,7 @@ foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cheesyburrito name = "cheesy burrito" @@ -43,6 +45,7 @@ foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/carneburrito name = "carne asada burrito" @@ -58,6 +61,7 @@ foodtypes = GRAIN | MEAT w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/fuegoburrito name = "fuego plasma burrito" @@ -74,6 +78,7 @@ foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_LEGENDARY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/nachos name = "nachos" @@ -88,6 +93,7 @@ foodtypes = GRAIN | FRIED w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/cheesynachos name = "cheesy nachos" @@ -103,6 +109,7 @@ foodtypes = GRAIN | FRIED | DAIRY w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cubannachos name = "Cuban nachos" @@ -117,6 +124,7 @@ tastes = list("nachos" = 2, "hot pepper" = 1) foodtypes = VEGETABLES | FRIED | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/taco name = "classic taco" @@ -132,6 +140,7 @@ foodtypes = MEAT | DAIRY | GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/taco/plain name = "plain taco" @@ -145,6 +154,7 @@ tastes = list("taco" = 4, "meat" = 2, "cheese" = 2) foodtypes = MEAT | DAIRY | GRAIN venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/taco/fish name = "fish taco" @@ -152,6 +162,7 @@ icon_state = "fishtaco" tastes = list("taco" = 4, "fish" = 2, "cheese" = 2, "cabbage" = 1) foodtypes = SEAFOOD | DAIRY | GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/enchiladas name = "enchiladas" @@ -168,6 +179,7 @@ tastes = list("hot peppers" = 1, "meat" = 3, "cheese" = 1, "sour cream" = 1) foodtypes = MEAT | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/stuffedlegion name = "stuffed legion" @@ -183,6 +195,7 @@ foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_LEGENDARY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/chipsandsalsa name = "chips and salsa" @@ -197,6 +210,7 @@ tastes = list("peppers" = 1, "salsa" = 3, "tortilla chips" = 1, "onion" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/classic_chimichanga name = "classic chimichanga" @@ -211,6 +225,7 @@ tastes = list("deep-fried tortilla" = 1, "meat" = 3, "cheese" = 1, "onions" = 1) foodtypes = MEAT | GRAIN | VEGETABLES | DAIRY | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/vegetarian_chimichanga name = "vegetarian chimichanga" @@ -224,6 +239,7 @@ tastes = list("deep-fried tortilla" = 1, "cabbage" = 3, "onions" = 1, "peppers" = 1) foodtypes = GRAIN | VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/hard_taco_shell name = "hard taco shell" @@ -235,6 +251,7 @@ foodtypes = GRAIN | FRIED w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/hard_taco_shell/Initialize(mapload) . = ..() @@ -247,6 +264,7 @@ tastes = list() icon_state = "hard_taco_shell" desc = "A customized hard-shell taco." + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/classic_hard_shell_taco name = "classic hard-shell taco" @@ -261,6 +279,7 @@ tastes = list("crunchy taco shell" = 1, "cabbage" = 3, "tomatoes" = 1, "ground meat" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | MEAT | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/plain_hard_shell_taco name = "plain hard-shell taco" @@ -275,6 +294,7 @@ tastes = list("crunchy taco shell" = 1, "ground meat" = 1) foodtypes = GRAIN | MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/refried_beans name = "refried beans" @@ -289,6 +309,7 @@ tastes = list("mashed beans" = 1, "onion" = 3,) foodtypes = VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spanish_rice name = "spanish rice" @@ -302,6 +323,7 @@ tastes = list("zesty rice" = 1, "tomato sauce" = 3,) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pineapple_salsa name = "pineapple salsa" diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 04d05e230eb..01f2c13a2b2 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -12,7 +12,7 @@ tastes = list("watermelon" = 1) foodtypes = FRUIT food_flags = FOOD_FINGER_FOOD - juice_results = list(/datum/reagent/consumable/watermelonjuice = 5) + juice_typepath = /datum/reagent/consumable/watermelonjuice w_class = WEIGHT_CLASS_SMALL /obj/item/food/hugemushroomslice @@ -54,6 +54,7 @@ ) tastes = list("salt" = 2, "popcorn" = 1) trash_type = /obj/item/trash/popcorn/salty + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/popcorn/caramel name = "caramel popcorn" @@ -65,7 +66,8 @@ ) tastes = list("caramel" = 2, "popcorn" = 1) foodtypes = JUNKFOOD | SUGAR - trash_type = /obj/item/trash/popcorn/caramel + trash_type = /obj/item/trash/popcorn/ + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/soydope name = "soy dope" @@ -78,6 +80,7 @@ tastes = list("soy" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/badrecipe name = "burned mess" @@ -134,13 +137,14 @@ w_class = WEIGHT_CLASS_TINY /obj/item/food/spidereggs/processed - name = "spider eggs" + name = "processed spider eggs" desc = "A cluster of juicy spider eggs. Pops in your mouth without making you sick." icon_state = "spidereggs" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4) tastes = list("cobwebs" = 1) foodtypes = MEAT | BUGS w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/spiderling name = "spiderling" @@ -167,6 +171,7 @@ tastes = list("melon" = 1) foodtypes = FRUIT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/melonkeg name = "melon keg" @@ -181,6 +186,7 @@ bite_consumption = 5 tastes = list("grain alcohol" = 1, "fruit" = 1) foodtypes = FRUIT | ALCOHOL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/honeybar name = "honey nut bar" @@ -194,6 +200,7 @@ foodtypes = GRAIN | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/powercrepe name = "Powercrepe" @@ -216,6 +223,7 @@ w_class = WEIGHT_CLASS_BULKY tastes = list("cherry" = 1, "crepe" = 1) foodtypes = GRAIN | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/branrequests name = "Bran Requests Cereal" @@ -229,12 +237,13 @@ tastes = list("bran" = 4, "raisins" = 3, "salt" = 1) foodtypes = GRAIN | FRUIT | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/butter name = "stick of butter" desc = "A stick of delicious, golden, fatty goodness." icon_state = "butter" - food_reagents = list(/datum/reagent/consumable/nutriment = 15) + food_reagents = list(/datum/reagent/consumable/nutriment/fat = 6) tastes = list("butter" = 1) foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL @@ -288,12 +297,13 @@ tastes = list("batter" = 3, "onion" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/pineappleslice name = "pineapple slice" desc = "A sliced piece of juicy pineapple." icon_state = "pineapple_slice" - juice_results = list(/datum/reagent/consumable/pineapplejuice = 3) + juice_typepath = /datum/reagent/consumable/pineapplejuice tastes = list("pineapple" = 1) foodtypes = FRUIT | PINEAPPLE w_class = WEIGHT_CLASS_TINY @@ -312,6 +322,7 @@ tastes = list("cream cheese" = 4, "crab" = 3, "crispiness" = 2) foodtypes = MEAT | DAIRY | GRAIN venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pesto name = "pesto" @@ -321,6 +332,7 @@ tastes = list("pesto" = 1) foodtypes = VEGETABLES | DAIRY | NUTS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/tomato_sauce name = "tomato sauce" @@ -330,6 +342,7 @@ tastes = list("tomato" = 1, "herbs" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bechamel_sauce name = "béchamel sauce" @@ -339,6 +352,7 @@ tastes = list("cream" = 1) foodtypes = DAIRY | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/roasted_bell_pepper name = "roasted bell pepper" @@ -352,6 +366,7 @@ tastes = list("bell pepper" = 1, "char" = 1) foodtypes = VEGETABLES burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/pierogi name = "pierogi" @@ -364,6 +379,7 @@ tastes = list("potato" = 1, "onions" = 1) foodtypes = GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/stuffed_cabbage name = "stuffed cabbage" @@ -376,6 +392,7 @@ tastes = list("juicy meat" = 1, "rice" = 1, "cabbage" = 1) foodtypes = MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/seaweedsheet name = "seaweed sheet" @@ -406,6 +423,7 @@ tastes = list("granola" = 1, "nuts" = 1, "chocolate" = 1, "raisin" = 1) foodtypes = GRAIN | NUTS | FRUIT | SUGAR | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/onigiri name = "onigiri" @@ -419,6 +437,7 @@ tastes = list("rice" = 1, "dried seaweed" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/onigiri/Initialize(mapload) . = ..() @@ -445,6 +464,7 @@ tastes = list("peanuts" = 1, "sweetness" = 1) foodtypes = NUTS | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/pickle name = "pickle" @@ -458,7 +478,7 @@ /datum/reagent/medicine/antihol = 2, ) tastes = list("pickle" = 1, "spices" = 1, "salt water" = 2) - juice_results = list(/datum/reagent/consumable/pickle = 5) + juice_typepath = /datum/reagent/consumable/pickle foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL @@ -484,6 +504,7 @@ tastes = list("rice wrappers" = 1, "spice" = 1, "crunchy veggies" = 1) foodtypes = GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cheese_pierogi name = "cheese pierogi" @@ -496,6 +517,7 @@ tastes = list("potato" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/meat_pierogi name = "meat pierogi" @@ -509,6 +531,7 @@ tastes = list("potato" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/stuffed_eggplant name = "stuffed eggplant" diff --git a/code/game/objects/items/food/moth.dm b/code/game/objects/items/food/moth.dm index 7644c488b20..ff10e8da511 100644 --- a/code/game/objects/items/food/moth.dm +++ b/code/game/objects/items/food/moth.dm @@ -13,6 +13,7 @@ tastes = list("cheese" = 1, "herbs" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/grilled_cheese name = "grilled cheese" @@ -28,6 +29,7 @@ foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/mothic_salad name = "mothic salad" @@ -38,6 +40,7 @@ tastes = list("salad" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/toasted_seeds name = "toasted seeds" @@ -49,6 +52,7 @@ tastes = list("seeds" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/engine_fodder name = "engine fodder" @@ -65,6 +69,7 @@ tastes = list("seeds" = 1, "nuts" = 1, "chocolate" = 1, "salt" = 1, "popcorn" = 1, "potato" = 1) foodtypes = GRAIN | NUTS | VEGETABLES | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/mothic_pizza_dough name = "mothic pizza dough" @@ -75,6 +80,7 @@ tastes = list("raw flour" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 //Entrees: categorising food that is 90% cheese and salad is not easy /obj/item/food/squeaking_stir_fry @@ -90,6 +96,7 @@ tastes = list("cheese" = 1, "tofu" = 1, "veggies" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sweet_chili_cabbage_wrap name = "sweet chili cabbage wrap" @@ -104,6 +111,7 @@ tastes = list("cheese" = 1, "salad" = 1, "sweet chili" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/loaded_curds name = "ozlsettitæloskekllön ede pommes" //ozlsettit = overflowing (ozl = over, sett = flow, it = ing), ælo = cheese, skekllön = curds (skeklit = squeaking, llön = pieces/bits), ede = and, pommes = fries (hey, France!) @@ -120,6 +128,7 @@ tastes = list("cheese" = 1, "oil" = 1, "chili" = 1, "fries" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/baked_cheese name = "baked cheese wheel" @@ -135,6 +144,7 @@ foodtypes = DAIRY w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/baked_cheese_platter name = "stanntkraktælo" //stannt = oven, krakt = baked, ælo = cheese @@ -150,6 +160,7 @@ tastes = list("cheese" = 1, "bread" = 1) foodtypes = DAIRY | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Baked Green Lasagna at the Whistlestop Cafe /obj/item/food/raw_green_lasagne @@ -164,6 +175,7 @@ tastes = list("cheese" = 1, "pesto" = 1, "pasta" = 1) foodtypes = VEGETABLES | GRAIN | NUTS | RAW w_class = WEIGHT_CLASS_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_green_lasagne/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/green_lasagne, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -181,6 +193,7 @@ foodtypes = VEGETABLES | GRAIN | NUTS w_class = WEIGHT_CLASS_NORMAL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/green_lasagne/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/green_lasagne_slice, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -197,6 +210,7 @@ tastes = list("cheese" = 1, "pesto" = 1, "pasta" = 1) foodtypes = VEGETABLES | GRAIN | NUTS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_baked_rice name = "big rice pan" @@ -210,6 +224,7 @@ tastes = list("rice" = 1, "potato" = 1, "veggies" = 1) foodtypes = VEGETABLES | GRAIN | RAW w_class = WEIGHT_CLASS_NORMAL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_baked_rice/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/big_baked_rice, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -228,6 +243,7 @@ foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_NORMAL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/big_baked_rice/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/lil_baked_rice, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") @@ -244,6 +260,7 @@ tastes = list("rice" = 1, "potato" = 1, "veggies" = 1) foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/oven_baked_corn name = "oven-baked corn" @@ -259,6 +276,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/buttered_baked_corn name = "buttered baked corn" @@ -273,6 +291,7 @@ tastes = list("corn" = 1, "char" = 1) foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fiesta_corn_skillet name = "fiesta corn skillet" @@ -287,6 +306,7 @@ tastes = list("corn" = 1, "chili" = 1, "char" = 1) foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/raw_ratatouille name = "raw ratatouille" //rawtatouille? @@ -301,6 +321,7 @@ tastes = list("veggies" = 1, "roasted peppers" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_ratatouille/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/ratatouille, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -319,6 +340,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/mozzarella_sticks name = "mozzarella sticks" @@ -332,6 +354,7 @@ tastes = list("creamy cheese" = 1, "breading" = 1, "oil" = 1) foodtypes = DAIRY | GRAIN | FRIED w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/raw_stuffed_peppers name = "raw voltölpaprik" //voltöl = stuffed (vol = full, töl = push), paprik (from German paprika) = bell pepper @@ -345,6 +368,7 @@ tastes = list("creamy cheese" = 1, "herbs" = 1, "onion" = 1, "bell pepper" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_stuffed_peppers/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/stuffed_peppers, rand(10 SECONDS, 20 SECONDS), TRUE, TRUE) @@ -362,6 +386,7 @@ foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/fueljacks_lunch name = "\improper Fueljack's lunch" @@ -377,6 +402,7 @@ tastes = list("cabbage" = 1, "potato" = 1, "onion" = 1, "chili" = 1, "cheese" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/mac_balls name = "macheronirölen" @@ -391,6 +417,7 @@ tastes = list("pasta" = 1, "cornbread" = 1, "cheese" = 1) foodtypes = DAIRY | VEGETABLES | FRIED | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sustenance_bar name = "surplus fleet PSB" @@ -448,6 +475,7 @@ tastes = list("bacon" = 1, "eggs" = 1) foodtypes = MEAT | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/bowled/fried_eggplant_polenta name = "fried eggplant and polenta" @@ -462,6 +490,7 @@ tastes = list("cornmeal" = 1, "cheese" = 1, "eggplant" = 1, "tomato sauce" = 1) foodtypes = DAIRY | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 //Salads: the bread and butter of mothic cuisine /obj/item/food/caprese_salad @@ -478,6 +507,7 @@ tastes = list("mozzarella" = 1, "tomato" = 1, "balsamic" = 1) foodtypes = DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/fleet_salad name = "lörtonknusksolt" //lörton = fleet, knusksolt = salad (knusk = crisp, solt = bowl) @@ -492,6 +522,7 @@ tastes = list("cheese" = 1, "salad" = 1, "bread" = 1) foodtypes = DAIRY | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/salad/cotton_salad name = "flöfrölenknusksolt" @@ -505,6 +536,7 @@ tastes = list("cheese" = 1, "salad" = 1, "bread" = 1) foodtypes = VEGETABLES | CLOTH w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salad/moth_kachumbari name = "\improper Kæniatknusksolt" //Kæniat = Kenyan, knusksolt = salad @@ -519,6 +551,7 @@ tastes = list("onion" = 1, "tomato" = 1, "corn" = 1, "chili" = 1, "cilantro" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 //Pizza /obj/item/food/raw_mothic_margherita @@ -535,6 +568,7 @@ ) tastes = list("dough" = 1, "tomato" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | RAW + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_margherita/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_margherita, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -554,6 +588,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/mothic_margherita boxtag = "Margherita alla Moffuchi" + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pizzaslice/mothic_margherita name = "mothic margherita slice" @@ -562,6 +597,7 @@ icon_state = "margherita_slice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_firecracker name = "raw mothic firecracker pizza" @@ -577,6 +613,7 @@ ) tastes = list("dough" = 1, "chili" = 1, "corn" = 1, "cheese" = 1, "bbq sauce" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | RAW + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_firecracker/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_firecracker, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -597,6 +634,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/mothic_firecracker boxtag = "Vesuvian Firecracker" + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pizzaslice/mothic_firecracker name = "mothic firecracker slice" @@ -605,6 +643,7 @@ icon_state = "firecracker_slice" tastes = list("crust" = 1, "chili" = 1, "corn" = 1, "cheese" = 1, "bbq sauce" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_five_cheese name = "raw mothic five-cheese pizza" @@ -619,6 +658,7 @@ ) tastes = list("dough" = 1, "cheese" = 1, "more cheese" = 1, "excessive amounts of cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | RAW + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_five_cheese/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_five_cheese, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -638,6 +678,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/mothic_five_cheese boxtag = "Cheeseplosion" + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pizzaslice/mothic_five_cheese name = "mothic five-cheese slice" @@ -646,6 +687,7 @@ icon_state = "five_cheese_slice" tastes = list("crust" = 1, "cheese" = 1, "more cheese" = 1, "excessive amounts of cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_white_pie name = "raw mothic white-pie pizza" @@ -660,6 +702,7 @@ ) tastes = list("dough" = 1, "cheese" = 1, "herbs" = 1, "garlic" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | RAW + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_white_pie/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_white_pie, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -679,6 +722,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/mothic_white_pie boxtag = "Pane Bianco" + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pizzaslice/mothic_white_pie name = "mothic white-pie slice" @@ -687,6 +731,7 @@ icon_state = "white_pie_slice" tastes = list("crust" = 1, "cheese" = 1, "more cheese" = 1, "excessive amounts of cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_pesto name = "raw mothic pesto pizza" @@ -701,6 +746,7 @@ ) tastes = list("dough" = 1, "pesto" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS | RAW + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_pesto/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_pesto, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -720,6 +766,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS | RAW slice_type = /obj/item/food/pizzaslice/mothic_pesto boxtag = "Presto Pesto" + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pizzaslice/mothic_pesto name = "mothic pesto slice" @@ -728,6 +775,7 @@ icon_state = "pesto_slice" tastes = list("crust" = 1, "pesto" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_mothic_garlic name = "raw mothic garlic pizzabread" @@ -742,6 +790,7 @@ ) tastes = list("dough" = 1, "garlic" = 1, "butter" = 1) foodtypes = GRAIN | VEGETABLES | RAW + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/raw_mothic_garlic/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mothic_garlic, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -761,6 +810,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS slice_type = /obj/item/food/pizzaslice/mothic_garlic boxtag = "Garlic Bread alla Moffuchi" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizzaslice/mothic_garlic name = "mothic garlic pizzabread slice" @@ -769,6 +819,7 @@ icon_state = "garlic_slice" tastes = list("dough" = 1, "garlic" = 1, "butter" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_4 //Bread /obj/item/food/bread/corn @@ -782,6 +833,7 @@ w_class = WEIGHT_CLASS_SMALL slice_type = /obj/item/food/breadslice/corn yield = 6 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/breadslice/corn name = "cornbread slice" @@ -790,6 +842,7 @@ icon_state = "cornbread_slice" foodtypes = GRAIN food_reagents = list(/datum/reagent/consumable/nutriment = 3) + crafting_complexity = FOOD_COMPLEXITY_2 //Sweets /obj/item/food/moth_cheese_cakes @@ -804,6 +857,7 @@ tastes = list("cheesecake" = 1, "chocolate" = 1, "honey" = 1) foodtypes = SUGAR | FRIED | DAIRY | GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/cake/mothmallow name = "mothmallow tray" @@ -818,6 +872,7 @@ foodtypes = VEGETABLES | SUGAR slice_type = /obj/item/food/cakeslice/mothmallow yield = 6 + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cakeslice/mothmallow name = "mothmallow" @@ -830,6 +885,7 @@ ) tastes = list("vanilla" = 1, "clouds" = 1, "chocolate" = 1) foodtypes = VEGETABLES | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 //misc food /obj/item/food/bubblegum/wake_up diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index 4935f9bdd55..bf1a56e4b25 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -46,6 +46,7 @@ ) tastes = list("beans" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/canned/peaches name = "canned peaches" @@ -101,6 +102,7 @@ ) tastes = list("dog food" = 5, "狗肉" = 3) foodtypes = MEAT | GROSS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/canned/envirochow/attack_animal(mob/living/simple_animal/user, list/modifiers) if(!check_buffability(user)) diff --git a/code/game/objects/items/food/pancakes.dm b/code/game/objects/items/food/pancakes.dm index cb505c5b62a..c1428c5fb9c 100644 --- a/code/game/objects/items/food/pancakes.dm +++ b/code/game/objects/items/food/pancakes.dm @@ -13,6 +13,7 @@ venue_value = FOOD_PRICE_CHEAP ///Used as a base name while generating the icon states when stacked var/stack_name = "pancakes" + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pancakes/raw name = "goopy pancake" @@ -22,6 +23,7 @@ tastes = list("milky batter" = 1) burns_on_grill = FALSE stack_name = "rawpancakes" + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/pancakes/raw/make_grillable() AddComponent(/datum/component/grillable,\ @@ -64,6 +66,7 @@ ) tastes = list("pancakes" = 1, "blueberries" = 1) stack_name = "bbpancakes" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pancakes/chocolatechip name = "chocolate chip pancake" @@ -75,6 +78,7 @@ ) tastes = list("pancakes" = 1, "chocolate" = 1) stack_name = "ccpancakes" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pancakes/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/pastries.dm b/code/game/objects/items/food/pastries.dm index 74d71377144..21930def909 100644 --- a/code/game/objects/items/food/pastries.dm +++ b/code/game/objects/items/food/pastries.dm @@ -14,6 +14,7 @@ foodtypes = GRAIN | SUGAR | BREAKFAST food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/muffin/berry name = "berry muffin" @@ -22,6 +23,7 @@ tastes = list("muffin" = 3, "berry" = 1) foodtypes = GRAIN | FRUIT | SUGAR | BREAKFAST venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/muffin/booberry name = "booberry muffin" @@ -30,6 +32,7 @@ desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" tastes = list("muffin" = 3, "spookiness" = 1) foodtypes = GRAIN | FRUIT | SUGAR | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/muffin/moffin name = "moffin" @@ -38,6 +41,7 @@ desc = "A delicious and spongy little cake." tastes = list("muffin" = 3, "dust" = 1, "lint" = 1) foodtypes = CLOTH | GRAIN | SUGAR | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/muffin/moffin/Initialize(mapload) . = ..() @@ -67,6 +71,7 @@ tastes = list("waffles" = 1) foodtypes = GRAIN | SUGAR | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/soylentgreen name = "\improper Soylent Green" @@ -81,6 +86,7 @@ tastes = list("waffles" = 7, "people" = 1) foodtypes = GRAIN | MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/soylenviridians name = "\improper Soylent Virdians" @@ -95,6 +101,7 @@ tastes = list("waffles" = 7, "the colour green" = 1) foodtypes = GRAIN w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/rofflewaffles name = "roffle waffles" @@ -110,6 +117,7 @@ tastes = list("waffles" = 1, "mushrooms" = 1) foodtypes = GRAIN | VEGETABLES | SUGAR | BREAKFAST w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 ////////////////////////////////////////////OTHER//////////////////////////////////////////// @@ -123,6 +131,7 @@ foodtypes = GRAIN | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cookie/Initialize(mapload) . = ..() @@ -141,6 +150,7 @@ foodtypes = GRAIN | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fortunecookie/proc/get_fortune() var/atom/drop_location = drop_location() @@ -170,6 +180,7 @@ ) tastes = list("sweetness" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cookie/sugar/Initialize(mapload) . = ..() @@ -189,6 +200,7 @@ tastes = list("biscuit" = 3, "chocolate" = 1) foodtypes = GRAIN | JUNKFOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cookie/oatmeal name = "oatmeal cookie" @@ -200,6 +212,7 @@ ) tastes = list("cookie" = 2, "oat" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cookie/raisin name = "raisin cookie" @@ -211,6 +224,7 @@ ) tastes = list("cookie" = 1, "raisins" = 1) foodtypes = GRAIN | FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/poppypretzel name = "poppy pretzel" @@ -224,6 +238,7 @@ foodtypes = GRAIN | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/plumphelmetbiscuit name = "plump helmet biscuit" @@ -237,6 +252,7 @@ foodtypes = GRAIN | VEGETABLES food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/plumphelmetbiscuit/Initialize(mapload) var/fey = prob(10) @@ -262,6 +278,7 @@ foodtypes = GRAIN food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/khachapuri name = "khachapuri" @@ -275,6 +292,7 @@ tastes = list("bread" = 1, "egg" = 1, "cheese" = 1) foodtypes = GRAIN | MEAT | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cherrycupcake name = "cherry cupcake" @@ -288,12 +306,14 @@ foodtypes = GRAIN | FRUIT | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cherrycupcake/blue name = "blue cherry cupcake" desc = "Blue cherries inside a delicious cupcake." icon_state = "bluecherrycupcake" tastes = list("cake" = 3, "blue cherry" = 1) + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/honeybun name = "honey bun" @@ -306,6 +326,7 @@ tastes = list("pastry" = 1, "sweetness" = 1) foodtypes = GRAIN | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cannoli name = "cannoli" @@ -319,6 +340,7 @@ foodtypes = GRAIN | DAIRY | SUGAR w_class = WEIGHT_CLASS_TINY venue_value = FOOD_PRICE_CHEAP // Pastry base, 3u of sugar and a single. fucking. unit. of. milk. really? + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/icecream name = "waffle cone" @@ -330,6 +352,7 @@ bite_consumption = 4 foodtypes = DAIRY | SUGAR food_flags = FOOD_FINGER_FOOD + crafting_complexity = FOOD_COMPLEXITY_3 max_volume = 10 //The max volumes scales up with the number of scoops of ice cream served. /// These two variables are used by the ice cream vat. Latter is the one that shows on the UI. var/list/ingredients = list( @@ -366,6 +389,7 @@ /datum/reagent/consumable/sugar, /datum/reagent/consumable/coco, ) + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/icecream/korta name = "korta cone" @@ -386,6 +410,7 @@ ) tastes = list("peanut butter" = 2, "cookie" = 1) foodtypes = GRAIN | JUNKFOOD | NUTS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_brownie_batter name = "raw brownie batter" @@ -398,6 +423,7 @@ ) tastes = list("raw brownie batter" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/raw_brownie_batter/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/brownie_sheet, rand(20 SECONDS, 30 SECONDS), TRUE, TRUE) @@ -415,6 +441,7 @@ foodtypes = GRAIN | JUNKFOOD | SUGAR w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/brownie_sheet/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -431,6 +458,7 @@ tastes = list("brownie" = 1, "chocolatey goodness" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/peanut_butter_brownie_batter name = "raw peanut butter brownie batter" @@ -444,6 +472,7 @@ ) tastes = list("raw brownie batter" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR | NUTS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/peanut_butter_brownie_batter/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/peanut_butter_brownie_sheet, rand(20 SECONDS, 30 SECONDS), TRUE, TRUE) @@ -462,6 +491,7 @@ foodtypes = GRAIN | JUNKFOOD | SUGAR | NUTS w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/peanut_butter_brownie_sheet/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/peanut_butter_brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -479,6 +509,7 @@ tastes = list("brownie" = 1, "chocolatey goodness" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/crunchy_peanut_butter_tart name = "crunchy peanut butter tart" @@ -493,6 +524,7 @@ tastes = list("peanut butter" = 1, "peanuts" = 1, "cream" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR | NUTS w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/cookie/chocolate_chip_cookie name = "chocolate chip cookie" diff --git a/code/game/objects/items/food/pie.dm b/code/game/objects/items/food/pie.dm index 73688742bc5..10d24c2f782 100644 --- a/code/game/objects/items/food/pie.dm +++ b/code/game/objects/items/food/pie.dm @@ -8,6 +8,7 @@ tastes = list("pie" = 1) foodtypes = GRAIN venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /// type is spawned 5 at a time and replaces this pie when processed by cutting tool var/obj/item/food/pieslice/slice_type /// so that the yield can change if it isnt 5 @@ -24,6 +25,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 2) tastes = list("pie" = 1, "uncertainty" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pie/plain name = "plain pie" @@ -36,6 +38,7 @@ tastes = list("pie" = 1) foodtypes = GRAIN burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pie/cream name = "banana cream pie" @@ -49,6 +52,7 @@ tastes = list("pie" = 1) foodtypes = GRAIN | DAIRY | SUGAR var/stunning = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/cream/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() @@ -92,6 +96,7 @@ tastes = list("pie" = 1, "blackberries" = 1) foodtypes = GRAIN | FRUIT | SUGAR venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/bearypie name = "beary pie" @@ -104,6 +109,7 @@ ) tastes = list("pie" = 1, "meat" = 1, "salmon" = 1) foodtypes = GRAIN | SUGAR | MEAT | FRUIT + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pie/meatpie name = "meat-pie" @@ -117,6 +123,7 @@ tastes = list("pie" = 1, "meat" = 1) foodtypes = GRAIN | MEAT venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/tofupie name = "tofu-pie" @@ -129,6 +136,7 @@ ) tastes = list("pie" = 1, "tofu" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/amanita_pie name = "amanita pie" @@ -143,6 +151,7 @@ ) tastes = list("pie" = 1, "mushroom" = 1) foodtypes = GRAIN | VEGETABLES | TOXIC | GROSS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/plump_pie name = "plump pie" @@ -154,6 +163,7 @@ ) tastes = list("pie" = 1, "mushroom" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/plump_pie/Initialize(mapload) var/fey = prob(10) @@ -200,6 +210,7 @@ ) tastes = list("pie" = 7, "Nicole Paige Brooks" = 2) foodtypes = GRAIN | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/pumpkinpie name = "pumpkin pie" @@ -212,6 +223,7 @@ tastes = list("pie" = 1, "pumpkin" = 1) foodtypes = GRAIN | VEGETABLES | SUGAR slice_type = /obj/item/food/pieslice/pumpkin + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pieslice/pumpkin name = "pumpkin pie slice" @@ -219,6 +231,7 @@ icon_state = "pumpkinpieslice" tastes = list("pie" = 1, "pumpkin" = 1) foodtypes = GRAIN | VEGETABLES | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/appletart name = "golden apple streusel tart" @@ -231,6 +244,7 @@ ) tastes = list("pie" = 1, "apple" = 1, "expensive metal" = 1) foodtypes = GRAIN | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pie/grapetart name = "grape tart" @@ -242,6 +256,7 @@ ) tastes = list("pie" = 1, "grape" = 1) foodtypes = GRAIN | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pie/mimetart name = "mime tart" @@ -288,6 +303,7 @@ tastes = list("pie" = 1, "a mouthful of pool water" = 1) foodtypes = GRAIN | VEGETABLES slice_type = /obj/item/food/pieslice/blumpkin + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pieslice/blumpkin name = "blumpkin pie slice" @@ -295,6 +311,7 @@ icon_state = "blumpkinpieslice" tastes = list("pie" = 1, "a mouthful of pool water" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/dulcedebatata name = "dulce de batata" @@ -308,6 +325,7 @@ foodtypes = VEGETABLES | SUGAR venue_value = FOOD_PRICE_EXOTIC slice_type = /obj/item/food/pieslice/dulcedebatata + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pieslice/dulcedebatata name = "dulce de batata slice" @@ -315,6 +333,7 @@ icon_state = "dulcedebatataslice" tastes = list("jelly" = 1, "sweet potato" = 1) foodtypes = VEGETABLES | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/frostypie name = "frosty pie" @@ -326,6 +345,7 @@ ) tastes = list("mint" = 1, "pie" = 1) foodtypes = GRAIN | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/baklava name = "baklava" @@ -339,6 +359,7 @@ foodtypes = NUTS | SUGAR slice_type = /obj/item/food/pieslice/baklava yield = 6 + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pieslice/baklava name = "baklava dish" @@ -358,6 +379,7 @@ tastes = list("pie" = 1, "smooth chocolate" = 1, "whipped cream" = 1) foodtypes = GRAIN | DAIRY | SUGAR slice_type = /obj/item/food/pieslice/frenchsilk + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pieslice/frenchsilk name = "french silk pie slice" @@ -365,6 +387,7 @@ icon_state = "frenchsilkpieslice" tastes = list("pie" = 1, "smooth chocolate" = 1, "whipped cream" = 1) foodtypes = GRAIN | DAIRY | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pie/shepherds_pie name = "shepherds pie" @@ -379,6 +402,7 @@ foodtypes = MEAT | DAIRY | VEGETABLES slice_type = /obj/item/food/pieslice/shepherds_pie yield = 4 + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pieslice/shepherds_pie name = "shepherds pie slice" @@ -391,6 +415,7 @@ ) tastes = list("juicy meat" = 1, "mashed potatoes" = 1, "baked veggies" = 1) foodtypes = MEAT | DAIRY | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/pie/asdfpie name = "pie-flavored pie" @@ -403,3 +428,4 @@ tastes = list("pie" = 1, "the far off year of 2010" = 1) foodtypes = GRAIN burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index d2311e75c68..345971b5a79 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -13,6 +13,7 @@ foodtypes = GRAIN | DAIRY | VEGETABLES venue_value = FOOD_PRICE_CHEAP burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /// type is spawned 6 at a time and replaces this pizza when processed by cutting tool var/obj/item/food/pizzaslice/slice_type ///What label pizza boxes use if this pizza spawns in them. @@ -22,6 +23,7 @@ foodtypes = GRAIN | DAIRY | VEGETABLES | RAW burns_in_oven = FALSE slice_type = null + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pizza/raw/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE) @@ -39,6 +41,7 @@ foodtypes = GRAIN | DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL decomp_type = /obj/item/food/pizzaslice/moldy + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pizzaslice/make_processable() AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/stack/sheet/pizza, 1, 1 SECONDS, table_required = TRUE, screentip_verb = "Flatten") @@ -57,7 +60,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/margherita boxtag = "Margherita Deluxe" - + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/margherita/raw name = "raw pizza margherita" @@ -84,6 +87,7 @@ icon_state = "pizzamargheritaslice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizzaslice/margherita/Initialize(mapload) . = ..() @@ -102,6 +106,7 @@ foodtypes = GRAIN | VEGETABLES| DAIRY | MEAT slice_type = /obj/item/food/pizzaslice/meat boxtag = "Meatlovers' Supreme" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/meat/raw name = "raw meatpizza" @@ -119,6 +124,7 @@ icon_state = "meatpizzaslice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/mushroom name = "mushroom pizza" @@ -133,6 +139,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/mushroom boxtag = "Mushroom Special" + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pizza/mushroom/raw name = "raw mushroom pizza" @@ -150,6 +157,7 @@ icon_state = "mushroompizzaslice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "mushroom" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pizza/vegetable @@ -173,6 +181,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | RAW burns_in_oven = FALSE slice_type = null + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/vegetable/raw/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/pizza/vegetable, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE) @@ -183,6 +192,7 @@ icon_state = "vegetablepizzaslice" tastes = list("crust" = 1, "tomato" = 2, "cheese" = 1, "carrot" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/donkpocket name = "donkpocket pizza" @@ -199,6 +209,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD slice_type = /obj/item/food/pizzaslice/donkpocket boxtag = "Bangin' Donk" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/donkpocket/raw name = "raw donkpocket pizza" @@ -231,6 +242,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY slice_type = /obj/item/food/pizzaslice/dank boxtag = "Fresh Herb" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/dank/raw name = "raw dank pizza" @@ -263,6 +275,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT slice_type = /obj/item/food/pizzaslice/sassysage boxtag = "Sausage Lovers" + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/sassysage/raw name = "raw sassysage pizza" @@ -280,6 +293,7 @@ icon_state = "sassysagepizzaslice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/pizza/pineapple name = "\improper Hawaiian pizza" @@ -296,6 +310,7 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE slice_type = /obj/item/food/pizzaslice/pineapple boxtag = "Honolulu Chew" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/pineapple/raw name = "raw Hawaiian pizza" @@ -356,6 +371,7 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2) slice_type = /obj/item/food/pizzaslice/arnold boxtag = "9mm Pepperoni" + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizza/arnold/raw name = "raw Arnold pizza" @@ -404,6 +420,7 @@ icon_state = "arnoldpizzaslice" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2) foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/pizzaslice/arnold/attack(mob/living/target, mob/living/user) . =..() @@ -438,6 +455,7 @@ slice_type = /obj/item/food/pizzaslice/energy foodtypes = TOXIC boxtag = "24 Hour Energy" + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/pizza/energy/raw name = "raw energy pizza" @@ -455,6 +473,7 @@ icon_state ="energypizzaslice" tastes = list("pure electricity" = 4, "pizza" = 2) foodtypes = TOXIC + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/raw_meat_calzone name = "raw meat calzone" @@ -468,6 +487,7 @@ tastes = list("raw dough" = 1, "raw meat" = 1, "cheese" = 1, "tomato sauce" = 1) foodtypes = GRAIN | RAW | DAIRY | MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_meat_calzone/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/meat_calzone, rand(20 SECONDS, 40 SECONDS), TRUE, TRUE) @@ -485,6 +505,7 @@ foodtypes = GRAIN | DAIRY | MEAT w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_vegetarian_calzone name = "raw vegetarian calzone" @@ -497,6 +518,7 @@ tastes = list("raw dough" = 1, "vegetables" = 1, "tomato sauce" = 1) foodtypes = GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/raw_vegetarian_calzone/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/vegetarian_calzone, rand(20 SECONDS, 40 SECONDS), TRUE, TRUE) @@ -513,3 +535,4 @@ foodtypes = GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/salad.dm b/code/game/objects/items/food/salad.dm index ebbccd53af1..703db3a12a4 100644 --- a/code/game/objects/items/food/salad.dm +++ b/code/game/objects/items/food/salad.dm @@ -10,6 +10,7 @@ foodtypes = VEGETABLES eatverbs = list("devour", "nibble", "gnaw", "gobble", "chomp") //who the fuck gnaws and devours on a salad venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/salad/aesirsalad name = "\improper Aesir salad" @@ -18,6 +19,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 12) tastes = list("leaves" = 1) foodtypes = VEGETABLES | FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/herbsalad name = "herb salad" @@ -26,6 +28,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 6) tastes = list("leaves" = 1, "apple" = 1) foodtypes = VEGETABLES | FRUIT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/salad/validsalad name = "valid salad" @@ -42,6 +45,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 9, /datum/reagent/consumable/nutriment/vitamin = 5) tastes = list("fruit" = 1) foodtypes = FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/jungle name = "jungle salad" @@ -50,6 +54,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 11, /datum/reagent/consumable/banana = 5, /datum/reagent/consumable/nutriment/vitamin = 7) tastes = list("fruit" = 1, "the jungle" = 1) foodtypes = FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/citrusdelight name = "citrus delight" @@ -61,6 +66,7 @@ ) tastes = list("sourness" = 1, "leaves" = 1) foodtypes = FRUIT | ORANGES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/uncooked_rice name = "uncooked rice" @@ -86,6 +92,7 @@ ) tastes = list("rice" = 1) foodtypes = GRAIN | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/salad/ricepudding name = "rice pudding" @@ -111,6 +118,7 @@ ) tastes = list("rice" = 1, "meat" = 1) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/salad/risotto name = "risotto" @@ -123,6 +131,7 @@ tastes = list("rice" = 1, "cheese" = 1) foodtypes = GRAIN | DAIRY venue_value = FOOD_PRICE_EXOTIC + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/eggbowl name = "egg bowl" @@ -135,6 +144,7 @@ ) tastes = list("rice" = 1, "egg" = 1) foodtypes = GRAIN | MEAT //EGG = MEAT -NinjaNomNom 2017 + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salad/edensalad name = "\improper Salad of Eden" @@ -146,6 +156,7 @@ ) tastes = list("extreme bitterness" = 3, "hope" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/gumbo name = "black eyed gumbo" @@ -158,6 +169,7 @@ ) tastes = list("building heat" = 2, "savory meat and vegtables" = 1) foodtypes = GRAIN | MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/reagent_containers/cup/bowl name = "bowl" @@ -243,6 +255,7 @@ ) tastes = list("healthy greens" = 2, "olive dressing" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/greek_salad name = "Greek salad" @@ -254,6 +267,7 @@ ) tastes = list("healthy greens" = 2, "olive dressing" = 1, "feta cheese" = 1) foodtypes = VEGETABLES | DAIRY + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salad/caesar_salad name = "Caesar salad" @@ -265,6 +279,7 @@ ) tastes = list("healthy greens" = 2, "olive dressing" = 2, "feta cheese" = 2, "pita bread" = 1) foodtypes = VEGETABLES | DAIRY | GRAIN + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/salad/spring_salad name = "spring salad" @@ -276,6 +291,7 @@ ) tastes = list("crisp greens" = 2, "olive dressing" = 2, "salt" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/potato_salad name = "potato salad" @@ -288,6 +304,7 @@ ) tastes = list("creamy potatoes" = 2, "eggs" = 2, "mayonnaise" = 1, "onions" = 1) foodtypes = VEGETABLES | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/spinach_fruit_salad name = "spinach fruit salad" @@ -299,6 +316,7 @@ ) tastes = list("spinach" = 2, "berries" = 2, "pineapple" = 2, "dressing" = 1) foodtypes = VEGETABLES | FRUIT + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/salad/antipasto_salad name = "antipasto salad" @@ -311,3 +329,4 @@ ) tastes = list("lettuce" = 2, "salami" = 2, "mozzarella cheese" = 2, "tomatoes" = 2, "dressing" = 1) foodtypes = VEGETABLES | DAIRY | MEAT + crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index 210a02c4c98..ffb3b4be3af 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -12,6 +12,7 @@ foodtypes = GRAIN | VEGETABLES food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/cheese name = "cheese sandwich" @@ -24,6 +25,7 @@ tastes = list("bread" = 1, "cheese" = 1) foodtypes = GRAIN | DAIRY venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sandwich/cheese/make_grillable() if(burns_on_grill) @@ -42,6 +44,7 @@ ) foodtypes = GRAIN | DAIRY burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/jelly name = "jelly sandwich" @@ -50,6 +53,7 @@ bite_consumption = 3 tastes = list("bread" = 1, "jelly" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sandwich/jelly/slime food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/toxin/slimejelly = 10, /datum/reagent/consumable/nutriment/vitamin = 4) @@ -69,6 +73,7 @@ ) tastes = list("nothing suspicious" = 1) foodtypes = GRAIN | GROSS + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/griddle_toast name = "griddle toast" @@ -81,6 +86,7 @@ w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE slot_flags = ITEM_SLOT_MASK + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/butteredtoast name = "buttered toast" @@ -96,6 +102,7 @@ foodtypes = GRAIN | BREAKFAST food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/jelliedtoast name = "jellied toast" @@ -107,6 +114,7 @@ foodtypes = GRAIN | BREAKFAST food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/jelliedtoast/cherry food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/cherryjelly = 8, /datum/reagent/consumable/nutriment/vitamin = 4) @@ -129,6 +137,7 @@ foodtypes = GRAIN food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/hotdog name = "hotdog" @@ -146,6 +155,7 @@ foodtypes = GRAIN | MEAT //Ketchup is not a vegetable w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_3 // Used for unit tests, do not delete /obj/item/food/hotdog/debug @@ -167,6 +177,7 @@ foodtypes = GRAIN | MEAT | VEGETABLES w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sandwich/blt name = "\improper BLT" @@ -180,6 +191,7 @@ ) tastes = list("bacon" = 3, "lettuce" = 2, "tomato" = 2, "bread" = 2) foodtypes = GRAIN | MEAT | VEGETABLES | BREAKFAST + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/peanut_butter_jelly name = "peanut butter and jelly sandwich" @@ -192,6 +204,7 @@ ) tastes = list("peanut butter" = 1, "jelly" = 1, "bread" = 2) foodtypes = GRAIN | FRUIT | NUTS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/peanut_butter_banana name = "peanut butter and banana sandwich" @@ -205,6 +218,7 @@ ) tastes = list("peanut butter" = 1, "banana" = 1, "bread" = 2) foodtypes = GRAIN | FRUIT | NUTS + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/philly_cheesesteak name = "Philly cheesesteak" @@ -217,6 +231,7 @@ ) tastes = list("bread" = 1, "juicy meat" = 1, "melted cheese" = 1, "onions" = 1) foodtypes = GRAIN | MEAT | DAIRY | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/toast_sandwich name = "toast sandwich" @@ -229,6 +244,7 @@ ) tastes = list("bread" = 2, "Britain" = 1, "butter" = 1, "toast" = 1) foodtypes = GRAIN + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sandwich/death name = "death sandwich" diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm index 8f06352b71e..541c36b1150 100644 --- a/code/game/objects/items/food/snacks.dm +++ b/code/game/objects/items/food/snacks.dm @@ -16,6 +16,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/candy/bronx name = "\improper South Bronx Paradise bar" @@ -69,6 +70,7 @@ tastes = list("dried meat" = 1) w_class = WEIGHT_CLASS_SMALL foodtypes = JUNKFOOD | MEAT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/sosjerky/healthy name = "homemade beef jerky" @@ -107,7 +109,7 @@ food_reagents = list( /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment = 1, - /datum/reagent/consumable/cooking_oil = 3, + /datum/reagent/consumable/nutriment/fat/oil = 3, /datum/reagent/consumable/salt = 1, ) tastes = list("salt" = 1, "shrimp" = 1) @@ -129,6 +131,7 @@ food_flags = FOOD_FINGER_FOOD custom_price = PAYCHECK_CREW * 0.7 w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/no_raisin/healthy name = "homemade raisins" @@ -226,7 +229,7 @@ custom_price = PAYCHECK_CREW * 0.8 //nuts are expensive in real life, and this is the best food in the vendor. junkiness = 10 //less junky than other options, since peanuts are a decently healthy snack option w_class = WEIGHT_CLASS_SMALL - grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/cooking_oil = 2) + grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/nutriment/fat/oil = 2) var/safe_for_consumption = TRUE /obj/item/food/peanuts/salted @@ -393,7 +396,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) custom_price = PAYCHECK_CREW//pistachios are even more expensive. junkiness = 10 //on par with peanuts w_class = WEIGHT_CLASS_SMALL - grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/cooking_oil = 2) + grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/nutriment/fat/oil = 2) /obj/item/food/semki name = "\improper Semki Sunflower Seeds" @@ -401,7 +404,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) icon_state = "semki" trash_type = /obj/item/trash/semki food_reagents = list( - /datum/reagent/consumable/cornoil = 1, + /datum/reagent/consumable/nutriment/fat/oil = 1, /datum/reagent/consumable/salt = 6, ) //1 cornoil is equal to 1.33 nutriment tastes = list("sunflowers" = 5) @@ -423,6 +426,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) junkiness = 5 //Homemade or not, sunflower seets are always kinda junky foodtypes = JUNKFOOD | NUTS trash_type = /obj/item/trash/semki/healthy + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/cornchips name = "\improper Boritos corn chips" @@ -432,7 +436,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) bite_consumption = 2 food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/salt = 3, ) junkiness = 20 @@ -451,7 +455,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) trash_type = /obj/item/trash/boritos food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/salt = 3, /datum/reagent/consumable/yoghurt = 1, /datum/reagent/consumable/garlic = 1, @@ -465,7 +469,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) trash_type = /obj/item/trash/boritos/green food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/salt = 3, /datum/reagent/consumable/astrotame = 1, /datum/reagent/consumable/blackpepper = 1, @@ -479,7 +483,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) trash_type = /obj/item/trash/boritos/red food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/salt = 3, /datum/reagent/consumable/astrotame = 1, /datum/reagent/consumable/cornmeal = 1, @@ -493,7 +497,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) trash_type = /obj/item/trash/boritos/purple food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/cooking_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/salt = 3, /datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/sugar = 1, @@ -533,7 +537,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) foodtypes = JUNKFOOD | SUGAR | NUTS junkiness = 25 w_class = WEIGHT_CLASS_SMALL - grind_results = list(/datum/reagent/consumable/cornoil = 3, /datum/reagent/consumable/caramel = 2) + grind_results = list(/datum/reagent/consumable/nutriment/fat/oil = 3, /datum/reagent/consumable/caramel = 2) /obj/item/food/sticko name = "\improper Sticko Classic" diff --git a/code/game/objects/items/food/soup.dm b/code/game/objects/items/food/soup.dm index 7e84cea5f87..08eb86ebaa0 100644 --- a/code/game/objects/items/food/soup.dm +++ b/code/game/objects/items/food/soup.dm @@ -30,6 +30,7 @@ /datum/reagent/consumable/nutriment/vitamin = 2, ) foodtypes = SUGAR | DAIRY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bowled/spacylibertyduff name = "spacy liberty duff" @@ -43,6 +44,7 @@ ) tastes = list("jelly" = 1, "mushroom" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bowled/amanitajelly name = "amanita jelly" @@ -57,3 +59,4 @@ ) tastes = list("jelly" = 1, "mushroom" = 1) foodtypes = VEGETABLES | TOXIC + crafting_complexity = FOOD_COMPLEXITY_2 diff --git a/code/game/objects/items/food/spaghetti.dm b/code/game/objects/items/food/spaghetti.dm index fa6bca4a351..a631cfe5e05 100644 --- a/code/game/objects/items/food/spaghetti.dm +++ b/code/game/objects/items/food/spaghetti.dm @@ -7,6 +7,7 @@ ) foodtypes = GRAIN venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 // Why are you putting cooked spaghetti in your pockets? /obj/item/food/spaghetti/make_microwaveable() @@ -22,6 +23,7 @@ desc = "Now that's a nic'e pasta!" icon_state = "spaghetti" tastes = list("pasta" = 1) + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/spaghetti/make_bakeable() AddComponent(/datum/component/bakeable, /obj/item/food/spaghetti/boiledspaghetti, rand(15 SECONDS, 20 SECONDS), TRUE, TRUE) @@ -37,6 +39,7 @@ /datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1, ) + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/spaghetti/boiledspaghetti/Initialize(mapload) . = ..() @@ -54,6 +57,7 @@ ) tastes = list("pasta" = 1, "tomato" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/pastatomato/soulful name = "soul food" @@ -82,6 +86,7 @@ ) tastes = list("pasta" = 1, "tomato" = 1) foodtypes = GRAIN | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/meatballspaghetti name = "spaghetti and meatballs" @@ -94,6 +99,7 @@ ) tastes = list("pasta" = 1, "meat" = 1) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/spesslaw name = "spesslaw" @@ -106,6 +112,7 @@ ) tastes = list("pasta" = 1, "meat" = 1) foodtypes = GRAIN | MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/chowmein name = "chow mein" @@ -118,6 +125,7 @@ ) tastes = list("noodle" = 1, "meat" = 1, "fried vegetables" = 1) foodtypes = GRAIN | MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spaghetti/beefnoodle name = "beef noodle" @@ -132,6 +140,7 @@ ) tastes = list("noodles" = 1, "meat" = 1) foodtypes = GRAIN | MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/spaghetti/butternoodles name = "butter noodles" @@ -143,6 +152,7 @@ ) tastes = list("noodles" = 1, "butter" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spaghetti/mac_n_cheese name = "mac n' cheese" @@ -154,6 +164,7 @@ ) tastes = list("cheese" = 1, "breadcrumbs" = 1, "pasta" = 1) foodtypes = GRAIN | DAIRY + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/spaghetti/shoyu_tonkotsu_ramen name = "shoyu tonkotsu ramen" diff --git a/code/game/objects/items/food/sweets.dm b/code/game/objects/items/food/sweets.dm index 83fd9905e11..6805af35db6 100644 --- a/code/game/objects/items/food/sweets.dm +++ b/code/game/objects/items/food/sweets.dm @@ -12,6 +12,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/candy_corn/prison name = "desiccated candy corn" @@ -34,6 +35,7 @@ tastes = list("apple" = 2, "caramel" = 3) foodtypes = JUNKFOOD | FRUIT | SUGAR w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/mint name = "mint" @@ -59,7 +61,7 @@ foodtypes = JUNKFOOD | SUGAR | BUGS food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY - + crafting_complexity = FOOD_COMPLEXITY_1 // Chocolates /obj/item/food/chocolatebar @@ -75,6 +77,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_TINY + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/chococoin name = "chocolate coin" @@ -89,6 +92,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/fudgedice name = "fudge dice" @@ -104,6 +108,7 @@ foodtypes = JUNKFOOD | SUGAR food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/chocoorange name = "chocolate orange" @@ -117,6 +122,7 @@ foodtypes = JUNKFOOD | SUGAR | ORANGES food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bonbon name = "bon bon" @@ -141,6 +147,7 @@ /datum/reagent/consumable/nutriment/vitamin = 3, ) tastes = list("chocolate" = 1, "chewy caramel" = 1) + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/bonbon/chocolate_truffle name = "chocolate truffle" @@ -161,6 +168,7 @@ ) tastes = list("chocolate" = 1, "peanuts" = 1) foodtypes = DAIRY | SUGAR | JUNKFOOD | NUTS + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/bonbon/peanut_butter_cup name = "peanut butter cup" @@ -172,7 +180,7 @@ ) tastes = list("chocolate" = 1, "peanut butter" = 1) foodtypes = DAIRY | SUGAR | JUNKFOOD | NUTS - + crafting_complexity = FOOD_COMPLEXITY_1 // Gum /obj/item/food/bubblegum @@ -333,6 +341,7 @@ foodtypes = JUNKFOOD | SUGAR | BUGS food_flags = FOOD_FINGER_FOOD slot_flags = ITEM_SLOT_MASK + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/spiderlollipop/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/vegetables.dm b/code/game/objects/items/food/vegetables.dm index 4c529befbd1..5438e5e9302 100644 --- a/code/game/objects/items/food/vegetables.dm +++ b/code/game/objects/items/food/vegetables.dm @@ -12,6 +12,7 @@ foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/yakiimo name = "yaki imo" @@ -25,6 +26,7 @@ foodtypes = VEGETABLES | SUGAR w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/roastparsnip name = "roast parsnip" @@ -37,6 +39,7 @@ tastes = list("parsnip" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 // Potatoes /obj/item/food/tatortot @@ -48,6 +51,7 @@ foodtypes = FRIED | VEGETABLES food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/tatortot/Initialize(mapload) . = ..() @@ -65,6 +69,7 @@ tastes = list("creamy mashed potatoes" = 1, "garlic" = 1) foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/baked_potato name = "baked potato" @@ -75,6 +80,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_in_oven = TRUE + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/buttered_baked_potato name = "buttered baked potato" @@ -84,6 +90,7 @@ tastes = list("baked potato" = 1) foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/loaded_baked_potato name = "loaded baked potato" @@ -93,6 +100,7 @@ tastes = list("baked potato" = 1, "bacon" = 1, "cheese" = 1, "cabbage" = 1) foodtypes = VEGETABLES | DAIRY | MEAT w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_3 // Fries /obj/item/food/fries @@ -104,6 +112,7 @@ foodtypes = VEGETABLES | FRIED w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/fries/Initialize(mapload) . = ..() @@ -121,6 +130,7 @@ foodtypes = VEGETABLES | DAIRY w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cheesyfries/Initialize(mapload) . = ..() @@ -135,6 +145,7 @@ tastes = list("carrots" = 3, "salt" = 1) foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/carrotfries/Initialize(mapload) . = ..() @@ -149,6 +160,7 @@ foodtypes = VEGETABLES | FRIED | MEAT w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/poutine/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index aa3ca4a6d0e..c482155e144 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -74,7 +74,7 @@ /datum/reagent/consumable/blackpepper,\ /datum/reagent/consumable/coco,\ /datum/reagent/consumable/cornmeal,\ - /datum/reagent/consumable/cornoil,\ + /datum/reagent/consumable/nutriment/fat/oil,\ /datum/reagent/consumable/corn_starch,\ /datum/reagent/consumable/eggwhite,\ /datum/reagent/consumable/eggyolk,\ @@ -388,7 +388,7 @@ shaker.trans_to(target, amount_per_transfer_from_this, transfered_by = user) balloon_alert(user, "[amount_per_transfer_from_this] unit\s poured") return . - + /obj/item/reagent_containers/borghypo/condiment_synthesizer // Solids! Condiments! The borger uprising! name = "Condiment Synthesizer" desc = "An advanced condiment synthesizer" @@ -398,7 +398,7 @@ // Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. charge_cost = 40 //Costs double the power of the borgshaker due to synthesizing solids recharge_time = 6 //Double the recharge time too, for the same reason. - dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP + dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP default_reagent_types = EXPANDED_SERVICE_REAGENTS /obj/item/reagent_containers/borghypo/condiment_synthesizer/ui_interact(mob/user, datum/tgui/ui) @@ -424,9 +424,9 @@ data["reagents"] = condiments data["selectedReagent"] = selected_reagent?.name return data - + /obj/item/reagent_containers/borghypo/condiment_synthesizer/attack(mob/M, mob/user) - return + return /obj/item/reagent_containers/borghypo/condiment_synthesizer/afterattack(obj/target, mob/user, proximity) . = ..() @@ -451,7 +451,7 @@ shaker.add_reagent(selected_reagent.type, amount_per_transfer_from_this, reagtemp = dispensed_temperature, no_react = TRUE) shaker.trans_to(target, amount_per_transfer_from_this, transfered_by = user) balloon_alert(user, "[amount_per_transfer_from_this] unit\s poured") - + /obj/item/reagent_containers/borghypo/borgshaker/hacked name = "cyborg shaker" diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index 4e5ca1b3b63..3e23d604f6d 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -313,7 +313,7 @@ new /obj/item/food/grown/onion/red(src) new /obj/item/food/grown/onion/red(src) new /obj/item/food/grown/tomato(src) - new /obj/item/reagent_containers/condiment/quality_oil(src) + new /obj/item/reagent_containers/condiment/olive_oil(src) /obj/item/storage/box/ingredients/random theme_name = "random" @@ -466,7 +466,7 @@ /obj/item/food/cheese/wheel = 5, /obj/item/food/grown/toechtauese = 10, /obj/item/reagent_containers/condiment/cornmeal = 5, - /obj/item/reagent_containers/condiment/quality_oil = 5, + /obj/item/reagent_containers/condiment/olive_oil = 5, /obj/item/reagent_containers/condiment/yoghurt = 5, )) new random_food(src) diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index 38b8292fe80..c02a4d56db9 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -47,6 +47,7 @@ /obj/item/food/spiderleg, /obj/item/food/fishmeat/carp, /obj/item/food/meat/slab/human, + /obj/item/food/meat/slab/grassfed, ) crate_name = "food crate" diff --git a/code/modules/events/holiday/easter.dm b/code/modules/events/holiday/easter.dm index f4fa2a038e0..ddade60e287 100644 --- a/code/modules/events/holiday/easter.dm +++ b/code/modules/events/holiday/easter.dm @@ -140,6 +140,7 @@ foodtypes = SUGAR | GRAIN | BREAKFAST tastes = list("pastry" = 1, "easter" = 1) bite_consumption = 2 + crafting_complexity = FOOD_COMPLEXITY_1 /datum/crafting_recipe/food/hotcrossbun name = "Hot Cross Bun" @@ -167,6 +168,7 @@ icon_state = "scotchegg" bite_consumption = 3 food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2) + crafting_complexity = FOOD_COMPLEXITY_2 /datum/crafting_recipe/food/scotchegg name = "Scotch egg" @@ -194,6 +196,7 @@ desc = "Contains less than 10% real rabbit!" icon_state = "chocolatebunny" food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + crafting_complexity = FOOD_COMPLEXITY_1 /datum/crafting_recipe/food/chocolatebunny name = "Chocolate bunny" diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index b0b9aa35264..d52dd1b9c50 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -31,12 +31,14 @@ desc = "Spooky! It's got delicious calcium flavouring!" icon = 'icons/obj/holiday/halloween_items.dmi' icon_state = "skeletoncookie" + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/cookie/sugar/spookycoffin name = "coffin cookie" desc = "Spooky! It's got delicious coffee flavouring!" icon = 'icons/obj/holiday/halloween_items.dmi' icon_state = "coffincookie" + crafting_complexity = FOOD_COMPLEXITY_2 //spooky items diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index 4b5689383d6..79fbb6ddd5e 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/machinery/deepfryer/Initialize(mapload) . = ..() create_reagents(50, OPENCONTAINER) - reagents.add_reagent(/datum/reagent/consumable/cooking_oil, 25) + reagents.add_reagent(/datum/reagent/consumable/nutriment/fat/oil, 25) fry_loop = new(src, FALSE) /obj/machinery/deepfryer/Destroy() @@ -97,8 +97,8 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( qdel(weapon) return // Make sure we have cooking oil - if(!reagents.has_reagent(/datum/reagent/consumable/cooking_oil)) - to_chat(user, span_warning("[src] has no cooking oil to fry with!")) + if(!reagents.has_reagent(/datum/reagent/consumable/nutriment/fat, check_subtypes = TRUE)) + to_chat(user, span_warning("[src] has no fat or oil to fry with!")) return // Don't deep fry indestructible things, for sanity reasons if(weapon.resistance_flags & INDESTRUCTIBLE) @@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/machinery/deepfryer/process(seconds_per_tick) ..() - var/datum/reagent/consumable/cooking_oil/frying_oil = reagents.has_reagent(/datum/reagent/consumable/cooking_oil) + var/datum/reagent/consumable/nutriment/fat/frying_oil = reagents.has_reagent(/datum/reagent/consumable/nutriment/fat, check_subtypes = TRUE) if(!frying_oil) return reagents.chem_temp = frying_oil.fry_temperature diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 4dbf65f67d2..51d0a0629c4 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -68,7 +68,7 @@ var/list/cached_mats = recipe.preserve_materials && what.custom_materials var/cached_multiplier = (recipe.food_multiplier * rating_amount) for(var/i in 1 to cached_multiplier) - var/atom/processed_food = new recipe.output(drop_location()) + var/atom/processed_food = new recipe.output(drop_location(), no_base_reagents = TRUE) what.reagents.copy_to(processed_food, what.reagents.total_volume, multiplier = 1 / cached_multiplier) if(cached_mats) processed_food.set_custom_materials(cached_mats, 1 / cached_multiplier) diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm index da2d6f1f71a..7e84fe4f5c0 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -241,7 +241,7 @@ /datum/chemical_reaction/drink/pina_olivada results = list(/datum/reagent/consumable/ethanol/pina_olivada = 5) - required_reagents = list(/datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/quality_oil = 1) + required_reagents = list(/datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/nutriment/fat/oil/olive = 1) /datum/chemical_reaction/drink/sbiten results = list(/datum/reagent/consumable/ethanol/sbiten = 10) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 54195f63c1f..90e7963f6f8 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -1,6 +1,4 @@ /datum/crafting_recipe/food - /// A rough equivilance for how much nutrition this recipe's result will provide - var/total_nutriment_factor = 0 /datum/crafting_recipe/food/on_craft_completion(mob/user, atom/result) SHOULD_CALL_PARENT(TRUE) @@ -10,12 +8,6 @@ /datum/crafting_recipe/food/New() . = ..() - if(ispath(result, /obj/item/food)) - var/obj/item/food/result_food = new result() - for(var/datum/reagent/consumable/nutriment as anything in result_food.food_reagents) - total_nutriment_factor += initial(nutriment.nutriment_factor) * result_food.food_reagents[nutriment] - qdel(result_food) - parts |= reqs /datum/crafting_recipe/food/crafting_ui_data() @@ -24,7 +16,7 @@ if(ispath(result, /obj/item/food)) var/obj/item/food/item = result data["foodtypes"] = bitfield_to_list(initial(item.foodtypes), FOOD_FLAGS) - data["nutriments"] = total_nutriment_factor + data["complexity"] = initial(item.crafting_complexity) return data @@ -38,15 +30,25 @@ thermic_constant = 0 H_ion_release = 0 reaction_tags = REACTION_TAG_FOOD | REACTION_TAG_EASY + required_other = TRUE /// Typepath of food that is created on reaction var/atom/resulting_food_path + /// Reagent purity of the result, calculated on reaction + var/resulting_reagent_purity + +/datum/chemical_reaction/food/pre_reaction_other_checks(datum/reagents/holder) + resulting_reagent_purity = holder.get_average_purity(/datum/reagent/consumable) + return TRUE /datum/chemical_reaction/food/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(resulting_food_path) var/atom/location = holder.my_atom.drop_location() for(var/i in 1 to created_volume) - new resulting_food_path(location) + if(ispath(resulting_food_path, /obj/item/food) && !isnull(resulting_reagent_purity)) + new resulting_food_path(location, starting_reagent_purity = resulting_reagent_purity) + else + new resulting_food_path(location) /datum/chemical_reaction/food/tofu required_reagents = list(/datum/reagent/consumable/soymilk = 10) @@ -56,7 +58,7 @@ resulting_food_path = /obj/item/food/tofu /datum/chemical_reaction/food/candycorn - required_reagents = list(/datum/reagent/consumable/cornoil = 5) + required_reagents = list(/datum/reagent/consumable/nutriment/fat/oil = 5) required_catalysts = list(/datum/reagent/consumable/sugar = 5) mob_react = FALSE reaction_flags = REACTION_INSTANT @@ -206,7 +208,7 @@ required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/flour = 1) /datum/chemical_reaction/food/mothic_pizza_dough - required_reagents = list(/datum/reagent/consumable/milk = 5, /datum/reagent/consumable/quality_oil = 2, /datum/reagent/medicine/salglu_solution = 5, /datum/reagent/consumable/cornmeal = 10, /datum/reagent/consumable/flour = 5) + required_reagents = list(/datum/reagent/consumable/milk = 5, /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /datum/reagent/medicine/salglu_solution = 5, /datum/reagent/consumable/cornmeal = 10, /datum/reagent/consumable/flour = 5) mix_message = "The ingredients form a pizza dough." reaction_flags = REACTION_INSTANT resulting_food_path = /obj/item/food/mothic_pizza_dough @@ -245,13 +247,13 @@ reaction_flags = REACTION_INSTANT /datum/chemical_reaction/food/quality_oil_upconvert - required_reagents = list(/datum/reagent/consumable/quality_oil = 1, /datum/reagent/consumable/cooking_oil = 2) - results = list(/datum/reagent/consumable/quality_oil = 2) + required_reagents = list(/datum/reagent/consumable/nutriment/fat/oil/olive = 1, /datum/reagent/consumable/nutriment/fat/oil = 2) + results = list(/datum/reagent/consumable/nutriment/fat/oil/olive = 2) mix_message = "The cooking oil dilutes the quality oil- how delightfully devilish..." reaction_flags = REACTION_INSTANT /datum/chemical_reaction/food/quality_oil - results = list(/datum/reagent/consumable/quality_oil = 2) + results = list(/datum/reagent/consumable/nutriment/fat/oil/olive = 2) required_reagents = list(/datum/reagent/consumable/olivepaste = 4, /datum/reagent/water = 1) reaction_flags = REACTION_INSTANT diff --git a/code/modules/food_and_drinks/recipes/soup_guide.dm b/code/modules/food_and_drinks/recipes/soup_guide.dm index a2bc0faccdb..3a9ba05ff0c 100644 --- a/code/modules/food_and_drinks/recipes/soup_guide.dm +++ b/code/modules/food_and_drinks/recipes/soup_guide.dm @@ -28,7 +28,6 @@ var/datum/glass_style/has_foodtype/soup_style = GLOB.glass_style_singletons[expected_container][result] if(istype(soup_style)) data["foodtypes"] = bitfield_to_list(soup_style.drink_type, FOOD_FLAGS) - data["nutriments"] = total_nutriment_factor return data @@ -39,10 +38,6 @@ for(var/obj/item/ingredienttype as anything in chemical_reaction.required_ingredients) LAZYSET(reqs, ingredienttype, chemical_reaction.required_ingredients[ingredienttype]) - if(ispath(result, /datum/reagent/consumable)) - var/datum/reagent/consumable/soup_result = result - total_nutriment_factor += initial(soup_result.nutriment_factor) * result_amount - /datum/crafting_recipe/food/reaction/soup/meatball_soup reaction = /datum/chemical_reaction/food/soup/meatballsoup diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index edc7867568f..71986e46812 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -4,7 +4,7 @@ /datum/reagent/consumable/nutriment/soup name = "Soup" chemical_flags = NONE - nutriment_factor = 12 * REAGENTS_METABOLISM // Slightly less to that of nutriment as soups will come with nutriments in tow + nutriment_factor = 12 // Slightly less to that of nutriment as soups will come with nutriments in tow burning_temperature = 520 default_container = /obj/item/reagent_containers/cup/bowl glass_price = FOOD_PRICE_CHEAP @@ -730,7 +730,7 @@ /datum/reagent/consumable/nutriment/soup/clown_tears name = "Clown's Tears" description = "The sorrow and melancholy of a thousand bereaved clowns, forever denied their Honkmechs." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 ph = 9.2 data = list("a bad joke" = 1, "mournful honking" = 1) color = "#EEF442" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 5ef95ca8ab6..06b5e8952ed 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -382,7 +382,7 @@ /obj/item/food/grown/cabbage = 1, /obj/item/toy/crayon/green = 1, /obj/item/flashlight/flare = 1, - /datum/reagent/consumable/cooking_oil = 15 + /datum/reagent/consumable/nutriment/fat/oil = 15 ) result = /obj/item/food/burger/crazy category = CAT_BURGER diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index b70b3b9114c..4a2c9f2935d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -141,14 +141,14 @@ result = /obj/item/food/cake/hardware_cake category = CAT_CAKE -/datum/crafting_recipe/food/bscccake - name = "blackberry and strawberry chocolate cake" +/datum/crafting_recipe/food/berry_chocolate_cake + name = "strawberry chocolate cake" reqs = list( /obj/item/food/cake/plain = 1, /obj/item/food/chocolatebar = 2, /obj/item/food/grown/berries = 5 ) - result = /obj/item/food/cake/bscc + result = /obj/item/food/cake/berry_chocolate_cake category = CAT_CAKE /datum/crafting_recipe/food/pavlovacream @@ -173,13 +173,13 @@ result = /obj/item/food/cake/pavlova/nuts category = CAT_CAKE -/datum/crafting_recipe/food/bscvcake +/datum/crafting_recipe/food/berry_vanilla_cake name = "blackberry and strawberry vanilla cake" reqs = list( /obj/item/food/cake/plain = 1, /obj/item/food/grown/berries = 5 ) - result = /obj/item/food/cake/bsvc + result = /obj/item/food/cake/berry_vanilla_cake category = CAT_CAKE /datum/crafting_recipe/food/clowncake diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm index 30eee31295b..4e99329d0ae 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm @@ -181,7 +181,7 @@ reaction = /datum/chemical_reaction/food/yoghurt /datum/crafting_recipe/food/reaction/quality_oil - result = /datum/reagent/consumable/quality_oil + result = /datum/reagent/consumable/nutriment/fat/oil/olive reaction = /datum/chemical_reaction/food/quality_oil /datum/crafting_recipe/food/reaction/quality_oil/upconvert @@ -228,6 +228,7 @@ /datum/crafting_recipe/food/rollingpin/pizza_sheet reqs = list(/obj/item/food/pizzaslice/margherita = 1) result = /obj/item/stack/sheet/pizza + category = CAT_PIZZA // Tools: Knife @@ -249,7 +250,7 @@ /datum/crafting_recipe/food/knife/cakeslice reqs = list(/obj/item/food/cake/plain = 1) result = /obj/item/food/cakeslice/plain - category = CAT_PASTRY + category = CAT_CAKE /datum/crafting_recipe/food/knife/pizzaslice reqs = list(/obj/item/food/pizza/margherita = 1) @@ -266,9 +267,9 @@ result = /obj/item/food/rootdoughslice category = CAT_BREAD -/datum/crafting_recipe/food/knife/pastrybase +/datum/crafting_recipe/food/knife/rawpastrybase reqs = list(/obj/item/food/piedough = 1) - result = /obj/item/food/pastrybase + result = /obj/item/food/rawpastrybase category = CAT_BREAD /datum/crafting_recipe/food/knife/butterslice @@ -357,7 +358,7 @@ /datum/crafting_recipe/food/knife/lil_baked_rice reqs = list(/obj/item/food/big_baked_rice = 1) result = /obj/item/food/lil_baked_rice - category = CAT_SALAD + category = CAT_MOTH /datum/crafting_recipe/food/knife/watermelonslice reqs = list(/obj/item/food/grown/watermelon = 1) @@ -447,7 +448,7 @@ /datum/crafting_recipe/food/grill/grilled_cheese_sandwich reqs = list(/obj/item/food/sandwich/cheese = 1) result = /obj/item/food/sandwich/cheese/grilled - category = CAT_BREAD + category = CAT_SANDWICH /datum/crafting_recipe/food/grill/grilled_cheese reqs = list(/obj/item/food/cheese/firm_cheese_slice = 1) @@ -511,6 +512,11 @@ "Bake until ready" ) +/datum/crafting_recipe/food/grill/hard_taco_shell + reqs = list(/obj/item/food/tortilla = 1) + result = /obj/item/food/hard_taco_shell + category = CAT_MEXICAN + // Machinery: Grinder /datum/crafting_recipe/food/grinder machinery = list(/obj/machinery/reagentgrinder) @@ -644,7 +650,7 @@ /datum/crafting_recipe/food/processor/tortilla reqs = list(/obj/item/food/grown/corn = 1) result = /obj/item/food/tortilla - category = CAT_BREAD + category = CAT_MEXICAN /datum/crafting_recipe/food/processor/tempeh reqs = list(/obj/item/food/tempehstarter = 1) @@ -748,12 +754,12 @@ /datum/crafting_recipe/food/oven/pie reqs = list(/obj/item/food/piedough = 1) result = /obj/item/food/pie/plain - category = CAT_PASTRY + category = CAT_PIE /datum/crafting_recipe/food/oven/cake reqs = list(/obj/item/food/cakebatter = 1) result = /obj/item/food/cake/plain - category = CAT_PASTRY + category = CAT_CAKE /datum/crafting_recipe/food/oven/breadstick reqs = list(/obj/item/food/raw_breadstick = 1) @@ -777,7 +783,7 @@ /datum/crafting_recipe/food/oven/big_baked_rice reqs = list(/obj/item/food/raw_baked_rice = 1) result = /obj/item/food/big_baked_rice - category = CAT_SALAD + category = CAT_MOTH /datum/crafting_recipe/food/oven/ratatouille reqs = list(/obj/item/food/raw_ratatouille = 1) @@ -787,7 +793,7 @@ /datum/crafting_recipe/food/oven/stuffed_peppers reqs = list(/obj/item/food/raw_stuffed_peppers = 1) result = /obj/item/food/stuffed_peppers - category = CAT_SALAD + category = CAT_MOTH /datum/crafting_recipe/food/oven/roasted_bell_pepper reqs = list(/obj/item/food/grown/bell_pepper = 1) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm index ccb0b975cb7..714c36223a4 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm @@ -74,7 +74,7 @@ /obj/item/food/grown/garlic = 1, /datum/reagent/consumable/lemonjuice = 3, /datum/reagent/consumable/blackpepper = 2, - /datum/reagent/consumable/quality_oil = 3 + /datum/reagent/consumable/nutriment/fat/oil/olive = 3 ) result = /obj/item/food/lizard_escargot category = CAT_LIZARD @@ -148,7 +148,7 @@ /obj/item/food/steeped_mushrooms = 1, /obj/item/food/grown/mushroom/plumphelmet = 1, /obj/item/food/grown/mushroom/chanterelle = 1, - /datum/reagent/consumable/quality_oil = 5 + /datum/reagent/consumable/nutriment/fat/oil/olive = 5 ) result = /obj/item/food/mushroomy_stirfry category = CAT_LIZARD @@ -204,7 +204,7 @@ /obj/item/food/spaghetti/nizaya = 1, /obj/item/food/grown/garlic = 1, /obj/item/food/grown/chili = 1, - /datum/reagent/consumable/quality_oil = 5 + /datum/reagent/consumable/nutriment/fat/oil/olive = 5 ) result = /obj/item/food/spaghetti/garlic_nizaya category = CAT_LIZARD @@ -228,7 +228,7 @@ /obj/item/food/spaghetti/nizaya = 1, /obj/item/food/steeped_mushrooms = 1, /obj/item/food/grown/garlic = 1, - /datum/reagent/consumable/quality_oil = 5 + /datum/reagent/consumable/nutriment/fat/oil/olive = 5 ) result = /obj/item/food/spaghetti/mushroom_nizaya category = CAT_LIZARD @@ -239,7 +239,7 @@ /obj/item/food/root_flatbread = 1, /obj/item/food/grown/garlic = 1, /datum/reagent/consumable/lemonjuice = 2, - /datum/reagent/consumable/quality_oil = 3 + /datum/reagent/consumable/nutriment/fat/oil/olive = 3 ) result = /obj/item/food/pizza/flatbread/rustic category = CAT_LIZARD @@ -251,7 +251,7 @@ /obj/item/food/grown/garlic = 1, /obj/item/food/grown/tomato = 1, /obj/item/food/meatball = 2, - /datum/reagent/consumable/quality_oil = 3 + /datum/reagent/consumable/nutriment/fat/oil/olive = 3 ) result = /obj/item/food/pizza/flatbread/italic category = CAT_LIZARD @@ -313,7 +313,7 @@ /obj/item/food/root_flatbread = 1, /obj/item/food/grown/tomato = 1, /obj/item/food/grown/mushroom = 3, - /datum/reagent/consumable/quality_oil = 3 + /datum/reagent/consumable/nutriment/fat/oil/olive = 3 ) result = /obj/item/food/pizza/flatbread/mushroom category = CAT_LIZARD diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm index b184347a38f..fb4f29284b8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm @@ -648,7 +648,7 @@ /obj/item/food/friedegg = 1, /obj/item/food/grown/chili = 1, /datum/reagent/consumable/yoghurt = 5, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, ) result = /obj/item/food/cilbir category = CAT_MARTIAN diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 908ac40c016..ea2c1270303 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -173,7 +173,7 @@ /obj/item/food/meat/slab/rawcrab = 1 ) result = /obj/item/food/crab_rangoon - category = CAT_MISCFOOD + category = CAT_SEAFOOD /datum/crafting_recipe/food/royalcheese name = "Royal Cheese" @@ -203,7 +203,7 @@ /datum/reagent/consumable/salt = 5, /obj/item/food/grown/herbs = 2, /obj/item/food/grown/garlic = 1, - /datum/reagent/consumable/quality_oil = 5, + /datum/reagent/consumable/nutriment/fat/oil/olive = 5, /obj/item/food/canned/pine_nuts = 1 ) result = /obj/item/food/pesto @@ -215,7 +215,7 @@ /obj/item/food/canned/tomatoes = 1, /datum/reagent/consumable/salt = 2, /obj/item/food/grown/herbs = 1, - /datum/reagent/consumable/quality_oil = 5 + /datum/reagent/consumable/nutriment/fat/oil/olive = 5 ) result = /obj/item/food/tomato_sauce category = CAT_MISCFOOD @@ -434,7 +434,7 @@ reqs = list( /obj/item/food/grown/eggplant = 1, /obj/item/food/grown/garlic = 1, - /datum/reagent/consumable/quality_oil = 3, + /datum/reagent/consumable/nutriment/fat/oil/olive = 3, ) result = /obj/item/food/sauteed_eggplant category = CAT_MISCFOOD @@ -458,7 +458,7 @@ /obj/item/food/pita_bread = 1, /obj/item/food/grown/eggplant = 1, /obj/item/food/grown/garlic = 1, - /datum/reagent/consumable/quality_oil = 5, + /datum/reagent/consumable/nutriment/fat/oil/olive = 5, /datum/reagent/consumable/lemonjuice = 3, ) result = /obj/item/food/baba_ghanoush @@ -501,7 +501,7 @@ name = "Tzatziki sauce" reqs = list( /obj/item/food/grown/cucumber = 1, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /obj/item/food/grown/garlic = 1, /datum/reagent/consumable/salt = 1, ) @@ -548,7 +548,7 @@ reqs = list( /datum/reagent/consumable/flour = 10, /datum/reagent/water = 5, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /datum/reagent/consumable/sugar = 2, ) result = /obj/item/food/raw_pita_bread diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm index 880b51a3909..bb20f4ab0b3 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm @@ -23,7 +23,7 @@ /obj/item/seeds/sunflower = 1, /obj/item/seeds/pumpkin = 1, /obj/item/seeds/poppy = 1, - /datum/reagent/consumable/quality_oil = 2 + /datum/reagent/consumable/nutriment/fat/oil/olive = 2 ) result = /obj/item/food/toasted_seeds category = CAT_MOTH @@ -210,7 +210,7 @@ /obj/item/food/grown/tomato = 1, /obj/item/food/cheese/mozzarella = 1, /obj/item/food/grown/herbs = 1, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /datum/reagent/consumable/vinegar = 2 ) result = /obj/item/food/caprese_salad @@ -219,7 +219,7 @@ /datum/crafting_recipe/food/fleet_salad name = "Lörtonknusksolt (Fleet salad)" reqs = list( - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /datum/reagent/consumable/vinegar = 2, /obj/item/food/breadslice/plain = 1, /obj/item/food/grilled_cheese = 1, @@ -233,7 +233,7 @@ /datum/crafting_recipe/food/cotton_salad name = "Flöfrölenknusksolt (Cotton salad)" reqs = list( - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, /datum/reagent/consumable/vinegar = 2, /obj/item/food/grown/carrot = 1, /obj/item/food/mothic_salad = 1, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm index 653aac9672c..8ed91683c05 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm @@ -104,7 +104,7 @@ /obj/item/food/grown/carrot = 1, /obj/item/food/onion_slice/red = 2, /obj/item/food/grown/cabbage = 1, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, ) result = /obj/item/food/salad/kale_salad category = CAT_SALAD @@ -117,7 +117,7 @@ /obj/item/food/grown/tomato = 1, /obj/item/food/onion_slice/red = 2, /obj/item/food/cheese/wedge = 1, - /datum/reagent/consumable/quality_oil = 5, + /datum/reagent/consumable/nutriment/fat/oil/olive = 5, /obj/item/food/grown/cucumber = 1, ) result = /obj/item/food/salad/greek_salad @@ -130,7 +130,7 @@ /obj/item/food/grown/cabbage = 2, /obj/item/food/onion_slice/red = 1, /obj/item/food/cheese/wedge = 1, - /datum/reagent/consumable/quality_oil = 5, + /datum/reagent/consumable/nutriment/fat/oil/olive = 5, /obj/item/food/breadslice/plain = 1, ) result = /obj/item/food/salad/caesar_salad @@ -143,7 +143,7 @@ /obj/item/food/grown/cabbage = 2, /obj/item/food/grown/carrot = 1, /obj/item/food/grown/peas = 1, - /datum/reagent/consumable/quality_oil = 5, + /datum/reagent/consumable/nutriment/fat/oil/olive = 5, ) result = /obj/item/food/salad/spring_salad category = CAT_SALAD @@ -167,7 +167,7 @@ /obj/item/food/grown/herbs = 3, /obj/item/food/grown/berries = 2, /obj/item/food/pineappleslice = 2, - /datum/reagent/consumable/quality_oil = 2, + /datum/reagent/consumable/nutriment/fat/oil/olive = 2, ) result = /obj/item/food/salad/spinach_fruit_salad category = CAT_SALAD diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index b62802410da..41bf1aeb76e 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -7,7 +7,7 @@ food_reagents = list(/datum/reagent/consumable/honey = 5) tastes = list("honey" = 1) preserved_food = TRUE - + starting_reagent_purity = 1 var/honey_color = "" /obj/item/food/honeycomb/Initialize(mapload) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 7a2b8f9841f..1f2951b3356 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -2,7 +2,8 @@ #define MAX_ITEMS_PER_RATING 10 /// How many items are converted per cycle, per rating point of the manipulator used. #define PROCESSED_ITEMS_PER_RATING 5 - +/// Starting purity of reagents made in biogenerator +#define BIOGEN_REAGENT_PURITY 0.3 /obj/machinery/biogenerator name = "biogenerator" @@ -387,7 +388,7 @@ if(!use_biomass(design.materials, amount)) return FALSE - beaker.reagents.add_reagent(design.make_reagent, amount) + beaker.reagents.add_reagent(design.make_reagent, amount, added_purity = BIOGEN_REAGENT_PURITY) if(design.build_path) if(!use_biomass(design.materials, amount)) @@ -568,3 +569,4 @@ #undef MAX_ITEMS_PER_RATING #undef PROCESSED_ITEMS_PER_RATING +#undef BIOGEN_REAGENT_PURITY diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 71c48c6e5c3..5a10c883e49 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -78,9 +78,6 @@ seed.prepare_result(src) transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency! - if(seed.get_gene(/datum/plant_gene/trait/brewing)) - ferment() - /obj/item/food/grown/Destroy() if(isatom(seed)) QDEL_NULL(seed) @@ -111,48 +108,49 @@ /// Turns the nutriments and vitamins into the distill reagent or fruit wine /obj/item/food/grown/proc/ferment() + var/reagent_purity = seed.get_reagent_purity() + var/purity_above_base = clamp((reagent_purity - 0.5) * 2, 0, 1) + var/quality_min = 0 + var/quality_max = DRINK_FANTASTIC + var/quality = round(LERP(quality_min, quality_max, purity_above_base)) for(var/datum/reagent/reagent in reagents.reagent_list) - if(reagent.type != /datum/reagent/consumable/nutriment && reagent.type != /datum/reagent/consumable/nutriment/vitamin) + if(!istype(reagent, /datum/reagent/consumable)) continue - var/purity = clamp(seed.lifespan/200 + seed.endurance/200, 0, 1) - var/quality_min = 0 - var/quality_max = DRINK_FANTASTIC - var/quality = round(LERP(quality_min, quality_max, purity)) if(distill_reagent) var/data = list() var/datum/reagent/consumable/ethanol/booze = distill_reagent data["quality"] = quality - data["boozepwr"] = round(initial(booze.boozepwr) * purity) - reagents.add_reagent(distill_reagent, reagent.volume, data, added_purity = purity) + data["boozepwr"] = round(initial(booze.boozepwr) * reagent_purity * 2) // default boozepwr at 50% purity + reagents.add_reagent(distill_reagent, reagent.volume, data, added_purity = reagent_purity) else var/data = list() data["names"] = list("[initial(name)]" = 1) data["color"] = filling_color - data["boozepwr"] = round(wine_power * purity) + data["boozepwr"] = round(wine_power * reagent_purity * 2) // default boozepwr at 50% purity data["quality"] = quality if(wine_flavor) data["tastes"] = list(wine_flavor = 1) else data["tastes"] = list(tastes[1] = 1) - reagents.add_reagent(/datum/reagent/consumable/ethanol/fruit_wine, reagent.volume, data, added_purity = purity) + reagents.add_reagent(/datum/reagent/consumable/ethanol/fruit_wine, reagent.volume, data, added_purity = reagent_purity) reagents.del_reagent(reagent.type) -/obj/item/food/grown/on_grind() - . = ..() - var/nutriment = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) - if(grind_results?.len) - for(var/i in 1 to grind_results.len) - grind_results[grind_results[i]] = nutriment - reagents.del_reagent(/datum/reagent/consumable/nutriment) - reagents.del_reagent(/datum/reagent/consumable/nutriment/vitamin) +/obj/item/food/grown/grind(datum/reagents/target_holder, mob/user) + if(on_grind() == -1) + return FALSE -/obj/item/food/grown/on_juice() - var/nutriment = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) - if(juice_results?.len) - for(var/i in 1 to juice_results.len) - juice_results[juice_results[i]] = nutriment - reagents.del_reagent(/datum/reagent/consumable/nutriment) - reagents.del_reagent(/datum/reagent/consumable/nutriment/vitamin) + var/grind_results_num = LAZYLEN(grind_results) + if(grind_results_num) + var/average_purity = reagents.get_average_purity() + var/total_nutriment_amount = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, include_subtypes = TRUE) + var/single_reagent_amount = grind_results_num > 1 ? round(total_nutriment_amount / grind_results_num, CHEMICAL_QUANTISATION_LEVEL) : total_nutriment_amount + reagents.remove_all_type(/datum/reagent/consumable/nutriment, total_nutriment_amount) + for(var/reagent in grind_results) + reagents.add_reagent(reagent, single_reagent_amount, added_purity = average_purity) + + if(reagents && target_holder) + reagents.trans_to(target_holder, reagents.total_volume, transfered_by = user) + return TRUE #undef BITE_SIZE_POTENCY_MULTIPLIER #undef BITE_SIZE_VOLUME_MULTIPLIER diff --git a/code/modules/hydroponics/grown/aloe.dm b/code/modules/hydroponics/grown/aloe.dm index b031999ebdf..cfbefce6dba 100644 --- a/code/modules/hydroponics/grown/aloe.dm +++ b/code/modules/hydroponics/grown/aloe.dm @@ -23,7 +23,7 @@ icon_state = "aloe" bite_consumption_mod = 3 foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/aloejuice = 0) + juice_typepath = /datum/reagent/consumable/aloejuice distill_reagent = /datum/reagent/consumable/ethanol/tequila /obj/item/food/grown/aloe/make_bakeable() diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index d4ac640ab44..b994749c2f8 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -22,7 +22,7 @@ desc = "It's a little piece of Eden." icon_state = "apple" foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/applejuice = 0) + juice_typepath = /datum/reagent/consumable/applejuice tastes = list("apple" = 1) distill_reagent = /datum/reagent/consumable/ethanol/hcider diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index a47dbceb8a8..fca26ebe978 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -25,7 +25,7 @@ trash_type = /obj/item/grown/bananapeel bite_consumption_mod = 3 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/banana = 0) + juice_typepath = /datum/reagent/consumable/banana distill_reagent = /datum/reagent/consumable/ethanol/bananahonk /obj/item/food/grown/banana/make_edible() @@ -49,7 +49,6 @@ var/obj/item/grown/bananapeel/peel = . if(istype(peel)) peel.grind_results = list(/datum/reagent/medicine/coagulant/banana_peel = peel.seed.potency * 0.2) - peel.juice_results = list(/datum/reagent/medicine/coagulant/banana_peel = peel.seed.potency * 0.2) /obj/item/food/grown/banana/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is aiming [src] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index f79c4590218..8643c616b47 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -15,7 +15,7 @@ icon_dead = "soybean-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = list(/obj/item/seeds/soya/koi) - reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05, /datum/reagent/consumable/cooking_oil = 0.03) //Vegetable oil! + reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05, /datum/reagent/consumable/nutriment/fat/oil = 0.03) //Vegetable oil! /obj/item/food/grown/soybeans seed = /obj/item/seeds/soya diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 0c27184f2ce..45b0db82ea3 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -25,7 +25,7 @@ icon_state = "berrypile" gender = PLURAL foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/berryjuice = 0) + juice_typepath = /datum/reagent/consumable/berryjuice tastes = list("berry" = 1) distill_reagent = /datum/reagent/consumable/ethanol/gin @@ -48,7 +48,7 @@ icon_state = "poisonberrypile" bite_consumption_mod = 3 foodtypes = FRUIT | TOXIC - juice_results = list(/datum/reagent/consumable/poisonberryjuice = 0) + juice_typepath = /datum/reagent/consumable/poisonberryjuice tastes = list("poison-berry" = 1) distill_reagent = null wine_power = 35 @@ -74,7 +74,7 @@ icon_state = "deathberrypile" bite_consumption_mod = 3 foodtypes = FRUIT | TOXIC - juice_results = list(/datum/reagent/consumable/poisonberryjuice = 0) + juice_typepath = /datum/reagent/consumable/poisonberryjuice tastes = list("death-berry" = 1) distill_reagent = null wine_power = 50 @@ -134,7 +134,7 @@ icon_state = "grapes" bite_consumption_mod = 2 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/grapejuice = 0) + juice_typepath = /datum/reagent/consumable/grapejuice tastes = list("grape" = 1) distill_reagent = /datum/reagent/consumable/ethanol/wine @@ -185,6 +185,6 @@ desc = "A branch with töchtaüse berries on it. They're a favourite on the Mothic Fleet, but not in this form." icon_state = "toechtauese_branch" foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/toechtauese_juice = 0) + juice_typepath = /datum/reagent/consumable/toechtauese_juice tastes = list("fiery itchy pain" = 1) distill_reagent = /datum/reagent/toxin/itching_powder diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 1a9db3c25d0..1a283afef08 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -97,7 +97,8 @@ /obj/item/food/grown/meatwheat/attack_self(mob/living/user) user.visible_message(span_notice("[user] crushes [src] into meat."), span_notice("You crush [src] into something that resembles meat.")) playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) - var/obj/item/food/meat/slab/meatwheat/M = new + var/reagent_purity = seed.get_reagent_purity() + var/obj/item/food/meat/slab/meatwheat/M = new(starting_reagent_purity = reagent_purity) qdel(src) user.put_in_hands(M) return 1 diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index de0643faed6..c624722f823 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -29,7 +29,7 @@ name = "lime" desc = "It's so sour, your face will twist." icon_state = "lime" - juice_results = list(/datum/reagent/consumable/limejuice = 0) + juice_typepath = /datum/reagent/consumable/limejuice // Orange /obj/item/seeds/orange @@ -56,7 +56,7 @@ desc = "It's a tangy fruit." icon_state = "orange" foodtypes = ORANGES - juice_results = list(/datum/reagent/consumable/orangejuice = 0) + juice_typepath = /datum/reagent/consumable/orangejuice distill_reagent = /datum/reagent/consumable/ethanol/triple_sec // Lemon @@ -82,7 +82,7 @@ name = "lemon" desc = "When life gives you lemons, make lemonade." icon_state = "lemon" - juice_results = list(/datum/reagent/consumable/lemonjuice = 0) + juice_typepath = /datum/reagent/consumable/lemonjuice // Combustible lemon /obj/item/seeds/firelemon //combustible lemon is too long so firelemon @@ -137,7 +137,7 @@ foodtypes = ORANGES alt_icon = "orange" bite_consumption_mod = 2 - juice_results = list(/datum/reagent/consumable/orangejuice = 0) + juice_typepath = /datum/reagent/consumable/orangejuice distill_reagent = /datum/reagent/toxin/mindbreaker tastes = list("polygons" = 1, "bluespace" = 1, "the true nature of reality" = 1) diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index e7a13ffbbb6..4e9a9810b42 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -80,7 +80,7 @@ bite_consumption_mod = 2 trash_type = /obj/item/food/grown/bungopit foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/bungojuice = 0) + juice_typepath = /datum/reagent/consumable/bungojuice tastes = list("bungo" = 2, "tropical fruitiness" = 1) distill_reagent = null diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 655123d5a74..a606cf62017 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -14,7 +14,7 @@ icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes icon_dead = "corn-dead" // Same for the dead icon mutatelist = list(/obj/item/seeds/corn/snapcorn) - reagents_add = list(/datum/reagent/consumable/cornoil = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) + reagents_add = list(/datum/reagent/consumable/nutriment/fat/oil = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) /obj/item/food/grown/corn seed = /obj/item/seeds/corn @@ -25,7 +25,7 @@ bite_consumption_mod = 2 foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/cornmeal = 0) - juice_results = list(/datum/reagent/consumable/corn_starch = 0) + juice_typepath = /datum/reagent/consumable/corn_starch tastes = list("corn" = 1) distill_reagent = /datum/reagent/consumable/ethanol/whiskey diff --git a/code/modules/hydroponics/grown/cucumber.dm b/code/modules/hydroponics/grown/cucumber.dm index 649ef8b5212..f3712c6a5c9 100644 --- a/code/modules/hydroponics/grown/cucumber.dm +++ b/code/modules/hydroponics/grown/cucumber.dm @@ -22,5 +22,5 @@ desc = "Oblong and green, with pimples, the standard of salads." icon_state = "cucumber" foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/cucumberjuice = 0) + juice_typepath = /datum/reagent/consumable/cucumberjuice tastes = list("cucumber" = 1) diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index b9c750c61c1..333c7f57c45 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -178,7 +178,7 @@ icon_grow = "sunflower-grow" icon_dead = "sunflower-dead" mutatelist = list(/obj/item/seeds/sunflower/moonflower, /obj/item/seeds/sunflower/novaflower) - reagents_add = list(/datum/reagent/consumable/cornoil = 0.08, /datum/reagent/consumable/nutriment = 0.04) + reagents_add = list(/datum/reagent/consumable/nutriment/fat/oil = 0.08, /datum/reagent/consumable/nutriment = 0.04) /obj/item/food/grown/sunflower // FLOWER POWER! seed = /obj/item/seeds/sunflower diff --git a/code/modules/hydroponics/grown/herbs.dm b/code/modules/hydroponics/grown/herbs.dm index 45d2ed1146d..b22be06ec6a 100644 --- a/code/modules/hydroponics/grown/herbs.dm +++ b/code/modules/hydroponics/grown/herbs.dm @@ -22,6 +22,6 @@ icon_state = "herbs" foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/nutriment = 0) - juice_results = list(/datum/reagent/consumable/nutriment = 0) + juice_typepath = /datum/reagent/consumable/nutriment tastes = list("nondescript herbs" = 1) distill_reagent = /datum/reagent/consumable/ethanol/fernet diff --git a/code/modules/hydroponics/grown/korta_nut.dm b/code/modules/hydroponics/grown/korta_nut.dm index 0622b9d59d4..bf6ab82d474 100644 --- a/code/modules/hydroponics/grown/korta_nut.dm +++ b/code/modules/hydroponics/grown/korta_nut.dm @@ -23,7 +23,7 @@ icon_state = "korta_nut" foodtypes = NUTS grind_results = list(/datum/reagent/consumable/korta_flour = 0) - juice_results = list(/datum/reagent/consumable/korta_milk = 0) + juice_typepath = /datum/reagent/consumable/korta_milk tastes = list("peppery heat" = 1) distill_reagent = /datum/reagent/consumable/ethanol/kortara @@ -47,6 +47,6 @@ desc = "A sweet treat lizards love to eat." icon_state = "korta_nut" grind_results = list(/datum/reagent/consumable/korta_flour = 0) - juice_results = list(/datum/reagent/consumable/korta_milk = 0, /datum/reagent/consumable/korta_nectar = 0) + juice_typepath = /datum/reagent/consumable/korta_nectar tastes = list("peppery sweet" = 1) distill_reagent = /datum/reagent/consumable/ethanol/kortara diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index e517883a2ea..83f6ac45466 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -30,7 +30,7 @@ bite_consumption_mod = 2 w_class = WEIGHT_CLASS_NORMAL foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/watermelonjuice = 0) + juice_typepath = /datum/reagent/consumable/watermelonjuice wine_power = 40 /obj/item/food/grown/watermelon/make_processable() @@ -62,7 +62,7 @@ bite_consumption_mod = 2 w_class = WEIGHT_CLASS_NORMAL foodtypes = FRUIT - juice_results = list(/datum/reagent/water/holywater = 0) + juice_typepath = /datum/reagent/water/holywater wine_power = 70 //Water to wine, baby. wine_flavor = "divinity" diff --git a/code/modules/hydroponics/grown/peas.dm b/code/modules/hydroponics/grown/peas.dm index e88b4fba1b1..c232ed247c6 100644 --- a/code/modules/hydroponics/grown/peas.dm +++ b/code/modules/hydroponics/grown/peas.dm @@ -54,7 +54,7 @@ desc = "Ridens Cicer, guaranteed to improve your mood dramatically upon consumption!" icon_state = "laughpeas" foodtypes = VEGETABLES - juice_results = list (/datum/reagent/consumable/laughsyrup = 0) + juice_typepath = /datum/reagent/consumable/laughsyrup tastes = list ("a prancing rabbit" = 1) //Vib Ribbon sends her regards.. wherever she is. wine_power = 90 wine_flavor = "a vector-graphic rabbit dancing on your tongue" diff --git a/code/modules/hydroponics/grown/pineapple.dm b/code/modules/hydroponics/grown/pineapple.dm index 060a7b172d3..3c0e462f388 100644 --- a/code/modules/hydroponics/grown/pineapple.dm +++ b/code/modules/hydroponics/grown/pineapple.dm @@ -30,7 +30,7 @@ throw_range = 5 w_class = WEIGHT_CLASS_NORMAL foodtypes = FRUIT | PINEAPPLE - juice_results = list(/datum/reagent/consumable/pineapplejuice = 0) + juice_typepath = /datum/reagent/consumable/pineapplejuice tastes = list("pineapple" = 1) wine_power = 40 diff --git a/code/modules/hydroponics/grown/plum.dm b/code/modules/hydroponics/grown/plum.dm index 997efa41222..cac12bdb1eb 100644 --- a/code/modules/hydroponics/grown/plum.dm +++ b/code/modules/hydroponics/grown/plum.dm @@ -22,7 +22,7 @@ desc = "A poet's favorite fruit. Noice." icon_state = "plum" foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/plumjuice = 0) + juice_typepath = /datum/reagent/consumable/plumjuice tastes = list("plum" = 1) distill_reagent = /datum/reagent/consumable/ethanol/plumwine diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index 4178e82e0c8..837937e41d1 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -25,7 +25,7 @@ desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" icon_state = "potato" foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/potato_juice = 0) + juice_typepath = /datum/reagent/consumable/potato_juice distill_reagent = /datum/reagent/consumable/ethanol/vodka /obj/item/food/grown/potato/make_bakeable() diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 07a25d14c94..561bd5119aa 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -24,7 +24,7 @@ icon_state = "pumpkin" bite_consumption_mod = 2 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/pumpkinjuice = 0) + juice_typepath = /datum/reagent/consumable/pumpkinjuice wine_power = 20 ///Which type of lantern this gourd produces when carved. var/carved_type = /obj/item/clothing/head/utility/hardhat/pumpkinhead @@ -57,6 +57,6 @@ icon_state = "blumpkin" bite_consumption_mod = 3 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/blumpkinjuice = 0) + juice_typepath = /datum/reagent/consumable/blumpkinjuice wine_power = 50 carved_type = /obj/item/clothing/head/utility/hardhat/pumpkinhead/blumpkin diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 8afa52be9da..df37e3bf2b7 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -22,7 +22,7 @@ icon_state = "carrot" bite_consumption_mod = 2 foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/carrotjuice = 0) + juice_typepath = /datum/reagent/consumable/carrotjuice wine_power = 30 /obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params) @@ -53,7 +53,7 @@ desc = "Closely related to carrots." icon_state = "parsnip" foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/parsnipjuice = 0) + juice_typepath = /datum/reagent/consumable/parsnipjuice wine_power = 35 diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 1adfe4ac39b..c2fa44c7662 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -24,7 +24,7 @@ splat_type = /obj/effect/decal/cleanable/food/tomato_smudge foodtypes = FRUIT grind_results = list(/datum/reagent/consumable/ketchup = 0) - juice_results = list(/datum/reagent/consumable/tomatojuice = 0) + juice_typepath = /datum/reagent/consumable/tomatojuice distill_reagent = /datum/reagent/consumable/enzyme // Blood Tomato diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 7e45fd18d75..a3804c9262f 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -213,6 +213,19 @@ "rate" = reagent.rate )) seed_data["volume_mod"] = (locate(/datum/plant_gene/trait/maxchem) in to_add.genes) ? 2 : 1 + seed_data["mutatelist"] = list() + for(var/obj/item/seeds/mutant as anything in to_add.mutatelist) + seed_data["mutatelist"] += initial(mutant.plantname) + var/obj/item/food/grown/product = new to_add.product + if(product) + var/datum/reagent/product_distill_reagent = product.distill_reagent + seed_data["distill_reagent"] = initial(product_distill_reagent.name) + var/datum/reagent/product_juice_typepath = product.juice_typepath + seed_data["juice_name"] = initial(product_juice_typepath.name) + seed_data["grind_results"] = list() + for(var/datum/reagent/reagent as anything in product.grind_results) + seed_data["grind_results"] += initial(reagent.name) + qdel(product) piles[seed_id] = seed_data return TRUE diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 7b9ce55bd2c..52be3e98f0c 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -266,6 +266,7 @@ reagent_max += reagents_add[rid] if(IS_EDIBLE(T) || istype(T, /obj/item/grown)) var/obj/item/food/grown/grown_edible = T + var/reagent_purity = get_reagent_purity() for(var/rid in reagents_add) var/reagent_overflow_mod = reagents_add[rid] if(reagent_max > 1) @@ -277,12 +278,13 @@ data = list("blood_type" = "O-") if(istype(grown_edible) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) data = grown_edible.tastes // apple tastes of apple. - T.reagents.add_reagent(rid, amount, data) + T.reagents.add_reagent(rid, amount, data, added_purity = reagent_purity) //Handles the juicing trait, swaps nutriment and vitamins for that species various juices if they exist. Mutually exclusive with distilling. - if(get_gene(/datum/plant_gene/trait/juicing) && grown_edible.juice_results) - grown_edible.on_juice() - grown_edible.reagents.add_reagent_list(grown_edible.juice_results) + if(get_gene(/datum/plant_gene/trait/juicing) && grown_edible.juice_typepath) + grown_edible.juice() + else if(get_gene(/datum/plant_gene/trait/brewing)) + grown_edible.ferment() /// The number of nutriments we have inside of our plant, for use in our heating / cooling genes var/num_nutriment = T.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) @@ -302,6 +304,14 @@ T.reagents.handle_reactions() playsound(T.loc, 'sound/effects/space_wind.ogg', 50) +/// Returns reagent purity based on seed stats +/obj/item/seeds/proc/get_reagent_purity() + var/purity_from_lifespan = lifespan / 400 //up to +25% for lifespan + var/purity_from_endurance = endurance / 400 //up to +25% for endurance + var/purity_from_instability = rand(-instability, instability) / 400 //up to +-25% at random for instability + var/result_purity = clamp(0.5 + purity_from_lifespan + purity_from_endurance + purity_from_instability, 0, 1) //50% base + stats + return result_purity + /// Setters procs /// /** diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm index b3eb18e0cd4..89f5174f15e 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm @@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) AddElement(/datum/element/animal_variety, "chicken", pick("brown", "black", "white"), modify_pixels = TRUE) AddComponent(\ /datum/component/egg_layer,\ - /obj/item/food/egg,\ + /obj/item/food/egg/organic,\ list(/obj/item/food/grown/wheat),\ feed_messages = list("She clucks contently."),\ lay_messages = EGG_LAYING_MESSAGES,\ diff --git a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm index 949a3cd0c34..8777cf5a4d1 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm @@ -11,7 +11,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_emote = list("moos","moos hauntingly") speed = 1.1 - butcher_results = list(/obj/item/food/meat/slab = 6) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 6) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/basic/farm_animals/deer.dm b/code/modules/mob/living/basic/farm_animals/deer.dm index a656426e3ba..445ad831e59 100644 --- a/code/modules/mob/living/basic/farm_animals/deer.dm +++ b/code/modules/mob/living/basic/farm_animals/deer.dm @@ -7,7 +7,7 @@ gender = FEMALE mob_biotypes = MOB_ORGANIC|MOB_BEAST speak_emote = list("grunts", "grunts lowly") - butcher_results = list(/obj/item/food/meat/slab = 3) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 3) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently nudges" diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index fd95b7ef83b..92d40e0228e 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -32,7 +32,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - butcher_results = list(/obj/item/food/meat/slab = 1) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 1) unsuitable_cold_damage = 0.5 // Cold damage is 0.5 here to account for low health on the rabbit. unsuitable_heat_damage = 0.5 // Heat damage is 0.5 here to account for low health on the rabbit. ai_controller = /datum/ai_controller/basic_controller/rabbit diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index 4102bd83fdf..691f1db14e3 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -9,7 +9,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_emote = list("baas","bleats") speed = 1.1 - butcher_results = list(/obj/item/food/meat/slab = 3) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 3) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 774599948df..998cb9545d3 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -719,7 +719,7 @@ var/datum/reagent/bits = bile if(istype(bits, /datum/reagent/consumable)) var/datum/reagent/consumable/goodbit = bile - fullness += goodbit.nutriment_factor * goodbit.volume / goodbit.metabolization_rate + fullness += goodbit.get_nutriment_factor() * goodbit.volume / goodbit.metabolization_rate continue fullness += 0.6 * bits.volume / bits.metabolization_rate //not food takes up space diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 95b7da5b9da..c2e46d697cd 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -116,7 +116,7 @@ for(var/bile in reagents.reagent_list) var/datum/reagent/consumable/bits = bile if(bits) - fullness += bits.nutriment_factor * bits.volume / bits.metabolization_rate + fullness += bits.get_nutriment_factor() * bits.volume / bits.metabolization_rate return fullness /** diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bbe9bf1b0bd..62b86e315a5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2532,7 +2532,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) mob_mood.clear_mood_event(mood_events[chosen]) /// Adds a mood event to the mob -/mob/living/proc/add_mood_event(category, type, ...) +/mob/living/proc/add_mood_event(category, type, timeout_mod, ...) if(QDELETED(mob_mood)) return mob_mood.add_mood_event(arglist(args)) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index baeb6123d25..af1b4eb1370 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -11,7 +11,7 @@ emote_see = list("shakes their head.", "stamps a foot.", "glares around.") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/food/meat/slab = 4) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 4) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index 72b464ff136..9491f5aa163 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -64,7 +64,7 @@ var/consumption_amount = min(reagents.get_reagent_amount(reagent.type), ooze_metabolism_modifier * REAGENTS_METABOLISM * seconds_per_tick) if(istype(reagent, /datum/reagent/consumable)) var/datum/reagent/consumable/consumable = reagent - nutrition_change += consumption_amount * consumable.nutriment_factor + nutrition_change += consumption_amount * consumable.get_nutriment_factor() reagents.remove_reagent(reagent.type, consumption_amount) adjust_ooze_nutrition(nutrition_change) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm index 29f628d148e..e4b07470c58 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm @@ -8,7 +8,7 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/food/meat/slab = 2) + butcher_results = list(/obj/item/food/meat/slab/grassfed = 2) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm index 54a8b48f2d2..5e3c3b0f5d3 100644 --- a/code/modules/plumbing/plumbers/grinder_chemical.dm +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -41,18 +41,10 @@ if(!isitem(AM)) return var/obj/item/I = AM - if(I.juice_results || I.grind_results) + if(I.grind_results || I.juice_typepath) use_power(active_power_usage) - if(I.juice_results) - I.on_juice() - reagents.add_reagent_list(I.juice_results) - if(I.reagents) - I.reagents.trans_to(src, I.reagents.total_volume, transfered_by = src) - qdel(I) - return - I.on_grind() - reagents.add_reagent_list(I.grind_results) - if(I.reagents) - I.reagents.trans_to(src, I.reagents.total_volume, transfered_by = src) + if(I.grind_results) + I.grind(src, src) + else if (I.juice_typepath) + I.juice(src, src) qdel(I) - diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index f9b5a2b18de..1160604fb23 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -421,6 +421,28 @@ SEND_SIGNAL(src, COMSIG_REAGENTS_DEL_REAGENT, reagent) return TRUE +/// Turn one reagent into another, preserving volume, temp, purity, ph +/datum/reagents/proc/convert_reagent(source_reagent_typepath, target_reagent_typepath, multiplier = 1, include_source_subtypes = FALSE) + var/reagent_amount + var/reagent_purity + var/reagent_ph + if(include_source_subtypes) + reagent_ph = ph + var/weighted_purity + for(var/datum/reagent/reagent as anything in reagent_list) + if(reagent.type in typecacheof(source_reagent_typepath)) + weighted_purity += reagent.volume * reagent.purity + reagent_amount += reagent.volume + remove_reagent(reagent.type, reagent.volume) + reagent_purity = weighted_purity / reagent_amount + else + var/datum/reagent/source_reagent = get_reagent(source_reagent_typepath) + reagent_amount = source_reagent.volume + reagent_purity = source_reagent.purity + reagent_ph = source_reagent.ph + remove_reagent(source_reagent_typepath, reagent_amount) + add_reagent(target_reagent_typepath, reagent_amount * multiplier, reagtemp = chem_temp, added_purity = reagent_purity, added_ph = reagent_ph) + //Converts the creation_purity to purity /datum/reagents/proc/uncache_creation_purity(id) var/datum/reagent/R = has_reagent(id) @@ -1374,12 +1396,13 @@ return FALSE /// Get the amount of this reagent -/datum/reagents/proc/get_reagent_amount(reagent) +/datum/reagents/proc/get_reagent_amount(reagent, include_subtypes = FALSE) var/list/cached_reagents = reagent_list + var/total_amount = 0 for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if(cached_reagent.type == reagent) - return round(cached_reagent.volume, CHEMICAL_QUANTISATION_LEVEL) - return 0 + if((!include_subtypes && cached_reagent.type == reagent) || (include_subtypes && ispath(cached_reagent.type, reagent))) + total_amount += round(cached_reagent.volume, CHEMICAL_QUANTISATION_LEVEL) + return total_amount /datum/reagents/proc/get_multiple_reagent_amounts(list/reagents) var/list/cached_reagents = reagent_list @@ -1397,6 +1420,30 @@ return round(cached_reagent.purity, 0.01) return 0 +/// Get the average purity of all reagents (or all subtypes of provided typepath) +/datum/reagents/proc/get_average_purity(parent_type = null) + var/total_amount + var/weighted_purity + var/list/cached_reagents = reagent_list + for(var/datum/reagent/reagent as anything in cached_reagents) + if(!isnull(parent_type) && !istype(reagent, parent_type)) + continue + total_amount += reagent.volume + weighted_purity += reagent.volume * reagent.purity + return weighted_purity / total_amount + +/// Get the average nutriment_factor of all consumable reagents +/datum/reagents/proc/get_average_nutriment_factor() + var/consumable_volume + var/weighted_nutriment_factor + var/list/cached_reagents = reagent_list + for(var/datum/reagent/reagent as anything in cached_reagents) + if(istype(reagent, /datum/reagent/consumable)) + var/datum/reagent/consumable/consumable_reagent = reagent + consumable_volume += consumable_reagent.volume + weighted_nutriment_factor += consumable_reagent.volume * consumable_reagent.nutriment_factor + return weighted_nutriment_factor / consumable_volume + /// Get a comma separated string of every reagent name in this holder. UNUSED /datum/reagents/proc/get_reagent_names() var/list/names = list() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 516951e0e04..a3ed883551f 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -111,6 +111,8 @@ /datum/reagent/medicine/morphine ) //SKYRAT EDIT ADDITION END + /// Starting purity of the created reagents + var/base_reagent_purity = 1 var/list/recording_recipe @@ -319,7 +321,7 @@ if(!cell?.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return - holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature) + holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) work_animation() else @@ -359,7 +361,7 @@ if(!cell?.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return - holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature) + holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) work_animation() else recording_recipe[key] += dispense_amount @@ -457,7 +459,7 @@ if(beaker?.reagents) R += beaker.reagents for(var/i in 1 to total) - Q.add_reagent(pick(dispensable_reagents), 10, reagtemp = dispensed_temperature) + Q.add_reagent(pick(dispensable_reagents), 10, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) R += Q chem_splash(get_turf(src), null, 3, R) if(beaker?.reagents) @@ -607,6 +609,7 @@ /datum/reagent/toxin/mindbreaker, /datum/reagent/toxin/staminatoxin ) + base_reagent_purity = 0.5 /obj/machinery/chem_dispenser/drinks/Initialize(mapload) . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 2c4cff9c376..5749ac9a62e 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -29,8 +29,8 @@ GLOBAL_LIST_INIT(chem_master_containers, list( /obj/item/reagent_containers/condiment/coldsauce, /obj/item/reagent_containers/condiment/mayonnaise, /obj/item/reagent_containers/condiment/ketchup, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/cooking_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/vegetable_oil, /obj/item/reagent_containers/condiment/peanut_butter, /obj/item/reagent_containers/condiment/cherryjelly, /obj/item/reagent_containers/condiment/honey, diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 15929e190cc..d5de6418636 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -192,7 +192,7 @@ to_chat(user, span_notice("You fill [src] to the brim.")) return TRUE - if(!I.grind_results && !I.juice_results) + if(!I.grind_results && !I.juice_typepath) if(user.combat_mode) return ..() else @@ -304,7 +304,7 @@ /obj/machinery/reagentgrinder/proc/stop_operating() operating = FALSE -/obj/machinery/reagentgrinder/proc/juice() +/obj/machinery/reagentgrinder/proc/juice(mob/user) power_change() if(!beaker || machine_stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) return @@ -313,14 +313,13 @@ if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break var/obj/item/I = i - if(I.juice_results) - juice_item(I) + if(I.juice_typepath) + juice_item(I, user) -/obj/machinery/reagentgrinder/proc/juice_item(obj/item/I) //Juicing results can be found in respective object definitions - if(I.on_juice(src) == -1) +/obj/machinery/reagentgrinder/proc/juice_item(obj/item/I, mob/user) //Juicing results can be found in respective object definitions + if(!I.juice(beaker, user)) to_chat(usr, span_danger("[src] shorts out as it tries to juice up [I], and transfers it back to storage.")) return - beaker.reagents.add_reagent_list(I.juice_results) remove_object(I) /obj/machinery/reagentgrinder/proc/grind(mob/user) @@ -337,12 +336,9 @@ grind_item(i, user) /obj/machinery/reagentgrinder/proc/grind_item(obj/item/I, mob/user) //Grind results can be found in respective object definitions - if(I.on_grind(src) == -1) //Call on_grind() to change amount as needed, and stop grinding the item if it returns -1 + if(!I.grind(beaker, user)) to_chat(usr, span_danger("[src] shorts out as it tries to grind up [I], and transfers it back to storage.")) return - beaker.reagents.add_reagent_list(I.grind_results) - if(I.reagents) - I.reagents.trans_to(beaker, I.reagents.total_volume, transfered_by = user) remove_object(I) /obj/machinery/reagentgrinder/proc/mix(mob/user) @@ -357,16 +353,13 @@ if(beaker?.reagents.total_volume) //Recipe to make Butter var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount(/datum/reagent/consumable/milk) / MILK_TO_BUTTER_COEFF, 1) + var/purity = beaker.reagents.get_reagent_purity(/datum/reagent/consumable/milk) beaker.reagents.remove_reagent(/datum/reagent/consumable/milk, MILK_TO_BUTTER_COEFF * butter_amt) for(var/i in 1 to butter_amt) - new /obj/item/food/butter(drop_location()) + new /obj/item/food/butter(drop_location(), starting_reagent_purity = purity) //Recipe to make Mayonnaise if (beaker.reagents.has_reagent(/datum/reagent/consumable/eggyolk)) - var/amount = beaker.reagents.get_reagent_amount(/datum/reagent/consumable/eggyolk) - beaker.reagents.remove_reagent(/datum/reagent/consumable/eggyolk, amount) - beaker.reagents.add_reagent(/datum/reagent/consumable/mayonnaise, amount) + beaker.reagents.convert_reagent(/datum/reagent/consumable/eggyolk, /datum/reagent/consumable/mayonnaise) //Recipe to make whipped cream if (beaker.reagents.has_reagent(/datum/reagent/consumable/cream)) - var/amount = beaker.reagents.get_reagent_amount(/datum/reagent/consumable/cream) - beaker.reagents.remove_reagent(/datum/reagent/consumable/cream, amount) - beaker.reagents.add_reagent(/datum/reagent/consumable/whipped_cream, amount) + beaker.reagents.convert_reagent(/datum/reagent/consumable/cream, /datum/reagent/consumable/whipped_cream) diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index aacef0822e1..d40ca4fd85b 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -41,7 +41,7 @@ /datum/reagent/consumable/ethanol/New(list/data) if(LAZYLEN(data)) - if(data["quality"]) + if(!isnull(data["quality"])) quality = data["quality"] name = "Natural " + name if(data["boozepwr"]) @@ -99,7 +99,7 @@ name = "Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. Still popular today." color = "#664300" // rgb: 102, 67, 0 - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 boozepwr = 25 taste_description = "mild carbonated malt" ph = 4 @@ -193,7 +193,7 @@ name = "Thirteen Loko" description = "A potent mixture of caffeine and alcohol." color = "#102000" // rgb: 16, 32, 0 - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 boozepwr = 80 quality = DRINK_GOOD overdose_threshold = 60 @@ -264,7 +264,7 @@ name = "Bilk" description = "This appears to be beer mixed with milk. Disgusting." color = "#895C4C" // rgb: 137, 92, 76 - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 boozepwr = 15 taste_description = "desperation and lactate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1063,7 +1063,7 @@ name = "Mead" description = "A Viking drink, though a cheap one." color = "#e0c058" // rgb: 224,192,88 - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 boozepwr = 30 quality = DRINK_NICE taste_description = "sweet, sweet alcohol" @@ -1195,7 +1195,7 @@ /datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" description = "Only for the experienced. You think you see sand floating in the glass." - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 65 quality = DRINK_GOOD @@ -1205,7 +1205,7 @@ /datum/reagent/consumable/ethanol/bananahonk name = "Banana Honk" description = "A drink from Clown Heaven." - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 color = "#FFFF91" // rgb: 255, 255, 140 boozepwr = 60 quality = DRINK_GOOD @@ -1222,7 +1222,7 @@ /datum/reagent/consumable/ethanol/silencer name = "Silencer" description = "A drink from Mime Heaven." - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#a8a8a8" // rgb: 168,168,168 boozepwr = 59 //Proof that clowns are better than mimes right here quality = DRINK_GOOD @@ -1257,7 +1257,7 @@ name = "Hard Cider" description = "Apple juice, for adults." color = "#CD6839" - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 boozepwr = 25 taste_description = "the season that falls between summer and winter" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1449,7 +1449,7 @@ name = "Eggnog" description = "For enjoying the most wonderful time of the year." color = "#fcfdc6" // rgb: 252, 253, 198 - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 boozepwr = 1 quality = DRINK_VERYGOOD taste_description = "custard and alcohol" @@ -1606,7 +1606,7 @@ color = "#FF0000" boozepwr = 40 taste_description = "stale bread with a staler aftertaste" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) @@ -1630,7 +1630,7 @@ boozepwr = 10 quality = DRINK_GOOD taste_description = "your arteries clogging with sugar" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) @@ -1857,7 +1857,7 @@ /datum/reagent/consumable/ethanol/blank_paper name = "Blank Paper" description = "A bubbling glass of blank paper. Just looking at it makes you feel fresh." - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 color = "#DCDCDC" // rgb: 220, 220, 220 boozepwr = 20 quality = DRINK_GOOD @@ -2313,7 +2313,7 @@ color = "#FF5B69" quality = DRINK_NICE taste_description = "regret" - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 3 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/ethanol/protein_blend/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) @@ -2511,7 +2511,7 @@ name = "Plum wine" description = "Plums turned into wine." color = "#8a0421" - nutriment_factor = 1 * REAGENTS_METABOLISM + nutriment_factor = 1 boozepwr = 20 taste_description = "a poet's love and undoing" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 4fe48c629ef..83aa18eebb5 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -165,7 +165,7 @@ /datum/reagent/consumable/potato_juice name = "Potato Juice" description = "Juice of the potato. Bleh." - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#302000" // rgb: 48, 32, 0 taste_description = "irish sadness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -173,7 +173,7 @@ /datum/reagent/consumable/pickle name = "Pickle Juice" description = "More accurately, this is the brine the pickle was floating in" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#302000" // rgb: 48, 32, 0 taste_description = "vinegar brine" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -314,7 +314,7 @@ description = "Encourages the patient to go golfing." color = "#FFB766" quality = DRINK_NICE - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 10 taste_description = "bitter tea" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -434,7 +434,7 @@ description = "A delightfully bubbly root beer, filled with so much sugar that it can actually speed up the user's trigger finger." color = "#181008" // rgb: 24, 16, 8 quality = DRINK_VERYGOOD - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 10 metabolization_rate = 2 * REAGENTS_METABOLISM taste_description = "a monstrous sugar rush" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -745,7 +745,7 @@ description = "A cherry flavored milkshake." color = "#FFB6C1" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "creamy tart cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -755,7 +755,7 @@ description = "An exotic milkshake." color = "#00F1FF" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "creamy blue cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -764,7 +764,7 @@ description = "A vanilla flavored milkshake. The basics are still good." color = "#E9D2B2" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "sweet creamy vanilla" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -774,7 +774,7 @@ description = "A caramel flavored milkshake. Your teeth hurt looking at it." color = "#E17C00" quality = DRINK_GOOD - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 10 taste_description = "sweet rich creamy caramel" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -784,7 +784,7 @@ description = "A frosty chocolate milkshake." color = "#541B00" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "sweet creamy chocolate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -794,7 +794,7 @@ description = "A strawberry milkshake." color = "#ff7b7b" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "sweet strawberries and milk" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -804,7 +804,7 @@ description = "A banana milkshake. Stuff that clowns drink at their honkday parties." color = "#f2d554" quality = DRINK_VERYGOOD - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 taste_description = "thick banana" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_MEDIUM @@ -814,7 +814,7 @@ description = "A mix of pumpkin juice and coffee." color = "#F4A460" quality = DRINK_VERYGOOD - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 3 taste_description = "creamy pumpkin" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -823,7 +823,7 @@ description = "Ice cream on top of a Dr. Gibb glass." color = "#B22222" quality = DRINK_NICE - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 3 taste_description = "creamy cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -871,7 +871,7 @@ /datum/reagent/consumable/hot_coco name = "Hot Coco" description = "Made with love! And coco beans." - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 4 color = "#403010" // rgb: 64, 48, 16 taste_description = "creamy chocolate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -888,7 +888,7 @@ /datum/reagent/consumable/italian_coco name = "Italian Hot Chocolate" description = "Made with love! You can just imagine a happy Nonna from the smell." - nutriment_factor = 8 * REAGENTS_METABOLISM + nutriment_factor = 8 color = "#57372A" quality = DRINK_VERYGOOD taste_description = "thick creamy chocolate" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 0cc3d7beea8..3d9e8c40f82 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -13,8 +13,9 @@ taste_mult = 4 inverse_chem_val = 0.1 inverse_chem = null + creation_purity = 0.5 // 50% pure by default. Below - synthetic food. Above - natural food. /// How much nutrition this reagent supplies - var/nutriment_factor = 1 * REAGENTS_METABOLISM + var/nutriment_factor = 1 /// affects mood, typically higher for mixed drinks with more complex recipes' var/quality = 0 @@ -23,7 +24,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M if(!HAS_TRAIT(H, TRAIT_NOHUNGER)) - H.adjust_nutrition(nutriment_factor * REM * seconds_per_tick) + H.adjust_nutrition(get_nutriment_factor() * REM * seconds_per_tick) if(length(reagent_removal_skip_list)) return holder.remove_reagent(type, metabolization_rate * seconds_per_tick) @@ -55,11 +56,14 @@ exposed_mob.add_mood_event("quality_drink", /datum/mood_event/race_drink) // SKYRAT ADDITION END +/datum/reagent/consumable/proc/get_nutriment_factor() + return nutriment_factor * REAGENTS_METABOLISM * (purity * 2) + /datum/reagent/consumable/nutriment name = "Nutriment" description = "All the vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 15 color = "#664330" // rgb: 102, 67, 48 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_DEAD_PROCESS @@ -134,9 +138,90 @@ name = "Protein" description = "A natural polyamide made up of amino acids. An essential constituent of mosts known forms of life." brute_heal = 0.8 //Rewards the player for eating a balanced diet. - nutriment_factor = 9 * REAGENTS_METABOLISM //45% as calorie dense as corn oil. + nutriment_factor = 9 //45% as calorie dense as oil. chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/consumable/nutriment/fat + name = "Fat" + description = "Triglycerides found in vegetable oils and fatty animal tissue." + color = "#f0eed7" + taste_description = "lard" + brute_heal = 0 + burn_heal = 1 + nutriment_factor = 18 // Twice as nutritious compared to protein and carbohydrates + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world + +/datum/reagent/consumable/nutriment/fat/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if(!holder || (holder.chem_temp <= fry_temperature)) + return + if(!isitem(exposed_obj) || HAS_TRAIT(exposed_obj, TRAIT_FOOD_FRIED)) + return + if(is_type_in_typecache(exposed_obj, GLOB.oilfry_blacklisted_items) || (exposed_obj.resistance_flags & INDESTRUCTIBLE)) + exposed_obj.visible_message(span_notice("The hot oil has no effect on [exposed_obj]!")) + return + if(exposed_obj.atom_storage) + exposed_obj.visible_message(span_notice("The hot oil splatters about as [exposed_obj] touches it. It seems too full to cook properly!")) + return + + exposed_obj.visible_message(span_warning("[exposed_obj] rapidly fries as it's splashed with hot oil! Somehow.")) + exposed_obj.AddElement(/datum/element/fried_item, volume) + exposed_obj.reagents.add_reagent(src.type, reac_volume) + +/datum/reagent/consumable/nutriment/fat/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) + . = ..() + if(!(methods & (VAPOR|TOUCH)) || isnull(holder) || (holder.chem_temp < fry_temperature)) //Directly coats the mob, and doesn't go into their bloodstream + return + + var/burn_damage = ((holder.chem_temp / fry_temperature) * 0.33) //Damage taken per unit + if(methods & TOUCH) + burn_damage *= max(1 - touch_protection, 0) + var/FryLoss = round(min(38, burn_damage * reac_volume)) + if(!HAS_TRAIT(exposed_mob, TRAIT_OIL_FRIED)) + exposed_mob.visible_message(span_warning("The boiling oil sizzles as it covers [exposed_mob]!"), \ + span_userdanger("You're covered in boiling oil!")) + if(FryLoss) + exposed_mob.emote("scream") + playsound(exposed_mob, 'sound/machines/fryer/deep_fryer_emerge.ogg', 25, TRUE) + ADD_TRAIT(exposed_mob, TRAIT_OIL_FRIED, "cooking_oil_react") + addtimer(CALLBACK(exposed_mob, TYPE_PROC_REF(/mob/living, unfry_mob)), 3) + if(FryLoss) + exposed_mob.adjustFireLoss(FryLoss) + +/datum/reagent/consumable/nutriment/fat/expose_turf(turf/open/exposed_turf, reac_volume) + . = ..() + if(!istype(exposed_turf)) + return + exposed_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume*2 SECONDS) + var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in exposed_turf) + if(hotspot) + var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.total_moles()) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react(src) + exposed_turf.assume_air(lowertemp) + qdel(hotspot) + +/datum/reagent/consumable/nutriment/fat/oil + name = "Vegetable Oil" + description = "A variety of cooking oil derived from plant fats. Used in food preparation and frying." + color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil) + taste_mult = 0.8 + taste_description = "oil" + nutriment_factor = 7 //Not very healthy on its own + metabolization_rate = 10 * REAGENTS_METABOLISM + penetrates_skin = NONE + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/vegetable_oil + +/datum/reagent/consumable/nutriment/fat/oil/olive + name = "Olive Oil" + description = "A high quality oil, suitable for dishes where the oil is a key flavour." + taste_description = "olive oil" + color = "#DBCF5C" + nutriment_factor = 10 + default_container = /obj/item/reagent_containers/condiment/olive_oil + /datum/reagent/consumable/nutriment/organ_tissue name = "Organ Tissue" description = "Natural tissues that make up the bulk of organs, providing many vitamins and minerals." @@ -146,7 +231,7 @@ /datum/reagent/consumable/nutriment/cloth_fibers name = "Cloth Fibers" description = "It's not actually a form of nutriment but it does keep Mothpeople going for a short while..." - nutriment_factor = 30 * REAGENTS_METABOLISM + nutriment_factor = 30 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED brute_heal = 0 burn_heal = 0 @@ -175,79 +260,20 @@ current_cycle++ if (HAS_TRAIT(eater, TRAIT_ROCK_EATER) && !HAS_TRAIT(eater, TRAIT_NOHUNGER) && ishuman(eater)) var/mob/living/carbon/human/golem_eater = eater - golem_eater.adjust_nutrition(nutriment_factor * REM * delta_time) + golem_eater.adjust_nutrition(get_nutriment_factor() * REM * delta_time) if(length(reagent_removal_skip_list)) return holder.remove_reagent(type, metabolization_rate * delta_time) -/datum/reagent/consumable/cooking_oil - name = "Cooking Oil" - description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying." - color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil) - taste_mult = 0.8 - taste_description = "oil" - nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own - metabolization_rate = 10 * REAGENTS_METABOLISM - penetrates_skin = NONE - var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - default_container = /obj/item/reagent_containers/condiment/cooking_oil - -/datum/reagent/consumable/cooking_oil/expose_obj(obj/exposed_obj, reac_volume) - . = ..() - if(!holder || (holder.chem_temp <= fry_temperature)) - return - if(!isitem(exposed_obj) || HAS_TRAIT(exposed_obj, TRAIT_FOOD_FRIED)) - return - if(is_type_in_typecache(exposed_obj, GLOB.oilfry_blacklisted_items) || (exposed_obj.resistance_flags & INDESTRUCTIBLE)) - exposed_obj.visible_message(span_notice("The hot oil has no effect on [exposed_obj]!")) - return - if(exposed_obj.atom_storage) - exposed_obj.visible_message(span_notice("The hot oil splatters about as [exposed_obj] touches it. It seems too full to cook properly!")) - return - - exposed_obj.visible_message(span_warning("[exposed_obj] rapidly fries as it's splashed with hot oil! Somehow.")) - exposed_obj.AddElement(/datum/element/fried_item, volume) - exposed_obj.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume) - -/datum/reagent/consumable/cooking_oil/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) - . = ..() - if(!(methods & (VAPOR|TOUCH)) || isnull(holder) || (holder.chem_temp < fry_temperature)) //Directly coats the mob, and doesn't go into their bloodstream - return - - var/oil_damage = ((holder.chem_temp / fry_temperature) * 0.33) //Damage taken per unit - if(methods & TOUCH) - oil_damage *= max(1 - touch_protection, 0) - var/FryLoss = round(min(38, oil_damage * reac_volume)) - if(!HAS_TRAIT(exposed_mob, TRAIT_OIL_FRIED)) - exposed_mob.visible_message(span_warning("The boiling oil sizzles as it covers [exposed_mob]!"), \ - span_userdanger("You're covered in boiling oil!")) - if(FryLoss) - exposed_mob.emote("scream") - playsound(exposed_mob, 'sound/machines/fryer/deep_fryer_emerge.ogg', 25, TRUE) - ADD_TRAIT(exposed_mob, TRAIT_OIL_FRIED, "cooking_oil_react") - addtimer(CALLBACK(exposed_mob, TYPE_PROC_REF(/mob/living, unfry_mob)), 3) - if(FryLoss) - exposed_mob.adjustFireLoss(FryLoss) - -/datum/reagent/consumable/cooking_oil/expose_turf(turf/open/exposed_turf, reac_volume) - . = ..() - if(!istype(exposed_turf) || isgroundlessturf(exposed_turf) || (reac_volume < 5)) - return - - exposed_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume * 1.5 SECONDS) - exposed_turf.name = "Deep-fried [initial(exposed_turf.name)]" - exposed_turf.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY) - /datum/reagent/consumable/sugar name = "Sugar" description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." reagent_state = SOLID color = "#FFFFFF" // rgb: 255, 255, 255 taste_mult = 1.5 // stop sugar drowning out other flavours - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 2 metabolization_rate = 2 * REAGENTS_METABOLISM - overdose_threshold = 200 // Hyperglycaemic shock + overdose_threshold = 100 // Hyperglycaemic shock taste_description = "sweetness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/sugar @@ -270,7 +296,7 @@ /datum/reagent/consumable/virus_food name = "Virus Food" description = "A mixture of water and milk. Virus cells can use this mixture to reproduce." - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#899613" // rgb: 137, 150, 19 taste_description = "watery milk" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -282,7 +308,7 @@ /datum/reagent/consumable/soysauce name = "Soysauce" description = "A salty sauce made from the soy plant." - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#792300" // rgb: 121, 35, 0 taste_description = "umami" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -291,7 +317,7 @@ /datum/reagent/consumable/ketchup name = "Ketchup" description = "Ketchup, catsup, whatever. It's tomato paste." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#731008" // rgb: 115, 16, 8 taste_description = "ketchup" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -459,7 +485,7 @@ name = "Coco Powder" description = "A fatty, bitter paste made from coco beans." reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#302000" // rgb: 48, 32, 0 taste_description = "bitterness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -528,28 +554,6 @@ . = TRUE ..() -/datum/reagent/consumable/cornoil - name = "Corn Oil" - description = "An oil derived from various types of corn." - nutriment_factor = 20 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - taste_description = "slime" - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - default_container = /obj/item/reagent_containers/condiment/cooking_oil - -/datum/reagent/consumable/cornoil/expose_turf(turf/open/exposed_turf, reac_volume) - . = ..() - if(!istype(exposed_turf)) - return - exposed_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume*2 SECONDS) - var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in exposed_turf) - if(hotspot) - var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.total_moles()) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react(src) - exposed_turf.assume_air(lowertemp) - qdel(hotspot) - /datum/reagent/consumable/enzyme name = "Universal Enzyme" description = "A universal enzyme used in the preparation of certain chemicals and foods." @@ -570,7 +574,7 @@ /datum/reagent/consumable/hot_ramen name = "Hot Ramen" description = "The noodles are boiled, the flavors are artificial, just like being back in school." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#302000" // rgb: 48, 32, 0 taste_description = "wet and cheap noodles" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -579,7 +583,7 @@ /datum/reagent/consumable/nutraslop name = "Nutraslop" description = "Mixture of leftover prison foods served on previous days." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#3E4A00" // rgb: 62, 74, 0 taste_description = "your imprisonment" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -591,7 +595,7 @@ /datum/reagent/consumable/hell_ramen name = "Hell Ramen" description = "The noodles are boiled, the flavors are artificial, just like being back in school." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#302000" // rgb: 48, 32, 0 taste_description = "wet and cheap noodles on fire" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -621,7 +625,7 @@ /datum/reagent/consumable/cherryjelly name = "Cherry Jelly" description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 10 color = "#801E28" // rgb: 128, 30, 40 taste_description = "cherry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -637,7 +641,7 @@ name = "Rice" description = "tiny nutritious grains" reagent_state = SOLID - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 3 color = "#FFFFFF" // rgb: 0, 0, 0 taste_description = "rice" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -647,7 +651,7 @@ name = "Vanilla Powder" description = "A fatty, bitter paste made from vanilla pods." reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#FFFACD" taste_description = "vanilla" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -655,7 +659,7 @@ /datum/reagent/consumable/eggyolk name = "Egg Yolk" description = "It's full of protein." - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 8 color = "#FFB500" taste_description = "egg" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -663,7 +667,7 @@ /datum/reagent/consumable/eggwhite name = "Egg White" description = "It's full of even more protein." - nutriment_factor = 1.5 * REAGENTS_METABOLISM + nutriment_factor = 4 color = "#fffdf7" taste_description = "bland egg" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -690,7 +694,7 @@ name = "Honey" description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties." color = "#d3a308" - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 15 metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "sweetness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -749,13 +753,13 @@ name = "Stabilized Nutriment" description = "A bioengineered protien-nutrient structure designed to decompose in high saturation. In layman's terms, it won't get you fat." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 15 color = "#664330" // rgb: 102, 67, 48 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) if(M.nutrition > NUTRITION_LEVEL_FULL - 25) - M.adjust_nutrition(-3 * REM * nutriment_factor * seconds_per_tick) + M.adjust_nutrition(-3 * REM * get_nutriment_factor() * seconds_per_tick) ..() ////Lavaland Flora Reagents//// @@ -812,7 +816,7 @@ name = "Vitrium Froth" description = "A bubbly paste that heals wounds of the skin." color = "#d3a308" - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 3 taste_description = "fruity mushroom" ph = 10.4 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -827,7 +831,7 @@ /datum/reagent/consumable/liquidelectricity name = "Liquid Electricity" description = "The blood of Ethereals, and the stuff that keeps them going. Great for them, horrid for anyone else." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#97ee63" taste_description = "pure electricity" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -874,7 +878,7 @@ /datum/reagent/consumable/secretsauce name = "Secret Sauce" description = "What could it be?" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 color = "#792300" taste_description = "indescribable" quality = FOOD_AMAZING @@ -886,7 +890,7 @@ color = "#BBD4D9" taste_description = "mint frosting" description = "These restorative peptides not only speed up wound healing, but are nutritious as well!" - nutriment_factor = 10 * REAGENTS_METABOLISM // 33% less than nutriment to reduce weight gain + nutriment_factor = 10 // 33% less than nutriment to reduce weight gain brute_heal = 3 burn_heal = 1 inverse_chem = /datum/reagent/peptides_failed//should be impossible, but it's so it appears in the chemical lookup gui @@ -896,7 +900,7 @@ /datum/reagent/consumable/caramel name = "Caramel" description = "Who would have guessed that heated sugar could be so delicious?" - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 10 color = "#D98736" taste_mult = 2 taste_description = "caramel" @@ -907,7 +911,7 @@ name = "Char" description = "Essence of the grill. Has strange properties when overdosed." reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#C8C8C8" taste_mult = 6 taste_description = "smoke" @@ -923,7 +927,7 @@ /datum/reagent/consumable/bbqsauce name = "BBQ Sauce" description = "Sweet, smoky, savory, and gets everywhere. Perfect for grilling." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 color = "#78280A" // rgb: 120 40, 10 taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground. taste_description = "smokey sweetness" @@ -935,7 +939,7 @@ description = "A great dessert for chocolate lovers." color = "#800000" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 4 taste_description = "sweet chocolate" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY @@ -952,7 +956,7 @@ description = "A great dessert for vanilla lovers." color = "#FAFAD2" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 4 taste_description = "sweet vanilla" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -967,7 +971,7 @@ name = "Laughin' Syrup" description = "The product of juicing Laughin' Peas. Fizzy, and seems to change flavour based on what it's used with!" color = "#803280" - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 taste_mult = 2 taste_description = "fizzy sweetness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1005,7 +1009,7 @@ name = "Korta Nectar" description = "A sweet, sugary syrup made from crushed sweet korta nuts." color = "#d3a308" - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 5 metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "peppery sweetness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1014,7 +1018,7 @@ name = "Whipped Cream" description = "A white fluffy cream made from whipping cream at intense speed." color = "#efeff0" - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 4 taste_description = "fluffy sweet cream" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1024,7 +1028,7 @@ taste_description = "peanuts" reagent_state = SOLID color = "#D9A066" - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 15 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/peanut_butter @@ -1042,15 +1046,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/vinegar -//A better oil, representing choices like olive oil, argan oil, avocado oil, etc. -/datum/reagent/consumable/quality_oil - name = "Quality Oil" - description = "A high quality oil, suitable for dishes where the oil is a key flavour." - taste_description = "olive oil" - color = "#DBCF5C" - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - default_container = /obj/item/reagent_containers/condiment/quality_oil - /datum/reagent/consumable/cornmeal name = "Cornmeal" description = "Ground cornmeal, for making corn related things." @@ -1064,7 +1059,7 @@ description = "Creamy natural yoghurt, with applications in both food and drinks." taste_description = "yoghurt" color = "#efeff0" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/yoghurt @@ -1087,7 +1082,7 @@ description = "Powdered milk for cheap coffee. How delightful." taste_description = "milk" color = "#efeff0" - nutriment_factor = 1.5 * REAGENTS_METABOLISM + nutriment_factor = 1.5 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED default_container = /obj/item/reagent_containers/condiment/creamer diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index e657ae7df21..54fa4391790 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -131,7 +131,7 @@ color = "#CC4633" description = "You don't even want to think about what's in here." taste_description = "gross iron" - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = 2 material = /datum/material/meat ph = 7.45 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 9248c22dbe9..1c77ff5f6c1 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -16,7 +16,7 @@ /datum/chemical_reaction/spraytan2 results = list(/datum/reagent/spraytan = 2) - required_reagents = list(/datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cornoil = 1) + required_reagents = list(/datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/nutriment/fat/oil = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER /datum/chemical_reaction/impedrezene @@ -31,7 +31,7 @@ /datum/chemical_reaction/glycerol results = list(/datum/reagent/glycerol = 1) - required_reagents = list(/datum/reagent/consumable/cornoil = 3, /datum/reagent/toxin/acid = 1) + required_reagents = list(/datum/reagent/consumable/nutriment/fat/oil = 3, /datum/reagent/toxin/acid = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_EXPLOSIVE /datum/chemical_reaction/sodiumchloride diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index b39eee137c1..6b5ddfc14e3 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -383,8 +383,8 @@ explosion(holder.my_atom, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 6, explosion_cause = src) -/datum/chemical_reaction/slime/slimecornoil - results = list(/datum/reagent/consumable/cornoil = 10) +/datum/chemical_reaction/slime/slimeoil + results = list(/datum/reagent/consumable/nutriment/fat/oil = 10) required_reagents = list(/datum/reagent/blood = 1) required_container = /obj/item/slime_extract/oil diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 18a89f76a73..a5ea964172f 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -275,18 +275,18 @@ list_reagents = list(/datum/reagent/consumable/vinegar = 50) fill_icon_thresholds = null -/obj/item/reagent_containers/condiment/cooking_oil +/obj/item/reagent_containers/condiment/vegetable_oil name = "cooking oil" desc = "For all your deep-frying needs." icon_state = "cooking_oil" - list_reagents = list(/datum/reagent/consumable/cooking_oil = 50) + list_reagents = list(/datum/reagent/consumable/nutriment/fat/oil = 50) fill_icon_thresholds = null -/obj/item/reagent_containers/condiment/quality_oil +/obj/item/reagent_containers/condiment/olive_oil name = "quality oil" desc = "For the fancy chef inside everyone." icon_state = "oliveoil" - list_reagents = list(/datum/reagent/consumable/quality_oil = 50) + list_reagents = list(/datum/reagent/consumable/nutriment/fat/oil/olive = 50) fill_icon_thresholds = null /obj/item/reagent_containers/condiment/yoghurt @@ -420,7 +420,7 @@ /datum/reagent/consumable/frostoil = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in its passage"), /datum/reagent/consumable/salt = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), /datum/reagent/consumable/blackpepper = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), - /datum/reagent/consumable/cornoil = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), + /datum/reagent/consumable/nutriment/fat/oil = list("condi_cornoil", "Vegetable Oil", "A delicious oil used in cooking."), /datum/reagent/consumable/sugar = list("condi_sugar", "Sugar", "Tasty spacey sugar!"), /datum/reagent/consumable/astrotame = list("condi_astrotame", "Astrotame", "The sweetness of a thousand sugars but none of the calories."), /datum/reagent/consumable/bbqsauce = list("condi_bbq", "BBQ sauce", "Hand wipes not included."), diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index c65bfe88090..f6b2a0fb323 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -515,36 +515,10 @@ if(do_after(user, 25, target = src)) user.adjustStaminaLoss(40) switch(picked_option) - if("Juice") //prioritize juicing - if(grinded.juice_results) - grinded.on_juice() - reagents.add_reagent_list(grinded.juice_results) - to_chat(user, span_notice("You juice [grinded] into a fine liquid.")) - QDEL_NULL(grinded) - return - else - grinded.on_grind() - reagents.add_reagent_list(grinded.grind_results) - if(grinded.reagents) //If grinded item has reagents within, transfer them to the mortar - grinded.reagents.trans_to(src, grinded.reagents.total_volume, transfered_by = user) - to_chat(user, span_notice("You try to juice [grinded] but there is no liquids in it. Instead you get nice powder.")) - QDEL_NULL(grinded) - return + if("Juice") + return juice_item(grinded, user) if("Grind") - if(grinded.grind_results) - grinded.on_grind() - reagents.add_reagent_list(grinded.grind_results) - if(grinded.reagents) //If grinded item has reagents within, transfer them to the mortar - grinded.reagents.trans_to(src, grinded.reagents.total_volume, transfered_by = user) - to_chat(user, span_notice("You break [grinded] into powder.")) - QDEL_NULL(grinded) - return - else - grinded.on_juice() - reagents.add_reagent_list(grinded.juice_results) - to_chat(user, span_notice("You try to grind [grinded] but it almost instantly turns into a fine liquid.")) - QDEL_NULL(grinded) - return + return grind_item(grinded, user) else to_chat(user, span_notice("You try to grind the mortar itself instead of [grinded]. You failed.")) return @@ -555,12 +529,28 @@ if(grinded) to_chat(user, span_warning("There is something inside already!")) return - if(I.juice_results || I.grind_results) + if(I.juice_typepath || I.grind_results) I.forceMove(src) grinded = I return to_chat(user, span_warning("You can't grind this!")) +/obj/item/reagent_containers/cup/mortar/proc/grind_item(obj/item/item, mob/living/carbon/human/user) + if(!item.grind(src, user)) + to_chat(user, span_notice("You fail to grind [item].")) + return + to_chat(user, span_notice("You grind [item] into a nice powder.")) + grinded = null + QDEL_NULL(item) + +/obj/item/reagent_containers/cup/mortar/proc/juice_item(obj/item/item, mob/living/carbon/human/user) + if(!item.juice(src, user)) + to_chat(user, span_notice("You fail to juice [item].")) + return + to_chat(user, span_notice("You juice [item] into a fine liquid.")) + grinded = null + QDEL_NULL(item) + //Coffeepots: for reference, a standard cup is 30u, to allow 20u for sugar/sweetener/milk/creamer /obj/item/reagent_containers/cup/coffeepot name = "coffeepot" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 60f79d3615b..40a41c6f033 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -397,7 +397,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food." icon_state = "vat" anchored = TRUE - reagent_id = /datum/reagent/consumable/cooking_oil + reagent_id = /datum/reagent/consumable/nutriment/fat/oil openable = TRUE /obj/structure/reagent_dispensers/servingdish diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 9d3b442773e..f07ef21a8e7 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -3,7 +3,7 @@ /////////////////////////////////// /datum/design/milk - name = "Milk" + name = "Synthetic Milk" id = "milk" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.4) @@ -11,7 +11,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/soymilk - name = "Soy Milk" + name = "Synthetic Soy Milk" id = "soymilk" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.4) @@ -19,7 +19,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/ethanol - name = "Ethanol" + name = "Synthetic Ethanol" id = "ethanol" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -27,7 +27,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/cream - name = "Cream" + name = "Synthetic Cream" id = "cream" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -35,7 +35,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/black_pepper - name = "Black Pepper" + name = "Synthetic Black Pepper" id = "black_pepper" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -43,7 +43,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/enzyme - name = "Universal Enzyme" + name = "Synthetic Enzyme" id = "enzyme" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -51,7 +51,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/flour - name = "Flour" + name = "Synthetic Flour" id = "flour_sack" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -59,7 +59,7 @@ category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/sugar - name = "Sugar" + name = "Synthetic Sugar" id = "sugar" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 0.6) @@ -70,7 +70,7 @@ name = "Monkey Cube" id = "mcube" build_type = BIOGENERATOR - materials = list(/datum/material/biomass =SMALL_MATERIAL_AMOUNT*0.5) + materials = list(/datum/material/biomass = 50) build_path = /obj/item/food/monkeycube category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index 1210e5527eb..bec3092d8ea 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -10,11 +10,10 @@ supplementary_reagents = list( /datum/reagent/growthserum = 2, /datum/reagent/consumable/liquidgibs = 2, - /datum/reagent/consumable/cornoil = 2, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/sugar = 1, - /datum/reagent/consumable/cooking_oil = 1, + /datum/reagent/consumable/nutriment/fat/oil = 2, /datum/reagent/consumable/rice = 1, /datum/reagent/consumable/eggyolk = 1) @@ -176,9 +175,8 @@ /datum/reagent/consumable/nutriment) supplementary_reagents = list( - /datum/reagent/consumable/cornoil = 4, //Carp are oily fish + /datum/reagent/consumable/nutriment/fat/oil = 4, //Carp are oily fish /datum/reagent/toxin/carpotoxin = 3, - /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/consumable/nutriment/vitamin = 2) suppressive_reagents = list( @@ -197,10 +195,9 @@ /datum/reagent/consumable/nutriment) supplementary_reagents = list( - /datum/reagent/consumable/cornoil = 4, + /datum/reagent/consumable/nutriment/fat/oil = 4, /datum/reagent/growthserum = 3, /datum/reagent/toxin/carpotoxin = 2, - /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/consumable/nutriment/vitamin = 2) suppressive_reagents = list( @@ -526,8 +523,7 @@ /datum/reagent/consumable/vanillapudding = 8, /datum/reagent/growthserum = 6, /datum/reagent/consumable/nutriment/peptides = 4, - /datum/reagent/consumable/cornoil = 3, - /datum/reagent/consumable/cooking_oil = 1, + /datum/reagent/consumable/nutriment/fat/oil = 3, /datum/reagent/consumable/space_cola = 1) suppressive_reagents = list( diff --git a/code/modules/unit_tests/hydroponics_harvest.dm b/code/modules/unit_tests/hydroponics_harvest.dm index fefd8839cd2..8ff72c40b06 100644 --- a/code/modules/unit_tests/hydroponics_harvest.dm +++ b/code/modules/unit_tests/hydroponics_harvest.dm @@ -39,7 +39,7 @@ // Apples should harvest 10 apples with 10u nutrients and 4u vitamins. test_seed(hydroponics_tray, planted_food_seed, human) - // Sunflowers should harvest 10 sunflowers with 4u nutriment and 0u vitamins. It should also have 8u corn oil. + // Sunflowers should harvest 10 sunflowers with 4u nutriment and 0u vitamins. It should also have 8u oil. test_seed(hydroponics_tray, planted_not_food_seed, human) // Redbeets should harvest 5 beets (10 / 2) with 10u nutriments (5 x 2) and 10u vitamins (5 x 2) thanks to densified chemicals. test_seed(hydroponics_tray, planted_densified_seed, human) diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 7a1f40d6fcd22073c4f8fa3226bfe407c19e4502..944337b18e552bf9b3d7b8e7c4926affffda9cff 100755 GIT binary patch literal 138468 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

(9=@^w~z*+EU5h`waWsUr{1Jj3)= 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 Rsk{IH002ovPDHLkV1kkrj;R0u literal 137800 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

-dwIYSg^o<^7A-S*L^MM)b*Ky!MVP3=!HHWE3Px z0Q=QDr+Xi?ld-_cgMn?2E+)OL1upn^%Nqb;Hh$pi&XvgGMI)<6JXkSZ=& z`DdX$CyQ6gnlBR-UVeKHRfjHTPh+E$uv*~c4d+B(pFJ5R&#H3$Urg6<2nGKi-`5ZO z-W+&vwG2xJNv<7=@gxFReJ|LR$d7=16E-}WH=mD07z~aZZdNszuEpK%bD?V(i&>$Y zC4AL0;&A7r#|7N7-FuHbz?qnzH_TBN)KZFoH*4W%bkjUi7%DlL&8wI8O2eA(BGD&q;d`_q75CZy0FATuDek! zEO;k)`H91=mCxQUM(Xrh+~}Gm=ynj@)+x`drHyU~8ux2@oD-+nRnDsD`+4#^Jey0cY1@#XLQIj%J^+>Y}YPTSY(+vrBRe;N*hI`AQ>|IW-1af_6XNht^XKV8 zJhgOQox;n;dW|DW_8Bb4_$%ay*^z|F{5m{96|# zeTg(}b3rfkUp2TK^c1vH$Mzjrq*{IrMSYNsU;#kHPRf^N)Pq%JqRcr9(Ro2}k@5WO z);vBy_39}lp!-scRFtpY(c_Q;Z;h{UsgIH(J$qBwC}LRYm-H@Dp?~}W*?xF=eYnTO zKy8=q;$QSU%0Fg=TZQxN!X@ZoBH;1s*SA3ClluoY8Mz`cu^q58Mq|O|5=O3WY2f+} z=uwhTF6x};)-NLF@#zrP7bLppscMO9k4}cqC>K{mrdCe055NELTs3m(-R=~JD<$N z(IfLCBIv$#A!B^`(+n3)%J^X7*=7H`-$Sblh?%9w^NaDEyBsL+Rh#3`yV;qllIr~9 zwBlgAhs0M`iLYZ4Ec27=a;F(KBn)q;t6BwUKA7K^6>qAHx+|9!bO(QUlsXHy=bUOY zq<1p0G;Vs>Ia97K=(ZXh9Su(x^zv10Nk8?B8Pm=vLcL6~L{}Ik1n4oJqKB%)nGe_`g7{kc#3-~SClDWJ<=^3UQplejpglG0#~@^(?3 z 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 E0ik{tT>t<8 diff --git a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm b/modular_skyrat/modules/basic_mobs/code/bananaspider.dm index 0900f7a1a74..6e3a7e26dcd 100644 --- a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm +++ b/modular_skyrat/modules/basic_mobs/code/bananaspider.dm @@ -42,7 +42,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2) foodtypes = GORE | MEAT | RAW grind_results = list(/datum/reagent/blood = 20, /datum/reagent/consumable/liquidgibs = 5) - juice_results = list(/datum/reagent/consumable/banana = 10) + juice_typepath = /datum/reagent/consumable/banana /obj/item/food/deadbanana_spider/Initialize(mapload) diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_skyrat/modules/cargo/code/packs.dm index 48cb5693967..5da7ac90af4 100644 --- a/modular_skyrat/modules/cargo/code/packs.dm +++ b/modular_skyrat/modules/cargo/code/packs.dm @@ -438,8 +438,8 @@ desc = "Chef slop boring? Have high-maintenance crewmembers that with wings? Maybe you just want to revel in the sinful delight that are Cheese Curds? The Finest of our trade union has made the pack for you, containing a mix of fine oils, vinegar, and exceptionally rare ingredients." cost = CARGO_CRATE_VALUE * 5 contains = list( - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, /obj/item/reagent_containers/condiment/vinegar, /obj/item/reagent_containers/condiment/vinegar, /obj/item/food/canned/tomatoes, @@ -459,16 +459,16 @@ desc = "Normal cooking oil not cutting it? Chef throw all the quality stuff in the frier because they thought it was funny? Well, We got you covered, Introducing a bulk pack of Ten (10) bottles of our finest oils, blended for the perfect taste in cold recipes, and a resistance for going acrid when cooking." cost = CARGO_CRATE_VALUE * 9 contains = list( - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, - /obj/item/reagent_containers/condiment/quality_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, + /obj/item/reagent_containers/condiment/olive_oil, ) crate_name = "bulk quality oil pack" crate_type = /obj/structure/closet/crate/freezer diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm b/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm index df3ef78eba4..970b9eb5710 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm +++ b/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm @@ -4,7 +4,6 @@ icon = 'modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi' foodtypes = GORE | BLOODY - /obj/item/food/hemophage/blood_rice_pearl name = "kessen shinju" desc = "A fun finger food. Little clumps of sticky rice with a bit of ground pork and green onion, all soaked and rolled in fresh blood; giving it a crimson hue. Recommended to serve hot!" @@ -15,7 +14,7 @@ ) tastes = list("rice" = 3, "blood" = 5) foodtypes = GRAIN | GORE | BLOODY - + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/hemophage/blood_rice_pearl/raw name = "uncooked blood rice" @@ -29,11 +28,11 @@ tastes = list("raw rice" = 3, "blood" = 5) color = "#810000" foodtypes = GRAIN | GORE | BLOODY | RAW + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/hemophage/blood_rice_pearl/raw/make_microwaveable() AddElement(/datum/element/microwavable, /obj/item/food/hemophage/blood_rice_pearl) - /obj/item/food/hemophage/blood_noodles name = "boiled blood noodles" desc = "A plain dish of blood-soaked noodles, it would probably be better with more ingredients." @@ -46,7 +45,7 @@ ) tastes = list("blood" = 5, "pasta" = 1) foodtypes = GRAIN | GORE | BLOODY - + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/hemophage/blood_noodles/raw name = "raw blood noodles" @@ -58,11 +57,11 @@ ) tastes = list("blood" = 5, "raw pasta" = 1) foodtypes = GRAIN | GORE | BLOODY | RAW + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/hemophage/blood_noodles/raw/make_microwaveable() AddElement(/datum/element/microwavable, /obj/item/food/hemophage/blood_noodles) - /obj/item/food/hemophage/blood_noodles/boat_noodles name = "boat noodles" desc = "A dish with normally made with a very strong combination of pork and beef; the main attraction in this meatless version being the combination of blood curds and curly noodles, seasoned and immersed in fresh blood to the point they've turned crimson. It reeks of iron." @@ -76,7 +75,7 @@ ) tastes = list("blood" = 5, "congealed blood" = 3, "pasta" = 1) foodtypes = GRAIN | GORE | BLOODY - + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/hemophage/blood_curd name = "blood curd" @@ -88,7 +87,7 @@ ) tastes = list("congealed blood" = 1) foodtypes = GORE | BLOODY | RAW - + crafting_complexity = FOOD_COMPLEXITY_0 /obj/item/food/hemophage/blood_cake name = "ti hoeh koe" @@ -101,7 +100,7 @@ ) tastes = list("blood" = 5, "crunchy rice" = 2, "peanut butter" = 2) foodtypes = GRAIN | GORE | BLOODY | SUGAR | NUTS - + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/soup/hemophage/blood_soup name = "dinuguan" @@ -115,3 +114,4 @@ ) tastes = list("blood" = 5, "congealed blood" = 2, "chili" = 3, "vinegar" = 1, "garlic" = 1) foodtypes = GORE | BLOODY | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm b/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm index 12532d1951f..9a26ebee5d2 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm +++ b/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm @@ -4,10 +4,11 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "haggis" food_reagents = list( - /datum/reagent/consumable/nutriment = 50, + /datum/reagent/consumable/nutriment = 50, /datum/reagent/consumable/nutriment/vitamin = 25 ) foodtypes = MEAT | GRAIN + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/snacks/store/bread/haggis/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/snacks/breadslice/haggis, 5, 30, screentip_verb = "Slice") @@ -18,10 +19,11 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "haggis_chunk" food_reagents = list( - /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 5 ) foodtypes = MEAT | GRAIN + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/snacks/neep_tatty_haggis @@ -30,11 +32,12 @@ icon_state = "neep_tatty_haggis" icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' food_reagents = list( - /datum/reagent/consumable/nutriment = 20, - /datum/reagent/consumable/nutriment/vitamin = 10, + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10, /datum/reagent/iron = 10 ) foodtypes = GRAIN | VEGETABLES | MEAT + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/raw_sausage/battered name = "raw battered sausage" @@ -42,11 +45,12 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "batteredsausage" food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 5, - /datum/reagent/consumable/nutriment/vitamin = 2, + /datum/reagent/consumable/nutriment/protein = 5, + /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/ethanol/beerbatter = 5 ) - + crafting_complexity = FOOD_COMPLEXITY_1 + /obj/item/food/raw_sausage/battered/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/sausage/battered, rand(60 SECONDS, 75 SECONDS), TRUE) @@ -57,11 +61,12 @@ icon_state = "grilled_batteredsausage" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, - /datum/reagent/consumable/nutriment/vitamin = 2, - /datum/reagent/consumable/nutriment = 2, - /datum/reagent/consumable/cooking_oil = 2 + /datum/reagent/consumable/nutriment/vitamin = 2, + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/nutriment/fat/oil = 2 ) foodtypes = MEAT | BREAKFAST | FRIED + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sausage/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -72,8 +77,9 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "shortbread" food_reagents = list( - /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/sugar = 6 ) tastes = list("sugary dough" = 1) foodtypes = GRAIN | JUNKFOOD | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm b/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm index 69c251509db..228916b4869 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm +++ b/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm @@ -7,6 +7,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("minty dough" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/piru_dough/make_processable() AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/food/flat_piru_dough, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten") @@ -27,6 +28,7 @@ foodtypes = VEGETABLES w_class = WEIGHT_CLASS_SMALL burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/piru_loaf/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/piru, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -39,6 +41,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 5) tastes = list("minty bread" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/flat_piru_dough name = "flattened piru dough" @@ -48,6 +51,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 6) tastes = list("minty dough" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_1 /obj/item/food/flat_piru_dough/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/piru_pasta, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -67,6 +71,7 @@ tastes = list("minty flatbread" = 1) foodtypes = VEGETABLES burns_on_grill = TRUE + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/piru_pasta name = "piru pasta" @@ -77,6 +82,7 @@ w_class = WEIGHT_CLASS_SMALL tastes = list("minty pasta" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/baked_kiri name = "baked kiri fruit" @@ -84,13 +90,14 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "baked_kiri" food_reagents = list( - /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/kiri_jelly = 6 ) burns_in_oven = TRUE w_class = WEIGHT_CLASS_SMALL tastes = list("crispy sweetness" = 1, "caramelized jelly" = 1) foodtypes = FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/baked_muli name = "baked muli pod" @@ -98,14 +105,15 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "baked_muli" food_reagents = list( - /datum/reagent/consumable/nutriment = 4, - /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/muli_juice = 4 ) burns_in_oven = TRUE w_class = WEIGHT_CLASS_SMALL tastes = list("zesty mintyness" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/spiced_jerky name = "spiced jerky" @@ -113,12 +121,13 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "spiced_jerky" food_reagents = list( - /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/protein = 6 ) w_class = WEIGHT_CLASS_SMALL tastes = list("tough, spicy jerky" = 1) foodtypes = MEAT + crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/sirisai_wrap name = "sirisai wrap" @@ -126,13 +135,14 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_wrap" food_reagents = list( - /datum/reagent/consumable/nutriment = 8, - /datum/reagent/consumable/nutriment/protein = 6, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 6 ) w_class = WEIGHT_CLASS_SMALL tastes = list("cooked cabbage" = 1, "spiced meat" = 1, "minty piru bread" = 1) foodtypes = MEAT | VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sweet_piru_noodles name = "sweet piru noodles" @@ -141,14 +151,15 @@ icon_state = "sweet_piru_noodles" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( - /datum/reagent/consumable/nutriment = 8, - /datum/reagent/consumable/kiri_jelly = 4, - /datum/reagent/consumable/muli_juice = 4, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/kiri_jelly = 4, + /datum/reagent/consumable/muli_juice = 4, /datum/reagent/consumable/nutriment/vitamin = 4 ) w_class = WEIGHT_CLASS_SMALL tastes = list("minty piru noodles" = 1, "minty muli juice" = 1, "sugary kiri jelly" = 1, "baked carrots" = 1) foodtypes = VEGETABLES | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/kiri_curry name = "kiri curry" @@ -157,14 +168,15 @@ icon_state = "kiri_curry" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( - /datum/reagent/consumable/nutriment = 8, - /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/kiri_jelly = 6, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/kiri_jelly = 6, /datum/reagent/consumable/nutriment/vitamin = 4 ) w_class = WEIGHT_CLASS_SMALL tastes = list("heavily seasoned meat" = 1, "sweetened minty piru noodles" = 1, "zesty chilis" = 1) foodtypes = VEGETABLES | FRUIT | SUGAR | MEAT + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/sirisai_flatbread name = "sirisai flatbread" @@ -172,14 +184,15 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_flatbread" food_reagents = list( - /datum/reagent/consumable/nutriment = 24, - /datum/reagent/consumable/nutriment/protein = 16, - /datum/reagent/consumable/muli_juice = 12, + /datum/reagent/consumable/nutriment = 24, + /datum/reagent/consumable/nutriment/protein = 16, + /datum/reagent/consumable/muli_juice = 12, /datum/reagent/consumable/nutriment/vitamin = 16 ) w_class = WEIGHT_CLASS_SMALL tastes = list("crispy minty flatbread" = 1, "minty muli pods" = 1, "tomato sauce" = 1, "tangy spice" = 1, "baked meat" = 1) foodtypes = VEGETABLES | MEAT + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/sirisai_flatbread/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/sirisai_flatbread_slice, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -190,14 +203,15 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "sirisai_flatbread_slice" food_reagents = list( - /datum/reagent/consumable/nutriment = 6, - /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/muli_juice = 3, + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/muli_juice = 3, /datum/reagent/consumable/nutriment/vitamin = 4 ) w_class = WEIGHT_CLASS_SMALL tastes = list("crispy minty flatbread" = 1, "minty muli pods" = 1, "tomato sauce" = 1, "tangy spice" = 1, "baked meat" = 1) foodtypes = VEGETABLES | MEAT + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/bluefeather_crisp name = "bluefeather crisp" @@ -205,12 +219,13 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "bluefeather_crisp" food_reagents = list( - /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 2 ) w_class = WEIGHT_CLASS_SMALL tastes = list("chewy crackers" = 1, "zesty spice" = 1, "pleasant mintyness" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/bluefeather_crisps_and_dip name = "bluefeather crisps and dip" @@ -218,13 +233,14 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "bluefeather_crisps_and_dip" food_reagents = list( - /datum/reagent/consumable/nutriment = 12, - /datum/reagent/consumable/muli_juice = 8, + /datum/reagent/consumable/nutriment = 12, + /datum/reagent/consumable/muli_juice = 8, /datum/reagent/consumable/nutriment/vitamin = 6 ) w_class = WEIGHT_CLASS_SMALL tastes = list("chewy crackers" = 1, "tangy dip" = 1, "pleasant mintyness" = 1) foodtypes = VEGETABLES + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/stewed_muli name = "stewed muli" @@ -233,14 +249,15 @@ icon_state = "stewed_muli" trash_type = /obj/item/reagent_containers/cup/bowl food_reagents = list( - /datum/reagent/consumable/nutriment = 10, - /datum/reagent/consumable/nutriment/protein = 8, - /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/protein = 8, + /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/consumable/muli_juice = 6 ) w_class = WEIGHT_CLASS_SMALL tastes = list("hearty spiced meat" = 1, "baked carrots" = 1, "baked cabbage" = 1, "minty broth" = 1) foodtypes = VEGETABLES | MEAT + crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/stuffed_muli_pod name = "stuffed muli pod" @@ -248,14 +265,15 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "stuffed_muli_pod" food_reagents = list( - /datum/reagent/consumable/nutriment = 8, - /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/consumable/nutriment/vitamin = 4, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/muli_juice = 4 ) w_class = WEIGHT_CLASS_SMALL tastes = list("spiced meat" = 1, "minty muli pod" = 1, "super-sweet kiri fruit" = 1, "chili" = 1) foodtypes = VEGETABLES | FRUIT | MEAT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/caramel_jelly_toast name = "caramel jelly toast" @@ -263,12 +281,13 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "caramel_jelly_toast" food_reagents = list( - /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 6 ) w_class = WEIGHT_CLASS_SMALL tastes = list("minty piru bread" = 1, "sweet caramel" = 1, "super-sweet kiri jelly" = 1) foodtypes = VEGETABLES | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/kiri_jellypuff name = "kiri jellypuff" @@ -276,10 +295,11 @@ icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi' icon_state = "kiri_jellypuff" food_reagents = list( - /datum/reagent/consumable/nutriment = 8, - /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/consumable/kiri_jelly = 4 ) w_class = WEIGHT_CLASS_SMALL tastes = list("puffed minty piru bread" = 1, "rich cream" = 1, "super-sweet kiri jelly" = 1) foodtypes = VEGETABLES | FRUIT | SUGAR + crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm b/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm index 636e0071c27..14691393f03 100644 --- a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -215,7 +215,7 @@ /datum/chemical_reaction/drink/beerbatter results = list(/datum/reagent/consumable/ethanol/beerbatter = 4) - required_reagents = list(/datum/reagent/consumable/cooking_oil = 1, /datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/flour = 1) + required_reagents = list(/datum/reagent/consumable/nutriment/fat/oil = 1, /datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/flour = 1) mix_message = "Sizzling and cracking is heard as you beat the mixture into submission." /datum/chemical_reaction/drink/shakiri_spritz diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm b/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm index 308d34ca193..7f787804fc6 100644 --- a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm +++ b/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm @@ -22,7 +22,7 @@ icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi' icon_state = "muli" foodtypes = VEGETABLES - juice_results = list(/datum/reagent/consumable/muli_juice = 0.3) + juice_typepath = /datum/reagent/consumable/muli_juice grind_results = list(/datum/reagent/consumable/muli_juice = 0.1) tastes = list("mint and savory sweetness" = 1) diff --git a/modular_skyrat/modules/modular_items/code/pastries.dm b/modular_skyrat/modules/modular_items/code/pastries.dm index d99e4d1da27..8ae5939bb09 100644 --- a/modular_skyrat/modules/modular_items/code/pastries.dm +++ b/modular_skyrat/modules/modular_items/code/pastries.dm @@ -9,6 +9,7 @@ foodtypes = GRAIN | SUGAR | FRUIT food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2) tastes = list("fruit" = 1, "raisins" = 1, "christmas spirit" = 1) + crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/mimce_pie name = "mimce pie" @@ -20,6 +21,7 @@ foodtypes = GRAIN | SUGAR | FRUIT food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2) tastes = list("nothing" = 1, "christmas spirit" = 1) + crafting_complexity = FOOD_COMPLEXITY_3 // RECIPE diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm index 23069d83941..da1aacc9d05 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm @@ -90,7 +90,7 @@ switch(picked_option) if("Juice") for(var/obj/item/target_item as anything in contents) - if(target_item.juice_results) + if(target_item.juice_typepath) juice_target_item(target_item, user) else grind_target_item(target_item, user) @@ -103,7 +103,7 @@ juice_target_item(target_item, user) return - if(!attacking_item.juice_results && !attacking_item.grind_results) + if(!attacking_item.grind_results && !attacking_item.juice_typepath) balloon_alert(user, "can't grind this") return ..() @@ -115,24 +115,16 @@ ///Juices the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/juice_target_item(obj/item/to_be_juiced, mob/living/carbon/human/user) - to_be_juiced.on_juice() - reagents.add_reagent_list(to_be_juiced.juice_results) + to_be_juiced.juice(src, user) - if(to_be_juiced.reagents) //If juiced item has reagents within, transfer them to the mortar - to_be_juiced.reagents.trans_to(src, to_be_juiced.reagents.total_volume, transfered_by = user) - - to_chat(user, span_notice("You juice [to_be_juiced] into a fine liquid.")) + to_chat(user, span_notice("You juice [to_be_juiced] into a liquid.")) QDEL_NULL(to_be_juiced) ///Grinds the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/grind_target_item(obj/item/to_be_ground, mob/living/carbon/human/user) - to_be_ground.on_grind() - reagents.add_reagent_list(to_be_ground.grind_results) + to_be_ground.grind(src, user) - if(to_be_ground.reagents) //If grinded item has reagents within, transfer them to the mortar - to_be_ground.reagents.trans_to(src, to_be_ground.reagents.total_volume, transfered_by = user) - - to_chat(user, span_notice("You break [to_be_ground] into powder.")) + to_chat(user, span_notice("You break [to_be_ground] into a fine powder.")) QDEL_NULL(to_be_ground) #undef LARGE_MORTAR_STAMINA_MINIMUM diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm index af6c178a007..ed234b942e8 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/medicine/psicodine = 0) + juice_typepath = /datum/reagent/medicine/psicodine tastes = list("shadow" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm index 63013a631dc..3ff46763f1e 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/gold = 0) + juice_typepath = /datum/reagent/gold tastes = list("gold" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm index 95dda523b59..5351435276b 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/medicine/cryoxadone = 0) + juice_typepath = /datum/reagent/medicine/cryoxadone tastes = list("cold" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm index 770259c1266..65d8625e5d8 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/nothing = 0) + juice_typepath = /datum/reagent/consumable/nothing tastes = list("entertainment" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm index a898cd99ed9..c028b7b6082 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/pax = 0) + juice_typepath = /datum/reagent/pax tastes = list("peace" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm index b055083e428..073274209dd 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/consumable/frostoil = 0) + juice_typepath = /datum/reagent/consumable/frostoil tastes = list("snow" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm index 0193e4e140b..7783cbdac1b 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm @@ -25,5 +25,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/medicine/higadrite = 0) + juice_typepath = /datum/reagent/medicine/higadrite tastes = list("liver" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm index 0c6384ed79a..e9eeadb274e 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/silver = 0) + juice_typepath = /datum/reagent/silver tastes = list("silver" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm index b3a78598dae..adf8654d6b6 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/medicine/neurine = 0) + juice_typepath = /datum/reagent/medicine/neurine tastes = list("medicine" = 1) diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm index fb3d6f72efc..1f467a66ab6 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm @@ -24,5 +24,5 @@ filling_color = "#FF4500" bite_consumption_mod = 0.5 foodtypes = FRUIT - juice_results = list(/datum/reagent/nitrous_oxide = 0) + juice_typepath = /datum/reagent/nitrous_oxide tastes = list("sleep" = 1) diff --git a/tgstation.dme b/tgstation.dme index f53f2663d45..c5ecfcf71a4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1539,6 +1539,7 @@ #include "code\datums\mood_events\dna_infuser_events.dm" #include "code\datums\mood_events\drink_events.dm" #include "code\datums\mood_events\drug_events.dm" +#include "code\datums\mood_events\food_events.dm" #include "code\datums\mood_events\generic_negative_events.dm" #include "code\datums\mood_events\generic_positive_events.dm" #include "code\datums\mood_events\morbid_events.dm" @@ -1617,6 +1618,7 @@ #include "code\datums\status_effects\agent_pinpointer.dm" #include "code\datums\status_effects\buffs.dm" #include "code\datums\status_effects\drug_effects.dm" +#include "code\datums\status_effects\food_effects.dm" #include "code\datums\status_effects\gas.dm" #include "code\datums\status_effects\grouped_effect.dm" #include "code\datums\status_effects\limited_effect.dm" @@ -1624,6 +1626,8 @@ #include "code\datums\status_effects\song_effects.dm" #include "code\datums\status_effects\stacking_effect.dm" #include "code\datums\status_effects\wound_effects.dm" +#include "code\datums\status_effects\buffs\food_haste.dm" +#include "code\datums\status_effects\buffs\food_traits.dm" #include "code\datums\status_effects\buffs\stun_absorption.dm" #include "code\datums\status_effects\debuffs\blindness.dm" #include "code\datums\status_effects\debuffs\choke.dm" diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx index d1b776dda1e..20a288a2828 100644 --- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx +++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx @@ -145,7 +145,7 @@ type Data = { categories: string[]; material_occurences: Material[]; foodtypes: string[]; - nutriments: number; + complexity: number; }; export const PersonalCrafting = (props, context) => { @@ -829,14 +829,14 @@ const RecipeContent = ({ item, craftable, busy, mode, diet }, context) => { } /> )} - {item.nutriments > 0 && ( + {!!item.complexity && ( - Nutrition: {item.nutriments} - + Complexity: {item.complexity} )} {item.foodtypes?.length > 0 && ( + {item.foodtypes.map((foodtype) => ( { ])(seeds_filtered || []); sortField !== 'name' && seeds.reverse(); return ( - +

@@ -73,88 +77,81 @@ export const SeedExtractor = (props, context) => { setSortField('potency')}> - Potency + PTN setSortField('yield')}> - Yield + YLD setSortField('instability')}> - Instability + INS setSortField('endurance')}> - Endurance + END + content={`Lifespan: The age at which the plant starts decaying, in ${data.cycle_seconds} second long cycles. Improves quality of resulting food & drinks.`}> setSortField('lifespan')}> - Lifespan + LFS + content={`Maturation: The age required for the first harvest, in ${data.cycle_seconds} second long cycles.`}> setSortField('maturation')}> - Maturation + MTR + content={`Production: The period of product regrowth, in ${data.cycle_seconds} second long cycles.`}> setSortField('production')}> - Production + PRD - - setSortField('amount')}> - Amount - - {sortField !== 'name' && ( @@ -189,7 +186,7 @@ export const SeedExtractor = (props, context) => { /> - {item.name} + {`${item.amount}x ${item.name}`} {item.traits?.map((trait) => ( @@ -199,11 +196,18 @@ export const SeedExtractor = (props, context) => { trait_db={data.trait_db} /> ))} + {!!item.mutatelist.length && ( + + + + )} {item.reagents.length > 0 && ( @@ -211,6 +215,17 @@ export const SeedExtractor = (props, context) => { )} + {!!item.juice_name && ( + + + + )} + {!!item.distill_reagent && ( + + + + )} @@ -228,13 +243,10 @@ export const SeedExtractor = (props, context) => { - {item.maturation} + {item.maturation} - {item.production} - - - {item.amount} + {item.production} { return (
- Reagents + Reagents on grind: - {props.reagents?.map((reagent) => ( - + {props.reagents?.map((reagent, i) => ( + {reagent.name} {Math.max( @@ -324,6 +336,20 @@ const ReagentTooltip = (props) => { ))} + {!!props.grind_results.length && ( + <> + + + Nutriments turn into: + + + {props.grind_results?.map((reagent, i) => ( + + {reagent} + + ))} + + )}
); };