diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ee229792502..50fc94840e9 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -27275,12 +27275,14 @@ /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/bowl, /obj/effect/turf_decal/bot, +/obj/item/food/dough, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "bgu" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/condiment/flour, /obj/effect/turf_decal/bot, +/obj/item/book/manual/wiki/cooking_to_serve_man, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "bgv" = ( @@ -28121,16 +28123,9 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) -"bhQ" = ( -/obj/structure/table/reinforced, -/obj/item/food/dough, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/crew_quarters/kitchen) "bhR" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/cooking_to_serve_man, /obj/effect/turf_decal/bot, +/obj/machinery/griddle, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "bhS" = ( @@ -152048,7 +152043,7 @@ qkz bdJ bfe bgs -bhQ +bhR aCB bly aYD diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index d82c7047539..9d16003ef88 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -18980,6 +18980,11 @@ pixel_x = -5; pixel_y = 30 }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aRz" = ( @@ -19018,25 +19023,17 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aRF" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, +/obj/machinery/griddle, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aRG" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, /obj/machinery/airalarm{ pixel_y = 24 }, /obj/machinery/light{ dir = 1 }, +/obj/machinery/griddle, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aRH" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 69775f0a7fb..745eda1af6e 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -41149,6 +41149,12 @@ dir = 4 }, /obj/item/storage/bag/tray, +/obj/item/book/manual/chef_recipes{ + pixel_y = 2 + }, +/obj/item/book/manual/chef_recipes{ + pixel_y = 2 + }, /turf/open/floor/plasteel/dark, /area/crew_quarters/kitchen) "bmU" = ( @@ -42168,7 +42174,6 @@ /turf/closed/wall, /area/hallway/primary/port) "boD" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -42176,13 +42181,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/book/manual/chef_recipes{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/book/manual/chef_recipes{ - pixel_y = 2 - }, +/obj/machinery/griddle, /turf/open/floor/plasteel/dark, /area/crew_quarters/kitchen) "boE" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a1a8da86d99..6be05b6ec73 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -36050,6 +36050,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/item/kitchen/rollingpin, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -78261,11 +78262,10 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "wfI" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/griddle, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index d1d861e6df2..eed39a5acb4 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -557,6 +557,12 @@ #define COMPONENT_BLOCK_SHARPEN_BLOCKED (1<<1) #define COMPONENT_BLOCK_SHARPEN_ALREADY (1<<2) #define COMPONENT_BLOCK_SHARPEN_MAXED (1<<3) +///Called when an object is grilled ontop of a griddle +#define COMSIG_ITEM_GRILLED "item_griddled" + #define COMPONENT_HANDLED_GRILLING (1<<0) +///Called when an object is turned into another item through grilling ontop of a griddle +#define COMSIG_GRILL_COMPLETED "item_grill_completed" + ///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) #define COMSIG_TOOL_IN_USE "tool_in_use" ///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index a3643032a0a..724532d91d9 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -48,8 +48,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define UNPAINTABLE_1 (1 << 20) /// Is the thing currently spinning? #define IS_SPINNING_1 (1 << 21) -/// Does the supermatter skip over this atom? -#define SUPERMATTER_IGNORES_1 (1 << 22) +#define IS_ONTOP_1 (1 << 22) +#define SUPERMATTER_IGNORES_1 (1 << 23) + /// If the thing can reflect light (lasers/energy) #define RICOCHET_SHINY (1<<0) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 72192409e0d..e44cc49ef52 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -197,7 +197,7 @@ if(closed[target] || isarea(target)) // avoid infinity situations continue closed[target] = TRUE - if(isturf(target) || isturf(target.loc) || (target in direct_access)) //Directly accessible atoms + if(isturf(target) || isturf(target.loc) || (target in direct_access) || (isobj(target) && target.flags_1 & IS_ONTOP_1)) //Directly accessible atoms if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks return TRUE diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm new file mode 100644 index 00000000000..859b25dff27 --- /dev/null +++ b/code/datums/components/grillable.dm @@ -0,0 +1,91 @@ +/datum/component/grillable + ///Result atom type of grilling this object + var/atom/cook_result + ///Amount of time required to cook the food + var/required_cook_time = 2 MINUTES + ///Is this a positive grill result? + var/positive_result = TRUE + + ///Time spent cooking so far + var/current_cook_time = 0 + + ///Are we currently grilling? + var/currently_grilling = FALSE + + ///Do we use the large steam sprite? + var/use_large_steam_sprite = FALSE + +/datum/component/grillable/Initialize(cook_result, required_cook_time, positive_result, use_large_steam_sprite) + . = ..() + if(!isitem(parent)) //Only items support grilling at the moment + return COMPONENT_INCOMPATIBLE + + src.cook_result = cook_result + src.required_cook_time = required_cook_time + src.positive_result = positive_result + src.use_large_steam_sprite = use_large_steam_sprite + + RegisterSignal(parent, COMSIG_ITEM_GRILLED, .proc/OnGrill) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/OnExamine) + +///Ran every time an item is grilled by something +/datum/component/grillable/proc/OnGrill(datum/source, atom/used_grill, delta_time = 1) + SIGNAL_HANDLER + + . = COMPONENT_HANDLED_GRILLING + + current_cook_time += delta_time * 10 //turn it into ds + if(current_cook_time >= required_cook_time) + FinishGrilling(used_grill) + else if(!currently_grilling) //We havn't started grilling yet + StartGrilling(used_grill) + + +///Ran when an object starts grilling on something +/datum/component/grillable/proc/StartGrilling(atom/grill_source) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/OnMoved) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/AddGrilledItemOverlay) + + var/atom/A = parent + A.update_icon() + +///Ran when an object finished grilling +/datum/component/grillable/proc/FinishGrilling(atom/grill_source) + + var/atom/original_object = parent + var/atom/grilled_result = new cook_result(original_object.loc) + + grilled_result.pixel_x = original_object.pixel_x + grilled_result.pixel_y = original_object.pixel_y + + grill_source.visible_message("[parent] turns into \a [grilled_result]!") + SEND_SIGNAL(parent, COMSIG_GRILL_COMPLETED, grilled_result) + currently_grilling = FALSE + qdel(parent) + +///Ran when an object almost finishes grilling +/datum/component/grillable/proc/OnExamine(atom/A, mob/user, list/examine_list) + SIGNAL_HANDLER + if(!current_cook_time) //Not grilled yet + return + + if(positive_result) + if(current_cook_time <= required_cook_time * 0.75) + examine_list += "[parent] probably needs to be cooked a bit longer!" + else if(current_cook_time <= required_cook_time) + examine_list += "[parent] seems to be almost finished cooking!" + else + examine_list += "[parent] should probably not be cooked for much longer!" + +///Ran when an object moves from the grill +/datum/component/grillable/proc/OnMoved(atom/A, atom/OldLoc, Dir, Forced) + SIGNAL_HANDLER + currently_grilling = FALSE + UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + A.update_icon() + +/datum/component/grillable/proc/AddGrilledItemOverlay(datum/source, list/overlays) + SIGNAL_HANDLER + + overlays += mutable_appearance('icons/effects/steam.dmi', "[use_large_steam_sprite ? "steam_triple" : "steam_single"]", ABOVE_OBJ_LAYER) diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 2785510975e..bee434eef18 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -58,7 +58,15 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /datum/looping_sound/grill + mid_sounds = list('sound/machines/grill/grillsizzle.ogg' = 1) + mid_length = 18 + volume = 50 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/deep_fryer mid_length = 2 mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) volume = 30 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e5fe41512dd..2d5c902d390 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1295,6 +1295,8 @@ var/list/atom/created_atoms = list() for(var/i = 1 to chosen_option[TOOL_PROCESSING_AMOUNT]) var/atom/created_atom = new atom_to_create(drop_location()) + created_atom.pixel_x = rand(-8, 8) + created_atom.pixel_y = rand(-8, 8) SEND_SIGNAL(created_atom, COMSIG_ATOM_CREATEDBY_PROCESSING, src, chosen_option) created_atom.OnCreatedFromProcessing(user, I, chosen_option, src) to_chat(user, "You manage to create [chosen_option[TOOL_PROCESSING_AMOUNT]] [initial(atom_to_create.name)]\s from [src].") diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 922598bf3cd..1a88a9f6681 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -990,7 +990,12 @@ build_path = /obj/machinery/deepfryer req_components = list(/obj/item/stock_parts/micro_laser = 1) needs_anchored = FALSE - +/obj/item/circuitboard/machine/griddle + name = "circuit board (Griddle)" + icon_state = "service" + build_path = /obj/machinery/griddle + req_components = list(/obj/item/stock_parts/micro_laser = 1) + needs_anchored = FALSE /obj/item/circuitboard/machine/dish_drive name = "Dish Drive (Machine Board)" diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index 7cbea93fe34..77e0fe141a6 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -32,6 +32,8 @@ var/trash_type ///How much junkiness this food has? God I should remove junkiness soon var/junkiness + ///Will this food turn into badrecipe on a grill? Don't use this for everything; preferably mostly for food that is made on a grill to begin with so it burns after some time + var/burns_on_grill = FALSE /obj/item/food/Initialize() . = ..() @@ -44,6 +46,7 @@ MakeEdible() MakeProcessable() MakeLeaveTrash() + MakeGrillable() ///This proc adds the edible component, overwrite this if you for some reason want to change some specific args like callbacks. /obj/item/food/proc/MakeEdible() @@ -64,6 +67,12 @@ /obj/item/food/proc/MakeProcessable() return +///This proc handles grillable components, overwrite if you want different grill results etc. +/obj/item/food/proc/MakeGrillable() + if(burns_on_grill) + AddComponent(/datum/component/grillable, /obj/item/food/badrecipe, rand(20 SECONDS, 30 SECONDS), FALSE) + return + ///This proc handles trash components, overwrite this if you want the object to spawn trash /obj/item/food/proc/MakeLeaveTrash() if(trash_type) diff --git a/code/game/objects/items/food/meat.dm b/code/game/objects/items/food/meat.dm index 4625903b40b..d4c15820591 100644 --- a/code/game/objects/items/food/meat.dm +++ b/code/game/objects/items/food/meat.dm @@ -83,11 +83,13 @@ desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" icon_state = "spiderleg" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3, /datum/reagent/toxin = 2) - microwaved_type = /obj/item/food/boiledspiderleg tastes = list("cobwebs" = 1) foodtypes = MEAT | TOXIC w_class = WEIGHT_CLASS_SMALL +/obj/item/food/spiderleg/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/boiledspiderleg, rand(50 SECONDS, 60 SECONDS), TRUE, TRUE) + /obj/item/food/cornedbeef name = "corned beef and cabbage" desc = "Now you can feel like a real tourist vacationing in Ireland." @@ -108,28 +110,177 @@ foodtypes = MEAT | ALCOHOL w_class = WEIGHT_CLASS_SMALL +/obj/item/food/raw_meatball + name = "raw meatball" + desc = "A great meal all round. Not a cord of wood. Kinda raw" + icon_state = "raw_meatball" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + w_class = WEIGHT_CLASS_SMALL + var/meatball_type = /obj/item/food/meatball + var/patty_type = /obj/item/food/raw_patty + +/obj/item/food/raw_meatball/MakeGrillable() + AddComponent(/datum/component/grillable, meatball_type, rand(30 SECONDS, 40 SECONDS), TRUE) + +/obj/item/food/raw_meatball/MakeProcessable() + AddElement(/datum/element/processable, TOOL_ROLLINGPIN, patty_type, 1, 20) +/obj/item/food/raw_meatball/human + name = "strange raw meatball" + meatball_type = /obj/item/food/meatball/human + patty_type = /obj/item/food/raw_patty/human + +/obj/item/food/raw_meatball/corgi + name = "raw corgi meatball" + meatball_type = /obj/item/food/meatball/corgi + patty_type = /obj/item/food/raw_patty/corgi + +/obj/item/food/raw_meatball/xeno + name = "raw xeno meatball" + meatball_type = /obj/item/food/meatball/xeno + patty_type = /obj/item/food/raw_patty/xeno + +/obj/item/food/raw_meatball/bear + name = "raw bear meatball" + meatball_type = /obj/item/food/meatball/bear + patty_type = /obj/item/food/raw_patty/bear + +/obj/item/food/raw_meatball/chicken + name = "raw chicken meatball" + meatball_type = /obj/item/food/meatball/chicken + patty_type = /obj/item/food/raw_patty/chicken + /obj/item/food/meatball name = "meatball" desc = "A great meal all round. Not a cord of wood." icon_state = "meatball" - food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 1) + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) tastes = list("meat" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + burns_on_grill = TRUE + +/obj/item/food/meatball/human + name = "strange meatball" + +/obj/item/food/meatball/corgi + name = "corgi meatball" + +/obj/item/food/meatball/bear + name = "bear meatball" + tastes = list("meat" = 1, "salmon" = 1) + +/obj/item/food/meatball/xeno + name = "xenomorph meatball" + tastes = list("meat" = 1, "acid" = 1) + +/obj/item/food/meatball/chicken + name = "chicken meatball" + tastes = list("chicken" = 1) + icon_state = "chicken_meatball" + +/obj/item/food/raw_patty + name = "raw patty" + desc = "I'm.....NOT REAAADDYY." + icon_state = "raw_patty" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + w_class = WEIGHT_CLASS_SMALL + var/patty_type = /obj/item/food/patty/plain + +/obj/item/food/raw_patty/MakeGrillable() + AddComponent(/datum/component/grillable, patty_type, rand(30 SECONDS, 40 SECONDS), TRUE) + +/obj/item/food/raw_patty/human + name = "strange raw patty" + patty_type = /obj/item/food/patty/human + +/obj/item/food/raw_patty/corgi + name = "raw corgi patty" + patty_type = /obj/item/food/patty/corgi + +/obj/item/food/raw_patty/bear + name = "raw bear patty" + tastes = list("meat" = 1, "salmon" = 1) + patty_type = /obj/item/food/patty/bear + +/obj/item/food/raw_patty/xeno + name = "raw xenomorph patty" + tastes = list("meat" = 1, "acid" = 1) + patty_type = /obj/item/food/patty/xeno + +/obj/item/food/raw_patty/chicken + name = "raw chicken patty" + tastes = list("chicken" = 1) + patty_type = /obj/item/food/patty/chicken + +/obj/item/food/patty + name = "patty" + desc = "The nanotrasen patty is the patty for you and me!" + icon_state = "patty" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT + w_class = WEIGHT_CLASS_SMALL + burns_on_grill = TRUE + +///Exists purely for the crafting recipe (because itll take subtypes) +/obj/item/food/patty/plain + +/obj/item/food/patty/human + name = "strange patty" + +/obj/item/food/patty/corgi + name = "corgi patty" + +/obj/item/food/patty/bear + name = "bear patty" + tastes = list("meat" = 1, "salmon" = 1) + +/obj/item/food/patty/xeno + name = "xenomorph patty" + tastes = list("meat" = 1, "acid" = 1) + +/obj/item/food/patty/chicken + name = "chicken patty" + tastes = list("chicken" = 1) + icon_state = "chicken_patty" + +/obj/item/food/raw_sausage + name = "raw sausage" + desc = "A piece of mixed, long meat, but then raw" + icon_state = "raw_sausage" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + eatverbs = list("bite","chew","nibble","deep throat","gobble","chomp") + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/raw_sausage/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/sausage, rand(60 SECONDS, 75 SECONDS), TRUE) /obj/item/food/sausage name = "sausage" desc = "A piece of mixed, long meat." icon_state = "sausage" - food_reagents = list(/datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 2) + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 2) tastes = list("meat" = 1) foodtypes = MEAT | BREAKFAST eatverbs = list("bite","chew","nibble","deep throat","gobble","chomp") var/roasted = FALSE w_class = WEIGHT_CLASS_SMALL + burns_on_grill = TRUE /obj/item/food/sausage/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 30) + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/american_sausage, 1, 30) + +/obj/item/food/american_sausage + name = "american sausage" + desc = "Snip." + icon_state = "american_sausage" /obj/item/food/salami name = "salami" @@ -145,11 +296,13 @@ desc = "One hundred khinkalis? Do I look like a pig?" icon_state = "khinkali" food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/garlic = 1) - microwaved_type = /obj/item/food/khinkali tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL +/obj/item/food/rawkhinkali/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/khinkali, rand(50 SECONDS, 60 SECONDS), TRUE) + /obj/item/food/khinkali name = "khinkali" desc = "One hundred khinkalis? Do I look like a pig?" @@ -159,6 +312,7 @@ tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + burns_on_grill = TRUE /obj/item/food/monkeycube name = "monkey cube" @@ -246,7 +400,6 @@ /obj/item/food/stewedsoymeat/Initialize() . = ..() - /obj/item/food/boiledspiderleg name = "boiled spider leg" desc = "A giant spider's leg that's still twitching after being cooked. Gross!" @@ -256,6 +409,7 @@ tastes = list("hot peppers" = 1, "cobwebs" = 1) foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL + burns_on_grill = TRUE /obj/item/food/spidereggsham name = "green eggs and ham" @@ -404,7 +558,6 @@ icon_state = "meat" bite_consumption = 3 food_reagents = list(/datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/cooking_oil = 2) //Meat has fats that a food processor can process into cooking oil - microwaved_type = /obj/item/food/meat/steak/plain tastes = list("meat" = 1) foodtypes = MEAT | RAW ///Legacy code, handles the coloring of the overlay of the cutlets made from this. @@ -414,6 +567,9 @@ . = ..() AddElement(/datum/element/dryable, /obj/item/food/sosjerky/healthy) +/obj/item/food/meat/slab/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? + /obj/item/food/meat/slab/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain, 3, 30) @@ -421,10 +577,12 @@ /obj/item/food/meat/slab/human name = "meat" - microwaved_type = /obj/item/food/meat/steak/plain/human tastes = list("tender meat" = 1) foodtypes = MEAT | RAW | GROSS +/obj/item/food/meat/slab/human/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? + /obj/item/food/meat/slab/human/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 30) @@ -450,10 +608,12 @@ /obj/item/food/meat/slab/human/mutant/lizard icon_state = "lizardmeat" desc = "Delicious dino damage." - microwaved_type = /obj/item/food/meat/steak/plain/human/lizard tastes = list("meat" = 4, "scales" = 1) foodtypes = MEAT | RAW +/obj/item/food/meat/slab/human/mutant/lizard/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human/lizard, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/human/mutant/plant icon_state = "plantmeat" desc = "All the joys of healthy eating with all the fun of cannibalism." @@ -509,18 +669,21 @@ /obj/item/food/meat/slab/synthmeat name = "synthmeat" icon_state = "meat_old" - microwaved_type = /obj/item/food/meat/steak/plain/synth desc = "A synthetic slab of meat." foodtypes = RAW | MEAT //hurr durr chemicals we're harmed in the production of this meat thus its non-vegan. +/obj/item/food/meat/slab/synthmeat/MakeGrillable() + AddComponent(/datum/component/grillable,/obj/item/food/meat/steak/plain/synth, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) /obj/item/food/meat/slab/meatproduct name = "meat product" icon_state = "meatproduct" desc = "A slab of station reclaimed and chemically processed meat product." - microwaved_type = /obj/item/food/meat/steak/meatproduct tastes = list("meat flavoring" = 2, "modified starches" = 2, "natural & artificial dyes" = 1, "butyric acid" = 1) foodtypes = RAW | MEAT +/obj/item/food/meat/slab/meatproduct/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/meatproduct, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/monkey name = "monkey meat" foodtypes = RAW | MEAT @@ -558,10 +721,12 @@ desc = "A slice from a huge tomato." icon_state = "tomatomeat" food_reagents = list(/datum/reagent/consumable/nutriment = 2) - microwaved_type = /obj/item/food/meat/steak/killertomato tastes = list("tomato" = 1) foodtypes = FRUIT +/obj/item/food/meat/slab/killertomato/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/killertomato, rand(70 SECONDS, 85 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/killertomato/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/killertomato, 3, 30) @@ -570,13 +735,15 @@ desc = "A very manly slab of meat." icon_state = "bearmeat" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 16, /datum/reagent/medicine/morphine = 5, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/cooking_oil = 6) - microwaved_type = /obj/item/food/meat/steak/bear tastes = list("meat" = 1, "salmon" = 1) foodtypes = RAW | MEAT /obj/item/food/meat/slab/bear/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/bear, 3, 30) +/obj/item/food/meat/slab/bear/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/bear, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/bear/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB) @@ -587,25 +754,29 @@ icon_state = "xenomeat" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 8, /datum/reagent/consumable/nutriment/vitamin = 3) bite_consumption = 4 - microwaved_type = /obj/item/food/meat/steak/xeno tastes = list("meat" = 1, "acid" = 1) foodtypes = RAW | MEAT /obj/item/food/meat/slab/xeno/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 30) +/obj/item/food/meat/slab/xeno/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/xeno, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/spider name = "spider meat" desc = "A slab of spider meat. That is so Kafkaesque." icon_state = "spidermeat" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/toxin = 3, /datum/reagent/consumable/nutriment/vitamin = 1) - microwaved_type = /obj/item/food/meat/steak/spider tastes = list("cobwebs" = 1) foodtypes = RAW | MEAT | TOXIC /obj/item/food/meat/slab/spider/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 30) +/obj/item/food/meat/slab/spider/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/spider, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/goliath name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." @@ -637,12 +808,14 @@ name = "raw piece of bacon" desc = "A raw piece of bacon." icon_state = "bacon" - microwaved_type = /obj/item/food/meat/bacon bite_consumption = 2 food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/cooking_oil = 3) tastes = list("bacon" = 1) foodtypes = RAW | MEAT +/obj/item/food/meat/rawbacon/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/bacon, rand(25 SECONDS, 45 SECONDS), TRUE, TRUE) + /obj/item/food/meat/bacon name = "piece of bacon" desc = "A delicious piece of bacon." @@ -656,34 +829,41 @@ desc = "According to legends of old, consuming raw gondola flesh grants one inner peace." food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/tranquility = 5, /datum/reagent/consumable/cooking_oil = 3) tastes = list("meat" = 4, "tranquility" = 1) - microwaved_type = /obj/item/food/meat/steak/gondola foodtypes = RAW | MEAT /obj/item/food/meat/slab/gondola/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 30) +/obj/item/food/meat/slab/gondola/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/gondola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? + + /obj/item/food/meat/slab/penguin name = "penguin meat" icon_state = "birdmeat" desc = "A slab of penguin meat." food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/cooking_oil = 3) - microwaved_type = /obj/item/food/meat/steak/penguin tastes = list("beef" = 1, "cod fish" = 1) /obj/item/food/meat/slab/gondola/MakeProcessable() . = ..() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 30) +/obj/item/food/meat/slab/penguin/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/penguin, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? + /obj/item/food/meat/rawcrab name = "raw crab meat" desc = "A pile of raw crab meat." - icon_state = "crabmeatraw" microwaved_type = /obj/item/food/meat/crab bite_consumption = 3 food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3, /datum/reagent/consumable/cooking_oil = 3) tastes = list("raw crab" = 1) foodtypes = RAW | MEAT +/obj/item/food/meat/slab/rawcrab/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/crab, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? + /obj/item/food/meat/crab name = "crab meat" desc = "Some deliciously cooked crab meat." @@ -691,19 +871,22 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/cooking_oil = 2) tastes = list("crab" = 1) foodtypes = MEAT + burns_on_grill = TRUE /obj/item/food/meat/slab/chicken name = "chicken meat" icon_state = "birdmeat" desc = "A slab of raw chicken. Remember to wash your hands!" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 6) //low fat - microwaved_type = /obj/item/food/meat/steak/chicken tastes = list("chicken" = 1) /obj/item/food/meat/slab/chicken/MakeProcessable() . = ..() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/chicken, 3, 30) +/obj/item/food/meat/slab/chicken/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/chicken, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? (no this is chicken) + /obj/item/food/meat/slab/chicken/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB) @@ -717,6 +900,7 @@ trash_type = /obj/item/trash/plate foodtypes = MEAT tastes = list("meat" = 1) + burns_on_grill = TRUE /obj/item/food/meat/steak/Initialize() . = ..() @@ -812,13 +996,15 @@ name = "raw cutlet" desc = "A raw meat cutlet." icon_state = "rawcutlet" - microwaved_type = /obj/item/food/meat/cutlet/plain bite_consumption = 2 - food_reagents = list(/datum/reagent/consumable/nutriment/protein = 1) + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) tastes = list("meat" = 1) foodtypes = MEAT | RAW var/meat_type = "meat" +/obj/item/food/meat/rawcutlet/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/OnCreatedFromProcessing(mob/living/user, obj/item/I, list/chosen_option, atom/original_atom) ..() if(istype(original_atom, /obj/item/food/meat/slab)) @@ -835,10 +1021,12 @@ /obj/item/food/meat/rawcutlet/plain /obj/item/food/meat/rawcutlet/plain/human - microwaved_type = /obj/item/food/meat/cutlet/plain/human tastes = list("tender meat" = 1) foodtypes = MEAT | RAW | GROSS +/obj/item/food/meat/rawcutlet/plain/human/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain/human, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/plain/human/OnCreatedFromProcessing(mob/living/user, obj/item/I, list/chosen_option, atom/original_atom) . = ..() if(istype(original_atom, /obj/item/food/meat)) @@ -852,44 +1040,55 @@ /obj/item/food/meat/rawcutlet/killertomato name = "raw killer tomato cutlet" - microwaved_type = /obj/item/food/meat/cutlet/killertomato tastes = list("tomato" = 1) foodtypes = FRUIT +/obj/item/food/meat/rawcutlet/killertomato/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/killertomato, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/bear name = "raw bear cutlet" - microwaved_type = /obj/item/food/meat/cutlet/bear tastes = list("meat" = 1, "salmon" = 1) /obj/item/food/meat/rawcutlet/bear/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB) +/obj/item/food/meat/rawcutlet/bear/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/bear, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/xeno name = "raw xeno cutlet" - microwaved_type = /obj/item/food/meat/cutlet/xeno tastes = list("meat" = 1, "acid" = 1) +/obj/item/food/meat/rawcutlet/xeno/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/xeno, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/spider name = "raw spider cutlet" - microwaved_type = /obj/item/food/meat/cutlet/spider tastes = list("cobwebs" = 1) +/obj/item/food/meat/rawcutlet/spider/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/spider, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/gondola name = "raw gondola cutlet" - microwaved_type = /obj/item/food/meat/cutlet/gondola tastes = list("meat" = 1, "tranquility" = 1) +/obj/item/food/meat/rawcutlet/gondola/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/gondola, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/penguin name = "raw penguin cutlet" - microwaved_type = /obj/item/food/meat/cutlet/penguin tastes = list("beef" = 1, "cod fish" = 1) +/obj/item/food/meat/rawcutlet/penguin/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/penguin, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/chicken name = "raw chicken cutlet" - microwaved_type = /obj/item/food/meat/cutlet/chicken tastes = list("chicken" = 1) +/obj/item/food/meat/rawcutlet/chicken/MakeGrillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/chicken, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) + /obj/item/food/meat/rawcutlet/chicken/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB) @@ -904,6 +1103,7 @@ food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) tastes = list("meat" = 1) foodtypes = MEAT + burns_on_grill = TRUE /obj/item/food/meat/cutlet/Initialize() . = ..() diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 6b7025b8a33..9f12998c9f0 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -159,6 +159,14 @@ foodtypes = GROSS w_class = WEIGHT_CLASS_SMALL +/obj/item/food/badrecipe/Initialize() + . = ..() + RegisterSignal(src, COMSIG_ITEM_GRILLED, .proc/OnGrill) + +///Prevents grilling burnt shit from well, burning. +/obj/item/food/badrecipe/proc/OnGrill() + return COMPONENT_HANDLED_GRILLING + /obj/item/food/carrotfries name = "carrot fries" desc = "Tasty fries from fresh Carrots." diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm new file mode 100644 index 00000000000..0838678df21 --- /dev/null +++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm @@ -0,0 +1,99 @@ +/obj/machinery/griddle + name = "griddle" + desc = "Because using pans is for pansies." + icon = 'icons/obj/machines/griddle.dmi' + icon_state = "griddle1_off" + density = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 5 + layer = BELOW_OBJ_LAYER + circuit = /obj/item/circuitboard/machine/griddle + processing_flags = START_PROCESSING_MANUALLY + resistance_flags = FIRE_PROOF + + ///Things that are being griddled right now + var/list/griddled_objects = list() + ///Looping sound for the grill + var/datum/looping_sound/grill/grill_loop + ///Whether or not the machine is turned on right now + var/on = FALSE + ///What variant of griddle is this? + var/variant = 1 + ///How many shit fits on the griddle? + var/max_items = 8 + +/obj/machinery/griddle/Initialize() + . = ..() + grill_loop = new(list(src), FALSE) + variant = rand(1,3) + +/obj/machinery/griddle/attackby(obj/item/I, mob/user, params) + . = ..() + if(griddled_objects.len >= max_items) + to_chat(user, "[src] can't fit more items!") + return + if(user.transferItemToLoc(I, src, silent = FALSE)) + var/list/click_params = params2list(params) + //Center the icon where the user clicked. + if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) + return + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + I.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + to_chat(user, "You place [I] on [src].") + AddToGrill(I, user) + update_icon() + +/obj/machinery/griddle/attack_hand(mob/user) + . = ..() + on = !on + if(on) + begin_processing() + else + end_processing() + update_icon() + update_grill_audio() + + +/obj/machinery/griddle/proc/AddToGrill(obj/item/item_to_grill, mob/user) + vis_contents += item_to_grill + griddled_objects += item_to_grill + item_to_grill.flags_1 |= IS_ONTOP_1 + RegisterSignal(item_to_grill, COMSIG_MOVABLE_MOVED, .proc/ItemMoved) + RegisterSignal(item_to_grill, COMSIG_GRILL_COMPLETED, .proc/GrillCompleted) + update_grill_audio() + +/obj/machinery/griddle/proc/ItemMoved(obj/item/I, atom/OldLoc, Dir, Forced) + SIGNAL_HANDLER + I.flags_1 &= ~IS_ONTOP_1 + griddled_objects -= I + vis_contents -= I + UnregisterSignal(I, COMSIG_GRILL_COMPLETED) + update_grill_audio() + +/obj/machinery/griddle/proc/GrillCompleted(obj/item/source, atom/grilled_result) + SIGNAL_HANDLER + griddled_objects -= source //Old object + AddToGrill(grilled_result) + +/obj/machinery/griddle/proc/update_grill_audio() + if(on && griddled_objects.len) + grill_loop.start() + else + grill_loop.stop() + + +/obj/machinery/griddle/process(delta_time) + ..() + for(var/i in griddled_objects) + var/obj/item/griddled_item = i + if(SEND_SIGNAL(griddled_item, COMSIG_ITEM_GRILLED, src, delta_time) & COMPONENT_HANDLED_GRILLING) + continue + griddled_item.fire_act(1000) //Hot hot hot! + if(prob(10)) + visible_message("[griddled_item] doesn't seem to be doing too great on the [src]!") + +/obj/machinery/griddle/update_icon_state() + . = ..() + icon_state = "griddle[variant]_[on ? "on" : "off"]" + diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index 8dc1678843f..7972cea5d46 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -61,6 +61,7 @@ return else if(!grilled_item && user.transferItemToLoc(I, src)) grilled_item = I + RegisterSignal(grilled_item, COMSIG_GRILL_COMPLETED, .proc/GrillCompleted) ADD_TRAIT(grilled_item, TRAIT_FOOD_GRILLED, "boomers") to_chat(user, "You put the [grilled_item] on [src].") update_icon() @@ -81,6 +82,7 @@ smoke.set_up(1, loc) smoke.start() if(grilled_item) + SEND_SIGNAL(grilled_item, COMSIG_ITEM_GRILLED, src, delta_time) grill_time += delta_time grilled_item.reagents.add_reagent(/datum/reagent/consumable/char, 0.5 * delta_time) grill_fuel -= GRILL_FUELUSAGE_ACTIVE * delta_time @@ -142,8 +144,14 @@ grilled_item.desc = "A [grilled_item.name]. Reminds you of your wife, wait, no, it's prettier!" grilled_item.foodtype |= FRIED grill_time = 0 + UnregisterSignal(grilled_item, COMSIG_GRILL_COMPLETED, .proc/GrillCompleted) grill_loop.stop() +///Called when a food is transformed by the grillable component +/obj/machinery/grill/proc/GrillCompleted(obj/item/source, atom/grilled_result) + SIGNAL_HANDLER + grilled_item = grilled_result //use the new item!! + /obj/machinery/grill/unwrenched anchored = FALSE diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 44d49b07817..54ec6e7ad1f 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -7,7 +7,49 @@ /datum/food_processor_process/meat input = /obj/item/food/meat/slab - output = /obj/item/food/meatball + output = /obj/item/food/raw_meatball + multiplier = 3 + +/datum/food_processor_process/cutlet + input = /obj/item/food/meat/cutlet/plain + output = /obj/item/food/raw_meatball + +/datum/food_processor_process/meat/human + input = /obj/item/food/meat/slab/human + output = /obj/item/food/raw_meatball/human + +/datum/food_processor_process/cutlet/human + input = /obj/item/food/meat/cutlet/plain/human + output = /obj/item/food/raw_meatball/human + +/datum/food_processor_process/meat/corgi + input = /obj/item/food/meat/slab/corgi + output = /obj/item/food/raw_meatball/corgi + +/datum/food_processor_process/meat/xeno + input = /obj/item/food/meat/slab/xeno + output = /obj/item/food/raw_meatball/xeno + +/datum/food_processor_process/cutlet/xeno + input = /obj/item/food/meat/cutlet/xeno + output = /obj/item/food/raw_meatball/xeno + +/datum/food_processor_process/meat/bear + input = /obj/item/food/meat/slab/bear + output = /obj/item/food/raw_meatball/bear + +/datum/food_processor_process/cutlet/bear + input = /obj/item/food/meat/cutlet/bear + output = /obj/item/food/raw_meatball/bear + +/datum/food_processor_process/meat/chicken + input = /obj/item/food/meat/slab/chicken + output = /obj/item/food/raw_meatball/chicken + multiplier = 3 + +/datum/food_processor_process/cutlet/chicken + input = /obj/item/food/meat/cutlet/chicken + output = /obj/item/food/raw_meatball/chicken /datum/food_processor_process/bacon input = /obj/item/food/meat/rawcutlet 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 e82d58fdc6c..1f44145e14e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -8,10 +8,10 @@ name = "Human burger" reqs = list( /obj/item/food/bun = 1, - /obj/item/food/meat/steak/plain/human = 1 + /obj/item/food/patty/human = 1 ) parts = list( - /obj/item/food/meat/steak/plain/human = 1 + /obj/item/food/patty = 1 ) result = /obj/item/food/burger/human subcategory = CAT_BURGER @@ -19,7 +19,7 @@ /datum/crafting_recipe/food/burger name = "Burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/bun = 1 ) @@ -29,7 +29,7 @@ /datum/crafting_recipe/food/corgiburger name = "Corgi burger" reqs = list( - /obj/item/food/meat/slab/corgi = 1, + /obj/item/food/patty/corgi = 1, /obj/item/food/bun = 1 ) @@ -57,7 +57,7 @@ /datum/crafting_recipe/food/xenoburger name = "Xeno burger" reqs = list( - /obj/item/food/meat/steak/xeno = 1, + /obj/item/food/patty/xeno = 1, /obj/item/food/bun = 1 ) result = /obj/item/food/burger/xeno @@ -66,7 +66,7 @@ /datum/crafting_recipe/food/bearger name = "Bearger" reqs = list( - /obj/item/food/meat/steak/bear = 1, + /obj/item/food/patty/bear = 1, /obj/item/food/bun = 1 ) result = /obj/item/food/burger/bearger @@ -122,7 +122,7 @@ /datum/crafting_recipe/food/redburger name = "Red burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/red = 1, /obj/item/food/bun = 1 ) @@ -132,7 +132,7 @@ /datum/crafting_recipe/food/orangeburger name = "Orange burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/orange = 1, /obj/item/food/bun = 1 ) @@ -142,7 +142,7 @@ /datum/crafting_recipe/food/yellowburger name = "Yellow burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/yellow = 1, /obj/item/food/bun = 1 ) @@ -152,7 +152,7 @@ /datum/crafting_recipe/food/greenburger name = "Green burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/green = 1, /obj/item/food/bun = 1 ) @@ -162,7 +162,7 @@ /datum/crafting_recipe/food/blueburger name = "Blue burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/blue = 1, /obj/item/food/bun = 1 ) @@ -172,7 +172,7 @@ /datum/crafting_recipe/food/purpleburger name = "Purple burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/purple = 1, /obj/item/food/bun = 1 ) @@ -182,7 +182,7 @@ /datum/crafting_recipe/food/blackburger name = "Black burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/black = 1, /obj/item/food/bun = 1 ) @@ -192,7 +192,7 @@ /datum/crafting_recipe/food/whiteburger name = "White burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/white = 1, /obj/item/food/bun = 1 ) @@ -220,7 +220,7 @@ /datum/crafting_recipe/food/bigbiteburger name = "Big bite burger" reqs = list( - /obj/item/food/meat/steak/plain = 3, + /obj/item/food/patty/plain = 3, /obj/item/food/bun = 1, /obj/item/food/cheesewedge = 2 ) @@ -232,7 +232,7 @@ reqs = list( /datum/reagent/consumable/salt = 5, /datum/reagent/consumable/blackpepper = 5, - /obj/item/food/meat/steak/plain = 5, + /obj/item/food/patty/plain = 5, /obj/item/food/grown/tomato = 4, /obj/item/food/cheesewedge = 3, /obj/item/food/boiledegg = 1, @@ -264,7 +264,7 @@ /datum/crafting_recipe/food/fivealarmburger name = "Five alarm burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/grown/ghost_chili = 2, /obj/item/food/bun = 1 ) @@ -322,7 +322,7 @@ /datum/crafting_recipe/food/cheeseburger name = "Cheese Burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/bun = 1, /obj/item/food/cheesewedge = 1, ) @@ -362,7 +362,7 @@ /datum/crafting_recipe/food/chickenburger name = "Chicken Sandwich" reqs = list( - /obj/item/food/meat/steak/chicken = 1, + /obj/item/food/patty/chicken = 1, /datum/reagent/consumable/mayonnaise = 5, /obj/item/food/bun = 1 ) @@ -372,7 +372,7 @@ /datum/crafting_recipe/food/crazyhamburger name = "Crazy hamburger" reqs = list( - /obj/item/food/meat/steak/plain = 2, + /obj/item/food/patty/plain = 2, /obj/item/food/bun = 1, /obj/item/food/cheesewedge = 2, /obj/item/food/grown/chili = 1, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index adda5dd4392..31fcfb4f493 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -161,7 +161,7 @@ /obj/item/food/meatball = 1, /obj/item/food/meat/cutlet = 2 ) - result = /obj/item/food/sausage + result = /obj/item/food/raw_sausage subcategory = CAT_MEAT /datum/crafting_recipe/food/nugget diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index da10a930acf..7f2d48ca7fc 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -497,6 +497,14 @@ category = list ("Misc. Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/board/griddle + name = "Machine Design (Griddle)" + desc = "The circuit board for a Griddle." + id = "griddle" + build_path = /obj/item/circuitboard/machine/griddle + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + /datum/design/board/donksofttoyvendor name = "Machine Design (Donksoft Toy Vendor Board)" desc = "The circuit board for a Donksoft Toy Vendor." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 7428033d5ed..cb7106ef283 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -83,7 +83,7 @@ display_name = "Biological Processing" description = "From slimes to kitchens." prereq_ids = list("biotech") - design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive", "fat_sucker") + design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive", "fat_sucker", "griddle") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /////////////////////////Advanced Surgery///////////////////////// diff --git a/icons/effects/steam.dmi b/icons/effects/steam.dmi new file mode 100644 index 00000000000..4533e27f890 Binary files /dev/null and b/icons/effects/steam.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 6a922ef3471..8df13c6df38 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/machines/griddle.dmi b/icons/obj/machines/griddle.dmi new file mode 100644 index 00000000000..b2ad1877e14 Binary files /dev/null and b/icons/obj/machines/griddle.dmi differ diff --git a/sound/machines/grill/grillsizzle.ogg b/sound/machines/grill/grillsizzle.ogg new file mode 100644 index 00000000000..056ce45941c Binary files /dev/null and b/sound/machines/grill/grillsizzle.ogg differ diff --git a/tgstation.dme b/tgstation.dme index e99e575179b..f1b1d3bd1a0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -454,6 +454,7 @@ #include "code\datums\components\footstep.dm" #include "code\datums\components\forensics.dm" #include "code\datums\components\gps.dm" +#include "code\datums\components\grillable.dm" #include "code\datums\components\gunpoint.dm" #include "code\datums\components\heirloom.dm" #include "code\datums\components\honkspam.dm" @@ -2009,6 +2010,7 @@ #include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm" #include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" #include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\griddle.dm" #include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" #include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm"