From e2340ee513e677139ff354aa265488e404cd30d1 Mon Sep 17 00:00:00 2001 From: Kyani <65205627+EmeraldCandy@users.noreply.github.com> Date: Fri, 28 Aug 2026 23:58:56 +0000 Subject: [PATCH] Deep fry ANYTHING again (#32465) * re-adds frying ANYTHING * Apply suggestions from code review Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/cooking/machines/deep_fryer.dm Co-authored-by: Alan Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> --------- Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> Co-authored-by: Alan Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/modules/cooking/cooking_container.dm | 15 ++++++++++++--- .../cooking/machines/cooking_machine.dm | 1 + .../cooking/machines/cooking_surface.dm | 4 +++- code/modules/cooking/machines/deep_fryer.dm | 11 +++++++++++ code/modules/cooking/machines/grill.dm | 1 + .../cooking/machines/ice_cream_mixer.dm | 1 + code/modules/cooking/machines/oven.dm | 1 + code/modules/cooking/machines/stovetop.dm | 2 ++ code/modules/cooking/recipe_tracker.dm | 2 ++ .../modules/cooking/recipes/midway_recipes.dm | 19 +++++++++++-------- 10 files changed, 45 insertions(+), 12 deletions(-) diff --git a/code/modules/cooking/cooking_container.dm b/code/modules/cooking/cooking_container.dm index c748edc79cd..55218744937 100644 --- a/code/modules/cooking/cooking_container.dm +++ b/code/modules/cooking/cooking_container.dm @@ -41,6 +41,8 @@ /// Whether the container is in "mini" mode, that is, placed on a cooking machine and rendered /// with its smaller icons var/mini = FALSE + /// References the current surface the container is inside. + var/datum/cooking_surface/surface /obj/item/reagent_containers/cooking/Initialize(mapload) . = ..() @@ -87,8 +89,14 @@ /obj/item/reagent_containers/cooking/item_interaction(mob/living/user, obj/item/used, list/modifiers) if(istype(used, /obj/item/autochef_remote)) return - - process_item(user, used) + if(istype(used, /obj/item/disk/nuclear)) + used.visible_message(SPAN_DANGER("[used] disappears as soon as it touches the scalding oil!")) + qdel(used) + return ITEM_INTERACT_COMPLETE + if(surface) + process_item(user, used, surface.frier_bypass) + else + process_item(user, used, FALSE) return ITEM_INTERACT_COMPLETE @@ -98,7 +106,7 @@ /// machine, such as an oven or stove. So in some cases `used` will be something /// like a food item, and in other cases `used` will be an /// [/obj/machinery/cooking]. -/obj/item/reagent_containers/cooking/proc/process_item(mob/user, obj/used) +/obj/item/reagent_containers/cooking/proc/process_item(mob/user, obj/used, fryer_bypass = FALSE) if(!istype(used)) return PCWJ_NO_STEPS @@ -119,6 +127,7 @@ to_chat(user, SPAN_NOTICE("\The [src] is full. Empty its contents first.")) return PCWJ_CONTAINER_FULL + tracker.frying_exception = fryer_bypass var/process_reaction = tracker.process_item_wrap(user, used) react_to_process(process_reaction, user, used) return process_reaction diff --git a/code/modules/cooking/machines/cooking_machine.dm b/code/modules/cooking/machines/cooking_machine.dm index c91d814e027..1574fa207a9 100644 --- a/code/modules/cooking/machines/cooking_machine.dm +++ b/code/modules/cooking/machines/cooking_machine.dm @@ -145,6 +145,7 @@ RESTRICT_TYPE(/obj/machinery/cooking) used.forceMove(src) surface.container = used + surface.container.surface = surface surface.prob_quality_decrease = 0 surface.RegisterSignal(used, COMSIG_PARENT_EXAMINE, TYPE_PROC_REF(/datum/cooking_surface, container_examine), override = TRUE) if(surface.on) diff --git a/code/modules/cooking/machines/cooking_surface.dm b/code/modules/cooking/machines/cooking_surface.dm index a1783419b2f..bb681de1fb2 100644 --- a/code/modules/cooking/machines/cooking_surface.dm +++ b/code/modules/cooking/machines/cooking_surface.dm @@ -16,6 +16,8 @@ RESTRICT_TYPE(/datum/cooking_surface) var/prob_quality_decrease = 0 var/allow_temp_change = TRUE var/allow_toggling = TRUE + /// Tracks whether one may deep fry *anything*. + var/frier_bypass = FALSE VAR_PRIVATE/burn_callback VAR_PRIVATE/fire_callback VAR_PRIVATE/alarm_callback @@ -43,7 +45,7 @@ RESTRICT_TYPE(/datum/cooking_surface) #endif container.set_cooker_data(src, stop_watch(cooktime) SECONDS) - var/process_result = container.process_item(user, parent) + var/process_result = container.process_item(user, parent, frier_bypass) if(process_result == PCWJ_COMPLETE) SEND_SIGNAL(container, COMSIG_COOK_MACHINE_STEP_COMPLETE, src) diff --git a/code/modules/cooking/machines/deep_fryer.dm b/code/modules/cooking/machines/deep_fryer.dm index c86150dea23..51885c4c8fa 100644 --- a/code/modules/cooking/machines/deep_fryer.dm +++ b/code/modules/cooking/machines/deep_fryer.dm @@ -29,9 +29,18 @@ component_parts += new /obj/item/stock_parts/capacitor(null) RefreshParts() +/obj/machinery/cooking/deepfryer/emag_act(mob/user) + emagged = TRUE + visible_message(SPAN_WARNING("Hot oil begins to sputter and boil dangerously inside the fry pit!"), SPAN_WARNING("You hear something begin to boil and sputter angrily!")) + for(var/datum/cooking_surface/deepfryer_basin/frier in surfaces) + frier.frier_bypass = TRUE + do_sparks(5, FALSE, src) + /obj/machinery/cooking/deepfryer/examine(mob/user) . = ..() . += SPAN_NOTICE("Ctrl-Click on a basin to set its timer and toggle it on or off.") + if(emagged) + . += SPAN_WARNING("Hot oil sputters and boils angrily inside the fry basins.") #define ICON_SPLIT_X 16 #define ICON_SPLIT_Y 16 @@ -70,6 +79,7 @@ user.put_in_hands(surface.container) surface.UnregisterSignal(surface.container, COMSIG_PARENT_EXAMINE) + surface.container.surface = null surface.container = null update_appearance(UPDATE_ICON) @@ -134,4 +144,5 @@ for(var/i in 1 to length(surfaces)) var/datum/cooking_surface/surface = surfaces[i] surface.container = new /obj/item/reagent_containers/cooking/deep_basket(src) + surface.container.surface = surface update_appearance() diff --git a/code/modules/cooking/machines/grill.dm b/code/modules/cooking/machines/grill.dm index 5a5acd9eff0..7969daac6e3 100644 --- a/code/modules/cooking/machines/grill.dm +++ b/code/modules/cooking/machines/grill.dm @@ -206,6 +206,7 @@ for(var/i in 1 to length(surfaces)) var/datum/cooking_surface/surface = surfaces[i] surface.container = new /obj/item/reagent_containers/cooking/grill_grate(src) + surface.container.surface = surface stored_wood = 30 update_appearance() diff --git a/code/modules/cooking/machines/ice_cream_mixer.dm b/code/modules/cooking/machines/ice_cream_mixer.dm index 9b80ca8180b..42f1f8e0ff7 100644 --- a/code/modules/cooking/machines/ice_cream_mixer.dm +++ b/code/modules/cooking/machines/ice_cream_mixer.dm @@ -81,6 +81,7 @@ for(var/i in 1 to length(surfaces)) var/datum/cooking_surface/surface = surfaces[i] surface.container = new /obj/item/reagent_containers/cooking/icecream_bowl(src) + surface.container.surface = surface update_appearance() /obj/item/circuitboard/cooking/ice_cream_mixer diff --git a/code/modules/cooking/machines/oven.dm b/code/modules/cooking/machines/oven.dm index be2b6655c15..db108d85e73 100644 --- a/code/modules/cooking/machines/oven.dm +++ b/code/modules/cooking/machines/oven.dm @@ -104,6 +104,7 @@ for(var/i in 1 to length(surfaces)) var/datum/cooking_surface/surface = surfaces[i] surface.container = new /obj/item/reagent_containers/cooking/oven(src) + surface.container.surface = surface update_appearance() /obj/machinery/cooking/oven/loaded/upgraded/InitializeParts() diff --git a/code/modules/cooking/machines/stovetop.dm b/code/modules/cooking/machines/stovetop.dm index 08c4c6ed13f..b48e325be06 100644 --- a/code/modules/cooking/machines/stovetop.dm +++ b/code/modules/cooking/machines/stovetop.dm @@ -136,8 +136,10 @@ var/datum/cooking_surface/surface = surfaces[i] if(i % 2 == 0) surface.container = new /obj/item/reagent_containers/cooking/pot(src) + surface.container.surface = surface else surface.container = new /obj/item/reagent_containers/cooking/pan(src) + surface.container.surface = surface update_appearance() /obj/machinery/cooking/stovetop/loaded/upgraded/initialize_parts() diff --git a/code/modules/cooking/recipe_tracker.dm b/code/modules/cooking/recipe_tracker.dm index f4fffd70867..d7b7c376631 100644 --- a/code/modules/cooking/recipe_tracker.dm +++ b/code/modules/cooking/recipe_tracker.dm @@ -45,6 +45,8 @@ /// completion. var/list/recipes_applied_step_data = list() var/step_reaction_message + /// A boolean for checking for special deep frier behavior. + var/frying_exception = FALSE /datum/cooking/recipe_tracker/New(obj/item/reagent_containers/cooking/container) container_uid = container.UID() diff --git a/code/modules/cooking/recipes/midway_recipes.dm b/code/modules/cooking/recipes/midway_recipes.dm index d704bb01776..9c4e280279a 100644 --- a/code/modules/cooking/recipes/midway_recipes.dm +++ b/code/modules/cooking/recipes/midway_recipes.dm @@ -137,13 +137,14 @@ /datum/cooking/recipe_step/add_item/deep_fried_anything /datum/cooking/recipe_step/add_item/deep_fried_anything/check_conditions_met(obj/added_item, datum/cooking/recipe_tracker/tracker) - var/obj/item/food/food_item = added_item - if(!istype(food_item)) - return PCWJ_CHECK_INVALID + if(!tracker.frying_exception) + var/obj/item/food/food_item = added_item + if(!istype(food_item)) + return PCWJ_CHECK_INVALID - if("deep fried" in food_item.cooktype) - tracker.step_reaction_message = "That is already deep-fried!" - return PCWJ_CHECK_INVALID + if("deep fried" in food_item.cooktype) + tracker.step_reaction_message = "That is already deep-fried!" + return PCWJ_CHECK_INVALID // check to see if this is something that belongs to another deep fryer // recipe with only one item @@ -167,7 +168,6 @@ var/obj/item/reagent_containers/cooking/container = locateUID(tracker.container_uid) if(!istype(container)) stack_trace("couldn't find container for deep fried everything recipe") - var/obj/item/food/food_item = container.contents[1] var/obj/item/food/result = new(container) result.icon = food_item.icon @@ -176,7 +176,10 @@ result.name = "deep-fried [food_item.name]" result.desc = "It has been deep-fried." result.cooktype["deep fried"] = TRUE - food_item.reagents.trans_to(result, food_item.reagents.total_volume) + if(istype(container.contents[1], /obj/item/food)) // Just in case we're deep frying something inedible. + food_item.reagents.trans_to(result, food_item.reagents.total_volume) + else + result.reagents.add_reagent("nutriment", 5) qdel(food_item) /datum/cooking/recipe/jellybean_red