diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index d9a71f8ce3d..727b13769c2 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -103,9 +103,12 @@ #define COLOR_BROWN "#BA9F6D" #define COLOR_DARK_BROWN "#997C4F" +#define COLOR_DARKER_BROWN "#330000" #define COLOR_ORANGE_BROWN "#a9734f" #define COLOR_CARGO_BROWN "#B18644" #define COLOR_DRIED_TAN "#ad7257" +#define COLOR_LIGHT_BROWN "#996666" +#define COLOR_BROWNER_BROWN "#663300" //Color defines used by the soapstone (based on readability against grey tiles) #define COLOR_SOAPSTONE_PLASTIC "#a19d94" diff --git a/code/__DEFINES/dcs/signals/signals_food.dm b/code/__DEFINES/dcs/signals/signals_food.dm index 5158d84954a..e3bec3b88cf 100644 --- a/code/__DEFINES/dcs/signals/signals_food.dm +++ b/code/__DEFINES/dcs/signals/signals_food.dm @@ -14,10 +14,10 @@ #define COMSIG_FOOD_INGREDIENT_ADDED "edible_ingredient_added" // Deep frying foods -/// From obj/item/food/deepfryholder/Initialize +/// An item becomes fried - From /datum/element/fried_item/Attach: (fry_time) #define COMSIG_ITEM_FRIED "item_fried" - /// Return to not burn the item - #define COMSIG_FRYING_HANDLED (1<<0) +/// An item entering the deep frying (not fried yet) - From obj/machinery/deepfryer/start_fry: () +#define COMSIG_ITEM_ENTERED_FRYER "item_entered_fryer" // Microwaving foods ///called on item when microwaved (): (obj/machinery/microwave/microwave, mob/microwaver) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 69b44b98efc..ae08b5e3bbf 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -551,6 +551,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_T_RAY_VISIBLE "t-ray-visible" /// If this item's been grilled #define TRAIT_FOOD_GRILLED "food_grilled" +/// If this item's been fried +#define TRAIT_FOOD_FRIED "food_fried" /// This is a silver slime created item #define TRAIT_FOOD_SILVER "food_silver" /// If this item's been made by a chef instead of being map-spawned or admin-spawned or such diff --git a/code/__HELPERS/randoms.dm b/code/__HELPERS/randoms.dm index f93f228f455..ed542417377 100644 --- a/code/__HELPERS/randoms.dm +++ b/code/__HELPERS/randoms.dm @@ -21,7 +21,6 @@ /obj/item/food/soup, /obj/item/food/grown, /obj/item/food/grown/mushroom, - /obj/item/food/deepfryholder, /obj/item/food/clothing, /obj/item/food/meat/slab/human/mutant, /obj/item/food/grown/ash_flora, diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 54308cf3c5f..b98c308c316 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -88,7 +88,6 @@ Behavior that's still missing from this component that original food items had t if(isitem(parent)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(UseFromHand)) - RegisterSignal(parent, COMSIG_ITEM_FRIED, PROC_REF(OnFried)) RegisterSignal(parent, COMSIG_ITEM_USED_AS_INGREDIENT, PROC_REF(used_to_customize)) var/obj/item/item = parent @@ -107,7 +106,6 @@ Behavior that's still missing from this component that original food items had t COMSIG_ATOM_ENTERED, COMSIG_FOOD_INGREDIENT_ADDED, COMSIG_ITEM_ATTACK, - COMSIG_ITEM_FRIED, COMSIG_ITEM_USED_AS_INGREDIENT, COMSIG_OOZE_EAT_ATOM, COMSIG_PARENT_EXAMINE, @@ -240,14 +238,6 @@ Behavior that's still missing from this component that original food items had t return TryToEat(user, user) -/datum/component/edible/proc/OnFried(datum/source, atom/fry_object) - SIGNAL_HANDLER - var/atom/our_atom = parent - fry_object.reagents.maximum_volume = our_atom.reagents.maximum_volume - our_atom.reagents.trans_to(fry_object, our_atom.reagents.total_volume) - qdel(our_atom) - return COMSIG_FRYING_HANDLED - ///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents. /datum/component/edible/proc/OnProcessed(datum/source, atom/original_atom, list/chosen_processing_option) SIGNAL_HANDLER diff --git a/code/datums/elements/food/fried_item.dm b/code/datums/elements/food/fried_item.dm new file mode 100644 index 00000000000..0db91b89378 --- /dev/null +++ b/code/datums/elements/food/fried_item.dm @@ -0,0 +1,59 @@ +/// Items fried through the deep fryer. +/datum/element/fried_item + /// List of colors to apply the element target. + /// Each index corresponds to a different level. + var/static/list/fried_colors = list( + COLOR_LIGHT_BROWN, + COLOR_BROWNER_BROWN, + COLOR_DARKER_BROWN, + COLOR_BLACK, + ) + +/datum/element/fried_item/Attach(datum/target, fry_time) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + var/atom/this_food = target + + switch(fry_time) + if(0 to 15) + this_food.add_atom_colour(fried_colors[1], FIXED_COLOUR_PRIORITY) + this_food.name = "lightly-fried [this_food.name]" + this_food.desc += " It's been lightly fried in a deep fryer." + + if(15 to 50) + this_food.add_atom_colour(fried_colors[2], FIXED_COLOUR_PRIORITY) + this_food.name = "fried [this_food.name]" + this_food.desc += " It's been fried, increasing its tastiness value by [rand(1, 75)]%." + + if(50 to 85) + this_food.add_atom_colour(fried_colors[3], FIXED_COLOUR_PRIORITY) + this_food.name = "deep-fried [this_food.name]" + this_food.desc += " Deep-fried to perfection." + + if(85 to INFINITY) + this_food.add_atom_colour(fried_colors[4], FIXED_COLOUR_PRIORITY) + this_food.name = "\proper the physical manifestation of the very concept of fried foods" + this_food.desc = "A heavily-fried... something. Who can tell anymore?" + + ADD_TRAIT(this_food, TRAIT_FOOD_FRIED, ELEMENT_TRAIT(type)) + SEND_SIGNAL(this_food, COMSIG_ITEM_FRIED, fry_time) + // Already edible items will inherent these parameters + // Otherwise, we will become edible. + this_food.AddComponent( \ + /datum/component/edible, \ + bite_consumption = 2, \ + food_flags = FOOD_FINGER_FOOD, \ + junkiness = 10, \ + foodtypes = FRIED, \ + ) + +/datum/element/fried_item/Detach(atom/source, ...) + for(var/color in fried_colors) + source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color) + source.name = initial(source.name) + source.desc = initial(source.desc) + REMOVE_TRAIT(source, TRAIT_FOOD_FRIED, ELEMENT_TRAIT(type)) + qdel(source.GetComponent(/datum/component/edible)) // Don't care if it was initially edible + return ..() diff --git a/code/datums/elements/food/grilled_item.dm b/code/datums/elements/food/grilled_item.dm index b1386bcb5b4..f657b969f06 100644 --- a/code/datums/elements/food/grilled_item.dm +++ b/code/datums/elements/food/grilled_item.dm @@ -26,6 +26,13 @@ this_food.desc = "A [this_food.name]. Reminds you of your wife, wait, no, it's prettier!" if(grill_time > 20) - ADD_TRAIT(this_food, TRAIT_FOOD_GRILLED, "boomers") + ADD_TRAIT(this_food, TRAIT_FOOD_GRILLED, ELEMENT_TRAIT(type)) if(grill_time > 30) this_food.AddComponent(/datum/component/edible, foodtypes = FRIED) + +/datum/element/grilled_item/Detach(atom/source, ...) + source.name = initial(source.name) + source.desc = initial(source.desc) + REMOVE_TRAIT(source, TRAIT_FOOD_GRILLED, ELEMENT_TRAIT(type)) + qdel(source.GetComponent(/datum/component/edible)) // Don't care if it was initially edible + return ..() diff --git a/code/game/objects/items/food/deepfried.dm b/code/game/objects/items/food/deepfried.dm deleted file mode 100644 index 491a77ac94a..00000000000 --- a/code/game/objects/items/food/deepfried.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/item/food/deepfryholder - name = "Deep Fried Foods Holder Obj" - desc = "If you can see this description the code for the deep fryer fucked up." - icon = 'icons/obj/food/food.dmi' - icon_state = "" - bite_consumption = 2 - -/obj/item/food/deepfryholder/MakeEdible() - . = ..() - AddComponent(/datum/component/edible, on_consume = CALLBACK(src, PROC_REF(On_Consume))) - -/obj/item/food/deepfryholder/Initialize(mapload, obj/item/fried) - if(!fried) - stack_trace("A deepfried object was created with no fried target") - return INITIALIZE_HINT_QDEL - . = ..() - name = fried.name //We'll determine the other stuff when it's actually removed - appearance = fried.appearance - layer = initial(layer) - SET_PLANE_IMPLICIT(src, initial(plane)) - lefthand_file = fried.lefthand_file - righthand_file = fried.righthand_file - inhand_icon_state = fried.inhand_icon_state - desc = fried.desc - w_class = fried.w_class - slowdown = fried.slowdown - equip_delay_self = fried.equip_delay_self - equip_delay_other = fried.equip_delay_other - strip_delay = fried.strip_delay - species_exception = fried.species_exception - item_flags = fried.item_flags - obj_flags = fried.obj_flags - inhand_x_dimension = fried.inhand_x_dimension - inhand_y_dimension = fried.inhand_y_dimension - - if(!(SEND_SIGNAL(fried, COMSIG_ITEM_FRIED, src) & COMSIG_FRYING_HANDLED)) //If frying is handled by signal don't do the defaault behavior. - fried.forceMove(src) - - -/obj/item/food/deepfryholder/Destroy() - if(contents) - QDEL_LIST(contents) - return ..() - -/obj/item/food/deepfryholder/proc/On_Consume(eater, feeder) - if(contents) - QDEL_LIST(contents) - - -/obj/item/food/deepfryholder/proc/fry(cook_time = 30) - switch(cook_time) - if(0 to 15) - add_atom_colour(rgb(166, 103, 54), FIXED_COLOUR_PRIORITY) - name = "lightly-fried [name]" - desc = "[desc] It's been lightly fried in a deep fryer." - if(16 to 49) - add_atom_colour(rgb(103, 63, 24), FIXED_COLOUR_PRIORITY) - name = "fried [name]" - desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%." - if(50 to 59) - add_atom_colour(rgb(63, 23, 4), FIXED_COLOUR_PRIORITY) - name = "deep-fried [name]" - desc = "[desc] Deep-fried to perfection." - if(60 to INFINITY) - add_atom_colour(rgb(33, 19, 9), FIXED_COLOUR_PRIORITY) - name = "\proper the physical manifestation of the very concept of fried foods" - desc = "A heavily-fried... something. Who can tell anymore?" - foodtypes |= FRIED diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index cf113d62de7..fbf3be54ad3 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -1,12 +1,13 @@ - -#define DEEPFRYER_COOKTIME 60 +/// The deep fryer pings after this long, letting people know it's "perfect" +#define DEEPFRYER_COOKTIME 50 +/// The deep fryer pings after this long, reminding people that there's a very burnt object inside #define DEEPFRYER_BURNTIME 120 +/// Global typecache of things which should never be fried. GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/item/reagent_containers/cup, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/condiment, - /obj/item/storage, /obj/item/delivery, /obj/item/his_grace, /obj/item/transfer_valve, @@ -22,13 +23,23 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05 layer = BELOW_OBJ_LAYER circuit = /obj/item/circuitboard/machine/deep_fryer - var/obj/item/food/deepfryholder/frying //What's being fried RIGHT NOW? + + /// What's being fried RIGHT NOW? + var/obj/item/frying + /// How long the current object has been cooking for var/cook_time = 0 - var/oil_use = 0.025 //How much cooking oil is used per second - var/fry_speed = 1 //How quickly we fry food - var/frying_fried //If the object has been fried; used for messages - var/frying_burnt //If the object has been burnt + /// How much cooking oil is used per process + var/oil_use = 0.025 + /// How quickly we fry food - modifier applied per process tick + var/fry_speed = 1 + /// Has our currently frying object been fried? + var/frying_fried = FALSE + /// Has our currently frying object been burnt? + var/frying_burnt = FALSE + + /// Our sound loop for the frying sounde effect. var/datum/looping_sound/deep_fryer/fry_loop + /// Static typecache of things we can't fry. var/static/list/deepfry_blacklisted_items = typecacheof(list( /obj/item/screwdriver, /obj/item/crowbar, @@ -46,13 +57,19 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( /obj/machinery/deepfryer/Destroy() QDEL_NULL(fry_loop) + QDEL_NULL(frying) + return ..() + +/obj/machinery/deepfryer/deconstruct(disassembled) + // This handles nulling out frying via exited + frying.forceMove(drop_location()) return ..() /obj/machinery/deepfryer/RefreshParts() . = ..() - var/oil_efficiency - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - oil_efficiency += M.rating + var/oil_efficiency = 0 + for(var/obj/item/stock_parts/micro_laser/laser in component_parts) + oil_efficiency += laser.rating oil_use = initial(oil_use) - (oil_efficiency * 0.00475) fry_speed = oil_efficiency @@ -69,6 +86,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( return TOOL_ACT_TOOLTYPE_SUCCESS /obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, params) + // Dissolving pills into the frier if(istype(weapon, /obj/item/reagent_containers/pill)) if(!reagents.total_volume) to_chat(user, span_warning("There's nothing to dissolve [weapon] in!")) @@ -77,63 +95,116 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( weapon.reagents.trans_to(src, weapon.reagents.total_volume, transfered_by = user) 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!")) return + // Don't deep fry indestructible things, for sanity reasons if(weapon.resistance_flags & INDESTRUCTIBLE) to_chat(user, span_warning("You don't feel it would be wise to fry [weapon]...")) return - if(istype(weapon, /obj/item/food/deepfryholder)) + // No fractal frying + if(HAS_TRAIT(weapon, TRAIT_FOOD_FRIED)) to_chat(user, span_userdanger("Your cooking skills are not up to the legendary Doublefry technique.")) return + // Handle opening up the fryer with tools if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off", weapon)) //where's the open maint panel icon?! return else + // So we skip the attack animation if(weapon.is_drainable()) - return // so we skip the attack animation - else if(is_type_in_typecache(weapon, deepfry_blacklisted_items) || is_type_in_typecache(weapon, GLOB.oilfry_blacklisted_items) || weapon.atom_storage || HAS_TRAIT(weapon, TRAIT_NODROP) || (weapon.item_flags & (ABSTRACT | DROPDEL))) + return + // Check for stuff we certainly shouldn't fry + else if(is_type_in_typecache(weapon, deepfry_blacklisted_items) \ + || is_type_in_typecache(weapon, GLOB.oilfry_blacklisted_items) \ + || weapon.atom_storage \ + || HAS_TRAIT(weapon, TRAIT_NODROP) \ + || (weapon.item_flags & (ABSTRACT|DROPDEL|HAND_ITEM))) return ..() + // Do the frying. else if(!frying && user.transferItemToLoc(weapon, src)) - fry(weapon, user) + start_fry(weapon, user) + return + + return ..() /obj/machinery/deepfryer/process(delta_time) ..() - var/datum/reagent/consumable/cooking_oil/C = reagents.has_reagent(/datum/reagent/consumable/cooking_oil) - if(!C) + var/datum/reagent/consumable/cooking_oil/frying_oil = reagents.has_reagent(/datum/reagent/consumable/cooking_oil) + if(!frying_oil) + return + reagents.chem_temp = frying_oil.fry_temperature + if(!frying) return - reagents.chem_temp = C.fry_temperature - if(frying) - reagents.trans_to(frying, oil_use * delta_time, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic - cook_time += fry_speed * delta_time - if(cook_time >= DEEPFRYER_COOKTIME && !frying_fried) - frying_fried = TRUE //frying... frying... fried - playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) - audible_message(span_notice("[src] dings!")) - else if (cook_time >= DEEPFRYER_BURNTIME && !frying_burnt) - frying_burnt = TRUE - visible_message(span_warning("[src] emits an acrid smell!")) - use_power(active_power_usage) + reagents.trans_to(frying, oil_use * delta_time, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic + cook_time += fry_speed * delta_time + if(cook_time >= DEEPFRYER_COOKTIME && !frying_fried) + frying_fried = TRUE //frying... frying... fried + playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) + audible_message(span_notice("[src] dings!")) + else if (cook_time >= DEEPFRYER_BURNTIME && !frying_burnt) + frying_burnt = TRUE + visible_message(span_warning("[src] emits an acrid smell!")) + use_power(active_power_usage) + +/obj/machinery/deepfryer/Exited(atom/movable/gone, direction) + . = ..() + if(gone == frying) + reset_frying() + +/obj/machinery/deepfryer/handle_atom_del(atom/deleting_atom) + . = ..() + if(deleting_atom == frying) + reset_frying() + +/obj/machinery/deepfryer/proc/reset_frying() + if(!QDELETED(frying)) + frying.AddElement(/datum/element/fried_item, cook_time) + + frying = null + frying_fried = FALSE + frying_burnt = FALSE + fry_loop.stop() + cook_time = 0 + icon_state = "fryer_off" + +/obj/machinery/deepfryer/proc/start_fry(obj/item/frying_item, mob/user) + to_chat(user, span_notice("You put [frying_item] into [src].")) + if(istype(frying_item, /obj/item/freeze_cube)) + log_bomber(user, "put a freeze cube in a", src) + visible_message(span_userdanger("[src] starts glowing... Oh no...")) + playsound(src, 'sound/effects/pray_chaplain.ogg', 100) + add_filter("entropic_ray", 10, list("type" = "rays", "size" = 35, "color" = COLOR_VIVID_YELLOW)) + addtimer(CALLBACK(src, PROC_REF(blow_up)), 5 SECONDS) + + frying = frying_item + // Give them reagents to put frying oil in + if(isnull(frying.reagents)) + frying.create_reagents(50, INJECTABLE) + ADD_TRAIT(frying, TRAIT_FOOD_CHEF_MADE, REF(user)) + SEND_SIGNAL(frying, COMSIG_ITEM_ENTERED_FRYER) + + icon_state = "fryer_on" + fry_loop.start() + +/obj/machinery/deepfryer/proc/blow_up() + visible_message(span_userdanger("[src] blows up from the entropic reaction!")) + explosion(src, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 5, flame_range = 7) + deconstruct(FALSE) /obj/machinery/deepfryer/attack_ai(mob/user) return /obj/machinery/deepfryer/attack_hand(mob/living/user, list/modifiers) if(frying) - if(frying.loc == src) - to_chat(user, span_notice("You eject [frying] from [src].")) - frying.fry(cook_time) - icon_state = "fryer_off" - frying.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(frying) - frying = null - cook_time = 0 - frying_fried = FALSE - frying_burnt = FALSE - fry_loop.stop() - return + to_chat(user, span_notice("You eject [frying] from [src].")) + frying.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(frying) + return + else if(user.pulling && iscarbon(user.pulling) && reagents.total_volume) if(user.grab_state < GRAB_AGGRESSIVE) to_chat(user, span_warning("You need a better grip to do that!")) @@ -151,6 +222,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( dunking_target.gib() log_combat(user, dunking_target, "blew up", null, "by dunking them into [src]") return + else if(target_temp < T0C) cold_multiplier += round(target_temp * 1.5 / T0C, 0.01) dunking_target.apply_damage(min(30 * bio_multiplier * cold_multiplier, reagents.total_volume), BURN, BODY_ZONE_HEAD) @@ -160,23 +232,5 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( user.changeNext_move(CLICK_CD_MELEE) return ..() -/obj/machinery/deepfryer/proc/fry(obj/item/frying_item, mob/user) - to_chat(user, span_notice("You put [frying_item] into [src].")) - if(istype(frying_item, /obj/item/freeze_cube)) - log_bomber(user, "put a freeze cube in a", src) - visible_message(span_userdanger("[src] starts glowing... Oh no...")) - playsound(src, 'sound/effects/pray_chaplain.ogg', 100) - add_filter("entropic_ray", 10, list("type" = "rays", "size" = 35, "color" = COLOR_VIVID_YELLOW)) - addtimer(CALLBACK(src, PROC_REF(blow_up)), 5 SECONDS) - frying = new /obj/item/food/deepfryholder(src, frying_item) - ADD_TRAIT(frying, TRAIT_FOOD_CHEF_MADE, REF(user)) - icon_state = "fryer_on" - fry_loop.start() - -/obj/machinery/deepfryer/proc/blow_up() - visible_message(span_userdanger("[src] blows up from the entropic reaction!")) - explosion(src, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 5, flame_range = 7) - qdel(src) - #undef DEEPFRYER_COOKTIME #undef DEEPFRYER_BURNTIME diff --git a/code/modules/food_and_drinks/machinery/grill.dm b/code/modules/food_and_drinks/machinery/grill.dm index 6d74e6b7751..6c5531ba77e 100644 --- a/code/modules/food_and_drinks/machinery/grill.dm +++ b/code/modules/food_and_drinks/machinery/grill.dm @@ -22,6 +22,7 @@ grill_loop = new(src, FALSE) /obj/machinery/grill/Destroy() + grilled_item = null QDEL_NULL(grill_loop) return ..() @@ -100,14 +101,10 @@ grilled_item = null return ..() -/obj/machinery/grill/Destroy() - grilled_item = null - . = ..() - /obj/machinery/grill/handle_atom_del(atom/A) if(A == grilled_item) grilled_item = null - . = ..() + return ..() /obj/machinery/grill/wrench_act(mob/living/user, obj/item/I) . = ..() @@ -135,7 +132,8 @@ /obj/machinery/grill/proc/finish_grill() if(grilled_item) - grilled_item.AddElement(/datum/element/grilled_item, grill_time) + if(grill_time >= 20) + grilled_item.AddElement(/datum/element/grilled_item, grill_time) UnregisterSignal(grilled_item, COMSIG_ITEM_GRILLED) grill_time = 0 grill_loop.stop() diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index ed544c9ea3d..33f3df5ab1b 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -174,18 +174,18 @@ . = ..() if(!holder || (holder.chem_temp <= fry_temperature)) return - if(!isitem(exposed_obj) || istype(exposed_obj, /obj/item/food/deepfryholder)) + 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.loc.visible_message(span_notice("The hot oil has no effect on [exposed_obj]!")) + exposed_obj.visible_message(span_notice("The hot oil has no effect on [exposed_obj]!")) return if(exposed_obj.atom_storage) - exposed_obj.loc.visible_message(span_notice("The hot oil splatters about as [exposed_obj] touches it. It seems too full to cook properly!")) + 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.loc.visible_message(span_warning("[exposed_obj] rapidly fries as it's splashed with hot oil! Somehow.")) - var/obj/item/food/deepfryholder/fry_target = new(exposed_obj.drop_location(), exposed_obj) - fry_target.fry(volume) - fry_target.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume) + + 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) . = ..() diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 9f6eb9e0969..befad835f8f 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -149,9 +149,9 @@ var/obj/item/food_item = new chosen(T) ADD_TRAIT(food_item, TRAIT_FOOD_SILVER, INNATE_TRAIT) if(prob(5))//Fry it! - var/obj/item/food/deepfryholder/fried - fried = new(T, food_item) - fried.fry() // actually set the name and colour it + AddElement(/datum/element/fried_item, rand(15, 60)) + if(prob(5))//Grill it! + AddElement(/datum/element/grilled_item, rand(30, 100)) if(prob(50)) for(var/j in 1 to rand(1, 3)) step(food_item, pick(NORTH,SOUTH,EAST,WEST)) diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 85aad8ab12f..994fcf70177 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -49,8 +49,6 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) //Same to above. Needs a client / mob / hallucination to observe it to exist. ignore += typesof(/obj/projectile/hallucination) ignore += typesof(/obj/item/hallucinated) - //These want fried food to take on the shape of, we can't pass that in - ignore += typesof(/obj/item/food/deepfryholder) //Can't pass in a thing to glow ignore += typesof(/obj/effect/abstract/eye_lighting) //We don't have a pod diff --git a/code/modules/unit_tests/food_edibility_check.dm b/code/modules/unit_tests/food_edibility_check.dm index 608896cc01f..a09787c12cc 100644 --- a/code/modules/unit_tests/food_edibility_check.dm +++ b/code/modules/unit_tests/food_edibility_check.dm @@ -5,7 +5,6 @@ var/list/not_food = list( /obj/item/food/grown, /obj/item/food/grown/mushroom, - /obj/item/food/deepfryholder, /obj/item/food/clothing, /obj/item/food/meat/slab/human/mutant, /obj/item/food/grown/shell) diff --git a/tgstation.dme b/tgstation.dme index 23d1958eece..886a69da408 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1188,6 +1188,7 @@ #include "code\datums\elements\decals\blood.dm" #include "code\datums\elements\food\dunkable.dm" #include "code\datums\elements\food\food_trash.dm" +#include "code\datums\elements\food\fried_item.dm" #include "code\datums\elements\food\grilled_item.dm" #include "code\datums\elements\food\microwavable.dm" #include "code\datums\elements\food\processable.dm" @@ -1816,7 +1817,6 @@ #include "code\game\objects\items\food\burgers.dm" #include "code\game\objects\items\food\cake.dm" #include "code\game\objects\items\food\cheese.dm" -#include "code\game\objects\items\food\deepfried.dm" #include "code\game\objects\items\food\donkpocket.dm" #include "code\game\objects\items\food\donuts.dm" #include "code\game\objects\items\food\dough.dm"