diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 8e4b3d9f2d..70d6a8ae7c 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -15141,6 +15141,9 @@
req_access_txt = "28"
},
/obj/effect/turf_decal/delivery,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aKW" = (
@@ -15604,9 +15607,6 @@
/obj/machinery/chem_master/condimaster{
name = "CondiMaster Neo"
},
-/obj/machinery/camera{
- c_tag = "Kitchen Cold Room"
- },
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
@@ -60595,6 +60595,14 @@
/obj/item/device/flashlight,
/turf/open/floor/plasteel/black,
/area/engine/engineering)
+"QoL" = (
+/obj/machinery/camera{
+ c_tag = "Kitchen Cold Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/reagent_dispensers/cooking_oil,
+/turf/open/floor/plasteel/showroomfloor,
+/area/crew_quarters/kitchen)
(1,1,1) = {"
aaa
@@ -99259,7 +99267,7 @@ alP
aGL
aHY
aQj
-aQj
+QoL
aMk
aNK
aOM
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index b454b9f9c2..aac4220a82 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -21904,14 +21904,10 @@
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aWJ" = (
-/obj/structure/sink/kitchen{
- desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
- name = "sink";
- pixel_y = 28
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aWK" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 7a04dc6d06..1d65c33c2a 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -53396,6 +53396,7 @@
dir = 4;
pixel_x = 28
},
+/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"cgG" = (
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index ee9fbf1a7b..6e21a7c806 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -18585,17 +18585,13 @@
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aIW" = (
-/obj/structure/sink/kitchen{
- desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
- name = "sink";
- pixel_y = 28
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aIX" = (
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index a28ea84b3c..8702ce0eba 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -19097,6 +19097,7 @@
dir = 8;
pixel_x = 23
},
+/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"aVc" = (
diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index e8c2f4f05e..c0aa24830f 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -21,4 +21,57 @@
mid_sounds = list('sound/machines/generator/generator_mid1.ogg'=1, 'sound/machines/generator/generator_mid2.ogg'=1, 'sound/machines/generator/generator_mid3.ogg'=1)
mid_length = 4
end_sound = 'sound/machines/generator/generator_end.ogg'
- volume = 40
\ No newline at end of file
+<<<<<<< HEAD
+ volume = 40
+=======
+ volume = 40
+
+
+/datum/looping_sound/server
+ mid_sounds = list('sound/machines/tcomms/tcomms_mid1.ogg'=1,'sound/machines/tcomms/tcomms_mid2.ogg'=1,'sound/machines/tcomms/tcomms_mid3.ogg'=1,'sound/machines/tcomms/tcomms_mid4.ogg'=1,\
+ 'sound/machines/tcomms/tcomms_mid5.ogg'=1,'sound/machines/tcomms/tcomms_mid6.ogg'=1,'sound/machines/tcomms/tcomms_mid7.ogg'=1)
+ mid_length = 17
+ range_modifier = -4.5
+ volume = 50
+
+/datum/looping_sound/computer
+ start_sound = 'sound/machines/computer/computer_start.ogg'
+ start_length = 72
+ mid_sounds = list('sound/machines/computer/computer_mid1.ogg'=1, 'sound/machines/computer/computer_mid2.ogg'=1)
+ mid_length = 6.1
+ end_sound = 'sound/machines/computer/computer_end.ogg'
+ volume = 10
+ range_modifier = -5.5
+
+/datum/looping_sound/borg
+ mid_sounds = list('sound/machines/borg/borg_mid1.ogg'=1, 'sound/machines/borg/borg_mid2.ogg'=1, 'sound/machines/borg/borg_mid3.ogg'=1)
+ mid_length = 19.5
+ end_sound = 'sound/machines/computer/computer_end.ogg'
+ volume = 80
+ range_modifier = -5.5
+
+
+/datum/looping_sound/deep_fryer
+ start_sound = 'sound/machines/fryer/deep_fryer_immerse.ogg' //my immersions
+ start_length = 10
+ mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
+ mid_length = 2
+ end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg'
+ volume = 25
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/looping_sound/microwave
+ start_sound = 'sound/machines/microwave/microwave-start.ogg'
+ start_length = 10
+ mid_sounds = list('sound/machines/microwave/microwave-mid1.ogg'=10, 'sound/machines/microwave/microwave-mid2.ogg'=1)
+ mid_length = 10
+ end_sound = 'sound/machines/microwave/microwave-end.ogg'
+ volume = 90
+
+/datum/looping_sound/gravgen
+ mid_sounds = list('sound/machines/gravgen/gravgen_mid1.ogg'=1,'sound/machines/gravgen/gravgen_mid2.ogg'=1,'sound/machines/gravgen/gravgen_mid3.ogg'=1,'sound/machines/gravgen/gravgen_mid4.ogg'=1,)
+ mid_length = 17
+ range_modifier = -4.5
+ volume = 70
+>>>>>>> 5946689... Improves the deep fryer (#32482)
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index 106d5abb1e..d61db6fe15 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -8,7 +8,7 @@
icon_state = "meat"
dried_type = /obj/item/reagent_containers/food/snacks/sosjerky/healthy
bitesize = 3
- list_reagents = list("nutriment" = 3)
+ list_reagents = list("nutriment" = 3, "cooking_oil" = 2) //Meat has fats that a food processor can process into cooking oil
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/plain
slice_path = /obj/item/reagent_containers/food/snacks/meat/rawcutlet/plain
slices_num = 3
@@ -170,7 +170,7 @@
name = "bear meat"
desc = "A very manly slab of meat."
icon_state = "bearmeat"
- list_reagents = list("nutriment" = 12, "morphine" = 5, "vitamin" = 2)
+ list_reagents = list("nutriment" = 12, "morphine" = 5, "vitamin" = 2, "cooking_oil" = 6)
filling_color = "#FFB6C1"
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/bear
slice_path = /obj/item/reagent_containers/food/snacks/meat/rawcutlet/bear
@@ -205,7 +205,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab/goliath
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
- list_reagents = list("nutriment" = 3, "toxin" = 5)
+ list_reagents = list("nutriment" = 3, "toxin" = 5, "cooking_oil" = 3)
icon_state = "goliathmeat"
tastes = list("meat" = 1)
foodtype = RAW | MEAT | TOXIC
@@ -218,7 +218,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab/meatwheat
name = "meatwheat clump"
desc = "This doesn't look like meat, but your standards aren't that high to begin with."
- list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5)
+ list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5, "cooking_oil" = 1)
filling_color = rgb(150, 0, 0)
icon_state = "meatwheat_clump"
bitesize = 4
@@ -228,7 +228,11 @@
/obj/item/reagent_containers/food/snacks/meat/slab/gorilla
name = "gorilla meat"
desc = "Much meatier than monkey meat."
+<<<<<<< HEAD
list_reagents = list("nutriment" = 5, "vitamin" = 1)
+=======
+ list_reagents = list("nutriment" = 5, "vitamin" = 1, "cooking_oil" = 5) //Plenty of fat!
+>>>>>>> 5946689... Improves the deep fryer (#32482)
/obj/item/reagent_containers/food/snacks/meat/rawbacon
name = "raw piece of bacon"
@@ -236,7 +240,7 @@
icon_state = "bacon"
cooked_type = /obj/item/reagent_containers/food/snacks/meat/bacon
bitesize = 2
- list_reagents = list("nutriment" = 1)
+ list_reagents = list("nutriment" = 1, "cooking_oil" = 3)
filling_color = "#B22222"
tastes = list("bacon" = 1)
foodtype = RAW | MEAT
@@ -246,7 +250,7 @@
desc = "A delicious piece of bacon."
icon_state = "baconcooked"
list_reagents = list("nutriment" = 2)
- bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 1, "cooking_oil" = 2)
filling_color = "#854817"
tastes = list("bacon" = 1)
foodtype = MEAT
diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm
index 0d76bb6e7d..8f48e94d08 100644
--- a/code/modules/food_and_drinks/food/snacks_bread.dm
+++ b/code/modules/food_and_drinks/food/snacks_bread.dm
@@ -185,36 +185,39 @@
icon_state = ""
bitesize = 2
-/obj/item/reagent_containers/food/snacks/deepfryholder/proc/fry(obj/item/frying, datum/reagents/reagents, cook_time = 30)
- if(istype(frying, /obj/item/reagent_containers/))
- var/obj/item/reagent_containers/food = frying
- food.reagents.trans_to(src, food.reagents.total_volume)
- icon = frying.icon
- overlays = frying.overlays
- icon_state = frying.icon_state
- desc = frying.desc
- w_class = frying.w_class
- reagents.trans_to(src, 2*(cook_time/15))
+/obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried)
+ . = ..()
+ name = fried.name //We'll determine the other stuff when it's actually removed
+ icon = fried.icon
+ overlays = fried.copy_overlays()
+ icon_state = fried.icon_state
+ desc = fried.desc
+ if(istype(fried, /obj/item/reagent_containers/food/snacks))
+ fried.reagents.trans_to(src, fried.reagents.total_volume)
+ qdel(fried)
+ else
+ fried.forceMove(src)
+
+/obj/item/reagent_containers/food/snacks/deepfryholder/proc/fry(cook_time = 30)
switch(cook_time)
if(0 to 15)
add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY)
- name = "lightly-fried [frying.name]"
+ name = "lightly-fried [name]"
+ desc = "[desc] It's been lightly fried in a deep fryer."
if(16 to 49)
add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY)
- name = "fried [frying.name]"
+ name = "fried [name]"
+ desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%."
if(50 to 59)
add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY)
- name = "deep-fried [frying.name]"
+ name = "deep-fried [name]"
+ desc = "[desc] Deep-fried to perfection."
if(60 to INFINITY)
add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY)
name = "the physical manifestation of the very concept of fried foods"
- desc = "A heavily fried...something. Who can tell anymore?"
+ desc = "A heavily-fried...something. Who can tell anymore?"
filling_color = color
foodtype |= FRIED
- if(istype(frying, /obj/item/reagent_containers/food/snacks/))
- qdel(frying)
- else
- frying.forceMove(src)
/obj/item/reagent_containers/food/snacks/butteredtoast
name = "buttered toast"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 1a1b009fff..a336d77404 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -1,11 +1,25 @@
/*
April 3rd, 2014 marks the day this machine changed the face of the kitchen on NTStation13
God bless America.
-insert ascii eagle on american flag background here
+ ___----------___
+ _-- ----__
+ - ---_
+ -___ ____---_ --_
+ __---_ .-_-- _ O _- -
+ - -_- --- -
+- __---------___ -
+- _---- -
+ - -_ _
+ ` _- _
+ _ _-_ _-_ _
+ _- ____ -_ - --
+ - _-__ _ __--- ------- -
+ _- _- -_-- -_-- _
+ -_- _
+ _- _
+ -
*/
-// April 3rd, 2014 marks the day this machine changed the face of the kitchen on NTStation13
-// God bless America.
/obj/machinery/deepfryer
name = "deep fryer"
desc = "Deep fried everything."
@@ -16,8 +30,12 @@ insert ascii eagle on american flag background here
use_power = IDLE_POWER_USE
idle_power_usage = 5
container_type = OPENCONTAINER_1
- var/obj/item/frying = null //What's being fried RIGHT NOW?
+ var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/cook_time = 0
+ var/oil_use = 0.05 //How much cooking oil is used per tick
+ var/fry_speed = 1 //How quickly we fry food
+ var/frying_fried //If the object has been fried; used for messages
+ var/frying_burnt //If the object has been burnt
var/static/list/deepfry_blacklisted_items = typecacheof(list(
/obj/item/screwdriver,
/obj/item/crowbar,
@@ -26,16 +44,27 @@ insert ascii eagle on american flag background here
/obj/item/device/multitool,
/obj/item/weldingtool,
/obj/item/reagent_containers/glass,
+ /obj/item/reagent_containers/syringe,
+ /obj/item/reagent_containers/food/condiment,
/obj/item/storage/part_replacer))
+ var/datum/looping_sound/deep_fryer/fry_loop
/obj/machinery/deepfryer/Initialize()
. = ..()
create_reagents(50)
- reagents.add_reagent("nutriment", 25)
+ reagents.add_reagent("cooking_oil", 25)
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/deep_fryer(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
RefreshParts()
+ fry_loop = new(list(src), FALSE)
+
+/obj/machinery/deepfryer/RefreshParts()
+ var/oil_efficiency
+ for(var/obj/item/stock_parts/micro_laser/M in component_parts)
+ oil_efficiency += M.rating
+ oil_use = initial(oil_use) - (oil_efficiency * 0.0095)
+ fry_speed = oil_efficiency
/obj/machinery/deepfryer/examine()
..()
@@ -43,8 +72,16 @@ insert ascii eagle on american flag background here
to_chat(usr, "You can make out \a [frying] in the oil.")
/obj/machinery/deepfryer/attackby(obj/item/I, mob/user)
- if(!reagents.total_volume)
- to_chat(user, "There's nothing to fry with in [src]!")
+ if(istype(I, /obj/item/reagent_containers/pill))
+ if(!reagents.total_volume)
+ to_chat(user, "There's nothing to dissolve [I] in!")
+ return
+ user.visible_message("[user] drops [I] into [src].", "You dissolve [I] in [src].")
+ I.reagents.trans_to(src, I.reagents.total_volume)
+ qdel(I)
+ return
+ if(!reagents.has_reagent("cooking_oil"))
+ to_chat(user, "[src] has no cooking oil to fry with!")
return
if(istype(I, /obj/item/reagent_containers/food/snacks/deepfryholder))
to_chat(user, "Your cooking skills are not up to the legendary Doublefry technique.")
@@ -60,20 +97,26 @@ insert ascii eagle on american flag background here
. = ..()
else if(!frying && user.transferItemToLoc(I, src))
to_chat(user, "You put [I] into [src].")
- frying = I
+ frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I)
icon_state = "fryer_on"
+ fry_loop.start()
/obj/machinery/deepfryer/process()
..()
- if(!reagents.total_volume)
+ var/datum/reagent/consumable/cooking_oil/C = reagents.has_reagent("cooking_oil")
+ if(!C)
return
+ reagents.chem_temp = C.fry_temperature
if(frying)
- cook_time++
- if(cook_time == 30)
+ reagents.trans_to(frying, oil_use, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic
+ cook_time += fry_speed
+ if(cook_time >= 30 && !frying_fried)
+ frying_fried = TRUE //frying... frying... fried
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
- visible_message("[src] dings!")
- else if (cook_time == 60)
- visible_message("[src] emits an acrid smell!")
+ audible_message("[src] dings!")
+ else if (cook_time >= 60 && !frying_burnt)
+ frying_burnt = TRUE
+ visible_message("[src] emits an acrid smell!")
/obj/machinery/deepfryer/attack_ai(mob/user)
@@ -83,13 +126,14 @@ insert ascii eagle on american flag background here
if(frying)
if(frying.loc == src)
to_chat(user, "You eject [frying] from [src].")
- var/obj/item/reagent_containers/food/snacks/deepfryholder/S = new(drop_location())
- S.fry(frying, reagents, cook_time)
+ frying.fry(cook_time)
icon_state = "fryer_off"
- if(user.Adjacent(src))
- user.put_in_hands(S)
+ user.put_in_hands(frying)
frying = null
cook_time = 0
+ frying_fried = FALSE
+ frying_burnt = FALSE
+ fry_loop.stop()
return
else if(user.pulling && user.a_intent == "grab" && iscarbon(user.pulling) && reagents.total_volume)
if(user.grab_state < GRAB_AGGRESSIVE)
@@ -98,7 +142,7 @@ insert ascii eagle on american flag background here
var/mob/living/carbon/C = user.pulling
user.visible_message("[user] dunks [C]'s face in [src]!")
reagents.reaction(C, TOUCH)
- C.adjustFireLoss(reagents.total_volume)
+ C.apply_damage(min(30, reagents.total_volume), BURN, "head")
reagents.remove_any((reagents.total_volume/2))
C.Knockdown(60)
user.changeNext_move(CLICK_CD_MELEE)
diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm
index 01c795888e..8ca2a5961a 100644
--- a/code/modules/hydroponics/grown/beans.dm
+++ b/code/modules/hydroponics/grown/beans.dm
@@ -15,7 +15,7 @@
icon_dead = "soybean-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/soya/koi)
- reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
+ reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05, "cooking_oil" = 0.03) //Vegetable oil!
/obj/item/reagent_containers/food/snacks/grown/soybeans
seed = /obj/item/seeds/soya
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index d25df998e3..08db315b7d 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -83,6 +83,50 @@
M.satiety += 30
. = ..()
+/datum/reagent/consumable/cooking_oil
+ name = "Cooking Oil"
+ id = "cooking_oil"
+ description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying."
+ color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil)
+ taste_mult = 0.8
+ taste_description = "oil"
+ nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own
+ metabolization_rate = 10 * REAGENTS_METABOLISM
+ var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world
+ var/boiling //Used in mob life to determine if the oil kills, and only on touch application
+
+/datum/reagent/consumable/cooking_oil/reaction_obj(obj/O, reac_volume)
+ if(holder && holder.chem_temp >= fry_temperature)
+ if(isitem(O))
+ O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.")
+ var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location())
+ F.fry(O, volume)
+
+/datum/reagent/consumable/cooking_oil/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+ if(!istype(M))
+ return
+ if(holder && holder.chem_temp >= fry_temperature)
+ boiling = TRUE
+ if(method == VAPOR || method == TOUCH) //Directly coats the mob, and doesn't go into their bloodstream
+ if(boiling)
+ M.visible_message("The boiling oil sizzles as it covers [M]!", \
+ "You're covered in boiling oil!")
+ M.emote("scream")
+ playsound(M, 'sound/machines/fryer/deep_fryer_emerge.ogg', 25, TRUE)
+ var/oil_damage = (holder.chem_temp / fry_temperature) * 0.33 //Damage taken per unit
+ M.adjustFireLoss(min(35, oil_damage * reac_volume)) //Damage caps at 35
+ else
+ ..()
+ return TRUE
+
+/datum/reagent/consumable/cooking_oil/reaction_turf(turf/open/T, reac_volume)
+ if(!istype(T))
+ return
+ if(reac_volume >= 5)
+ T.MakeSlippery(min_wet_time = 10, wet_time_to_add = reac_volume * 1.5)
+ T.name = "deep-fried [initial(T.name)]"
+ T.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY)
+
/datum/reagent/consumable/sugar
name = "Sugar"
id = "sugar"
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 1f4dd47734..ea80f4c508 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -181,4 +181,12 @@
icon_state = "virus_food"
anchored = TRUE
density = FALSE
- reagent_id = "virusfood"
\ No newline at end of file
+ reagent_id = "virusfood"
+
+
+/obj/structure/reagent_dispensers/cooking_oil
+ name = "vat of cooking oil"
+ desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food."
+ icon_state = "vat"
+ anchored = TRUE
+ reagent_id = "cooking_oil"
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 3757957d9a..e94228f701 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/sound/machines/fryer/deep_fryer_1.ogg b/sound/machines/fryer/deep_fryer_1.ogg
new file mode 100644
index 0000000000..7b726c9de6
Binary files /dev/null and b/sound/machines/fryer/deep_fryer_1.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_2.ogg b/sound/machines/fryer/deep_fryer_2.ogg
new file mode 100644
index 0000000000..4bd4be7d77
Binary files /dev/null and b/sound/machines/fryer/deep_fryer_2.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_emerge.ogg b/sound/machines/fryer/deep_fryer_emerge.ogg
new file mode 100644
index 0000000000..a803dd4c67
Binary files /dev/null and b/sound/machines/fryer/deep_fryer_emerge.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_immerse.ogg b/sound/machines/fryer/deep_fryer_immerse.ogg
new file mode 100644
index 0000000000..3c06b865ca
Binary files /dev/null and b/sound/machines/fryer/deep_fryer_immerse.ogg differ