diff --git a/aurorastation.dme b/aurorastation.dme
index 35bae70cf47..f42e2764e59 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1489,6 +1489,7 @@
#include "code\modules\cooking\recipes\recipes_breads.dm"
#include "code\modules\cooking\recipes\recipes_breakfast.dm"
#include "code\modules\cooking\recipes\recipes_fryer.dm"
+#include "code\modules\cooking\recipes\recipes_grill.dm"
#include "code\modules\cooking\recipes\recipes_meat.dm"
#include "code\modules\cooking\recipes\recipes_mix.dm"
#include "code\modules\cooking\recipes\recipes_pan.dm"
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index ba624bd02db..03a7a7582ea 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -432,6 +432,7 @@ Define for getting a bitfield of adjacent turfs that meet a condition.
#define SKILLET 1 << 3
#define SAUCEPAN 1 << 4
#define POT 1 << 5
+#define GRILL 1 << 6
// Cooking misc.
// can_insert return values
diff --git a/code/modules/cooking/machinery/cooking_machines/_appliance.dm b/code/modules/cooking/machinery/cooking_machines/_appliance.dm
index 8effb4f45d2..cb9b4af7bf7 100644
--- a/code/modules/cooking/machinery/cooking_machines/_appliance.dm
+++ b/code/modules/cooking/machinery/cooking_machines/_appliance.dm
@@ -42,7 +42,7 @@
// If the machine has multiple output modes, define them here.
var/selected_option
var/list/output_options = list()
-
+ var/finish_verb = "pings!"
var/combine_first = FALSE//If 1, this appliance will do combination cooking before checking recipes
/obj/machinery/appliance/Initialize()
@@ -326,8 +326,7 @@
/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI)
-
- visible_message("[src] pings!")
+ audible_message("[src] [finish_verb]")
if(cooked_sound)
playsound(get_turf(src), cooked_sound, 50, 1)
//Check recipes first, a valid recipe overrides other options
diff --git a/code/modules/cooking/machinery/cooking_machines/_cooker.dm b/code/modules/cooking/machinery/cooking_machines/_cooker.dm
index 47739d31a31..69978cb362f 100644
--- a/code/modules/cooking/machinery/cooking_machines/_cooker.dm
+++ b/code/modules/cooking/machinery/cooking_machines/_cooker.dm
@@ -48,7 +48,7 @@
description += "[src] is still heating up and is too cold to cook anything yet."
else
description += "It is running at [round(get_efficiency(), 0.1)]% efficiency!"
- description += "Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C"
+ description += "
Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C"
else
description += "It is switched off."
openToolTip(usr, src, params, name, description)
@@ -111,10 +111,13 @@
stat &= ~POWEROFF
use_power = !(stat & POWEROFF) && use_power
if(wasoff != (stat & POWEROFF))
- user.visible_message("[user] turns [use_power ? "on" : "off"] [src].", "You turn [use_power ? "on" : "off"] [src].")
+ activation_message(user)
playsound(src, 'sound/machines/click.ogg', 40, 1)
update_icon()
+/obj/machinery/appliance/cooker/proc/activation_message(var/mob/user)
+ user.visible_message("[user] turns [use_power ? "on" : "off"] [src].", "You turn [use_power ? "on" : "off"] [src].")
+
/obj/machinery/appliance/cooker/update_icon()
overlays.Cut()
var/image/light
diff --git a/code/modules/cooking/machinery/cooking_machines/container.dm b/code/modules/cooking/machinery/cooking_machines/container.dm
index 6a3fbe33dfa..18756520b65 100644
--- a/code/modules/cooking/machinery/cooking_machines/container.dm
+++ b/code/modules/cooking/machinery/cooking_machines/container.dm
@@ -5,6 +5,7 @@
/obj/item/reagent_containers/cooking_container
icon = 'icons/obj/cooking_machines.dmi'
var/shortname
+ var/place_verb = "into"
var/max_space = 20//Maximum sum of w-classes of foods in this container at once
volume = 80//Maximum units of reagents
flags = OPENCONTAINER | NOREACT
@@ -61,7 +62,7 @@
if(!user.unEquip(I))
return
I.forceMove(src)
- to_chat(user, SPAN_NOTICE("You put [I] into [src]."))
+ to_chat(user, SPAN_NOTICE("You put [I] [place_verb] [src]."))
return
/obj/item/reagent_containers/cooking_container/verb/empty()
@@ -230,6 +231,22 @@
icon_state = "basket"
appliancetype = FRYER
+/obj/item/reagent_containers/cooking_container/grill_grate
+ name = "grill grate"
+ shortname = "grate"
+ place_verb = "onto"
+ desc = "Primarily used to grill meat, place this on a grill and grab a can of energy drink."
+ icon_state = "grill_grate"
+ appliancetype = GRILL
+ insertable = list(
+ /obj/item/reagent_containers/food/snacks/meat
+ )
+
+/obj/item/reagent_containers/cooking_container/grill_grate/can_fit()
+ if(length(contents) >= 3)
+ return FALSE
+ return TRUE
+
/obj/item/reagent_containers/cooking_container/plate
name = "serving plate"
shortname = "plate"
diff --git a/code/modules/cooking/machinery/cooking_machines/grill.dm b/code/modules/cooking/machinery/cooking_machines/grill.dm
index 215f32dfdb2..c6ffa707fef 100644
--- a/code/modules/cooking/machinery/cooking_machines/grill.dm
+++ b/code/modules/cooking/machinery/cooking_machines/grill.dm
@@ -1,61 +1,66 @@
-/obj/machinery/appliance/grill
+/obj/machinery/appliance/cooker/grill
name = "grill"
desc = "Backyard grilling, IN SPACE."
icon_state = "grill_off"
cook_type = "grilled"
+ appliancetype = GRILL
+ stat = POWEROFF
food_color = "#a34719"
on_icon = "grill_on"
off_icon = "grill_off"
- stat = POWEROFF
+ finish_verb = "sizzles to completion!"
+ cooked_sound = 'sound/effects/meatsizzle.ogg'
+ min_temp = 100 + T0C
+ optimal_temp = 150 + T0C
+ temp_settings = 1
+ max_contents = 1
+ resistance = 500 // assuming it's a fired grill, it shouldn't take very long to heat
-/obj/machinery/appliance/grill/attempt_toggle_power(var/mob/user, ranged = FALSE)
- . = ..(user, ranged)
- if(use_power)
- get_cooking_work(cooking_objs[1])
+ idle_power_usage = 0
+ active_power_usage = 0
-/obj/machinery/appliance/grill/Initialize()
- . = ..()
- cooking_objs += new /datum/cooking_item(new /obj/item/reagent_containers/cooking_container(src))
- cooking = 0
+ cooking_coeff = 0.3 // cook it nice and slow
-/obj/machinery/appliance/grill/has_space(var/obj/item/I)
- var/datum/cooking_item/CI = cooking_objs[1]
- if (!CI || !CI.container)
- return FALSE
+ starts_with = list(
+ /obj/item/reagent_containers/cooking_container/grill_grate
+ )
- if (CI.container.can_fit(I))
- return CI
+/obj/machinery/appliance/cooker/grill/RefreshParts()
+ ..()
+ cooking_coeff = 0.3 // we will always cook nice and slow
+/obj/machinery/appliance/cooker/grill/get_efficiency()
+ return (temperature / optimal_temp) * 100
+
+/obj/machinery/appliance/cooker/grill/activation_message(var/mob/user)
+ user.visible_message("[user] [stat ? "turns off" : "fires up"] \the [src].", "You [stat ? "turn off" : "fire up"] \the [src].")
+
+/obj/machinery/appliance/cooker/grill/has_space(var/obj/item/I)
+ if(istype(I, /obj/item/reagent_containers/cooking_container))
+ if(length(cooking_objs) < max_contents)
+ return TRUE
+ else
+ if(length(cooking_objs))
+ var/datum/cooking_item/CI = cooking_objs[1]
+ var/obj/item/reagent_containers/cooking_container/grill_grate/G = CI.container
+ if(G?.can_fit(I))
+ return CI
return FALSE
-//Container is not removable
-/obj/machinery/appliance/grill/removal_menu(var/mob/user)
- if (!can_remove_items(user))
- return FALSE
- var/list/menuoptions = list()
- for (var/datum/cooking_item/CI in cooking_objs)
- if (CI.container?.check_contents() == CONTAINER_EMPTY)
- to_chat(user, SPAN_WARNING("There's nothing in [src] to remove!"))
- return
- for (var/obj/item/I in CI.container)
- menuoptions[I.name] = I
-
- var/selection = show_radial_menu(user, src, menuoptions, require_near = TRUE, tooltips = TRUE, no_repeat_close = TRUE)
- if (!selection)
- return FALSE
- var/obj/item/I = menuoptions[selection]
- if (!user?.put_in_hands(I))
- I.forceMove(get_turf(src))
- update_icon()
- return TRUE
-
-/obj/machinery/appliance/grill/update_icon()
- if (!stat)
+/obj/machinery/appliance/cooker/grill/update_icon()
+ . = ..()
+ cut_overlays()
+ if(!stat)
icon_state = on_icon
else
icon_state = off_icon
-
-/obj/machinery/appliance/grill/machinery_process()
- if (!stat)
- for (var/i in cooking_objs)
- do_cooking_tick(i)
+ if(length(cooking_objs))
+ var/datum/cooking_item/CI = cooking_objs[1]
+ var/obj/item/reagent_containers/cooking_container/grill_grate/G = CI.container
+ if(G)
+ add_overlay(image('icons/obj/cooking_machines.dmi', "grill"))
+ var/contents_len = length(G.contents)
+ if(!contents_len)
+ return
+ for(var/i = 1 to contents_len)
+ add_overlay(image('icons/obj/cooking_machines.dmi', "meat[i]"))
\ No newline at end of file
diff --git a/code/modules/cooking/recipes/recipes_grill.dm b/code/modules/cooking/recipes/recipes_grill.dm
new file mode 100644
index 00000000000..47d365da1d0
--- /dev/null
+++ b/code/modules/cooking/recipes/recipes_grill.dm
@@ -0,0 +1,7 @@
+/decl/recipe/grilled_meat
+ appliance = GRILL
+ items = list(
+ /obj/item/reagent_containers/food/snacks/meat
+ )
+ reagents = list(/datum/reagent/sodiumchloride = 1, /datum/reagent/blackpepper = 1, /datum/reagent/spacespice = 1)
+ result = /obj/item/reagent_containers/food/snacks/meatsteak/grilled
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index c8501ea0c77..ffb57684696 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -1511,6 +1511,11 @@
if(76 to INFINITY)
icon_state = "steak"
+/obj/item/reagent_containers/food/snacks/meatsteak/grilled
+ name = "grilled steak"
+ desc = "A piece of meat grilled to absolute perfection. Sssssssip. This is the life."
+ reagents_to_add = list(/datum/reagent/nutriment/protein = 6, /datum/reagent/nutriment/triglyceride = 2, /datum/reagent/sodiumchloride = 1, /datum/reagent/blackpepper = 1, /datum/reagent/spacespice = 1)
+
/obj/item/reagent_containers/food/snacks/spacylibertyduff
name = "spacy liberty duff"
desc = "Jello gelatin, from Alfred Hubbard's cookbook."
diff --git a/html/changelogs/geeves-forgodssake.yml b/html/changelogs/geeves-forgodssake.yml
new file mode 100644
index 00000000000..fe55fb6189c
--- /dev/null
+++ b/html/changelogs/geeves-forgodssake.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Added various sprites to grills. Added a grill recipe."
+ - bugfix: "Fixed various bugs related to grills."
diff --git a/icons/obj/cooking_machines.dmi b/icons/obj/cooking_machines.dmi
index 7a064b7943f..a566e64d39a 100644
Binary files a/icons/obj/cooking_machines.dmi and b/icons/obj/cooking_machines.dmi differ
diff --git a/sound/effects/meatsizzle.ogg b/sound/effects/meatsizzle.ogg
new file mode 100644
index 00000000000..e87e8ce9319
Binary files /dev/null and b/sound/effects/meatsizzle.ogg differ