From c2441330b67a505284c91ae236e0e00b425724df Mon Sep 17 00:00:00 2001 From: Casey Date: Thu, 18 Nov 2021 16:38:05 -0500 Subject: [PATCH 1/2] Adds general-purpose cooking oil, replaces usages of corn oil --- code/modules/economy/vending_machines.dm | 4 +- code/modules/food/food/condiment.dm | 13 +- code/modules/food/food/snacks.dm | 2 +- .../food/kitchen/cooking_machines/fryer.dm | 30 +- code/modules/food/recipes_microwave.dm | 19 +- .../machinery/dispenser/reagent_tank.dm | 479 ++++++++++++++++++ .../reagents/reactions/instant/drinks.dm | 10 +- .../reagents/reactions/instant/food.dm | 18 +- code/modules/reagents/reagents/food_drinks.dm | 6 + 9 files changed, 553 insertions(+), 28 deletions(-) diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 5c9c9a256c..a55a2753a6 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -57,7 +57,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5, - /obj/item/weapon/reagent_containers/food/condiment/cornoil = 5, + /obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5, @@ -587,7 +587,7 @@ icon_state = "dinnerware" products = list( /obj/item/weapon/reagent_containers/food/condiment/yeast = 5, - /obj/item/weapon/reagent_containers/food/condiment/cornoil = 5, + /obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5, /obj/item/weapon/tray = 8, /obj/item/weapon/material/kitchen/utensil/fork = 6, /obj/item/weapon/material/knife/plastic = 6, diff --git a/code/modules/food/food/condiment.dm b/code/modules/food/food/condiment.dm index abf4f89b37..5b137957db 100644 --- a/code/modules/food/food/condiment.dm +++ b/code/modules/food/food/condiment.dm @@ -101,9 +101,9 @@ desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" center_of_mass = list("x"=17, "y"=11) - if("cornoil") - name = "Corn Oil" - desc = "A delicious oil used in cooking. Made from corn." + if("cookingoil") + name = "Cooking Oil" + desc = "A delicious oil used in cooking. General purpose." icon_state = "oliveoil" center_of_mass = list("x"=16, "y"=6) if("sugar") @@ -175,6 +175,13 @@ . = ..() reagents.add_reagent("capsaicin", 50) +/obj/item/weapon/reagent_containers/food/condiment/cookingoil + name = "Cooking Oil" + +/obj/item/weapon/reagent_containers/food/condiment/cookingoil/Initialize() + . = ..() + reagents.add_reagent("cookingoil", 50) + /obj/item/weapon/reagent_containers/food/condiment/cornoil name = "Corn Oil" diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 5b18636bf6..00f1d23690 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -3263,7 +3263,7 @@ . = ..() reagents.add_reagent("blackpepper", 1) reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("cornoil", 1) + reagents.add_reagent("cookingoil", 1) /obj/item/weapon/reagent_containers/food/snacks/turkeyslice name = "turkey drumstick" diff --git a/code/modules/food/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm index 6c2e0d9b71..bcaad4e693 100644 --- a/code/modules/food/kitchen/cooking_machines/fryer.dm +++ b/code/modules/food/kitchen/cooking_machines/fryer.dm @@ -13,13 +13,13 @@ appliancetype = FRYER active_power_usage = 12 KILOWATTS heating_power = 12 KILOWATTS - + light_y = 15 - + min_temp = 140 + T0C // Same as above, increasing this to just under 2x to make the % increase on efficiency not quite so painful as it would be at 80. optimal_temp = 400 + T0C // Increasing this to be 2x Oven to allow for a much higher/realistic frying temperatures. Doesn't really do anything but make heating the fryer take a bit longer. optimal_power = 0.95 // .35 higher than the default to give fryers faster cooking speed. - + idle_power_usage = 3.6 KILOWATTS // Power used to maintain temperature once it's heated. // Going with 25% of the active power. This is a somewhat arbitrary value. @@ -33,11 +33,11 @@ var/datum/reagents/oil var/optimal_oil = 9000 //90 litres of cooking oil - + /obj/machinery/appliance/cooker/fryer/Initialize() . = ..() fry_loop = new(list(src), FALSE) - + oil = new/datum/reagents(optimal_oil * 1.25, src) var/variance = rand()*0.15 // Fryer is always a little below full, but its usually negligible @@ -45,18 +45,18 @@ if(prob(20)) // Sometimes the fryer will start with much less than full oil, significantly impacting efficiency until filled variance = rand()*0.5 - oil.add_reagent("cornoil", optimal_oil*(1 - variance)) + oil.add_reagent("cookingoil", optimal_oil*(1 - variance)) /obj/machinery/appliance/cooker/fryer/Destroy() QDEL_NULL(fry_loop) QDEL_NULL(oil) return ..() - + /obj/machinery/appliance/cooker/fryer/examine(var/mob/user) . = ..() if(Adjacent(user)) to_chat(user, "Oil Level: [oil.total_volume]/[optimal_oil]") - + /obj/machinery/appliance/cooker/fryer/update_icon() // We add our own version of the proc to use the special fryer double-lights. cut_overlays() var/image/light @@ -69,7 +69,7 @@ light.pixel_x = light_x light.pixel_y = light_y add_overlay(light) - + /obj/machinery/appliance/cooker/fryer/heat_up() if (..()) //Set temperature of oil reagent @@ -102,7 +102,7 @@ cooking_power *= oil_efficiency - + /obj/machinery/appliance/cooker/fryer/update_icon() if(!stat) ..() @@ -119,7 +119,7 @@ if(fry_loop) fry_loop.stop(src) ..() - + //Fryer gradually infuses any cooked food with oil. Moar calories //This causes a slow drop in oil levels, encouraging refill after extended use /obj/machinery/appliance/cooker/fryer/do_cooking_tick(var/datum/cooking_item/CI) @@ -177,13 +177,13 @@ return // user.visible_message("\The [user] starts pushing \the [victim] into \the [src]!") - + //Removed delay on this action in favour of a cooldown after it //If you can lure someone close to the fryer and grab them then you deserve success. //And a delay on this kind of niche action just ensures it never happens //Cooldown ensures it can't be spammed to instakill someone user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*3) - + fry_loop.start(src) if(!do_mob(user, victim, 20)) @@ -239,9 +239,9 @@ //Coat the victim in some oil oil.trans_to(victim, 40) - + fry_loop.stop() - + /obj/machinery/appliance/cooker/fryer/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/reagent_containers/glass) && I.reagents) if (I.reagents.total_volume <= 0 && oil) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index c909c29fc5..34f4146159 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -522,13 +522,20 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/cutlet -/datum/recipe/roastedsunflowerseeds +/datum/recipe/roastedcornsunflowerseeds reagents = list("sodiumchloride" = 1, "cornoil" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/rawsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower +/datum/recipe/roastedsunflowerseeds + reagents = list("sodiumchloride" = 1, "cookingoil" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsunflower + ) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower + /datum/recipe/roastedpeanutsunflowerseeds reagents = list("sodiumchloride" = 1, "peanutoil" = 1) items = list( @@ -537,10 +544,20 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower /datum/recipe/roastedpeanuts + fruit = list("peanut" = 2) + reagents = list("sodiumchloride" = 2, "cookingoil" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts + +/datum/recipe/roastedpeanutscorn fruit = list("peanut" = 2) reagents = list("sodiumchloride" = 2, "cornoil" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts +/datum/recipe/roastedpeanutspeanut + fruit = list("peanut" = 2) + reagents = list("sodiumchloride" = 2, "peanutoil" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts + /datum/recipe/mint reagents = list("sugar" = 5, "frostoil" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/mint diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index 7e5afdb013..75c1397f09 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -474,3 +475,481 @@ reagents.splash_area(get_turf(src), 3) visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) qdel(src) +======= +/obj/structure/reagent_dispensers + name = "Dispenser" + desc = "..." + icon = 'icons/obj/chemical_tanks.dmi' + icon_state = "tank" + layer = TABLE_LAYER + density = TRUE + anchored = FALSE + pressure_resistance = 2*ONE_ATMOSPHERE + + var/obj/item/hose_connector/input/active/InputSocket + var/obj/item/hose_connector/output/active/OutputSocket + + var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) + +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) + return + +/obj/structure/reagent_dispensers/Destroy() + QDEL_NULL(InputSocket) + QDEL_NULL(OutputSocket) + + ..() + +/obj/structure/reagent_dispensers/Initialize() + var/datum/reagents/R = new/datum/reagents(5000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + + InputSocket = new(src) + InputSocket.carrier = src + OutputSocket = new(src) + OutputSocket.carrier = src + + . = ..() + +/obj/structure/reagent_dispensers/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + . += "[R.volume] units of [R.name]" + else + . += "Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) + if (N) + amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return + +/obj/structure/reagent_dispensers/blob_act() + qdel(src) + +/* + * Tanks + */ + +//Water +/obj/structure/reagent_dispensers/watertank + name = "water tank" + desc = "A water tank." + icon_state = "water" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/watertank/Initialize() + . = ..() + reagents.add_reagent("water", 1000) + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold vast amounts of water.." + icon_state = "water_high" + +/obj/structure/reagent_dispensers/watertank/high/Initialize() + . = ..() + reagents.add_reagent("water", 4000) + +//Fuel +/obj/structure/reagent_dispensers/fueltank + name = "fuel tank" + desc = "A fuel tank." + icon_state = "fuel" + amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/device/assembly_holder/rig = null + +/obj/structure/reagent_dispensers/fueltank/Initialize() + . = ..() + reagents.add_reagent("fuel",1000) + +/obj/structure/reagent_dispensers/fueltank/high + name = "high-capacity fuel tank" + desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." + icon_state = "fuel_high" + +/obj/structure/reagent_dispensers/fueltank/high/Initialize() + . = ..() + reagents.add_reagent("fuel",4000) + +//Foam +/obj/structure/reagent_dispensers/foam + name = "foam tank" + desc = "A foam tank." + icon_state = "foam" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/foam/Initialize() + . = ..() + reagents.add_reagent("firefoam",1000) + +//Helium3 +/obj/structure/reagent_dispensers/he3 + name = "/improper He3 tank" + desc = "A Helium3 tank." + icon_state = "he3" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispenser/he3/Initialize() + ..() + reagents.add_reagent("helium3",1000) + +/* + * Misc + */ + +/obj/structure/reagent_dispensers/fueltank/barrel + name = "hazardous barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "barrel" + modded = TRUE + +/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (W.is_wrench()) //can't wrench it shut, it's always open + return + return ..() +//VOREStation Add End + +/obj/structure/reagent_dispensers/fueltank/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(modded) + . += "Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + . += "There is some kind of device rigged to the tank." + +/obj/structure/reagent_dispensers/fueltank/attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + overlays = new/list() + +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) + src.add_fingerprint(user) + if (W.is_wrench()) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + playsound(src, W.usesound, 75, 1) + if (modded) + message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") + log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") + leak_fuel(amount_per_transfer_from_this) + if (istype(W,/obj/item/device/assembly_holder)) + if (rig) + to_chat(user, "There is another device in the way.") + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") + + var/obj/item/device/assembly_holder/H = W + if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") + log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") + + rig = W + user.drop_item() + W.loc = src + + var/icon/test = getFlatIcon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + add_overlay(test) + + return ..() + + +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + if(istype(Proj.firer)) + message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") + log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") + + if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) + explode() + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else if (reagents.total_volume > 50) + explosion(src.loc,-1,1,2) + if(src) + qdel(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if (modded) + explode() + else if (temperature > T0C+500) + explode() + return ..() + +/obj/structure/reagent_dispensers/fueltank/Move() + if (..() && modded) + leak_fuel(amount_per_transfer_from_this/10.0) + +/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) + if (reagents.total_volume == 0) + return + + amount = min(amount, reagents.total_volume) + reagents.remove_reagent("fuel",amount) + new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) + +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refills pepper spray canisters." + icon = 'icons/obj/objects.dmi' + icon_state = "peppertank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 45 + +/obj/structure/reagent_dispensers/peppertank/Initialize() + . = ..() + reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/virusfood + name = "Virus Food Dispenser" + desc = "A dispenser of virus food. Yum." + icon = 'icons/obj/virology_vr.dmi' + icon_state = "virusfoodtank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/virusfood/Initialize() + . = ..() + reagents.add_reagent("virusfood", 1000) + +/obj/structure/reagent_dispensers/acid + name = "Sulphuric Acid Dispenser" + desc = "A dispenser of acid for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "acidtank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/acid/Initialize() + . = ..() + reagents.add_reagent("sacid", 1000) + +/obj/structure/reagent_dispensers/water_cooler + name = "Water-Cooler" + desc = "A machine that dispenses water to drink." + amount_per_transfer_from_this = 5 + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler" + possible_transfer_amounts = null + anchored = TRUE + var/bottle = 0 + var/cups = 0 + var/cupholder = 0 + +/obj/structure/reagent_dispensers/water_cooler/full + bottle = 1 + cupholder = 1 + cups = 10 + +/obj/structure/reagent_dispensers/water_cooler/Initialize() + . = ..() + if(bottle) + reagents.add_reagent("water",120) + update_icon() + +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + . = ..() + if(cupholder) + . += "There are [cups] cups in the cup dispenser." + +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() + set name = "Rotate Cooler Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_wrench()) + src.add_fingerprint(user) + if(bottle) + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20) && bottle) + to_chat(user, "You unfasten the jug.") + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + update_icon() + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * I.toolspeed, src)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + playsound(src, I.usesound, 50, 1) + return + + if(I.is_screwdriver()) + if(cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You take the cup dispenser off.") + new /obj/item/stack/material/plastic( src.loc ) + if(cups) + for(var/i = 0 to cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups = 0 + cupholder = 0 + update_icon() + return + if(!bottle && !cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You start taking the water-cooler apart.") + if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) + to_chat(user, "You take the water-cooler apart.") + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + to_chat(user, "You start to screw the bottle onto the water-cooler.") + if(do_after(user, 20) && !bottle && anchored) + bottle = 1 + update_icon() + to_chat(user, "You screw the bottle onto the water-cooler!") + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a bottle there!") + return 1 + + if(istype(I, /obj/item/stack/material/plastic)) + if(!cupholder) + if(anchored) + var/obj/item/stack/material/plastic/P = I + src.add_fingerprint(user) + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && !cupholder && anchored) + if (P.use(1)) + to_chat(user, "You attach a cup dispenser onto the water-cooler.") + cupholder = 1 + update_icon() + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a cup dispenser there!") + return + +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) + if(cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups-- + flick("[icon_state]-vend", src) + return + +/obj/structure/reagent_dispensers/water_cooler/update_icon() + icon_state = "water_cooler" + cut_overlays() + if(bottle) + add_overlay("water_cooler_bottle") + +/obj/structure/reagent_dispensers/beerkeg + name = "beer keg" + desc = "A beer keg." + icon = 'icons/obj/objects.dmi' + icon_state = "beertankTEMP" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/beerkeg/Initialize() + . = ..() + reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" + +//Cooking oil refill tank +/obj/structure/reagent_dispensers/cookingoil + name = "cooking oil tank" + desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + +/obj/structure/reagent_dispensers/cookingoil/New() + ..() + reagents.add_reagent("cookingoil",5000) + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) + qdel(src) +>>>>>>> b6b3f8bb08... Merge pull request #11807 from Heroman3003/oily diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index efb58fe90c..abd16b2279 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -141,7 +141,7 @@ name = "Space Beer" id = "spacebeer" result = "beer" - required_reagents = list("cornoil" = 10) + required_reagents = list("cornoil" = 5, "flour" = 5) catalysts = list("enzyme" = 5) result_amount = 10 @@ -907,7 +907,7 @@ name = "Debugger" id = "debugger" result = "debugger" - required_reagents = list("fuel" = 1, "sugar" = 2, "cornoil" = 2) + required_reagents = list("fuel" = 1, "sugar" = 2, "cookingoil" = 2) result_amount = 5 /decl/chemical_reaction/instant/drinks/spacersbrew @@ -1205,14 +1205,14 @@ name = "Oil Slick" id = "oilslick" result = "oilslick" - required_reagents = list("cornoil" = 2, "honey" = 1) + required_reagents = list("cookingoil" = 2, "honey" = 1) result_amount = 3 /decl/chemical_reaction/instant/drinks/slimeslam name = "Slick Slime Slammer" id = "slimeslammer" result = "slimeslammer" - required_reagents = list("cornoil" = 2, "peanutbutter" = 1) + required_reagents = list("cookingoil" = 2, "peanutbutter" = 1) result_amount = 3 /decl/chemical_reaction/instant/drinks/virginsexonthebeach @@ -1254,7 +1254,7 @@ name = "Soda Oil" id = "sodaoil" result = "sodaoil" - required_reagents = list("cornoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1) + required_reagents = list("cookingoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/fusionnaire diff --git a/code/modules/reagents/reactions/instant/food.dm b/code/modules/reagents/reactions/instant/food.dm index 021bd72f41..d31ffd21b2 100644 --- a/code/modules/reagents/reactions/instant/food.dm +++ b/code/modules/reagents/reactions/instant/food.dm @@ -54,6 +54,22 @@ new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) return +/decl/chemical_reaction/instant/food/cookingoilcorn + name = "Cooking Oil" + id = "cookingoilcorn" + result = "cookingoil" + required_reagents = list("cornoil" = 10) + catalysts = list("enzyme" = 5) + result_amount = 10 + +/decl/chemical_reaction/instant/food/cookingoilpeanut + name = "Cooking Oil" + id = "cookingoilpeanut" + result = "cookingoil" + required_reagents = list("peanutoil" = 10) + catalysts = list("enzyme" = 5) + result_amount = 10 + /decl/chemical_reaction/instant/food/soysauce name = "Soy Sauce" id = "soysauce" @@ -87,7 +103,7 @@ name = "mayonnaise" id = "mayo" result = "mayo" - required_reagents = list("egg" = 9, "cornoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1) + required_reagents = list("egg" = 9, "cookingoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1) result_amount = 15 /decl/chemical_reaction/instant/food/cheesewheel diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 100e4ea60a..d26f0fa312 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -234,6 +234,12 @@ to_chat(M, "Searing hot oil burns you, wash it off quick!") lastburnmessage = world.time +/datum/reagent/nutriment/triglyceride/oil/cooking + name = "Cooking Oil" + id = "cookingoil" + description = "A general-purpose cooking oil." + reagent_state = LIQUID + /datum/reagent/nutriment/triglyceride/oil/corn name = "Corn Oil" id = "cornoil" From cfe0107753d0a160c65d78fb1742352253c370fb Mon Sep 17 00:00:00 2001 From: Razgriz Date: Fri, 10 Dec 2021 01:03:48 -0700 Subject: [PATCH 2/2] powder that makes you say yes --- .../machinery/dispenser/reagent_tank.dm | 483 +----------------- 1 file changed, 2 insertions(+), 481 deletions(-) diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index 75c1397f09..42677feb07 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -1,4 +1,3 @@ -<<<<<<< HEAD /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -297,7 +296,7 @@ /obj/structure/reagent_dispensers/acid/Initialize() . = ..() reagents.add_reagent("sacid", 1000) - + /obj/structure/reagent_dispensers/water_cooler name = "Water-Cooler" desc = "A machine that dispenses water to drink." @@ -462,7 +461,7 @@ /obj/structure/reagent_dispensers/cookingoil/New() ..() - reagents.add_reagent("cornoil",5000) + reagents.add_reagent("cookingoil",5000) /obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) if(Proj.get_structure_damage()) @@ -475,481 +474,3 @@ reagents.splash_area(get_turf(src), 3) visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) qdel(src) -======= -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "..." - icon = 'icons/obj/chemical_tanks.dmi' - icon_state = "tank" - layer = TABLE_LAYER - density = TRUE - anchored = FALSE - pressure_resistance = 2*ONE_ATMOSPHERE - - var/obj/item/hose_connector/input/active/InputSocket - var/obj/item/hose_connector/output/active/OutputSocket - - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) - -/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/Destroy() - QDEL_NULL(InputSocket) - QDEL_NULL(OutputSocket) - - ..() - -/obj/structure/reagent_dispensers/Initialize() - var/datum/reagents/R = new/datum/reagents(5000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - - InputSocket = new(src) - InputSocket.carrier = src - OutputSocket = new(src) - OutputSocket.carrier = src - - . = ..() - -/obj/structure/reagent_dispensers/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/blob_act() - qdel(src) - -/* - * Tanks - */ - -//Water -/obj/structure/reagent_dispensers/watertank - name = "water tank" - desc = "A water tank." - icon_state = "water" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/watertank/Initialize() - . = ..() - reagents.add_reagent("water", 1000) - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold vast amounts of water.." - icon_state = "water_high" - -/obj/structure/reagent_dispensers/watertank/high/Initialize() - . = ..() - reagents.add_reagent("water", 4000) - -//Fuel -/obj/structure/reagent_dispensers/fueltank - name = "fuel tank" - desc = "A fuel tank." - icon_state = "fuel" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/device/assembly_holder/rig = null - -/obj/structure/reagent_dispensers/fueltank/Initialize() - . = ..() - reagents.add_reagent("fuel",1000) - -/obj/structure/reagent_dispensers/fueltank/high - name = "high-capacity fuel tank" - desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." - icon_state = "fuel_high" - -/obj/structure/reagent_dispensers/fueltank/high/Initialize() - . = ..() - reagents.add_reagent("fuel",4000) - -//Foam -/obj/structure/reagent_dispensers/foam - name = "foam tank" - desc = "A foam tank." - icon_state = "foam" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/foam/Initialize() - . = ..() - reagents.add_reagent("firefoam",1000) - -//Helium3 -/obj/structure/reagent_dispensers/he3 - name = "/improper He3 tank" - desc = "A Helium3 tank." - icon_state = "he3" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispenser/he3/Initialize() - ..() - reagents.add_reagent("helium3",1000) - -/* - * Misc - */ - -/obj/structure/reagent_dispensers/fueltank/barrel - name = "hazardous barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "barrel" - modded = TRUE - -/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (W.is_wrench()) //can't wrench it shut, it's always open - return - return ..() -//VOREStation Add End - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(modded) - . += "Fuel faucet is wrenched open, leaking the fuel!" - if(rig) - . += "There is some kind of device rigged to the tank." - -/obj/structure/reagent_dispensers/fueltank/attack_hand() - if (rig) - usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") - if(do_after(usr, 20)) - usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.loc = get_turf(usr) - rig = null - overlays = new/list() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (W.is_wrench()) - user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - playsound(src, W.usesound, 75, 1) - if (modded) - message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") - log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - if (istype(W,/obj/item/device/assembly_holder)) - if (rig) - to_chat(user, "There is another device in the way.") - return ..() - user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") - if(do_after(user, 20)) - user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") - - var/obj/item/device/assembly_holder/H = W - if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") - log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") - - rig = W - user.drop_item() - W.loc = src - - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - add_overlay(test) - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") - log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - - if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/ex_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else if (reagents.total_volume > 50) - explosion(src.loc,-1,1,2) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) - if (modded) - explode() - else if (temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent("fuel",amount) - new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/Initialize() - . = ..() - reagents.add_reagent("condensedcapsaicin",1000) - -/obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food. Yum." - icon = 'icons/obj/virology_vr.dmi' - icon_state = "virusfoodtank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/virusfood/Initialize() - . = ..() - reagents.add_reagent("virusfood", 1000) - -/obj/structure/reagent_dispensers/acid - name = "Sulphuric Acid Dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/acid/Initialize() - . = ..() - reagents.add_reagent("sacid", 1000) - -/obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = TRUE - var/bottle = 0 - var/cups = 0 - var/cupholder = 0 - -/obj/structure/reagent_dispensers/water_cooler/full - bottle = 1 - cupholder = 1 - cups = 10 - -/obj/structure/reagent_dispensers/water_cooler/Initialize() - . = ..() - if(bottle) - reagents.add_reagent("water",120) - update_icon() - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if(cupholder) - . += "There are [cups] cups in the cup dispenser." - -/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() - set name = "Rotate Cooler Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(I.is_wrench()) - src.add_fingerprint(user) - if(bottle) - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20) && bottle) - to_chat(user, "You unfasten the jug.") - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) - for(var/datum/reagent/R in reagents.reagent_list) - var/total_reagent = reagents.get_reagent_amount(R.id) - G.reagents.add_reagent(R.id, total_reagent) - reagents.clear_reagents() - bottle = 0 - update_icon() - else - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * I.toolspeed, src)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - playsound(src, I.usesound, 50, 1) - return - - if(I.is_screwdriver()) - if(cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You take the cup dispenser off.") - new /obj/item/stack/material/plastic( src.loc ) - if(cups) - for(var/i = 0 to cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups = 0 - cupholder = 0 - update_icon() - return - if(!bottle && !cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You start taking the water-cooler apart.") - if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) - to_chat(user, "You take the water-cooler apart.") - new /obj/item/stack/material/plastic( src.loc, 4 ) - qdel(src) - return - - if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) - src.add_fingerprint(user) - if(!bottle) - if(anchored) - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I - to_chat(user, "You start to screw the bottle onto the water-cooler.") - if(do_after(user, 20) && !bottle && anchored) - bottle = 1 - update_icon() - to_chat(user, "You screw the bottle onto the water-cooler!") - for(var/datum/reagent/R in G.reagents.reagent_list) - var/total_reagent = G.reagents.get_reagent_amount(R.id) - reagents.add_reagent(R.id, total_reagent) - qdel(G) - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a bottle there!") - return 1 - - if(istype(I, /obj/item/stack/material/plastic)) - if(!cupholder) - if(anchored) - var/obj/item/stack/material/plastic/P = I - src.add_fingerprint(user) - to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && !cupholder && anchored) - if (P.use(1)) - to_chat(user, "You attach a cup dispenser onto the water-cooler.") - cupholder = 1 - update_icon() - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a cup dispenser there!") - return - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) - if(cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups-- - flick("[icon_state]-vend", src) - return - -/obj/structure/reagent_dispensers/water_cooler/update_icon() - icon_state = "water_cooler" - cut_overlays() - if(bottle) - add_overlay("water_cooler_bottle") - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/Initialize() - . = ..() - reagents.add_reagent("beer",1000) - -/obj/structure/reagent_dispensers/beerkeg/fakenuke - name = "nuclear beer keg" - desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nuclearbomb0" - -//Cooking oil refill tank -/obj/structure/reagent_dispensers/cookingoil - name = "cooking oil tank" - desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 120 - -/obj/structure/reagent_dispensers/cookingoil/New() - ..() - reagents.add_reagent("cookingoil",5000) - -/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/cookingoil/ex_act() - explode() - -/obj/structure/reagent_dispensers/cookingoil/proc/explode() - reagents.splash_area(get_turf(src), 3) - visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) - qdel(src) ->>>>>>> b6b3f8bb08... Merge pull request #11807 from Heroman3003/oily