From cb513cf52eb1835a0c30307ec71fbb62d4b6ed22 Mon Sep 17 00:00:00 2001
From: Contrabang <91113370+Contrabang@users.noreply.github.com>
Date: Tue, 11 Oct 2022 01:06:03 -0400
Subject: [PATCH] [TM] [TGUI] Kitchen Improvements (#19165)
* this got a bit... out of hand
* update icon
* extra lines begone
* soundfix
* sirryan review pt1
* fuck I accidently deleted a line
* sirryan pt2
* AA suggestion
* more review
* hooooly crap
* lewcc review
* reviews
* table
* merge master
* Revert "merge master"
This reverts commit c3ec73a0f830552bb38339f2671f8b3081c7fdaa.
* bundle css
* reviews and revival
* fuck I missed a file
* steel review
---
.../datums/looping_sounds/machinery_sounds.dm | 33 ++
code/game/objects/items/mixing_bowl.dm | 6 +-
code/modules/food_and_drinks/food.dm | 3 +
.../food_and_drinks/food/foods/ingredients.dm | 1 +
.../food_and_drinks/food/foods/meat.dm | 3 +-
.../food_and_drinks/food/foods/misc.dm | 1 +
.../food_and_drinks/food/foods/seafood.dm | 2 +
.../kitchen_machinery/candy_maker.dm | 1 -
.../kitchen_machinery/cooker.dm | 12 +
.../kitchen_machinery/grill_new.dm | 2 +-
.../kitchen_machinery/kitchen_machine.dm | 417 ++++++++++--------
.../kitchen_machinery/microwave.dm | 2 +-
.../kitchen_machinery/oven_new.dm | 2 +-
sound/machines/kitchen/deep_fryer_1.ogg | Bin 0 -> 18412 bytes
sound/machines/kitchen/deep_fryer_2.ogg | Bin 0 -> 16497 bytes
sound/machines/kitchen/deep_fryer_emerge.ogg | Bin 0 -> 36543 bytes
sound/machines/kitchen/deep_fryer_immerse.ogg | Bin 0 -> 18830 bytes
sound/machines/kitchen/grill_end.ogg | Bin 0 -> 36001 bytes
sound/machines/kitchen/grill_mid.ogg | Bin 0 -> 30763 bytes
sound/machines/kitchen/grill_start.ogg | Bin 0 -> 22006 bytes
sound/machines/kitchen/microwave_end.ogg | Bin 0 -> 28144 bytes
sound/machines/kitchen/microwave_mid1.ogg | Bin 0 -> 21999 bytes
sound/machines/kitchen/microwave_mid2.ogg | Bin 0 -> 22863 bytes
sound/machines/kitchen/microwave_start.ogg | Bin 0 -> 22698 bytes
sound/machines/kitchen/oven_loop_end.ogg | Bin 0 -> 23751 bytes
sound/machines/kitchen/oven_loop_mid.ogg | Bin 0 -> 33804 bytes
sound/machines/kitchen/oven_loop_start.ogg | Bin 0 -> 30442 bytes
.../tgui/interfaces/KitchenMachine.js | 101 +++++
tgui/packages/tgui/public/tgui.bundle.css | 2 +-
tgui/packages/tgui/public/tgui.bundle.js | 4 +-
.../styles/interfaces/KitchenMachine.scss | 10 +
tgui/packages/tgui/styles/main.scss | 1 +
32 files changed, 404 insertions(+), 199 deletions(-)
create mode 100644 sound/machines/kitchen/deep_fryer_1.ogg
create mode 100644 sound/machines/kitchen/deep_fryer_2.ogg
create mode 100644 sound/machines/kitchen/deep_fryer_emerge.ogg
create mode 100644 sound/machines/kitchen/deep_fryer_immerse.ogg
create mode 100644 sound/machines/kitchen/grill_end.ogg
create mode 100644 sound/machines/kitchen/grill_mid.ogg
create mode 100644 sound/machines/kitchen/grill_start.ogg
create mode 100644 sound/machines/kitchen/microwave_end.ogg
create mode 100644 sound/machines/kitchen/microwave_mid1.ogg
create mode 100644 sound/machines/kitchen/microwave_mid2.ogg
create mode 100644 sound/machines/kitchen/microwave_start.ogg
create mode 100644 sound/machines/kitchen/oven_loop_end.ogg
create mode 100644 sound/machines/kitchen/oven_loop_mid.ogg
create mode 100644 sound/machines/kitchen/oven_loop_start.ogg
create mode 100644 tgui/packages/tgui/interfaces/KitchenMachine.js
create mode 100644 tgui/packages/tgui/styles/interfaces/KitchenMachine.scss
diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index f7a8f26803d..c0706d29e27 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -33,3 +33,36 @@ GLOBAL_DATUM_INIT(firealarm_soundloop, /datum/looping_sound/firealarm, new(list(
if(!length(output_atoms))
stop()
+///// KITCHEN MACHINERY /////
+
+/datum/looping_sound/kitchen/microwave
+ start_sound = 'sound/machines/kitchen/microwave_start.ogg'
+ start_length = 10
+ mid_sounds = list('sound/machines/kitchen/microwave_mid1.ogg' = 10, 'sound/machines/kitchen/microwave_mid2.ogg' = 1)
+ mid_length = 15
+ end_sound = 'sound/machines/kitchen/microwave_end.ogg'
+ volume = 100
+
+/datum/looping_sound/kitchen/deep_fryer
+ start_sound = 'sound/machines/kitchen/deep_fryer_immerse.ogg'
+ start_length = 10
+ mid_sounds = list('sound/machines/kitchen/deep_fryer_1.ogg' = 1, 'sound/machines/kitchen/deep_fryer_2.ogg' = 1)
+ mid_length = 9
+ end_sound = 'sound/machines/kitchen/deep_fryer_emerge.ogg'
+ volume = 5
+
+/datum/looping_sound/kitchen/oven
+ start_sound = 'sound/machines/kitchen/oven_loop_start.ogg'
+ start_length = 11
+ mid_sounds = list('sound/machines/kitchen/oven_loop_mid.ogg' = 1)
+ mid_length = 12
+ end_sound = 'sound/machines/kitchen/oven_loop_end.ogg'
+ volume = 70
+
+/datum/looping_sound/kitchen/grill
+ start_sound = 'sound/machines/kitchen/grill_start.ogg'
+ start_length = 13
+ mid_sounds = list('sound/machines/kitchen/grill_mid.ogg' = 1)
+ mid_length = 20
+ end_sound = 'sound/machines/kitchen/grill_end.ogg'
+ volume = 50
diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm
index f42fe0de11f..43d8d05dfd5 100644
--- a/code/game/objects/items/mixing_bowl.dm
+++ b/code/game/objects/items/mixing_bowl.dm
@@ -165,7 +165,7 @@
if(id)
amount += reagents.get_reagent_amount(id)
reagents.clear_reagents()
- var/obj/item/reagent_containers/food/snacks/badrecipe/ffuu = new(get_turf(source))
- ffuu.reagents.add_reagent("carbon", amount)
- ffuu.reagents.add_reagent("????", amount/10)
+ var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(get_turf(source))
+ mysteryfood.reagents.add_reagent("carbon", amount)
+ mysteryfood.reagents.add_reagent("????", amount / 10)
make_dirty(75)
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 39b77baf373..2bcae13ba41 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -19,6 +19,9 @@
var/ant_location
/// Time we last checked for ants
var/last_ant_time = 0
+ ///Name of the food to show up in kitchen machines (microwaves, ovens, etc)
+ var/ingredient_name
+ var/ingredient_name_plural
resistance_flags = FLAMMABLE
container_type = INJECTABLE
diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm
index 89cac389f27..8ad9b3ae17d 100644
--- a/code/modules/food_and_drinks/food/foods/ingredients.dm
+++ b/code/modules/food_and_drinks/food/foods/ingredients.dm
@@ -11,6 +11,7 @@
bitesize = 3
list_reagents = list("plantmatter" = 2)
tastes = list("tofu" = 1)
+ ingredient_name = "tofu chunk"
/obj/item/reagent_containers/food/snacks/fried_tofu
name = "fried tofu"
diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm
index 2e844266ace..a97e5ab3d8a 100644
--- a/code/modules/food_and_drinks/food/foods/meat.dm
+++ b/code/modules/food_and_drinks/food/foods/meat.dm
@@ -11,6 +11,8 @@
bitesize = 3
list_reagents = list("protein" = 3)
tastes = list("meat" = 1)
+ ingredient_name = "slab of meat"
+ ingredient_name_plural = "slabs of meat"
/obj/item/reagent_containers/food/snacks/meat/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/kitchen/knife) || istype(W, /obj/item/scalpel))
@@ -353,7 +355,6 @@
list_reagents = list("protein" = 1, "egg" = 5)
tastes = list("egg" = 1)
-
/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
..()
var/turf/T = get_turf(hit_atom)
diff --git a/code/modules/food_and_drinks/food/foods/misc.dm b/code/modules/food_and_drinks/food/foods/misc.dm
index 3191f1e34ec..0b65f5d2234 100644
--- a/code/modules/food_and_drinks/food/foods/misc.dm
+++ b/code/modules/food_and_drinks/food/foods/misc.dm
@@ -105,6 +105,7 @@
filling_color = "#DEDEAB"
list_reagents = list("nutriment" = 4)
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
+ ingredient_name = "turnover"
/obj/item/reagent_containers/food/snacks/warmdonkpocket
name = "warm Donk-pocket"
diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm
index d3f291828ca..72114a5d554 100644
--- a/code/modules/food_and_drinks/food/foods/seafood.dm
+++ b/code/modules/food_and_drinks/food/foods/seafood.dm
@@ -8,6 +8,8 @@
bitesize = 6
list_reagents = list("protein" = 3, "carpotoxin" = 2, "vitamin" = 2)
tastes = list("white fish" = 1)
+ ingredient_name = "fillet of meat"
+ ingredient_name_plural = "fillets of meat"
/obj/item/reagent_containers/food/snacks/salmonmeat
name = "raw salmon"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm b/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
index 0dd03e7d350..60091f44b4b 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
@@ -8,7 +8,6 @@
recipe_type = RECIPE_CANDY
off_icon = "candymaker_off"
on_icon = "candymaker_on"
- broken_icon = "candymaker_broke"
dirty_icon = "candymaker_dirty"
open_icon = "candymaker_open"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
index 0634ccf1a0a..fca8dc7183a 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
@@ -20,6 +20,15 @@
var/has_specials = FALSE
///Set to TRUE if the machine supports upgrades / deconstruction, or else it will ignore stuff like screwdrivers and parts exchangers
var/upgradeable = FALSE
+ var/datum/looping_sound/kitchen/deep_fryer/soundloop
+
+/obj/machinery/cooker/Initialize(mapload)
+ . = ..()
+ soundloop = new(list(src), FALSE) // cereal machine, screw off
+
+/obj/machinery/cooker/Destroy()
+ QDEL_NULL(soundloop)
+ return ..()
// checks if the snack has been cooked in a certain way
/obj/machinery/cooker/proc/checkCooked(obj/item/reagent_containers/food/snacks/D)
@@ -68,6 +77,7 @@
/obj/machinery/cooker/proc/turnoff(obj/item/olditem)
icon_state = officon
+ soundloop.stop()
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
on = FALSE
qdel(olditem)
@@ -79,6 +89,7 @@
/obj/machinery/cooker/proc/burn_food(mob/user, obj/item/reagent_containers/props)
var/obj/item/reagent_containers/food/snacks/badrecipe/burnt = new(get_turf(src))
setRegents(props, burnt)
+ soundloop.stop()
to_chat(user, "You smell burning coming from [src]!")
var/datum/effect_system/smoke_spread/bad/smoke = new // burning things makes smoke!
smoke.set_up(5, 0, src)
@@ -99,6 +110,7 @@
/obj/machinery/cooker/proc/putIn(obj/item/tocook, mob/chef)
icon_state = onicon
to_chat(chef, "You put [tocook] into [src].")
+ soundloop.start()
on = TRUE
chef.drop_item()
tocook.loc = src
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
index 2f69e6dd264..9234a1c535a 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
@@ -8,9 +8,9 @@
recipe_type = RECIPE_GRILL
off_icon = "grill_off"
on_icon = "grill_on"
- broken_icon = "grill_broke"
dirty_icon = "grill_dirty"
open_icon = "grill_open"
+ soundloop_type = /datum/looping_sound/kitchen/grill
// see code/modules/food/recipes_grill.dm for recipes
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 f8bf94934bd..06f0332eaf1 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
@@ -1,3 +1,5 @@
+#define NO_DIRT 0
+#define MAX_DIRT 100
/obj/machinery/kitchen_machine
name = "Base Kitchen Machine"
@@ -10,8 +12,7 @@
active_power_usage = 100
container_type = OPENCONTAINER
var/operating = FALSE // Is it on?
- var/dirty = 0 // = {0..100} Does it need cleaning?
- var/broken = 0 // ={0,1,2} How broken is it???
+ var/dirty = NO_DIRT // = {0..100} Does it need cleaning?
var/efficiency = 0
var/list/cook_verbs = list("Cooking")
//Recipe & Item vars
@@ -20,9 +21,11 @@
//Icon states
var/off_icon
var/on_icon
- var/broken_icon
var/dirty_icon
var/open_icon
+ ///Sound used when starting and ending cooking
+ var/datum/looping_sound/kitchen/soundloop
+ var/soundloop_type
/*******************
* Initialising
@@ -30,10 +33,16 @@
/obj/machinery/kitchen_machine/Initialize(mapload)
. = ..()
+ if(soundloop_type)
+ soundloop = new soundloop_type(list(src), FALSE)
create_reagents(100)
reagents.set_reacting(FALSE)
init_lists()
+/obj/machinery/kitchen_machine/Destroy()
+ QDEL_NULL(soundloop)
+ return ..()
+
/obj/machinery/kitchen_machine/proc/init_lists()
if(!GLOB.cooking_recipes[recipe_type])
GLOB.cooking_recipes[recipe_type] = list()
@@ -62,53 +71,30 @@
/obj/machinery/kitchen_machine/attackby(obj/item/O, mob/user, params)
if(operating)
return
- if(!broken && dirty < 100)
+ if(dirty < MAX_DIRT)
if(default_deconstruction_screwdriver(user, open_icon, off_icon, O))
return
if(exchange_parts(user, O))
return
- if(!broken && istype(O, /obj/item/wrench))
- playsound(src, O.usesound, 50, 1)
- if(anchored)
- anchored = FALSE
- to_chat(user, "\The [src] can now be moved.")
- return
- else if(!anchored)
- anchored = TRUE
- to_chat(user, "\The [src] is now secured.")
- return
default_deconstruction_crowbar(user, O)
- if(broken > 0)
- // Broken == 2 is handled by screwdriver_act
- if(broken == 1 && istype(O, /obj/item/wrench)) // If it's broken and they're doing the wrench
- user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].")
- if(do_after(user, 20 * O.toolspeed, target = src))
- user.visible_message("[user] fixes [src].", "You have fixed [src].")
- icon_state = off_icon
- broken = 0 // Fix it!
- dirty = 0 // just to be sure
- container_type = OPENCONTAINER
- else
- to_chat(user, "It's broken!")
- return 1
- else if(dirty==100) // The machine is all dirty so can't be used!
+ if(dirty == MAX_DIRT) // The machine is all dirty so can't be used!
if(istype(O, /obj/item/reagent_containers/spray/cleaner) || istype(O, /obj/item/soap)) // If they're trying to clean it then let them
user.visible_message("[user] starts to clean [src].", "You start to clean [src].")
if(do_after(user, 20 * O.toolspeed, target = src))
user.visible_message("[user] has cleaned [src].", "You have cleaned [src].")
- dirty = 0 // It's clean!
- broken = 0 // just to be sure
- icon_state = off_icon
+ dirty = NO_DIRT
+ update_icon(UPDATE_ICON_STATE)
container_type = OPENCONTAINER
+ return TRUE
else //Otherwise bad luck!!
to_chat(user, "It's dirty!")
- return 1
+ return TRUE
else if(is_type_in_list(O, GLOB.cooking_ingredients[recipe_type]) || istype(O, /obj/item/mixing_bowl))
- if(contents.len>=max_n_of_items)
+ if(length(contents) >= max_n_of_items)
to_chat(user, "This [src] is full of ingredients, you cannot put more.")
- return 1
+ return TRUE
if(istype(O,/obj/item/stack))
var/obj/item/stack/S = O
if(S.get_amount() > 1)
@@ -121,47 +107,44 @@
add_item(O, user)
else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment)))
if(!O.reagents)
- return 1
+ return TRUE
for(var/datum/reagent/R in O.reagents.reagent_list)
if(!(R.id in GLOB.cooking_reagents[recipe_type]))
to_chat(user, "Your [O] contains components unsuitable for cookery.")
- return 1
- //G.reagents.trans_to(src,G.amount_per_transfer_from_this)
+ return TRUE
else if(istype(O,/obj/item/grab))
return special_attack(O, user)
else
to_chat(user, "You have no idea what you can cook with [O].")
- return 1
- updateUsrDialog()
+ return TRUE
-/obj/machinery/kitchen_machine/screwdriver_act(mob/living/user, obj/item/I)
- if(operating || broken != 2)
+/obj/machinery/kitchen_machine/wrench_act(mob/living/user, obj/item/I)
+ if(operating)
return
- user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].")
- if(do_after(user, 20 * I.toolspeed, target = src))
- I.play_tool_sound(src)
- user.visible_message("[user] fixes part of [src].", "You have fixed part of [src].")
- broken = 1 // Fix it a bit
+
+ I.play_tool_sound(src)
+ if(anchored)
+ to_chat(user, "[src] can now be moved.")
+ else
+ to_chat(user, "[src] is now secured.")
+ anchored = !anchored
return TRUE
/obj/machinery/kitchen_machine/proc/add_item(obj/item/I, mob/user)
if(!user.drop_item())
- to_chat(user, "\The [I] is stuck to your hand, you cannot put it in [src]")
- //return 0
- else
- I.forceMove(src)
- user.visible_message("[user] adds [I] to [src].", "You add [I] to [src].")
+ to_chat(user, "[I] is stuck to your hand, you cannot put it in [src]")
+ return
+
+ I.forceMove(src)
+ user.visible_message("[user] adds [I] to [src].", "You add [I] to [src].")
+ SStgui.update_uis(src)
/obj/machinery/kitchen_machine/attack_ai(mob/user)
- return 0
-
-/obj/machinery/kitchen_machine/attack_hand(mob/user)
- user.set_machine(src)
- interact(user)
+ return FALSE
/obj/machinery/kitchen_machine/proc/special_attack(obj/item/grab/G, mob/user)
to_chat(user, "This is ridiculous. You can not fit [G.affecting] in this [src].")
- return 0
+ return FALSE
/********************
* Machine Menu *
@@ -169,38 +152,34 @@
/obj/machinery/kitchen_machine/proc/format_content_descs()
. = ""
- var/list/items_counts = new
- var/list/items_measures = new
- var/list/items_measures_p = new
+ var/list/items_counts = list()
+ var/list/name_overrides = list()
for(var/obj/O in contents)
var/display_name = O.name
- if(istype(O,/obj/item/reagent_containers/food/snacks/egg))
- items_measures[display_name] = "egg"
- items_measures_p[display_name] = "eggs"
- if(istype(O,/obj/item/reagent_containers/food/snacks/tofu))
- items_measures[display_name] = "tofu chunk"
- items_measures_p[display_name] = "tofu chunks"
- if(istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat
- items_measures[display_name] = "slab of meat"
- items_measures_p[display_name] = "slabs of meat"
- if(istype(O,/obj/item/reagent_containers/food/snacks/donkpocket))
- display_name = "Turnovers"
- items_measures[display_name] = "turnover"
- items_measures_p[display_name] = "turnovers"
- if(istype(O,/obj/item/reagent_containers/food/snacks/carpmeat))
- items_measures[display_name] = "fillet of meat"
- items_measures_p[display_name] = "fillets of meat"
+ if(istype(O, /obj/item/reagent_containers/food))
+ var/obj/item/reagent_containers/food/food = O
+ if(!items_counts[display_name])
+ if(food.ingredient_name)
+ name_overrides[display_name] = food.ingredient_name
+ else
+ name_overrides[display_name] = display_name
+ else
+ if(food.ingredient_name_plural)
+ name_overrides[display_name] = food.ingredient_name_plural
+ else if(items_counts[display_name] == 1) // Must only add "s" once or you get stuff like "eggsssss"
+ name_overrides[display_name] = "[name_overrides[display_name]]s" //name_overrides[display_name] Will be set on the first time as the singular form
+
items_counts[display_name]++
for(var/O in items_counts)
var/N = items_counts[O]
- if(!(O in items_measures))
- . += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
+ if(!(O in name_overrides))
+ . += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
else
if(N==1)
- . += {"[capitalize(O)]: [N] [items_measures[O]]
"}
+ . += {"[capitalize(O)]: [N] [name_overrides[O]]
"}
else
- . += {"[capitalize(O)]: [N] [items_measures_p[O]]
"}
+ . += {"[capitalize(O)]: [N] [name_overrides[O]]
"}
for(var/datum/reagent/R in reagents.reagent_list)
var/display_name = R.name
@@ -209,38 +188,7 @@
if(R.id == "frostoil")
display_name = "Coldsauce"
- . += {"[display_name]: [R.volume] unit\s
"}
-
-
-/obj/machinery/kitchen_machine/interact(mob/user) // The microwave Menu
- if(panel_open || !anchored)
- return
- var/dat = ""
- if(broken > 0)
- dat = {"Bzzzzttttt"}
- else if(operating)
- dat = {"[pick(cook_verbs)] in progress!
Please wait...!"}
- else if(dirty==100)
- dat = {"This [src] is dirty!
Please clean it before use!"}
- else
- dat += format_content_descs()
- if(dat)
- dat = {"Ingredients:
[dat]"}
- else
- dat = {"[src] is empty
"}
-
- dat += {"
\
-Turn on!
\
-Eject ingredients!
\
-"}
-
- var/datum/browser/popup = new(user, name, name, 400, 400)
- popup.set_content(dat)
- popup.open(0)
- onclose(user, "[name]")
- return
-
-
+ . += {"[display_name]: [R.volume] unit\s
"}
/************************************
* Machine Menu Handling/Cooking *
@@ -250,7 +198,7 @@
if(stat & (NOPOWER|BROKEN))
return
start()
- if(reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
+ if(!has_cookables()) //dry run
if(!wzhzhzh(10))
abort()
return
@@ -263,7 +211,7 @@
//This only runs if there is a single recipe source to be made and it is a failure (the machine was loaded with only 1 mixing bowl that results in failure OR was directly loaded with ingredients that results in failure).
//If there are multiple sources, this bit gets skipped.
dirty += 1
- if(prob(max(10,dirty*5))) //chance to get so dirty we require cleaning before next use
+ if(prob(max(10, dirty * 5) || has_extra_item())) // 5% failure per failed recipee, maxed at 10%, or it has an extra item
if(!wzhzhzh(4))
abort()
return
@@ -272,14 +220,7 @@
muck_finish()
fail()
return
- else if(has_extra_item()) //if extra items present, break down and require repair before next use
- if(!wzhzhzh(4))
- abort()
- return
- broke()
- fail()
- return
- else //otherwise just stop without requiring cleaning/repair
+ else //otherwise just stop without requiring cleaning
if(!wzhzhzh(10))
abort()
return
@@ -296,6 +237,15 @@
return
make_recipes(recipes_to_make)
+/obj/machinery/kitchen_machine/proc/dispose(mob/user)
+ for(var/obj/O in contents)
+ O.forceMove(loc)
+ if(reagents.total_volume)
+ dirty++
+ reagents.clear_reagents()
+ to_chat(user, "You eject the contents of [src].")
+ SStgui.update_uis(src)
+
//choose_recipes(): picks out recipes for the machine and any mixing bowls it may contain.
//builds a list of the selected recipes to be made in a later proc by associating the "source" of the ingredients (mixing bowl, machine) with the recipe for that source
/obj/machinery/kitchen_machine/proc/choose_recipes()
@@ -354,64 +304,51 @@
/obj/machinery/kitchen_machine/proc/wzhzhzh(seconds)
for(var/i=1 to seconds)
if(stat & (NOPOWER|BROKEN))
- return 0
+ return FALSE
use_power(500)
sleep(10)
- return 1
+ return TRUE
/obj/machinery/kitchen_machine/proc/has_extra_item()
for(var/obj/O in contents)
if(!is_type_in_list(O, list(/obj/item/reagent_containers/food, /obj/item/grown, /obj/item/mixing_bowl)))
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/machinery/kitchen_machine/proc/start()
- visible_message("\The [src] turns on.", "You hear \a [src].")
+ visible_message("[src] turns on.", blind_message = "You hear \a [src].")
+ if(soundloop)
+ soundloop.start()
+ else
+ playsound(loc, 'sound/machines/click.ogg', 50, 1)
operating = TRUE
- icon_state = on_icon
- updateUsrDialog()
+ update_icon(UPDATE_ICON_STATE)
+ SStgui.update_uis(src)
+
+/obj/machinery/kitchen_machine/proc/finish_sound()
+ if(soundloop)
+ soundloop.stop()
+ else
+ playsound(loc, 'sound/machines/ding.ogg', 50, 1)
/obj/machinery/kitchen_machine/proc/abort()
operating = FALSE // Turn it off again aferwards
- icon_state = off_icon
- updateUsrDialog()
+ update_icon(UPDATE_ICON_STATE)
/obj/machinery/kitchen_machine/proc/stop()
- playsound(loc, 'sound/machines/ding.ogg', 50, 1)
+ finish_sound()
operating = FALSE // Turn it off again aferwards
- icon_state = off_icon
- updateUsrDialog()
-
-/obj/machinery/kitchen_machine/proc/dispose()
- for(var/obj/O in contents)
- O.forceMove(loc)
- if(reagents.total_volume)
- dirty++
- reagents.clear_reagents()
- to_chat(usr, "You dispose of \the [src]'s contents.")
- updateUsrDialog()
+ update_icon(UPDATE_ICON_STATE)
/obj/machinery/kitchen_machine/proc/muck_start()
playsound(loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
- icon_state = dirty_icon // Make it look dirty!!
+ dirty = MAX_DIRT // Make it dirty so it can't be used until cleaned
+ update_icon(UPDATE_ICON_STATE)
/obj/machinery/kitchen_machine/proc/muck_finish()
- playsound(loc, 'sound/machines/ding.ogg', 50, 1)
- visible_message("\The [src] gets covered in muck!")
- dirty = 100 // Make it dirty so it can't be used util cleaned
+ visible_message("[src] gets covered in muck!")
flags = null //So you can't add condiments
- icon_state = dirty_icon // Make it look dirty too
- operating = FALSE // Turn it off again aferwards
- updateUsrDialog()
-
-/obj/machinery/kitchen_machine/proc/broke()
- do_sparks(2, 1, src)
- icon_state = broken_icon // Make it look all busted up and shit
- visible_message("[src] breaks!") //Let them know they're stupid
- broken = 2 // Make it broken so it can't be used util fixed
- flags = null //So you can't add condiments
- operating = FALSE // Turn it off again aferwards
- updateUsrDialog()
+ stop()
/obj/machinery/kitchen_machine/proc/fail()
var/amount = 0
@@ -419,45 +356,149 @@
mb.fail(src)
mb.forceMove(get_turf(src))
for(var/obj/O in contents)
- amount++
- if(O.reagents) //this is reagents in inserted objects (like chems in produce)
- var/id = O.reagents.get_master_reagent_id()
- if(id)
- amount+=O.reagents.get_reagent_amount(id)
+ if(O.reagents?.total_volume)
+ amount += O.reagents.total_volume
qdel(O)
- if(reagents && reagents.total_volume) //this is directly-added reagents (like water added directly into the machine)
- var/id = reagents.get_master_reagent_id()
- if(id)
- amount += reagents.get_reagent_amount(id)
+ if(reagents?.total_volume)
+ amount += reagents.total_volume
reagents.clear_reagents()
if(amount)
- var/obj/item/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
- ffuu.reagents.add_reagent("carbon", amount)
- ffuu.reagents.add_reagent("????", amount/10)
- ffuu.forceMove(get_turf(src))
+ var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(src)
+ mysteryfood.reagents.add_reagent("carbon", amount / 2)
+ mysteryfood.reagents.add_reagent("????", amount / 15)
+ mysteryfood.forceMove(get_turf(src))
-/obj/machinery/kitchen_machine/Topic(href, href_list)
- if(..() || panel_open)
+/obj/machinery/kitchen_machine/update_icon_state()
+ . = ..()
+ if(dirty == MAX_DIRT)
+ icon_state = dirty_icon
return
-
- usr.set_machine(src)
if(operating)
- updateUsrDialog()
- return
-
- switch(href_list["action"])
- if("cook")
- cook()
-
- if("dispose")
- dispose()
- return
+ icon_state = on_icon
+ else
+ icon_state = off_icon
/obj/machinery/kitchen_machine/build_reagent_description(mob/user)
return
-/obj/machinery/kitchen_machine/examine(mob/user, infix = "", suffix = "")
+/obj/machinery/kitchen_machine/examine(mob/user)
. = ..()
var/dat = format_content_descs()
if(dat)
- . += "It contains:
[dat]"
+ . += "It contains:
[dat]"
+
+/obj/machinery/kitchen_machine/attack_hand(mob/user)
+ if(stat & (BROKEN|NOPOWER) || panel_open || !anchored)
+ return
+
+ ui_interact(user)
+
+/obj/machinery/kitchen_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "KitchenMachine", name, 400, 300, master_ui, state)
+ ui.open()
+
+/obj/machinery/kitchen_machine/ui_data(mob/user)
+ var/list/data = list()
+ data["operating"] = operating
+ data["inactive"] = FALSE
+ data["no_eject"] = FALSE
+ data["tooltip"] = ""
+ if(dirty >= MAX_DIRT)
+ data["inactive"] = TRUE
+ data["tooltip"] = "It's too dirty."
+ else if(!has_cookables())
+ data["inactive"] = TRUE
+ data["no_eject"] = TRUE
+ data["tooltip"] = "There are no contents."
+
+ var/list/items_counts = list()
+ var/list/name_overrides = list()
+ for(var/obj/O in contents)
+ var/display_name = O.name
+ if(istype(O, /obj/item/reagent_containers/food))
+ var/obj/item/reagent_containers/food/food = O
+ if(!items_counts[display_name])
+ if(food.ingredient_name)
+ name_overrides[display_name] = food.ingredient_name
+ else
+ name_overrides[display_name] = display_name
+ else
+ if(food.ingredient_name_plural)
+ name_overrides[display_name] = food.ingredient_name_plural
+ else
+ name_overrides[display_name] = "[name_overrides[display_name]]\s" //name_overrides[display_name] Will be set on the first time as the singular form
+
+ items_counts[display_name]++
+
+ data["ingredients"] = list()
+ for(var/food in items_counts)
+ var/N = items_counts[food]
+ var/units
+ if(!(food in name_overrides))
+ units = "[lowertext(food)]"
+ else
+ units = "[name_overrides[food]]"
+
+ var/list/data_pr = list(
+ "name" = capitalize(food),
+ "amount" = N,
+ "units" = units
+ )
+
+ data["ingredients"] += list(data_pr)
+
+ for(var/datum/reagent/R in reagents.reagent_list)
+ var/display_name = R.name
+ if(R.id == "capsaicin")
+ display_name = "Hotsauce"
+ if(R.id == "frostoil")
+ display_name = "Coldsauce"
+
+ var/unitamt = "unit"
+ if(R.volume > 1)
+ unitamt = "units"
+
+ var/list/data_pr = list(
+ "name" = display_name,
+ "amount" = R.volume,
+ "units" = unitamt
+ )
+
+ data["ingredients"] += list(data_pr)
+
+ return data
+
+/obj/machinery/kitchen_machine/ui_static_data(mob/user)
+ var/list/data = list()
+ data["name"] = name
+ return data
+
+/obj/machinery/kitchen_machine/ui_act(action, params, datum/tgui/ui)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("cook")
+ cook()
+ if("eject")
+ dispose(ui.user)
+
+/obj/machinery/kitchen_machine/AltClick(mob/user)
+ if(dirty >= MAX_DIRT)
+ to_chat(user, "It's too dirty.")
+ return
+ if(!has_cookables())
+ to_chat(user, "It's empty!")
+ return
+
+ cook()
+ to_chat(user, "You activate [src].")
+
+/obj/machinery/kitchen_machine/proc/has_cookables()
+ return reagents.total_volume > 0 || length(contents)
+
+#undef NO_DIRT
+#undef MAX_DIRT
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 3248531fb82..a36949ecbd6 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -8,10 +8,10 @@
recipe_type = RECIPE_MICROWAVE
off_icon = "mw"
on_icon = "mw1"
- broken_icon = "mwb"
dirty_icon = "mwbloody"
open_icon = "mw-o"
pass_flags = PASSTABLE
+ soundloop_type = /datum/looping_sound/kitchen/microwave
// see code/modules/food/recipes_microwave.dm for recipes
diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm b/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
index de2a3a35f77..82ae915fa04 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
@@ -8,9 +8,9 @@
recipe_type = RECIPE_OVEN
off_icon = "oven_off"
on_icon = "oven_on"
- broken_icon = "oven_broke"
dirty_icon = "oven_dirty"
open_icon = "oven_open"
+ soundloop_type = /datum/looping_sound/kitchen/oven
// see code/modules/food/recipes_oven.dm for recipes
diff --git a/sound/machines/kitchen/deep_fryer_1.ogg b/sound/machines/kitchen/deep_fryer_1.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..2c3dd719d92e96401ba234735a415f8933f566b3
GIT binary patch
literal 18412
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
Qi
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 `T-aC?#J
zOzAm1)eA{h^oHcpmY8)ao9d(;C=~QxoROcSlt3?ReuT!5_J+OS{@T-&f(OX|rXE%t#@lb_@0tj#5JRLO5VO}6?
zN!&iHG8FZV74qLIHaot+$Rz)LWsOpIed}~KSHJ585;b}d1-%Mq(8rm~Pe0@K
zXfm{B%`Rw<+|~n*PK`2I7j%O@YGjm6DAMN`Oj+}Yh4}y^=s(*vl8ru^qrQM{i+Z^9
z281-fuAltrk@;}YL!B``*&jRx4MojMXt?4dixH-L6#;WcRz59J&;RVx5(W^c4wa`F
zso-2*SI{Qjx4@r3v2+m(oJOOIv5gu~#}Kb!jjM!3gXzb!GB*9gO}RB`4t*8$BTqIc
zlg4;52;WM{w1XH9_3v&!8DUn=7_!WBMF=fACyYnb_b2X(pXa
zH&38uD8p$>-C&JmUeFS_d+rfN>2*T(URXlBqXwu2-i>K$MEN}QRF|Su&%0^=wy7mn
zYTk?7WbZ?zXyRI;vg2X+4O_xnjz8zVlPvebd)9^mTFpt!FlwmAHP7D(t8B$y*P^dJ
z*VjtoKh2%?pj>A9_^wkRBS=BJ!`-VC(%8MgfcEp~Yr6vIa6AHlW&exs^>CI=(D6q8
z&GcgqfNpx6P>Vf`@7(O}raMeMbsII$GPucVKV(>K(L6nA*zNgvw8^7gVSl^U5ch#N
zruX|Qbm0MQ8MLD8=u9`E2erf2$=1+av6?S051nTq*`?IW*^;r2u1&^mo#&znrh>D<
zaQUAV5K2Z@AkmQeY8Wmr*7H!dv%}XXC*x$o%dHYta`|o#qBeinr0P_7EZ^(>;VS$g
zWI7UuQ|{WalRks%Bc5a$Lq8lf8gBSEOg5!#Ldda!otQT%mW58
zIC%IoK9fqH_VQukQN&hAf+1LrNePm&9qeoq4#V8c;NSHC2N8f;SH7Q2!LHx)I{lo@
zvr$*CnKiBa@B_t0)7AD;!sp$(mKgTa2l6JZIIkW5Y_JW*qPsI#>nP)I(=&!x7ooA9YvBa@ckKLhAerYJF~xRtLg%-|R?*1u
zpSE6n$m
zT15<=0rvscB(NO4cyf#a|Cpv_po`UtumvL>(YjOQ3kz+QKj#@70HF|BZbiQqX+9P9+dYbKTgOhJ^shaTbq2*yFkprUGCTZsy%WG
z5Yw-Z`eVxB7ql)m;cw#uFZA!^-Fe*IG^XU}zpH*ZhBOyE|EyvdBr;$?8fg=aUr!g@~EPs4p;;n=jQT~_O%AfRtUrdqI*fRDV;#%HB%_A_9
zcyULlF0n1|ui2{&PSASb&D5I0@&}-7QYoY73%%M>&>g_
zEgx26>EDCDh(`!}HH{h&*SnNj^aee}53{O!0jaJX;p2%_7sfpW0F7u;GAsmm5q`ai
zWFs^j`oiwR0MOwJ$JKONllpl*{`t!O>_R8p!prxoft=5VBz0MSIM;^)U~*9)Nt;N)
z*!QtE%)qYx`tHp8hs$GM_r%%VbyfQM!qj|Vv1%2yknfnI$^1T(6R}!9wJ`d_w?H9D
z!U%~>4i<(>iW4R09WLTzF<#Uo^>aH=CD-b~%Lsfkq9tqoljlRIlTXgj9qqn$s
zw~Hl31e$J@!B>IP*(g0`Sb$Whd?YK{9eO@oL}EGsMbtX|+%IQUkbYTHcZ%rZZSYJ3
z_2C4g-wO@-Q$W}
ztmMI{`%9Is4tw8fJ1bYU_pOob+uwQQt&lU?ey<8%FFuwzjA-~;s2(a~7#~yo>>`!=gMjNto5O-uOt|0l5mPW^_l?k=aXp4R{j2CozVtB8WIFxmlJ4;8>M9s1Rp
zhfwf}<%u9^21Z*e{Ea(ZT8(dgyGI-V^Z{Qd042-@sjvY!f`*C!YZpmwoK#X-q6c5E
zC8;}<_GKsuCYuw?hYAsZ7HHKG&wT@)v0ElP;i
zVs>~=PN835EdbOBulE@lU>{;wR(1g6PzT_-*mp;BNzN2jT5e?@y4%9<_|j-eeKqmt
zOabf_U-cM}5<47i14xI7fWJpq#+qfxqWMH>IuZ8+tFk8hjifaS%WSu@Yp%5f>6gAjbe6ysD%n(*nsnN%ZAF(dBZ{NS*^Ks_=$$>gA5)1L<{eQ2>|2?uhj!L>N8Q$
z_5o#O%>?p$`|D;!V^lAowUG#HUtM-T&aGRs{g1SFc_!03>ht
zcla4?qgL%K3;mCECK-h0bkY01B^Z(
zY1#qs4%Gy_t+Gxk{isBw&`+b=dxfg(Z8R5ZUA8hVUT-=8^bN1~iUBZ&Ah!b`6G1~Y
zfc>5m!x*@@R7tgVIfM#n)g?yEYyn|SdmWPa=%u6jM9h1of}G5w?1jG21$w`21V~?D0JMrH91$1i93=iE3e+00Sul
mIzO88tu@!x7hnJP-)qL*B&^r5&Ea+y+x^4P=g_&v3L^nOM}d<7
literal 0
HcmV?d00001
diff --git a/sound/machines/kitchen/deep_fryer_2.ogg b/sound/machines/kitchen/deep_fryer_2.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ced31e7e4be0dab2cef868aec1d4eae5f24dd034
GIT binary patch
literal 16497
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 |