diff --git a/aurorastation.dme b/aurorastation.dme index c03ba8f33f2..d1866e2f52f 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1832,6 +1832,7 @@ #include "code\modules\effects\maze_generation\loot_modules\_loot_module_base.dm" #include "code\modules\effects\maze_generation\loot_modules\trash_module.dm" #include "code\modules\effects\maze_generation\loot_modules\turf_painter.dm" +#include "code\modules\effects\particles\native_particles.dm" #include "code\modules\effects\sparks\procs.dm" #include "code\modules\effects\sparks\spawner.dm" #include "code\modules\effects\sparks\visuals.dm" diff --git a/code/modules/cooking/machinery/cooking_machines/_appliance.dm b/code/modules/cooking/machinery/cooking_machines/_appliance.dm index b7d68a4ef0b..3942a1a2ccb 100644 --- a/code/modules/cooking/machinery/cooking_machines/_appliance.dm +++ b/code/modules/cooking/machinery/cooking_machines/_appliance.dm @@ -38,6 +38,9 @@ var/can_burn_food // Can the object burn food that is left inside? var/burn_chance = 10 // How likely is the food to burn? var/list/cooking_objs = list() // List of things being cooked + var/particles/particle_holder + var/particle_type = /particles/cooking_smoke + var/smoke_percent = 0 // If the machine has multiple output modes, define them here. var/selected_option @@ -53,6 +56,7 @@ stat &= ~NOPOWER else stat |= NOPOWER + particle_holder = new particle_type /obj/machinery/appliance/Destroy() for (var/a in cooking_objs) @@ -317,11 +321,36 @@ return TRUE +/obj/machinery/appliance/proc/get_smoke_percent() + if(can_burn_food == FALSE) + return 0 + var/closest_to_burn = 0 + for (var/datum/cooking_item/i in cooking_objs) + if(i.burned | !i.max_cookwork) + continue + var/progress = i.cookwork / i.max_cookwork + var/half_overcook = (i.overcook_mult - 1)*0.5 + var/normalized_burn = (progress - half_overcook)/(i.overcook_mult - half_overcook) + if(progress < 1+half_overcook) + continue + if(normalized_burn > closest_to_burn) + closest_to_burn = normalized_burn + return closest_to_burn + +/obj/machinery/appliance/proc/adjust_smoke() + smoke_percent = get_smoke_percent() + particle_holder.spawning = 3 * smoke_percent + if(smoke_percent > 0) + particles = particle_holder + else + particles = null + /obj/machinery/appliance/process() if (cooking_power > 0 && cooking) for (var/i in cooking_objs) do_cooking_tick(i) - + if(can_burn_food) + adjust_smoke() /obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) audible_message("[src] [finish_verb]", intent_message = PING_SOUND) diff --git a/code/modules/cooking/machinery/cooking_machines/fryer.dm b/code/modules/cooking/machinery/cooking_machines/fryer.dm index fd4a8aa7d44..b4fb7c94b0c 100644 --- a/code/modules/cooking/machinery/cooking_machines/fryer.dm +++ b/code/modules/cooking/machinery/cooking_machines/fryer.dm @@ -78,6 +78,17 @@ icon_state = on_icon else icon_state = off_icon + cut_overlays() + var/list/pans = list() + for(var/obj/item/reagent_containers/cooking_container/CC in contents) + var/image/pan_overlay + if(CC.appliancetype == FRYER) + pan_overlay = image('icons/obj/cooking_machines.dmi', "basket[Clamp(length(pans)+1, 1, 2)]") + pan_overlay.color = CC.color + pans += pan_overlay + if(isemptylist(pans)) + return + add_overlay(pans) ..() //Fryer gradually infuses any cooked food with oil. Moar calories @@ -215,4 +226,4 @@ user.visible_message("[user] pours some oil into [src].", SPAN_NOTICE("You pour [amount]u of oil into [src]."), SPAN_NOTICE("You hear something viscous being poured into a metal container.")) return TRUE //If neither of the above returned, then call parent as normal - ..() \ No newline at end of file + ..() diff --git a/code/modules/cooking/machinery/cooking_machines/oven.dm b/code/modules/cooking/machinery/cooking_machines/oven.dm index b497c8906b7..4cd9a2fff21 100644 --- a/code/modules/cooking/machinery/cooking_machines/oven.dm +++ b/code/modules/cooking/machinery/cooking_machines/oven.dm @@ -51,12 +51,13 @@ /obj/machinery/appliance/cooker/oven/update_icon() if (!open) - if (!stat) - icon_state = "ovenclosed_on" - else - icon_state = "ovenclosed_off" + icon_state = "ovenclosed" else icon_state = "ovenopen" + cut_overlays() + if (!stat) + var/glow = image('icons/obj/cooking_machines.dmi', "oven_on", EFFECTS_ABOVE_LIGHTING_LAYER) + add_overlay(glow) ..() /obj/machinery/appliance/cooker/oven/AltClick(var/mob/user) @@ -133,4 +134,4 @@ else icon_state = "adhomai_ovenclosed_off" else - icon_state = "adhomai_oven_open" \ No newline at end of file + icon_state = "adhomai_oven_open" diff --git a/code/modules/cooking/machinery/cooking_machines/stove.dm b/code/modules/cooking/machinery/cooking_machines/stove.dm index fd554c86df4..dfebf61ac87 100644 --- a/code/modules/cooking/machinery/cooking_machines/stove.dm +++ b/code/modules/cooking/machinery/cooking_machines/stove.dm @@ -1,15 +1,15 @@ /obj/machinery/appliance/cooker/stove name = "stove" desc = "Don't touch it!" - icon_state = "stove_off" + icon_state = "stove" cook_type = "pan-fried" appliancetype = SKILLET | SAUCEPAN | POT food_color = "#a34719" can_burn_food = TRUE active_power_usage = 6 KILOWATTS heating_power = 6000 - on_icon = "stove_on" - off_icon = "stove_off" + on_icon = "stove" + off_icon = "stove" resistance = 5000 // Approx. 2 minutes. idle_power_usage = 1 KILOWATTS @@ -30,6 +30,9 @@ /obj/machinery/appliance/cooker/stove/update_icon() . = ..() cut_overlays() + if (!stat) + var/glow = image('icons/obj/cooking_machines.dmi', "stove_burner") + add_overlay(glow) var/list/pans = list() for(var/obj/item/reagent_containers/cooking_container/CC in contents) var/image/pan_overlay @@ -70,4 +73,4 @@ if(T20C + 41 to T20C + 60) add_overlay("stove_fire3") if(T20C + 61 to INFINITY) - add_overlay("stove_fire4") \ No newline at end of file + add_overlay("stove_fire4") diff --git a/code/modules/effects/particles/native_particles.dm b/code/modules/effects/particles/native_particles.dm new file mode 100644 index 00000000000..cb61f5e3fd8 --- /dev/null +++ b/code/modules/effects/particles/native_particles.dm @@ -0,0 +1,14 @@ +/particles/cooking_smoke + width = 256 + height = 256 + count = 250 + spawning = 3 //per tick + lifespan = 30 //in ticks + fade = 20 + fadein = 5 + position = generator("box", list(-12,16,0), list(12,-4,50)) //x,y,z bounding box, origin is in the center of the parent + gravity = list(0.1, 1) + friction = 0.3 //percentage + drift = generator("sphere", 0, 1.5) + icon = 'icons/effects/native_particles.dmi' + icon_state = "cooking_smoke" diff --git a/html/changelogs/atteria-kitchen-looks.yml b/html/changelogs/atteria-kitchen-looks.yml new file mode 100644 index 00000000000..b1dc230ac2b --- /dev/null +++ b/html/changelogs/atteria-kitchen-looks.yml @@ -0,0 +1,8 @@ +author: atteria + +delete-after: True + +changes: + - imageadd: "Resprited most kitchen appliances." + - imageadd: "Added smoke effects to show when food is about to burn." + - bugfix: "Fixed the stove's turned on animation not displaying." diff --git a/icons/effects/native_particles.dmi b/icons/effects/native_particles.dmi new file mode 100644 index 00000000000..76657645726 Binary files /dev/null and b/icons/effects/native_particles.dmi differ diff --git a/icons/obj/cooking_machines.dmi b/icons/obj/cooking_machines.dmi index 5cb693d9cd7..da0b4a1b707 100644 Binary files a/icons/obj/cooking_machines.dmi and b/icons/obj/cooking_machines.dmi differ