fry everything

This commit is contained in:
timothyteakettle
2020-07-20 00:40:18 +01:00
parent b47872c079
commit 8709a72fc0
10 changed files with 107 additions and 108 deletions

View File

@@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(pointed_types, typecacheof(list(
#define isgun(A) (istype(A, /obj/item/gun))
#define isfood(A) (istype(A, /obj/item/reagent_containers/food))
#define isfood(A) (istype(A, /obj/item/reagent_containers/food/snacks))
//Assemblies
#define isassembly(O) (istype(O, /obj/item/assembly))

View File

@@ -1437,7 +1437,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
/obj/item/reagent_containers/food/snacks/grown,
/obj/item/reagent_containers/food/snacks/grown/mushroom,
/obj/item/reagent_containers/food/snacks/grown/nettle, // base type
/obj/item/reagent_containers/food/snacks/deepfryholder,
/obj/item/reagent_containers/food/snacks/grown/shell,
/obj/item/reagent_containers/food/snacks/clothing,
/obj/item/reagent_containers/food/snacks/store/bread

View File

@@ -51,7 +51,8 @@ Behavior that's still missing from this component that original food items had t
var/atom/owner = parent
owner.create_reagents(volume, INJECTABLE)
if(!owner.reagents) //we don't want to override what's in the item if it possibly contains reagents already
owner.create_reagents(volume, INJECTABLE)
if(initial_reagents)
for(var/rid in initial_reagents)

View File

@@ -0,0 +1,89 @@
/*!
This component essentially encapsulates frying and utilizes the edible component
This means fried items can work like regular ones, and generally the code is far less messy
*/
/datum/component/fried
var/fry_power //how powerfully was this item fried
var/atom/owner //the atom it is owned by
var/stored_name //name of the owner when the component was first added
var/frying_examine_text = "the coders messed frying code up, report this!"
/datum/component/fried/Initialize(frying_power)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
fry_power = frying_power
owner = parent
stored_name = owner.name
setup_fried_item()
//some stuff to do with the contents of fried junk
GLOBAL_VAR_INIT(frying_hardmode, TRUE)
GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE)
GLOBAL_LIST_INIT(frying_bad_chems, list(
/datum/reagent/toxin/bad_food = 1,
/datum/reagent/toxin = 1,
/datum/reagent/lithium = 1,
/datum/reagent/mercury = 1,
))
/datum/component/fried/proc/examine(datum/source, mob/user, list/examine_list)
examine_list += "The [parent] has been [frying_examine_text]"
/datum/component/fried/proc/setup_fried_item() //sets the name, colour and examine text and edibility up
switch(fry_power)
if(0 to 15)
owner.name = "lightly fried [owner.name]"
owner.add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY)
frying_examine_text = "lightly fried"
if(16 to 49)
owner.name = "fried [owner.name]"
owner.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY)
frying_examine_text = "moderately fried"
if(50 to 59)
owner.name = "deep fried [owner.name]"
owner.add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY)
frying_examine_text = "deeply fried"
else
owner.name = "the physical manifestation of fried foods"
owner.add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY)
frying_examine_text = "incomprehensibly fried to a crisp"
var/list/fried_tastes = list("crispy")
var/fried_foodtypes = FRIED
var/fried_junk = FALSE
if(!isfood(owner) && GLOB.frying_hardmode && GLOB.frying_bad_chems.len && !owner.reagents) //you fried some junk, it's not gonna taste great
fried_junk = TRUE
fried_foodtypes |= TOXIC // junk tastes toxic too
else
if(isfood(owner))
var/obj/item/reagent_containers/food/snacks/food_item = owner
fried_tastes += food_item.tastes
fried_foodtypes |= food_item.foodtype
owner.AddComponent(/datum/component/edible, foodtypes = fried_tastes, tastes = fried_tastes)
//adding the edible component gives it reagents meaning we can now add the bad frying reagents if it's junk
if(fried_junk && owner.reagents) //check again just incase
var/R = rand(1, GLOB.frying_bad_chems.len)
var/bad_chem = GLOB.frying_bad_chems[R]
var/bad_chem_amount = max(4,GLOB.frying_bad_chems[bad_chem] * (fry_power/12.5)) //4u of bad chem reached when deeply fried
owner.reagents.add_reagent(bad_chem, bad_chem_amount)
/datum/component/fried/proc/restore_name() //restore somethings name
//we do string manipulation and not restoring their name to real_name because some things hide your real_name and we want to maintain that
if(copytext(owner.name,1,14) == "lightly fried ")
owner.name = copytext(owner.name,15)
else
if(copytext(owner.name,1,6) == "fried ")
owner.name = copytext(owner.name,7)
else
if(copytext(owner.name,1,11) == "deep fried ")
owner.name = copytext(owner.name, 12)
else
if(owner.name == "the physical manifestation of fried foods") //if the name is still this, their name hasn't changed, so we can safely restore their stored name
owner.name = stored_name

View File

@@ -21,7 +21,7 @@ Food formatting and crafting examples.
icon_state = "saltychip" //Refers to an icon, usually in food.dmi
bitesize = 3 //How many reagents are consumed in each bite.
list_reagents = list(/datum/reagent/consumable/nutriment = 6, //What's inside the snack, but only if spawned. For example, from a chemical reaction, vendor, or slime core spawn.
/datum/reagent/consumable/nutriment/vitamin = 2)
/datum/reagent/consumable/nutriment/vitamin = 2)
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, //What's -added- to the food, in addition to the reagents contained inside the foods used to craft it. Basically, a reward for cooking.
/datum/reagent/consumable/nutriment/vitamin = 1) ^^For example. Egg+Egg = 2Egg + Bonus Reagents.
filling_color = "#F4A460" //What color it will use if put in a custom food.
@@ -406,3 +406,8 @@ All foods are distributed among various categories. Use common sense.
TB.MouseDrop(over)
else
return ..()
// //////////////////////////////////////////////Frying////////////////////////////////////////
/atom/proc/fry(cook_time = 30) //you can truly fry anything
if(!GetComponent(/datum/component/fried))
AddComponent(/datum/component/fried, frying_power = cook_time)

View File

@@ -191,93 +191,6 @@
tastes = list("bread" = 1, "garlic" = 1, "butter" = 1)
foodtype = GRAIN
/obj/item/reagent_containers/food/snacks/deepfryholder
name = "Deep Fried Foods Holder Obj"
desc = "If you can see this description the code for the deep fryer fucked up."
icon = 'icons/obj/food/food.dmi'
icon_state = ""
bitesize = 2
var/fried_garbage = FALSE //did you really fry a fire extinguisher?
GLOBAL_VAR_INIT(frying_hardmode, TRUE)
GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE)
GLOBAL_LIST_INIT(frying_bad_chems, list(
/datum/reagent/toxin/bad_food = 3,
/datum/reagent/drug/aranesp = 2,
/datum/reagent/toxin = 2,
/datum/reagent/lithium = 2,
/datum/reagent/mercury = 2,
))
/obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried)
. = ..()
name = fried.name //We'll determine the other stuff when it's actually removed
appearance = fried.appearance
layer = initial(layer)
plane = initial(plane)
lefthand_file = fried.lefthand_file
righthand_file = fried.righthand_file
item_state = fried.item_state
desc = fried.desc
w_class = fried.w_class
slowdown = fried.slowdown
equip_delay_self = fried.equip_delay_self
equip_delay_other = fried.equip_delay_other
strip_delay = fried.strip_delay
species_exception = fried.species_exception
item_flags = fried.item_flags
obj_flags = fried.obj_flags
if(isfood(fried))
fried.reagents.trans_to(src, fried.reagents.total_volume)
qdel(fried)
else
fried.forceMove(src)
trash = fried
fried_garbage = TRUE
/obj/item/reagent_containers/food/snacks/deepfryholder/Destroy()
if(trash)
QDEL_NULL(trash)
. = ..()
/obj/item/reagent_containers/food/snacks/deepfryholder/On_Consume(mob/living/eater)
if(fried_garbage && GLOB.frying_hardmode && GLOB.frying_bad_chems.len)
var/R = rand(1, GLOB.frying_bad_chems.len)
var/bad_chem = GLOB.frying_bad_chems[R]
var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem]
eater.reagents.add_reagent(bad_chem, bad_chem_amount)
//All fried inedible items also get condensed cooking oil added, which induces minor vomiting and heart damage
eater.reagents.add_reagent(/datum/reagent/toxin/condensed_cooking_oil, 2)
if(trash)
QDEL_NULL(trash)
..()
/obj/item/reagent_containers/food/snacks/deepfryholder/proc/fry(cook_time = 30)
switch(cook_time)
if(0 to 15)
add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY)
name = "lightly-fried [name]"
desc = "[desc] It's been lightly fried in a deep fryer."
adjust_food_quality(food_quality - 5)
if(16 to 49)
add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY)
name = "fried [name]"
desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%."
adjust_food_quality(food_quality - 10)
if(50 to 59)
add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY)
name = "deep-fried [name]"
desc = "[desc] Deep-fried to perfection."
adjust_food_quality(food_quality) //we shouldn't punish perfection in the fried arts
if(60 to INFINITY)
add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY)
name = "the physical manifestation of the very concept of fried foods"
desc = "A heavily-fried...something. Who can tell anymore?"
adjust_food_quality(0) //good job, you're truly the best cook.
filling_color = color
foodtype |= FRIED
/obj/item/reagent_containers/food/snacks/butteredtoast
name = "buttered toast"
desc = "Butter lightly spread over a piece of toast."

View File

@@ -29,7 +29,7 @@ God bless America.
use_power = IDLE_POWER_USE
idle_power_usage = 5
layer = BELOW_OBJ_LAYER
var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/obj/item/frying //What's being fried RIGHT NOW?
var/cook_time = 0
var/oil_use = 0.05 //How much cooking oil is used per tick
var/fry_speed = 1 //How quickly we fry food
@@ -91,7 +91,7 @@ God bless America.
if(I.resistance_flags & INDESTRUCTIBLE)
to_chat(user, "<span class='warning'>You don't feel it would be wise to fry [I]...</span>")
return
if(istype(I, /obj/item/reagent_containers/food/snacks/deepfryholder))
if(I.GetComponent(/datum/component/fried))
to_chat(user, "<span class='userdanger'>Your cooking skills are not up to the legendary Doublefry technique.</span>")
return
if(default_unfasten_wrench(user, I))
@@ -102,14 +102,8 @@ God bless America.
if(is_type_in_typecache(I, deepfry_blacklisted_items) || HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL)))
return ..()
else if(!frying && user.transferItemToLoc(I, src))
frying = I
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I)
//setup food quality for item depending on if it's edible or not
if(isfood(I))
var/obj/item/reagent_containers/food/original_food = I
frying.adjust_food_quality(original_food.food_quality) //food quality remains unchanged until degree of frying is calculated
else
frying.adjust_food_quality(10) //inedible fried item has low quality
icon_state = "fryer_on"
fry_loop.start()

View File

@@ -115,11 +115,11 @@
/datum/reagent/consumable/cooking_oil/reaction_obj(obj/O, reac_volume)
if(holder && holder.chem_temp >= fry_temperature)
if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder) && !(O.resistance_flags & (FIRE_PROOF|INDESTRUCTIBLE)))
if(isitem(O) && !O.GetComponent(/datum/component/fried) && !(O.resistance_flags & (FIRE_PROOF|INDESTRUCTIBLE)) && !O.reagents) //don't fry stuff we shouldn't
O.loc.visible_message("<span class='warning'>[O] rapidly fries as it's splashed with hot oil! Somehow.</span>")
var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O)
F.fry(volume)
F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume)
O.fry(volume)
if(O.reagents)
O.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume)
/datum/reagent/consumable/cooking_oil/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(!istype(M))

View File

@@ -165,10 +165,7 @@
var/chosen = getbork()
var/obj/B = new chosen(T)
if(prob(5))//Fry it!
var/obj/item/reagent_containers/food/snacks/deepfryholder/fried
fried = new(T, B)
fried.fry() // actually set the name and colour it
B = fried
B.fry() // actually set the name and colour it
if(prob(50))
for(var/j in 1 to rand(1, 3))
step(B, pick(NORTH,SOUTH,EAST,WEST))

View File

@@ -415,6 +415,7 @@
#include "code\datums\components\explodable.dm"
#include "code\datums\components\field_of_vision.dm"
#include "code\datums\components\footstep.dm"
#include "code\datums\components\fried.dm"
#include "code\datums\components\identification.dm"
#include "code\datums\components\igniter.dm"
#include "code\datums\components\infective.dm"