Huge Bundle of Fixes, Update Cooking to current Aurora

Cooking times are now no longer 10-15 minutes per item, the LARGEST items will take around ~4-5 minutes, 6 at the maximum in the case of the superbigbite (one of the most filling food items in the game).
Cooking oil tanks added
Appliances are now constructible instead of being eldritch black magic
Recipes are now reorganized to either fryer/oven/grill based on where they're made (Although recipes_microwave still needs a LOT more sorting)
Critical time bug with cooking fixed, AND you can now upgrade your appliances for even higher efficiencies!
This commit is contained in:
Rykka
2020-07-22 21:34:13 -04:00
parent 1ca8336bad
commit 886ab72289
26 changed files with 607 additions and 449 deletions

View File

@@ -46,6 +46,13 @@
containertype = /obj/structure/closet/crate
containername = "crate of bar supplies"
/datum/supply_pack/hospitality/cookingoil
name = "Cooking oil tank crate"
contains = list(/obj/structure/reagent_dispensers/cookingoil)
cost = 10
containertype = /obj/structure/largecrate
containername = "cooking oil tank crate"
/datum/supply_pack/randomised/hospitality/
group = "Hospitality"

View File

@@ -81,6 +81,31 @@
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/oven
name = "Oven"
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/fryer
name = "Fryer"
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/grill
name = "Grill"
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/cerealmaker
name = "Cereal Maker"
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/candymachine
name = "Candy Machine"
frame_class = FRAME_CLASS_MACHINE
frame_size = 4
/datum/frame/frame_types/fax
name = "Fax"
frame_class = FRAME_CLASS_MACHINE

View File

@@ -121,16 +121,6 @@
/obj/item/weapon/stock_parts/motor = 2,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/microwave
name = T_BOARD("microwave")
build_path = /obj/machinery/microwave
board_type = new /datum/frame/frame_types/microwave
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/recharger
name = T_BOARD("recharger")
build_path = /obj/machinery/recharger
@@ -250,13 +240,3 @@
/obj/item/weapon/stock_parts/spring = 1,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/microwave/advanced
name = T_BOARD("deluxe microwave")
build_path = /obj/machinery/microwave/advanced
board_type = new /datum/frame/frame_types/microwave
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/capacitor = 1)

View File

@@ -0,0 +1,74 @@
/obj/item/weapon/circuitboard/microwave
name = T_BOARD("microwave")
desc = "The circuitboard for a microwave."
build_path = /obj/machinery/microwave
board_type = new /datum/frame/frame_types/microwave
contain_parts = 0
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/capacitor = 3, // Original Capacitor count was 1
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/oven
name = T_BOARD("oven")
desc = "The circuitboard for an oven."
build_path = /obj/machinery/appliance/cooker/oven
board_type = new /datum/frame/frame_types/oven
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/fryer
name = T_BOARD("deep fryer")
desc = "The circuitboard for a deep fryer."
build_path = /obj/machinery/appliance/cooker/fryer
board_type = new /datum/frame/frame_types/fryer
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/grill
name = T_BOARD("grill")
desc = "The circuitboard for an industrial grill."
build_path = /obj/machinery/appliance/cooker/grill
board_type = new /datum/frame/frame_types/grill
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/cerealmaker
name = T_BOARD("cereal maker")
desc = "The circuitboard for a cereal maker."
build_path = /obj/machinery/appliance/mixer/cereal
board_type = new /datum/frame/frame_types/cerealmaker
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/candymachine
name = T_BOARD("candy machine")
desc = "The circuitboard for a candy machine."
build_path = /obj/machinery/appliance/mixer/candy
board_type = new /datum/frame/frame_types/candymachine
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
/obj/item/weapon/circuitboard/microwave/advanced
name = T_BOARD("deluxe microwave")
build_path = /obj/machinery/microwave/advanced
board_type = new /datum/frame/frame_types/microwave
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/capacitor = 1)

View File

@@ -4366,7 +4366,7 @@
//Code for dipping food in batter
/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/O as obj, mob/user as mob, proximity)
if(O.is_open_container() && O.reagents && !(istype(O, /obj/item/weapon/reagent_containers/food)))
if(O.is_open_container() && O.reagents && !(istype(O, /obj/item/weapon/reagent_containers/food)) && proximity)
for (var/r in O.reagents.reagent_list)
var/datum/reagent/R = r

View File

@@ -16,10 +16,10 @@
use_power = USE_POWER_IDLE
idle_power_usage = 5 // Power used when turned on, but not processing anything
active_power_usage = 1000 // Power used when turned on and actively cooking something
var/initial_active_power_usage = 1000
var/cooking_power = 1
var/initial_cooking_power = 1
var/cooking_power = 0 // Effectiveness/speed at cooking
var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power.
var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage
var/max_contents = 1 // Maximum number of things this appliance can simultaneously cook
var/on_icon // Icon state used when cooking.
var/off_icon // Icon state used when not cooking.
@@ -29,7 +29,7 @@
var/mobdamagetype = BRUTE // Burn damage for cooking appliances, brute for cereal/candy
var/food_color // Colour of resulting food item.
var/cooked_sound = 'sound/machines/ding.ogg' // Sound played when cooking completes.
var/can_burn_food // Can the object burn food that is left inside?
var/can_burn_food = FALSE // 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
@@ -40,18 +40,13 @@
var/container_type = null
var/combine_first = 0//If 1, this appliance will do combinaiton cooking before checking recipes
var/combine_first = FALSE // If TRUE, this appliance will do combination cooking before checking recipes
/obj/machinery/appliance/Initialize()
. = ..()
component_parts = list()
component_parts += /obj/item/weapon/circuitboard/cooking
component_parts += /obj/item/weapon/stock_parts/capacitor
component_parts += /obj/item/weapon/stock_parts/capacitor
component_parts += /obj/item/weapon/stock_parts/capacitor
component_parts += /obj/item/weapon/stock_parts/scanning_module
component_parts += /obj/item/weapon/stock_parts/matter_bin
component_parts += /obj/item/weapon/stock_parts/matter_bin
default_apply_parts()
if(output_options.len)
verbs += /obj/machinery/appliance/proc/choose_output
@@ -228,7 +223,7 @@
else if(istype(check, /obj/item/weapon/disk/nuclear))
to_chat(user, "<span class='warning'>You can't cook that.</span>")
return 0
else if(I.is_crowbar() || I.is_screwdriver()) // You can't cook tools, dummy.
else if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer)) // You can't cook tools, dummy.
return 0
else if(!istype(check) && !istype(check, /obj/item/weapon/holder))
to_chat(user, "<span class='warning'>That's not edible.</span>")
@@ -301,7 +296,7 @@
/obj/machinery/appliance/proc/get_cooking_work(var/datum/cooking_item/CI)
for (var/obj/item/J in CI.container)
oilwork(J, CI)
cookwork_by_item(J, CI)
for (var/r in CI.container.reagents.reagent_list)
var/datum/reagent/R = r
@@ -328,7 +323,7 @@
CI.max_cookwork += buffer*multiplier
//Just a helper to save code duplication in the above
/obj/machinery/appliance/proc/oilwork(var/obj/item/I, var/datum/cooking_item/CI)
/obj/machinery/appliance/proc/cookwork_by_item(var/obj/item/I, var/datum/cooking_item/CI)
var/obj/item/weapon/reagent_containers/food/snacks/S = I
var/work = 0
if (istype(S))
@@ -725,18 +720,13 @@
for(var/obj/item/weapon/stock_parts/P in src.component_parts)
if(istype(P, /obj/item/weapon/stock_parts/scanning_module))
scan_rating += P.rating
scan_rating += P.rating - 1 // Default parts shouldn't mess with stats
// to_world("RefreshParts returned scan rating of [scan_rating] during this step.") // Debug lines, uncomment if you need to test.
else if(istype(P, /obj/item/weapon/stock_parts/capacitor))
cap_rating += P.rating
cap_rating += P.rating - 1 // Default parts shouldn't mess with stats
// to_world("RefreshParts returned cap rating of [cap_rating] during this step.") // Debug lines, uncomment if you need to test.
active_power_usage = initial(active_power_usage) - scan_rating*10
cooking_power = initial(cooking_power) + (scan_rating+cap_rating)/10
/obj/item/weapon/circuitboard/cooking
name = "kitchen appliance circuitry"
desc = "The circuitboard for many kitchen appliances. Not of much use."
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 3,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/matter_bin = 2)
active_power_usage = initial(active_power_usage) - scan_rating * 25
heating_power = initial(heating_power) + cap_rating * 25
cooking_power = cooking_coeff * (1 + (scan_rating + cap_rating) / 20) // 100% eff. becomes 120%, 140%, 160% w/ better parts, thus rewarding upgrading the appliances during your shift.
// to_world("RefreshParts returned cooking power of [cooking_power] during this step.") // Debug lines, uncomment if you need to test.

View File

@@ -2,27 +2,29 @@
var/temperature = T20C
var/min_temp = 80 + T0C //Minimum temperature to do any cooking
var/optimal_temp = 200 + T0C //Temperature at which we have 100% efficiency. efficiency is lowered on either side of this
var/optimal_power = 0.1//cooking power at 100%
var/optimal_power = 0.6 //cooking power at 100% - This variable determines the MAXIMUM increase in do_cooking_ticks, once math goes through. If you want ticks of 0.5, set it to 0.5, etc.
var/loss = 1 //Temp lost per proc when equalising
var/resistance = 32000 //Resistance to heating. combines with active power usage to determine how long heating takes. 32k by default.
var/resistance = 32000 //Resistance to heating. combines with heating power to determine how long heating takes. 32k by default.
var/light_x = 0
var/light_y = 0
cooking_coeff = 0
cooking_power = 0
mobdamagetype = BURN
can_burn_food = TRUE
/obj/machinery/appliance/cooker/examine(var/mob/user)
. = ..()
if(.) //no need to duplicate adjacency check
if(!stat)
if (temperature < min_temp)
to_chat(user, span("warning", "\The [src] is still heating up and is too cold to cook anything yet."))
to_chat(user, "<span class='warning'>\The [src] is still heating up and is too cold to cook anything yet.</span>")
else
to_chat(user, span("notice", "It is running at [round(get_efficiency(), 0.1)]% efficiency!"))
to_chat(user, "<span class='notice'>It is running at [round(get_efficiency(), 0.1)]% efficiency!</span>")
to_chat(user, "Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C")
else
to_chat(user, span("warning", "It is switched off."))
to_chat(user, "<span class='warning'>It is switched off.</span>")
/obj/machinery/appliance/cooker/list_contents(var/mob/user)
if (cooking_objs.len)
@@ -35,10 +37,10 @@
string += "- [CI.container.label(num)], [report_progress(CI)]</br>"
to_chat(user, string)
else
to_chat(user, span("notice","It is empty."))
to_chat(user, "<span class='notice'>It's empty.</span>")
/obj/machinery/appliance/cooker/proc/get_efficiency()
//RefreshParts()
// to_world("Our cooking_power is [cooking_power] and our efficiency is [(cooking_power / optimal_power) * 100].") // Debug lines, uncomment if you need to test.
return (cooking_power / optimal_power) * 100
/obj/machinery/appliance/cooker/Initialize()
@@ -80,6 +82,12 @@
/obj/machinery/appliance/cooker/proc/update_cooking_power()
var/temp_scale = 0
if(temperature > min_temp)
if(temperature >= optimal_temp) // If we're at or above optimal temp, then we're going to be at 1 for temp scale. No use penalizing you for the cookers increasing heat constantly (until we implement setting a temp on the oven via a menu.)
temp_scale = 1
else
temp_scale = (temperature - min_temp) / (optimal_temp - min_temp) // If we're between min and optimal this will yield a value in the range 0-1
/* // old code for reference, will be useful if/when we implement ovens with configurable temperatures - TODO recipes with optimal temps for cooking per-recipe??
temp_scale = (temperature - min_temp) / (optimal_temp - min_temp) // If we're between min and optimal this will yield a value in the range 0-1
if(temp_scale > 1) // We're above optimal, efficiency goes down as we pass too much over it
@@ -87,9 +95,12 @@
temp_scale = 0
else
temp_scale = 1 - (temp_scale - 1)
*/
cooking_power = optimal_power * temp_scale
// RefreshParts()
cooking_coeff = optimal_power * temp_scale
// to_world("Our cooking_power is [cooking_power] and our tempscale is [temp_scale], and our cooking_coeff is [cooking_coeff] before RefreshParts.") // Debug lines, uncomment if you need to test.
RefreshParts()
// to_world("Our cooking_power is [cooking_power] after RefreshParts.") // Debug lines, uncomment if you need to test.
/obj/machinery/appliance/cooker/proc/heat_up()
if(temperature < optimal_temp)
@@ -97,7 +108,7 @@
playsound(src, 'sound/machines/click.ogg', 20, 1)
use_power = 2.//If we're heating we use the active power
update_icon()
temperature += active_power_usage / resistance
temperature += heating_power / resistance
update_cooking_power()
return 1
else

View File

@@ -10,7 +10,7 @@ fundamental differences
/obj/machinery/appliance/mixer
max_contents = 1
stat = POWEROFF
cooking_power = 0.4
cooking_coeff = 0.75 // Original value 0.4
active_power_usage = 3000
idle_power_usage = 50

View File

@@ -6,7 +6,8 @@
on_icon = "mixer_on"
cook_type = "candied"
appliancetype = CANDYMAKER
cooking_power = 0.6
circuit = /obj/item/weapon/circuitboard/candymachine
cooking_coeff = 1.0 // Original Value 0.6
output_options = list(
"Jawbreaker" = /obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker,

View File

@@ -7,6 +7,7 @@
on_icon = "cereal_on"
off_icon = "cereal_off"
appliancetype = CEREALMAKER
circuit = /obj/item/weapon/circuitboard/cerealmaker
output_options = list(
"Cereal" = /obj/item/weapon/reagent_containers/food/snacks/variable/cereal

View File

@@ -150,6 +150,15 @@
max_space = 30
max_reagents = 120
/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize()
. = ..()
// We add to the insertable list specifically for the oven trays, to allow specialty cakes.
insertable += list(
/obj/item/clothing/head/cakehat, // This is because we want to allow birthday cakes to be makeable.
/obj/item/organ/internal/brain // As before, needed for braincake
)
/obj/item/weapon/reagent_containers/cooking_container/fryer
name = "fryer basket"
shortname = "basket"

View File

@@ -9,18 +9,20 @@
food_color = "#FFAD33"
cooked_sound = 'sound/machines/ding.ogg'
var/datum/looping_sound/deep_fryer/fry_loop
circuit = /obj/item/weapon/circuitboard/fryer
appliancetype = FRYER
active_power_usage = 12 KILOWATTS
heating_power = 12000
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.35
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.
resistance = 20000 // Approx. 8-9 minutes to heat up.
resistance = 60000 // Approx. 10 minutes to heat up.
max_contents = 2
container_type = /obj/item/weapon/reagent_containers/cooking_container/fryer

View File

@@ -3,24 +3,29 @@
desc = "Backyard grilling, IN SPACE."
icon_state = "grill_off"
cook_type = "grilled"
appliancetype = GRILL
food_color = "#A34719"
on_icon = "grill_on"
off_icon = "grill_off"
can_burn_food = 1
stat = POWEROFF
appliancetype = GRILL
can_burn_food = TRUE
circuit = /obj/item/weapon/circuitboard/grill
active_power_usage = 4 KILOWATTS
heating_power = 4000
idle_power_usage = 2 KILOWATTS
optimal_power = 1.2 // Things on the grill cook .6 faster - this is now the fastest appliance to heat and to cook on. BURGERS GO SIZZLE.
stat = POWEROFF // Starts turned off.
// Grill is faster to heat and setup than the rest.
optimal_temp = 120 + T0C
min_temp = 60 + T0C
resistance = 8 KILOWATTS // Very fast to heat up.
max_contents = 3 // Arbitrary number, 3 grill 'racks'
container_type = /obj/item/weapon/reagent_containers/cooking_container/grill
/* // Test Comment this out too, /cooker does this for us, and this path '/obj/machinery/appliance/grill' is invalid anyways, meaning it does jack shit. - Updated the paths, but I'm basically commenting all this shit out and if the grill works as-normal, none of this stuff is needed.
/obj/machinery/appliance/grill/toggle_power()
set src in view()
set name = "Toggle Power"
@@ -42,12 +47,13 @@
playsound(src, 'sound/machines/click.ogg', 40, 1)
update_icon()
/obj/machinery/appliance/grill/Initialize()
/obj/machinery/appliance/cooker/grill/Initialize()
. = ..()
// cooking_objs += new /datum/cooking_item(new /obj/item/weapon/reagent_containers/cooking_container(src))
cooking = FALSE
/obj/machinery/appliance/grill/has_space(var/obj/item/I)
/obj/machinery/appliance/cooker/grill/has_space(var/obj/item/I)
var/datum/cooking_item/CI = cooking_objs[1]
if (!CI || !CI.container)
return 0
@@ -56,7 +62,8 @@
return CI
return 0
*/
/* // Test comment this out, I don't think this is doing shit anyways.
//Container is not removable
/obj/machinery/appliance/grill/removal_menu(var/mob/user)
if (can_remove_items(user))
@@ -79,14 +86,17 @@
update_icon()
return 1
return 0
*/
/obj/machinery/appliance/grill/update_icon()
/obj/machinery/appliance/grill/update_icon() // TODO: Cooking icon
if(!stat)
icon_state = on_icon
else
icon_state = off_icon
/* // Test remove this too.
/obj/machinery/appliance/grill/process()
if (!stat)
for (var/i in cooking_objs)
do_cooking_tick(i)
*/

View File

@@ -6,14 +6,16 @@
cook_type = "baked"
appliancetype = OVEN
food_color = "#A34719"
can_burn_food = 1
can_burn_food = TRUE
circuit = /obj/item/weapon/circuitboard/oven
active_power_usage = 6 KILOWATTS
heating_power = 6000
//Based on a double deck electric convection oven
resistance = 16000
resistance = 30000 // Approx. 12 minutes to heat up.
idle_power_usage = 2 KILOWATTS
//uses ~30% power to stay warm
optimal_power = 0.2
optimal_power = 0.8 // Oven cooks .2 faster than the default speed.
light_x = 2
max_contents = 5
@@ -74,19 +76,27 @@
if(open)
open = FALSE
loss = (active_power_usage / resistance)*0.5
loss = (heating_power / resistance) * 0.5
cooking = TRUE
else
open = TRUE
loss = (active_power_usage / resistance)*4
loss = (heating_power / resistance) * 4
//When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open)
cooking = FALSE
playsound(src, 'sound/machines/hatch_open.ogg', 20, 1)
update_icon()
/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I)
// check if someone's trying to manipulate the machine
if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer))
return TRUE
else
return FALSE
/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user)
if(!open)
if(!open && !manip(I))
to_chat(user, "<span class='warning'>You can't put anything in while the door is closed!</span>")
return 0
@@ -117,6 +127,7 @@
/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI)
if(CI.combine_target)
CI.result_type = 3//Combination type. We're making something out of our ingredients
visible_message("<span class='notice'>\The [src] pings!</span>")
combination_cook(CI)
return
else

View File

@@ -35,6 +35,7 @@
/obj/machinery/microwave/Initialize()
. = ..()
reagents = new/datum/reagents(100)
reagents.my_atom = src
@@ -156,19 +157,27 @@
var/obj/item/weapon/grab/G = O
to_chat(user, "<span class='warning'>This is ridiculous. You can not fit \the [G.affecting] in this [src].</span>")
return 1
else if(O.is_screwdriver())
default_deconstruction_screwdriver(user, O)
return
else if(O.is_crowbar())
user.visible_message( \
"<span class='notice'>\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.</span>", \
"<span class='notice'>You attempt to [src.anchored ? "unsecure" : "secure"] the microwave.</span>"
)
if (do_after(user,20))
user.visible_message( \
"<span class='notice'>\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.</span>", \
"<span class='notice'>You [src.anchored ? "unsecure" : "secure"] the microwave.</span>"
)
src.anchored = !src.anchored
if(default_deconstruction_crowbar(user, O))
return
else
to_chat(user, "<span class='notice'>You decide not to do that.</span>")
user.visible_message( \
"<span class='notice'>\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.</span>", \
"<span class='notice'>You attempt to [src.anchored ? "unsecure" : "secure"] the microwave.</span>"
)
if (do_after(user,20/O.toolspeed))
user.visible_message( \
"<span class='notice'>\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.</span>", \
"<span class='notice'>You [src.anchored ? "unsecure" : "secure"] the microwave.</span>"
)
src.anchored = !src.anchored
else
to_chat(user, "<span class='notice'>You decide not to do that.</span>")
else if(default_part_replacement(user, O))
return
else
to_chat(user, "<span class='warning'>You have no idea what you can cook with this [O].</span>")
..()

View File

@@ -195,23 +195,23 @@
return
// We will subtract all the ingredients from the container, and transfer their reagents into a holder
// We will not touch things which are not required for this recipe. They will be left behind for the caller
// to decide what to do. They may be used again to make another recipe or discarded, or merged into the results,
// thats no longer the concern of this proc
var/obj/temp = new /obj(src)
temp.create_reagents(999999999)
//We will subtract all the ingredients from the container, and transfer their reagents into a holder
//We will not touch things which are not required for this recipe. They will be left behind for the caller
//to decide what to do. They may be used again to make another recipe or discarded, or merged into the results,
//thats no longer the concern of this proc
var/datum/reagents/buffer = new /datum/reagents(10000000000, null)//
// Find items we need
if(items && items.len)
//Find items we need
if (items && items.len)
for (var/i in items)
var/obj/item/I = locate(i) in container
if (I && I.reagents)
I.reagents.trans_to_holder(temp.reagents,I.reagents.total_volume)
I.reagents.trans_to_holder(buffer,I.reagents.total_volume)
qdel(I)
// Find fruits
if(fruit && fruit.len)
//Find fruits
if (fruit && fruit.len)
var/list/checklist = list()
checklist = fruit.Copy()
@@ -219,18 +219,18 @@
if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag]))
continue
if(checklist[G.seed.kitchen_tag] > 0)
if (checklist[G.seed.kitchen_tag] > 0)
//We found a thing we need
checklist[G.seed.kitchen_tag]--
if(G && G.reagents)
G.reagents.trans_to_holder(temp.reagents,G.reagents.total_volume)
if (G && G.reagents)
G.reagents.trans_to_holder(buffer,G.reagents.total_volume)
qdel(G)
// And lastly deduct necessary quantities of reagents
if(reagents && reagents.len)
//And lastly deduct necessary quantities of reagents
if (reagents && reagents.len)
for (var/r in reagents)
// Doesnt matter whether or not there's enough, we assume that check is done before
container.reagents.trans_id_to(temp, r, reagents[r])
//Doesnt matter whether or not there's enough, we assume that check is done before
container.reagents.trans_type_to(buffer, r, reagents[r])
/*
Now we've removed all the ingredients that were used and we have the buffer containing the total of
@@ -244,64 +244,62 @@
If, as in the most common case, there is only a single result, then it will just be a reference to
the single-result's reagents
*/
var/obj/tempholder = new(src)
tempholder.create_reagents(999999999)
var/datum/reagents/holder = new/datum/reagents(10000000000)
var/list/results = list()
while (tally < result_quantity)
var/obj/result_obj = new result(container)
results.Add(result_obj)
if(!result_obj.reagents)//This shouldn't happen
if (!result_obj.reagents)//This shouldn't happen
//If the result somehow has no reagents defined, then create a new holder
log_runtime(EXCEPTION("<span class='danger'>[result_obj] had no reagents!</span>"))
result_obj.create_reagents(temp.reagents.total_volume*1.5)
result_obj.reagents = new /datum/reagents(buffer.total_volume*1.5, result_obj)
if(result_quantity == 1)
qdel(tempholder.reagents)
tempholder.reagents = result_obj.reagents
if (result_quantity == 1)
qdel(holder)
holder = result_obj.reagents
else
log_runtime(EXCEPTION("<span class='danger'>[result_quantity] was greater than 1! Check [result_obj]!</span>"))
result_obj.reagents.trans_to(tempholder.reagents, result_obj.reagents.total_volume)
result_obj.reagents.trans_to(holder, result_obj.reagents.total_volume)
tally++
switch(reagent_mix)
if(RECIPE_REAGENT_REPLACE)
if (RECIPE_REAGENT_REPLACE)
//We do no transferring
if(RECIPE_REAGENT_SUM)
if (RECIPE_REAGENT_SUM)
//Sum is easy, just shove the entire buffer into the result
temp.reagents.trans_to_holder(tempholder.reagents, temp.reagents.total_volume)
if(RECIPE_REAGENT_MAX)
buffer.trans_to_holder(holder, buffer.total_volume)
if (RECIPE_REAGENT_MAX)
//We want the highest of each.
//Iterate through everything in buffer. If the target has less than the buffer, then top it up
for (var/datum/reagent/R in temp.reagents.reagent_list)
var/rvol = tempholder.reagents.get_reagent_amount(R.id)
for (var/datum/reagent/R in buffer.reagent_list)
var/rvol = holder.get_reagent_amount(R.type)
if (rvol < R.volume)
//Transfer the difference
temp.reagents.trans_id_to(tempholder, R.id, R.volume-rvol)
buffer.trans_type_to(holder, R.type, R.volume-rvol)
if(RECIPE_REAGENT_MIN)
if (RECIPE_REAGENT_MIN)
//Min is slightly more complex. We want the result to have the lowest from each side
//But zero will not count. Where a side has zero its ignored and the side with a nonzero value is used
for (var/datum/reagent/R in temp.reagents.reagent_list)
var/rvol = tempholder.reagents.get_reagent_amount(R.id)
if(rvol == 0) //If the target has zero of this reagent
temp.reagents.trans_id_to(tempholder, R.id, R.volume)
for (var/datum/reagent/R in buffer.reagent_list)
var/rvol = holder.get_reagent_amount(R.type)
if (rvol == 0) //If the target has zero of this reagent
buffer.trans_type_to(holder, R.type, R.volume)
//Then transfer all of ours
else if(rvol > R.volume)
else if (rvol > R.volume)
//if the target has more than ours
//Remove the difference
tempholder.reagents.remove_reagent(R.id, rvol-R.volume)
holder.remove_reagent(R.type, rvol-R.volume)
if(results.len > 1)
if (results.len > 1)
//If we're here, then holder is a buffer containing the total reagents for all the results.
//So now we redistribute it among them
var/total = tempholder.reagents.total_volume
var/total = holder.total_volume
for (var/i in results)
var/atom/a = i //optimisation
tempholder.reagents.trans_to(a, total / results.len)
holder.trans_to(a, total / results.len)
return results
// When exact is false, extraneous ingredients are ignored

View File

@@ -77,28 +77,36 @@
//Sweet Recipes.
//==================
// All donuts were given reagents of 5 to equal old recipes and make for faster cook times.
/datum/recipe/jellydonut
appliance = FRYER
reagents = list("berryjuice" = 10, "sugar" = 10)
reagents = list("berryjuice" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
result_quantity = 2
/datum/recipe/jellydonut/poisonberry
reagents = list("poisonberryjuice" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry
/datum/recipe/jellydonut/slime
appliance = FRYER
reagents = list("slimejelly" = 10, "sugar" = 10)
reagents = list("slimejelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
/datum/recipe/jellydonut/cherry
appliance = FRYER
reagents = list("cherryjelly" = 10, "sugar" = 10)
reagents = list("cherryjelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
/datum/recipe/donut
appliance = FRYER
reagents = list("sugar" = 10)
reagents = list("sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)

View File

@@ -0,0 +1,231 @@
/datum/recipe/humanburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/human,
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/human/burger
/datum/recipe/plainburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/humanburger
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
/datum/recipe/syntiburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
/datum/recipe/brainburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/organ/internal/brain
)
result = /obj/item/weapon/reagent_containers/food/snacks/brainburger
/datum/recipe/roburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/robot_parts/head
)
result = /obj/item/weapon/reagent_containers/food/snacks/roburger
/datum/recipe/xenoburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger
/datum/recipe/fishburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/fishburger
/datum/recipe/tofuburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofuburger
/datum/recipe/ghostburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/ectoplasm //where do you even find this stuff
)
result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger
/datum/recipe/clownburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/clothing/mask/gas/clown_hat
)
result = /obj/item/weapon/reagent_containers/food/snacks/clownburger
/datum/recipe/mimeburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/clothing/head/beret
)
result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger
/datum/recipe/mouseburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/holder/mouse
)
result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger
/datum/recipe/bunbun
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/bunbun
/datum/recipe/hotdog
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/sausage
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotdog
/datum/recipe/humankabob
appliance = GRILL
items = list(
/obj/item/stack/rods,
/obj/item/weapon/reagent_containers/food/snacks/meat/human,
/obj/item/weapon/reagent_containers/food/snacks/meat/human,
)
result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob
/datum/recipe/kabob //Do not put before humankabob
appliance = GRILL
items = list(
/obj/item/stack/rods,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
/datum/recipe/monkeykabob
appliance = GRILL
items = list(
/obj/item/stack/rods,
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
/datum/recipe/syntikabob
appliance = GRILL
items = list(
/obj/item/stack/rods,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
/datum/recipe/tofukabob
appliance = GRILL
items = list(
/obj/item/stack/rods,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob
/datum/recipe/spellburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger,
/obj/item/clothing/head/wizard/fake,
)
result = /obj/item/weapon/reagent_containers/food/snacks/spellburger
/datum/recipe/spellburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger,
/obj/item/clothing/head/wizard,
)
result = /obj/item/weapon/reagent_containers/food/snacks/spellburger
/datum/recipe/bigbiteburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
)
reagents = list("egg" = 3)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
/datum/recipe/superbiteburger
appliance = GRILL
fruit = list("tomato" = 1)
reagents = list("sodiumchloride" = 5, "blackpepper" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/boiledegg,
)
result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger
/datum/recipe/slimeburger
appliance = GRILL
reagents = list("slimejelly" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime
/datum/recipe/jellyburger
appliance = GRILL
reagents = list("cherryjelly" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry
/datum/recipe/bearburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/bearmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/bearburger
/datum/recipe/baconburger
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/bacon,
/obj/item/weapon/reagent_containers/food/snacks/bacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon

View File

@@ -43,47 +43,7 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/devilledegg
/datum/recipe/dionaroast
fruit = list("apple" = 1)
reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though.
items = list(/obj/item/weapon/holder/diona)
result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast
/* // These should be fryer recipes, as should the other donuts, TODO Conversions
/datum/recipe/jellydonut
reagents = list("berryjuice" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
/datum/recipe/jellydonut/poisonberry
reagents = list("poisonberryjuice" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry
/datum/recipe/jellydonut/slime
reagents = list("slimejelly" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
/datum/recipe/jellydonut/cherry
reagents = list("cherryjelly" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
/datum/recipe/donut
reagents = list("sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
*/
/* // Test remove these in favor of grillin' on the grill, bby.
/datum/recipe/humanburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/human,
@@ -167,6 +127,7 @@ I said no!
/obj/item/weapon/holder/mouse
)
result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger
*/
/datum/recipe/bunbun
items = list(
@@ -211,44 +172,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
/datum/recipe/meatbread
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
/datum/recipe/xenomeatbread
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
/datum/recipe/bananabread
fruit = list("banana" = 1)
reagents = list("milk" = 5, "sugar" = 15)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
/datum/recipe/omelette
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
@@ -289,41 +212,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen
/datum/recipe/meatpie
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
/obj/item/weapon/reagent_containers/food/snacks/meat,
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatpie
/datum/recipe/tofupie
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofupie
/datum/recipe/xemeatpie
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat,
)
result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie
/datum/recipe/pie
fruit = list("banana" = 1)
reagents = list("sugar" = 5)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/pie
/datum/recipe/cherrypie
fruit = list("cherries" = 1)
reagents = list("sugar" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
)
result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie
/datum/recipe/berryclafoutis
fruit = list("berries" = 1)
items = list(
@@ -344,14 +232,8 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu
/* - TODO: Port this to Fryer
/datum/recipe/chaosdonut
reagents = list("frostoil" = 5, "capsaicin" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos
*/
/* // Test remove these in favor of grillin' on the grill, bby.
/datum/recipe/humankabob
items = list(
/obj/item/stack/rods,
@@ -391,6 +273,7 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/tofu,
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob
*/
/datum/recipe/tofubread
items = list(
@@ -593,16 +476,7 @@ I said no!
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat)
result = /obj/item/weapon/reagent_containers/food/snacks/coldchili
/datum/recipe/amanita_pie
reagents = list("amatoxin" = 5)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie
/datum/recipe/plump_pie
fruit = list("plumphelmet" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie
/* // Testremove to swap to grill
/datum/recipe/spellburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger,
@@ -627,7 +501,7 @@ I said no!
reagents = list("egg" = 3)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
*/
/datum/recipe/enchiladas
fruit = list("chili" = 2, "corn" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet)
@@ -808,7 +682,7 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/meatball,
)
result = /obj/item/weapon/reagent_containers/food/snacks/spesslaw
/*
/datum/recipe/superbiteburger
fruit = list("tomato" = 1)
reagents = list("sodiumchloride" = 5, "blackpepper" = 5)
@@ -820,7 +694,7 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/boiledegg,
)
result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger
*/
/datum/recipe/candiedapple
fruit = list("apple" = 1)
reagents = list("water" = 5, "sugar" = 5)
@@ -942,11 +816,6 @@ I said no!
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/mysterysoup
/datum/recipe/pumpkinpie
fruit = list("pumpkin" = 1)
reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
/datum/recipe/plumphelmetbiscuit
fruit = list("plumphelmet" = 1)
reagents = list("water" = 5, "flour" = 5)
@@ -972,14 +841,6 @@ I said no!
reagents = list("water" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup
/datum/recipe/appletart
fruit = list("goldapple" = 1)
reagents = list("sugar" = 5, "milk" = 5, "flour" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/egg
)
result = /obj/item/weapon/reagent_containers/food/snacks/appletart
/datum/recipe/tossedsalad
fruit = list("cabbage" = 2, "tomato" = 1, "carrot" = 1, "apple" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/tossedsalad
@@ -1012,13 +873,6 @@ I said no!
for (var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked in .)
being_cooked.reagents.del_reagent("toxin")
/datum/recipe/cracker
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
result = /obj/item/weapon/reagent_containers/food/snacks/cracker
/datum/recipe/stuffing
reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1)
items = list(
@@ -1292,64 +1146,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/piginblanket
// Cakes.
/datum/recipe/cake
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9, "vanilla" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
/datum/recipe/cake/carrot
fruit = list("carrot" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
/datum/recipe/cake/cheese
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
/datum/recipe/cake/peanut
fruit = list("peanut" = 3)
reagents = list("milk" = 5, "flour" = 10, "sugar" = 5, "egg" = 6, "peanutbutter" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake
/datum/recipe/cake/orange
fruit = list("orange" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
/datum/recipe/cake/lime
fruit = list("lime" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
/datum/recipe/cake/lemon
fruit = list("lemon" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
/datum/recipe/cake/chocolate
items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
/datum/recipe/cake/birthday
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(/obj/item/clothing/head/cakehat)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
/datum/recipe/cake/apple
fruit = list("apple" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
/datum/recipe/cake/brain
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(/obj/item/organ/internal/brain)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
/datum/recipe/bagelplain
reagents = list("water" = 5)
items = list(
@@ -1439,13 +1235,14 @@ I said no!
fruit = list("peanut" = 2, "potato" = 1)
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/yellowcurry
/*
/datum/recipe/bearburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/bearmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/bearburger
*/
/datum/recipe/bearchili
fruit = list("chili" = 1, "tomato" = 1)
@@ -1808,7 +1605,7 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/friedegg
)
result = /obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs
/*
/datum/recipe/baconburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
@@ -1817,6 +1614,7 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/bacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon
*/
/datum/recipe/ntmuffin
items = list(

View File

@@ -9,23 +9,8 @@
result = /obj/item/weapon/reagent_containers/food/snacks/path_to_some_food
*/
// All of this shit needs to be gone through and reorganized into different recipes per machine - Rykka 7/16/2020
/datum/recipe/jellydonut
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice)
/datum/recipe/jellydonut/slime
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice)
/datum/recipe/jellydonut/cherry
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice)
/datum/recipe/donut
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice)
/datum/recipe/sushi
/datum/recipe/carpsushi
fruit = list("cabbage" = 1)
reagents = list("rice" = 20)
items = list(
@@ -45,37 +30,6 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/lasagna
/datum/recipe/goulash
fruit = list("tomato" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/spagetti
)
result = /obj/item/weapon/reagent_containers/food/snacks/goulash
/datum/recipe/donerkebab
fruit = list("tomato" = 1, "cabbage" = 1)
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab
/datum/recipe/roastbeef
fruit = list("carrot" = 2, "potato" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/roastbeef
/datum/recipe/reishicup
reagents = list("psilocybin" = 3, "sugar" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/weapon/reagent_containers/food/snacks/reishicup
/datum/recipe/chickenwings
reagents = list("capsaicin" = 5, "flour" = 10)
items = list(
@@ -86,22 +40,6 @@
)
result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box.
/datum/recipe/hotandsoursoup
fruit = list("cabbage" = 1, "mushroom" = 1)
reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "water" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup
/datum/recipe/kitsuneudon
reagents = list("egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spagetti,
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon
/datum/recipe/generalschicken
reagents = list("capsaicin" = 2, "sugar" = 2, "flour" = 10)
items = list(
@@ -131,28 +69,6 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz
/datum/recipe/pillbugball
reagents = list("carbon" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/bugball
/datum/recipe/mammi
fruit = list("orange" = 1)
reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/mammi
/datum/recipe/makaroni
reagents = list("flour" = 15, "milk" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat,
/obj/item/weapon/reagent_containers/food/snacks/egg,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/makaroni
/datum/recipe/lobster
fruit = list("lemon" = 1, "cabbage" = 1)
items = list(

View File

@@ -421,27 +421,34 @@
//============
/datum/recipe/cake
appliance = OVEN
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9, "vanilla" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
reagent_mix = RECIPE_REAGENT_REPLACE
/datum/recipe/cake/carrot
appliance = OVEN
fruit = list("carrot" = 3)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
/datum/recipe/cake/cheese
appliance = OVEN
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
/datum/recipe/cake/peanut
fruit = list("peanut" = 3)
reagents = list("milk" = 5, "flour" = 10, "sugar" = 5, "egg" = 6, "peanutbutter" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake
/datum/recipe/cake/orange
appliance = OVEN
fruit = list("orange" = 1)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "orangejuice" = 3, "sugar" = 5)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
/datum/recipe/cake/lime
@@ -464,16 +471,19 @@
/datum/recipe/cake/birthday
appliance = OVEN
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(/obj/item/clothing/head/cakehat)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
/datum/recipe/cake/apple
appliance = OVEN
fruit = list("apple" = 2)
reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
/datum/recipe/cake/brain
appliance = OVEN
reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9)
items = list(/obj/item/organ/internal/brain)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake

View File

@@ -153,7 +153,9 @@
/obj/item/weapon/reagent_containers/glass,
/obj/item/weapon/reagent_containers/food,
/obj/item/seeds,
/obj/item/weapon/grown
/obj/item/weapon/grown,
/obj/item/trash,
/obj/item/weapon/reagent_containers/cooking_container
)
/obj/item/weapon/gripper/gravekeeper //Used for handling grave things, flowers, etc.

View File

@@ -282,6 +282,34 @@
trans_to(target, amount, multiplier, copy)
/datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1)
if (!target)
return
var/datum/reagent/transfering_reagent = get_reagent(rtype)
if (istype(target, /atom))
var/atom/A = target
if (!A.reagents || !A.simulated)
return
amount = min(amount, transfering_reagent.volume)
if(!amount)
return
var/datum/reagents/F = new /datum/reagents(amount)
var/tmpdata = get_data(rtype)
F.add_reagent(rtype, amount, tmpdata)
remove_reagent(rtype, amount)
if (istype(target, /atom))
return F.trans_to(target, amount) // Let this proc check the atom's type
else if (istype(target, /datum/reagents))
return F.trans_to_holder(target, amount)
/datum/reagents/proc/trans_id_to(var/atom/target, var/id, var/amount = 1)
if (!target || !target.reagents)
return

View File

@@ -583,13 +583,48 @@ CIRCUITS BELOW
req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
build_path = /obj/item/weapon/circuitboard/aicore
sort_string = "XAAAA"
// Cooking Appliances
/datum/design/circuit/microwave
name = "microwave board"
id = "microwave_board"
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
build_path = /obj/item/weapon/circuitboard/microwave
sort_string = "HACAM"
/datum/design/circuit/oven
name = "oven board"
id = "oven_board"
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
build_path = /obj/item/weapon/circuitboard/oven
sort_string = "HACAN"
/datum/design/circuit/fryer
name = "deep fryer board"
id = "fryer_board"
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
build_path = /obj/item/weapon/circuitboard/fryer
sort_string = "HACAO"
/datum/design/circuit/cerealmaker
name = "cereal maker board"
id = "cerealmaker_board"
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
build_path = /obj/item/weapon/circuitboard/cerealmaker
sort_string = "HACAP"
/datum/design/circuit/candymaker
name = "candy machine board"
id = "candymachine_board"
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
build_path = /obj/item/weapon/circuitboard/candymachine
sort_string = "HACAQ"
/datum/design/circuit/microwave/advanced
name = "deluxe microwave"
id = "deluxe microwave"
req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
build_path = /obj/item/weapon/circuitboard/microwave/advanced
sort_string = "MAAAC"
sort_string = "HACAA"
/datum/design/circuit/shield_generator
name = "shield generator"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 130 KiB

View File

@@ -1238,6 +1238,7 @@
#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\engineering.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\jukebox.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\kitchen_appliances.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
@@ -2065,6 +2066,7 @@
#include "code\modules\food\recipe.dm"
#include "code\modules\food\recipe_dump.dm"
#include "code\modules\food\recipes_fryer.dm"
#include "code\modules\food\recipes_grill.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\food\recipes_microwave_vr.dm"
#include "code\modules\food\recipes_oven.dm"