diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 0a7493fb63d..5436a1ef32d 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -38,6 +38,8 @@ var/list/items // example: =list(/obj/item/crowbar, /obj/item/welder) // place /foo/bar before /foo var/result //example: = /obj/item/reagent_containers/food/snacks/donut var/time = 100 // 1/10 part of second + /// Whether or not an upgraded kitchen machine will create more products using the same amount of ingredients + var/duplicate = TRUE var/byproduct // example: = /obj/item/kitchen/mould // byproduct to return, such as a mould or trash /datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index a5cf04a9b9a..62932faf19d 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -358,17 +358,26 @@ /obj/item/storage/box/donkpockets name = "box of donk-pockets" - desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." + desc = "A heavy, insulated box that reads, Instructions: Heat in microwave. Product will cool if not eaten within seven minutes. Store product in box to keep warm." + storage_slots = 6 + can_hold = list( + /obj/item/reagent_containers/food/snacks/donkpocket, + /obj/item/reagent_containers/food/snacks/warmdonkpocket, + /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak, + /obj/item/reagent_containers/food/snacks/syndidonkpocket) icon_state = "donk_kit" /obj/item/storage/box/donkpockets/populate_contents() for(var/I in 1 to 6) new /obj/item/reagent_containers/food/snacks/donkpocket(src) +/obj/item/storage/box/donkpockets/empty/populate_contents() + return + /obj/item/storage/box/syndidonkpockets name = "box of donk-pockets" desc = "This box feels slightly warm" - icon_state = "donk_kit" + icon_state = "donk_kit_synd" /obj/item/storage/box/syndidonkpockets/populate_contents() for(var/I in 1 to 6) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index fbb8076acd3..38d908a7b58 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -468,6 +468,14 @@ reqs = list(/obj/item/paper = 5) category = CAT_MISC +/datum/crafting_recipe/donk_box + name = "Donk Pocket Box" + result = list(/obj/item/storage/box/donkpockets/empty) + time = 10 + reqs = list(/obj/item/storage/box, + /obj/item/stack/sheet/plastic, + /obj/item/stack/sheet/metal) + /datum/crafting_recipe/flashlight_eyes name = "Flashlight Eyes" result = list(/obj/item/organ/internal/eyes/cybernetic/flashlight) diff --git a/code/modules/food_and_drinks/food/foods/misc_food.dm b/code/modules/food_and_drinks/food/foods/misc_food.dm index 0b65f5d2234..22ec624f7cf 100644 --- a/code/modules/food_and_drinks/food/foods/misc_food.dm +++ b/code/modules/food_and_drinks/food/foods/misc_food.dm @@ -114,9 +114,47 @@ filling_color = "#DEDEAB" list_reagents = list("nutriment" = 4) tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) + /// Is the donk pocket warm or has it cooled - this affects what chemicals it yields when consumed + var/warm = TRUE + /// This stores the timer for how long the donk pocket takes to cool, seven minutes, that is paused inside of a donk pocket box + var/cool_timer + /// This is used to check the world time when the donk pocket was heated or last removed from a donk pocket box, for restarting the timer + var/heated_at + /// This tracks how much time the donk pocket has already been cooling for when its timer is paused + var/subtracted_time = 0 + +/obj/item/reagent_containers/food/snacks/warmdonkpocket/Initialize(mapload) + . = ..() + donk_heat() + +/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_heat() + heated_at = world.time + cool_timer = addtimer(CALLBACK(src, PROC_REF(donk_cool)), 7 MINUTES - subtracted_time, TIMER_UNIQUE|TIMER_STOPPABLE) + +/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_cool() + name = "cold Donk-pocket" + desc = "The food of choice for the seasoned traitor. This one is cold." + warm = FALSE + +/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_enter_storage(obj/item/storage/S) + . = ..() + if(!cool_timer) + return + if(istype(S, /obj/item/storage/box/donkpockets)) + deltimer(cool_timer) + subtracted_time += (world.time - heated_at) + cool_timer = null + +/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_exit_storage(obj/item/storage/S) + . = ..() + if(warm) + donk_heat() /obj/item/reagent_containers/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) - M.reagents.add_reagent("omnizine", 15) + if(warm) + M.reagents.add_reagent("omnizine", 15) + return + M.reagents.add_reagent("weak_omnizine", 5) /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak name = "lukewarm Donk-pocket" diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 28298addbb6..8a1131b8d23 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -334,9 +334,9 @@ qdel(O) source.reagents.clear_reagents() - - var/reagents_per_serving = temp_reagents.total_volume / efficiency - for(var/i in 1 to efficiency) // Extra servings when upgraded, ingredient reagents split equally + var/portions = recipe.duplicate ? efficiency : 1 + var/reagents_per_serving = temp_reagents.total_volume / portions + for(var/i in 1 to portions) // Extra servings when upgraded, ingredient reagents split equally var/obj/cooked = new recipe.result(loc) temp_reagents.trans_to(cooked, reagents_per_serving, no_react = TRUE) // Don't react with the abstract holder please temp_reagents.clear_reagents() @@ -347,7 +347,7 @@ if(istype(source, /obj/item/mixing_bowl)) // Cooking in mixing bowls returns them dirtier var/obj/item/mixing_bowl/mb = source - mb.make_dirty(5 * efficiency) + mb.make_dirty(5 * portions) mb.forceMove(loc) stop() diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 9cb483de4f0..c69ee225984 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -155,11 +155,19 @@ result = /obj/item/reagent_containers/food/snacks/donkpocket /datum/recipe/microwave/warmdonkpocket + duplicate = FALSE items = list( /obj/item/reagent_containers/food/snacks/donkpocket ) result = /obj/item/reagent_containers/food/snacks/warmdonkpocket +/datum/recipe/microwave/reheatwarmdonkpocket + duplicate = FALSE + items = list( + /obj/item/reagent_containers/food/snacks/warmdonkpocket + ) + result = /obj/item/reagent_containers/food/snacks/warmdonkpocket + /datum/recipe/microwave/eggplantparm items = list( /obj/item/reagent_containers/food/snacks/cheesewedge, diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 51fd591f132..820095b2e07 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ