Merge pull request #8536 from VOREStation/upstream-merge-7344

[MIRROR] Aurora Cooking Port
This commit is contained in:
Novacat
2020-07-31 01:34:42 -04:00
committed by GitHub
16 changed files with 255 additions and 223 deletions

View File

@@ -281,3 +281,103 @@
return strtype return strtype
return copytext(strtype, delim_pos) return copytext(strtype, delim_pos)
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
/proc/list2text(list/ls, sep)
if (ls.len <= 1) // Early-out code for empty or singleton lists.
return ls.len ? ls[1] : ""
var/l = ls.len // Made local for sanic speed.
var/i = 0 // Incremented every time a list index is accessed.
if (sep != null)
// Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
#define S1 sep, ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
// Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
if (l-1 & 0x01) // 'i' will always be 1 here.
. = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][][][][][]", ., S4) // And so on....
if (l-i & 0x08)
. = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
else
// Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
#define S1 ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
if (l-1 & 0x01) // 'i' will always be 1 here.
. += S1 // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][]", ., S4) // And so on...
if (l-i & 0x08)
. = text("[][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
/proc/text2list(text, delimiter="\n")
var/delim_len = length(delimiter)
if (delim_len < 1)
return list(text)
. = list()
var/last_found = 1
var/found
do
found = findtext(text, delimiter, last_found, 0)
. += copytext(text, last_found, found)
last_found = found + delim_len
while (found)

View File

@@ -1,107 +0,0 @@
/*
// Contains VOREStation type2type functions
// list2text - takes delimiter and returns text
// text2list - takes delimiter, and creates list
//
*/
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
/proc/list2text(list/ls, sep)
if (ls.len <= 1) // Early-out code for empty or singleton lists.
return ls.len ? ls[1] : ""
var/l = ls.len // Made local for sanic speed.
var/i = 0 // Incremented every time a list index is accessed.
if (sep <> null)
// Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
#define S1 sep, ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
// Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
if (l-1 & 0x01) // 'i' will always be 1 here.
. = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][][][][][]", ., S4) // And so on....
if (l-i & 0x08)
. = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
else
// Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
#define S1 ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
if (l-1 & 0x01) // 'i' will always be 1 here.
. += S1 // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][]", ., S4) // And so on...
if (l-i & 0x08)
. = text("[][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
/proc/text2list(text, delimiter="\n")
var/delim_len = length(delimiter)
if (delim_len < 1)
return list(text)
. = list()
var/last_found = 1
var/found
do
found = findtext(text, delimiter, last_found, 0)
. += copytext(text, last_found, found)
last_found = found + delim_len
while (found)

View File

@@ -157,7 +157,7 @@
. = ..() . = ..()
if(Adjacent(user)) if(Adjacent(user))
if(coating) if(coating)
to_chat(user, "<span class='notice'>It's coated in [coating.name]!</span>") . += "<span class='notice'>It's coated in [coating.name]!</span>"
if(bitecount==0) if(bitecount==0)
return . return .
else if (bitecount==1) else if (bitecount==1)
@@ -4528,12 +4528,14 @@
filling_color = "#DB0000" filling_color = "#DB0000"
center_of_mass = list("x"=16, "y"=16) center_of_mass = list("x"=16, "y"=16)
do_coating_prefix = 0 do_coating_prefix = 0
New() bitesize = 2
. = ..()
reagents.add_reagent("protein", 6)
reagents.add_reagent("batter", 1.7) /obj/item/weapon/reagent_containers/food/snacks/sausage/battered/Initialize()
reagents.add_reagent("oil", 1.5) . = ..()
bitesize = 2 reagents.add_reagent("protein", 6)
reagents.add_reagent("batter", 1.7)
reagents.add_reagent("oil", 1.5)
/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers /obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers
name = "jalapeno popper" name = "jalapeno popper"
@@ -4558,10 +4560,11 @@
icon = 'icons/obj/food_syn.dmi' icon = 'icons/obj/food_syn.dmi'
icon_state = "ratburger" icon_state = "ratburger"
center_of_mass = list("x"=16, "y"=11) center_of_mass = list("x"=16, "y"=11)
New() bitesize = 2
. = ..()
reagents.add_reagent("protein", 4) /obj/item/weapon/reagent_containers/food/snacks/mouseburger/Initialize()
bitesize = 2 . = ..()
reagents.add_reagent("protein", 4)
/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu
name = "chicken katsu" name = "chicken katsu"
@@ -4637,13 +4640,13 @@
nutriment_amt = 25 nutriment_amt = 25
nutriment_desc = list("fried pizza" = 25) nutriment_desc = list("fried pizza" = 25)
center_of_mass = list("x"=16, "y"=11) center_of_mass = list("x"=16, "y"=11)
bitesize = 2
New() /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch/Initialize()
. = ..() . = ..()
reagents.add_reagent("batter", 6.5) reagents.add_reagent("batter", 6.5)
coating = reagents.get_reagent("batter") coating = reagents.get_reagent("batter")
reagents.add_reagent("oil", 4) reagents.add_reagent("oil", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice /obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice
name = "pizza crunch" name = "pizza crunch"
@@ -6032,4 +6035,16 @@
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled/Initialize() /obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled/Initialize()
. = ..() . = ..()
reagents.add_reagent("protein", 1) reagents.add_reagent("protein", 1)
/obj/item/weapon/reagent_containers/food/snacks/lasagna
name = "lasagna"
desc = "Meaty, tomato-y, and ready to eat-y. Favorite of cats."
icon = 'icons/obj/food.dmi'
icon_state = "lasagna"
nutriment_amt = 5
nutriment_desc = list("tomato" = 4, "meat" = 2)
/obj/item/weapon/reagent_containers/food/snacks/lasagna/Initialize()
..()
reagents.add_reagent("protein", 2) //For meaty things.

View File

@@ -42,20 +42,6 @@
/obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled/filled /obj/item/weapon/reagent_containers/food/snacks/slice/sushi/filled/filled
filled = TRUE filled = TRUE
/obj/item/weapon/reagent_containers/food/snacks/lasagna
name = "lasagna"
desc = "Meaty, tomato-y, and ready to eat-y. Favorite of cats."
icon = 'icons/obj/food_vr.dmi'
icon_state = "lasagna"
nutriment_amt = 5
nutriment_desc = list("tomato" = 4, "meat" = 2)
/obj/item/weapon/reagent_containers/food/snacks/lasagna/Initialize()
..()
reagents.add_reagent("protein", 2) //For meaty things.
/obj/item/weapon/reagent_containers/food/snacks/goulash /obj/item/weapon/reagent_containers/food/snacks/goulash
name = "goulash" name = "goulash"
desc = "Paprika put to good use, finally, in a soup of meat and vegetables." desc = "Paprika put to good use, finally, in a soup of meat and vegetables."

View File

@@ -53,12 +53,10 @@
if (!available_recipes) if (!available_recipes)
available_recipes = new available_recipes = new
for (var/type in subtypesof(/datum/recipe)) for(var/type in subtypesof(/datum/recipe))
var/datum/recipe/test = new type var/datum/recipe/test = type
if ((appliancetype & test.appliance)) if((appliancetype & initial(test.appliance)))
available_recipes += test available_recipes += new test
else
qdel(test)
/obj/machinery/appliance/Destroy() /obj/machinery/appliance/Destroy()
for (var/a in cooking_objs) for (var/a in cooking_objs)
@@ -79,7 +77,7 @@
for (var/a in cooking_objs) for (var/a in cooking_objs)
var/datum/cooking_item/CI = a var/datum/cooking_item/CI = a
string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]</br>" string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]</br>"
to_chat(user, string) return string
else else
to_chat(user, "<span class='notice>'It is empty.</span>") to_chat(user, "<span class='notice>'It is empty.</span>")
@@ -125,14 +123,14 @@
return return
if (!user.IsAdvancedToolUser()) if (!user.IsAdvancedToolUser())
to_chat(user, "You lack the dexterity to do that!") to_chat(user, "<span class='warning'>You lack the dexterity to do that!</span>")
return return
if (user.stat || user.restrained() || user.incapacitated()) if (user.stat || user.restrained() || user.incapacitated())
return return
if (!Adjacent(user) && !issilicon(user)) if (!Adjacent(user) && !issilicon(user))
to_chat(user, "You can't reach [src] from here.") to_chat(user, "<span class='warning'>You can't reach [src] from here!</span>")
return return
if (stat & POWEROFF)//Its turned off if (stat & POWEROFF)//Its turned off
@@ -234,10 +232,10 @@
//This function is overridden by cookers that do stuff with containers //This function is overridden by cookers that do stuff with containers
/obj/machinery/appliance/proc/has_space(var/obj/item/I) /obj/machinery/appliance/proc/has_space(var/obj/item/I)
if (cooking_objs.len >= max_contents) if(cooking_objs.len >= max_contents)
return FALSE return FALSE
else return TRUE return TRUE
/obj/machinery/appliance/attackby(var/obj/item/I, var/mob/user) /obj/machinery/appliance/attackby(var/obj/item/I, var/mob/user)
if(!cook_type || (stat & (BROKEN))) if(!cook_type || (stat & (BROKEN)))
@@ -246,12 +244,9 @@
var/result = can_insert(I, user) var/result = can_insert(I, user)
if(!result) if(!result)
if(default_deconstruction_screwdriver(user, I)) if(!(default_deconstruction_screwdriver(user, I)))
return default_part_replacement(user, I)
else if(default_part_replacement(user, I)) return
return
else
return
if(result == 2) if(result == 2)
var/obj/item/weapon/grab/G = I var/obj/item/weapon/grab/G = I
@@ -572,17 +567,17 @@
var/datum/cooking_item/CI = menuoptions[selection] var/datum/cooking_item/CI = menuoptions[selection]
eject(CI, user) eject(CI, user)
update_icon() update_icon()
return 1 return TRUE
return 0 return FALSE
/obj/machinery/appliance/proc/can_remove_items(var/mob/user) /obj/machinery/appliance/proc/can_remove_items(var/mob/user)
if (!Adjacent(user)) if (!Adjacent(user))
return 0 return FALSE
if (isanimal(user)) if (isanimal(user))
return 0 return FALSE
return 1 return TRUE
/obj/machinery/appliance/proc/eject(var/datum/cooking_item/CI, var/mob/user = null) /obj/machinery/appliance/proc/eject(var/datum/cooking_item/CI, var/mob/user = null)
var/obj/item/thing var/obj/item/thing

View File

@@ -19,12 +19,12 @@
if(.) //no need to duplicate adjacency check if(.) //no need to duplicate adjacency check
if(!stat) if(!stat)
if (temperature < min_temp) if (temperature < min_temp)
to_chat(user, "<span class='warning'>\The [src] is still heating up and is too cold to cook anything yet.</span>") . += "<span class='warning'>\The [src] is still heating up and is too cold to cook anything yet.</span>"
else else
to_chat(user, "<span class='notice'>It is running at [round(get_efficiency(), 0.1)]% efficiency!</span>") . += "<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") . += "Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C"
else else
to_chat(user, "<span class='warning'>It is switched off.</span>") . += "<span class='warning'>It is switched off.</span>"
/obj/machinery/appliance/cooker/list_contents(var/mob/user) /obj/machinery/appliance/cooker/list_contents(var/mob/user)
if (cooking_objs.len) if (cooking_objs.len)

View File

@@ -17,7 +17,7 @@ fundamental differences
/obj/machinery/appliance/mixer/examine(var/mob/user) /obj/machinery/appliance/mixer/examine(var/mob/user)
. = ..() . = ..()
if(Adjacent(user)) if(Adjacent(user))
to_chat(user, "<span class='notice'>It is currently set to make a [selected_option]</span>") . += "<span class='notice'>It is currently set to make a [selected_option]</span>"
/obj/machinery/appliance/mixer/Initialize() /obj/machinery/appliance/mixer/Initialize()
. = ..() . = ..()
@@ -27,7 +27,7 @@ fundamental differences
//Mixers cannot-not do combining mode. So the default option is removed from this. A combine target must be chosen //Mixers cannot-not do combining mode. So the default option is removed from this. A combine target must be chosen
/obj/machinery/appliance/mixer/choose_output() /obj/machinery/appliance/mixer/choose_output()
set src in oview(1) set src in view(1)
set name = "Choose output" set name = "Choose output"
set category = "Object" set category = "Object"
@@ -91,7 +91,7 @@ fundamental differences
/obj/machinery/appliance/mixer/toggle_power() /obj/machinery/appliance/mixer/toggle_power()
set src in view() set src in view(1)
set name = "Toggle Power" set name = "Toggle Power"
set category = "Object" set category = "Object"

View File

@@ -71,31 +71,31 @@
// This is a bitfield, more than one type can be used // This is a bitfield, more than one type can be used
// Grill is presently unused and not listed // Grill is presently unused and not listed
/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents, var/exact = FALSE)
if(!reagents || !reagents.len) if(!reagents || !reagents.len)
return 1 return TRUE
if(!avail_reagents) if(!avail_reagents)
return 0 return FALSE
. = 1 . = TRUE
for(var/r_r in reagents) for(var/r_r in reagents)
var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r)
if(aval_r_amnt - reagents[r_r] >= 0) if(aval_r_amnt - reagents[r_r] >= 0)
if(aval_r_amnt>reagents[r_r]) if(aval_r_amnt>(reagents[r_r] && exact))
. = 0 . = FALSE
else else
return -1 return FALSE
if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len)
return 0 return FALSE
return . return .
/datum/recipe/proc/check_fruit(var/obj/container) /datum/recipe/proc/check_fruit(var/obj/container, var/exact = FALSE)
if (!fruit || !fruit.len) if (!fruit || !fruit.len)
return 1 return TRUE
. = 1 . = TRUE
if(fruit && fruit.len) if(fruit && fruit.len)
var/list/checklist = list() var/list/checklist = list()
// You should trust Copy(). // You should trust Copy().
@@ -107,18 +107,18 @@
checklist[G.seed.kitchen_tag]-- checklist[G.seed.kitchen_tag]--
for(var/ktag in checklist) for(var/ktag in checklist)
if(!isnull(checklist[ktag])) if(!isnull(checklist[ktag]))
if(checklist[ktag] < 0) if(checklist[ktag] < 0 && exact)
. = 0 . = FALSE
else if(checklist[ktag] > 0) else if(checklist[ktag] > 0)
. = -1 . = FALSE
break break
return . return .
/datum/recipe/proc/check_items(var/obj/container as obj) /datum/recipe/proc/check_items(var/obj/container as obj, var/exact = FALSE)
if(!items || !items.len) if(!items || !items.len)
return 1 return TRUE
. = 1 . = TRUE
if(items && items.len) if(items && items.len)
var/list/checklist = list() var/list/checklist = list()
checklist = items.Copy() // You should really trust Copy checklist = items.Copy() // You should really trust Copy
@@ -127,50 +127,50 @@
for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit)) for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit))
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown))
continue // Fruit is handled in check_fruit(). continue // Fruit is handled in check_fruit().
var/found = 0 var/found = FALSE
for(var/i = 1; i < checklist.len+1; i++) for(var/i = 1; i < checklist.len+1; i++)
var/item_type = checklist[i] var/item_type = checklist[i]
if (istype(O,item_type)) if (istype(O,item_type))
checklist.Cut(i, i+1) checklist.Cut(i, i+1)
found = 1 found = TRUE
break break
if(!found) if(!found && exact)
. = 0 return FALSE
else else
for(var/obj/O in container.contents) for(var/obj/O in container.contents)
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown))
continue // Fruit is handled in check_fruit(). continue // Fruit is handled in check_fruit().
var/found = 0 var/found = FALSE
for(var/i = 1; i < checklist.len+1; i++) for(var/i = 1; i < checklist.len+1; i++)
var/item_type = checklist[i] var/item_type = checklist[i]
if (istype(O,item_type)) if (istype(O,item_type))
if(check_coating(O)) if(check_coating(O))
checklist.Cut(i, i+1) checklist.Cut(i, i+1)
found = 1 found = TRUE
break break
if (!found) if (!found && exact)
. = 0 return FALSE
if(checklist.len) if(checklist.len)
. = -1 return FALSE
return . return .
//This is called on individual items within the container. //This is called on individual items within the container.
/datum/recipe/proc/check_coating(var/obj/O) /datum/recipe/proc/check_coating(var/obj/O, var/exact = FALSE)
if(!istype(O,/obj/item/weapon/reagent_containers/food/snacks)) if(!istype(O,/obj/item/weapon/reagent_containers/food/snacks))
return 1//Only snacks can be battered return TRUE //Only snacks can be battered
if (coating == -1) if (coating == -1)
return 1 //-1 value doesnt care return TRUE //-1 value doesnt care
var/obj/item/weapon/reagent_containers/food/snacks/S = O var/obj/item/weapon/reagent_containers/food/snacks/S = O
if (!S.coating) if (!S.coating)
if (!coating) if (!coating)
return 1 return TRUE
return 0 return FALSE
else if (S.coating.type == coating) else if (S.coating.type == coating)
return 1 return TRUE
return 0 return FALSE
//general version //general version
/datum/recipe/proc/make(var/obj/container as obj) /datum/recipe/proc/make(var/obj/container as obj)
@@ -308,7 +308,7 @@
/proc/select_recipe(var/list/datum/recipe/available_recipes, var/obj/obj as obj, var/exact) /proc/select_recipe(var/list/datum/recipe/available_recipes, var/obj/obj as obj, var/exact)
var/list/datum/recipe/possible_recipes = list() var/list/datum/recipe/possible_recipes = list()
for (var/datum/recipe/recipe in available_recipes) for (var/datum/recipe/recipe in available_recipes)
if((recipe.check_reagents(obj.reagents) < exact) || (recipe.check_items(obj) < exact) || (recipe.check_fruit(obj) < exact)) if(!recipe.check_reagents(obj.reagents, exact) || !recipe.check_items(obj, exact) || !recipe.check_fruit(obj, exact))
continue continue
possible_recipes |= recipe possible_recipes |= recipe
if (!possible_recipes.len) if (!possible_recipes.len)

View File

@@ -6,6 +6,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/fries result = /obj/item/weapon/reagent_containers/food/snacks/fries
/datum/recipe/cheesyfries /datum/recipe/cheesyfries
appliance = FRYER
items = list( items = list(
/obj/item/weapon/reagent_containers/food/snacks/fries, /obj/item/weapon/reagent_containers/food/snacks/fries,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
@@ -100,13 +101,11 @@
) )
result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry
/datum/recipe/jellydonut/slime /datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies.
appliance = FRYER
reagents = list("slimejelly" = 5, "sugar" = 5) reagents = list("slimejelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
/datum/recipe/jellydonut/cherry /datum/recipe/jellydonut/cherry // Subtypes of jellydonut, appliance inheritance applies.
appliance = FRYER
reagents = list("cherryjelly" = 5, "sugar" = 5) reagents = list("cherryjelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
@@ -177,4 +176,4 @@
/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/meat
) )
result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box. result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box.

View File

@@ -208,10 +208,11 @@ I said no!
/datum/recipe/amanitajelly /datum/recipe/amanitajelly
reagents = list("water" = 5, "vodka" = 5, "amatoxin" = 5) reagents = list("water" = 5, "vodka" = 5, "amatoxin" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly
make_food(var/obj/container as obj)
. = ..(container) /datum/recipe/amanitajelly/make_food(var/obj/container as obj)
for(var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked in .) . = ..(container)
being_cooked.reagents.del_reagent("amatoxin") for(var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked in .)
being_cooked.reagents.del_reagent("amatoxin")
/datum/recipe/meatballsoup /datum/recipe/meatballsoup
fruit = list("carrot" = 1, "potato" = 1) fruit = list("carrot" = 1, "potato" = 1)
@@ -531,11 +532,11 @@ I said no!
fruit = list("potato" = 1, "ambrosia" = 3) fruit = list("potato" = 1, "ambrosia" = 3)
items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball) items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball)
result = /obj/item/weapon/reagent_containers/food/snacks/validsalad result = /obj/item/weapon/reagent_containers/food/snacks/validsalad
make_food(var/obj/container as obj)
/datum/recipe/validsalad/make_food(var/obj/container as obj)
. = ..(container) . = ..(container)
for (var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked in .) for (var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked in .)
being_cooked.reagents.del_reagent("toxin") being_cooked.reagents.del_reagent("toxin")
/datum/recipe/stuffing /datum/recipe/stuffing
reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1) reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1)
@@ -1028,7 +1029,6 @@ I said no!
) )
result = /obj/item/weapon/reagent_containers/food/snacks/sashimi result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
/datum/recipe/nugget /datum/recipe/nugget
reagents = list("flour" = 5) reagents = list("flour" = 5)
items = list( items = list(

View File

@@ -83,6 +83,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/flatbread result = /obj/item/weapon/reagent_containers/food/snacks/flatbread
/datum/recipe/tortilla /datum/recipe/tortilla
appliance = OVEN
reagents = list("flour" = 5) reagents = list("flour" = 5)
items = list( items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough

View File

@@ -69,14 +69,14 @@
/datum/reagent/nutriment/coating/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/nutriment/coating/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
//We'll assume that the batter isnt going to be regurgitated and eaten by someone else. Only show this once //We'll assume that the batter isnt going to be regurgitated and eaten by someone else. Only show this once
if (data["cooked"] != 1) if(data["cooked"] != 1)
if (!messaged) if (!messaged)
to_chat(M, "Ugh, this raw [name] tastes disgusting.") to_chat(M, "<span class='warning'>Ugh, this raw [name] tastes disgusting.</span>")
nutriment_factor *= 0.5 nutriment_factor *= 0.5
messaged = 1 messaged = 1
//Raw coatings will sometimes cause vomiting //Raw coatings will sometimes cause vomiting. 75% chance of this happening.
if (prob(1)) if(prob(75))
M.vomit() M.vomit()
..() ..()

View File

@@ -626,6 +626,7 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/microwave/advanced build_path = /obj/item/weapon/circuitboard/microwave/advanced
sort_string = "HACAA" sort_string = "HACAA"
/datum/design/circuit/shield_generator /datum/design/circuit/shield_generator
name = "shield generator" name = "shield generator"
id = "shield_generator" id = "shield_generator"

View File

@@ -0,0 +1,43 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Rykka Stormheart
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Ported over Aurora Cooking from AuroraStation and Citadel-RP!"
- rscadd: "Refactored Recipes to be separated per-appliance, and all appliances have a use!"
- rscadd: "Please take note, Chefs, to pre-heat you appliances at the start of your shift."
- rscadd: "Fryer Recipes require batter before they can be made!"
- rscadd: "Fire alarms will go off if you burn food!"
- rscadd: "The largest change - Cooking takes TIME. Around 6 minutes for the largest recipes in the game."
- rscadd: "Too many other changes to list - refer to PR #7344 https://github.com/PolarisSS13/Polaris/pull/7344"
- rscdel: "Removed fun, and any sense of joy in the game."

View File

@@ -185,4 +185,4 @@ cNaaaaaaaaaaaaaaaaababcwcFcGabcwcJabcKcLabaaaaaaaaaaaaaaaaaaaaaaaaabcMalalagagag
cNaaaaaacOaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaacN cNaaaaaacOaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaacN
cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN
cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN
"} "}

View File

@@ -127,7 +127,6 @@
#include "code\_helpers\time.dm" #include "code\_helpers\time.dm"
#include "code\_helpers\turfs.dm" #include "code\_helpers\turfs.dm"
#include "code\_helpers\type2type.dm" #include "code\_helpers\type2type.dm"
#include "code\_helpers\type2type_vr.dm"
#include "code\_helpers\unsorted.dm" #include "code\_helpers\unsorted.dm"
#include "code\_helpers\unsorted_vr.dm" #include "code\_helpers\unsorted_vr.dm"
#include "code\_helpers\view.dm" #include "code\_helpers\view.dm"