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 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(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)
return .
else if (bitecount==1)
@@ -4528,12 +4528,14 @@
filling_color = "#DB0000"
center_of_mass = list("x"=16, "y"=16)
do_coating_prefix = 0
New()
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sausage/battered/Initialize()
. = ..()
reagents.add_reagent("protein", 6)
reagents.add_reagent("batter", 1.7)
reagents.add_reagent("oil", 1.5)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers
name = "jalapeno popper"
@@ -4558,10 +4560,11 @@
icon = 'icons/obj/food_syn.dmi'
icon_state = "ratburger"
center_of_mass = list("x"=16, "y"=11)
New()
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/mouseburger/Initialize()
. = ..()
reagents.add_reagent("protein", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu
name = "chicken katsu"
@@ -4637,13 +4640,13 @@
nutriment_amt = 25
nutriment_desc = list("fried pizza" = 25)
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)
coating = reagents.get_reagent("batter")
reagents.add_reagent("oil", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice
name = "pizza crunch"
@@ -6033,3 +6036,15 @@
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled/Initialize()
. = ..()
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
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
name = "goulash"
desc = "Paprika put to good use, finally, in a soup of meat and vegetables."

View File

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

View File

@@ -19,12 +19,12 @@
if(.) //no need to duplicate adjacency check
if(!stat)
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
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")
. += "<span class='notice'>It is running at [round(get_efficiency(), 0.1)]% efficiency!</span>"
. += "Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C"
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)
if (cooking_objs.len)

View File

@@ -17,7 +17,7 @@ fundamental differences
/obj/machinery/appliance/mixer/examine(var/mob/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()
. = ..()
@@ -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
/obj/machinery/appliance/mixer/choose_output()
set src in oview(1)
set src in view(1)
set name = "Choose output"
set category = "Object"
@@ -91,7 +91,7 @@ fundamental differences
/obj/machinery/appliance/mixer/toggle_power()
set src in view()
set src in view(1)
set name = "Toggle Power"
set category = "Object"

View File

@@ -71,31 +71,31 @@
// This is a bitfield, more than one type can be used
// 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)
return 1
return TRUE
if(!avail_reagents)
return 0
return FALSE
. = 1
. = TRUE
for(var/r_r in reagents)
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] && exact))
. = FALSE
else
return -1
return FALSE
if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len)
return 0
return FALSE
return .
/datum/recipe/proc/check_fruit(var/obj/container)
/datum/recipe/proc/check_fruit(var/obj/container, var/exact = FALSE)
if (!fruit || !fruit.len)
return 1
return TRUE
. = 1
. = TRUE
if(fruit && fruit.len)
var/list/checklist = list()
// You should trust Copy().
@@ -107,18 +107,18 @@
checklist[G.seed.kitchen_tag]--
for(var/ktag in checklist)
if(!isnull(checklist[ktag]))
if(checklist[ktag] < 0)
. = 0
if(checklist[ktag] < 0 && exact)
. = FALSE
else if(checklist[ktag] > 0)
. = -1
. = FALSE
break
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)
return 1
return TRUE
. = 1
. = TRUE
if(items && items.len)
var/list/checklist = list()
checklist = items.Copy() // You should really trust Copy
@@ -127,50 +127,50 @@
for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit))
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown))
continue // Fruit is handled in check_fruit().
var/found = 0
var/found = FALSE
for(var/i = 1; i < checklist.len+1; i++)
var/item_type = checklist[i]
if (istype(O,item_type))
checklist.Cut(i, i+1)
found = 1
found = TRUE
break
if(!found)
. = 0
if(!found && exact)
return FALSE
else
for(var/obj/O in container.contents)
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown))
continue // Fruit is handled in check_fruit().
var/found = 0
var/found = FALSE
for(var/i = 1; i < checklist.len+1; i++)
var/item_type = checklist[i]
if (istype(O,item_type))
if(check_coating(O))
checklist.Cut(i, i+1)
found = 1
found = TRUE
break
if (!found)
. = 0
if (!found && exact)
return FALSE
if(checklist.len)
. = -1
return FALSE
return .
//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))
return 1//Only snacks can be battered
return TRUE //Only snacks can be battered
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
if (!S.coating)
if (!coating)
return 1
return 0
return TRUE
return FALSE
else if (S.coating.type == coating)
return 1
return TRUE
return 0
return FALSE
//general version
/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)
var/list/datum/recipe/possible_recipes = list()
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
possible_recipes |= recipe
if (!possible_recipes.len)

View File

@@ -6,6 +6,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/fries
/datum/recipe/cheesyfries
appliance = FRYER
items = list(
/obj/item/weapon/reagent_containers/food/snacks/fries,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
@@ -100,13 +101,11 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry
/datum/recipe/jellydonut/slime
appliance = FRYER
/datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies.
reagents = list("slimejelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
/datum/recipe/jellydonut/cherry
appliance = FRYER
/datum/recipe/jellydonut/cherry // Subtypes of jellydonut, appliance inheritance applies.
reagents = list("cherryjelly" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly

View File

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

View File

@@ -83,6 +83,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/flatbread
/datum/recipe/tortilla
appliance = OVEN
reagents = list("flour" = 5)
items = list(
/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)
//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)
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
messaged = 1
//Raw coatings will sometimes cause vomiting
if (prob(1))
//Raw coatings will sometimes cause vomiting. 75% chance of this happening.
if(prob(75))
M.vomit()
..()

View File

@@ -626,6 +626,7 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/microwave/advanced
sort_string = "HACAA"
/datum/design/circuit/shield_generator
name = "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

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