Files
Bubberstation/code/game/objects/items/food/meatslab.dm
Ghom 1f3894e793 Crafting refactor, implementing materials (#89465)
My original plan was to just implement materials into crafting so that
items would inherit the materials of their components, allowing for some
interesting stuff if the material flags of the item allow it. However to
my dismay crafting is a pile of old tech debt, starting from the old
`del_reqs` and `CheckParts` which still contain lines about old janky
bandaids that are no longer in use nor reachable, up to the
`customizable_reagent_holder` component which has some harddel issues
when your custom food is sliced, and items used in food recipes not
being deleted and instead stored inside the result with no purpose as
well as other inconsistencies like stack recipes that transfer materials
having counterparts in the UI that don't do that.

EDIT: Several things have come up while working on this, so I apologise
that it ended up changing over 100+ files. I managed to atomize some of
the changes, but it's a bit tedious.

EDIT: TLDR because I was told this section is too vague and there's too
much going on. This PR:
- Improves the dated crafting code (not the UI).
- replaced `atom/CheckParts` and `crafting_recipe/on_craft_completion`
with `atom/on_craft_completion`.
- Reqs used in food recipes are now deleted by default and not stored
inside the result (they did nothing).
- Renames the customizable_reagent_holder comp and improves it (No
harddels/ref issues).
- Adds a unit test that tries to craft all recipes to see what's wrong
(it skips some of the much more specific reqs for now).
- In the unit test is also the code to make sure materials of the
crafted item and a non-crafted item of the same type are roughly the
same, so far only applied to food.
- Some mild material/food refactoring around the fact that food item
code has been changed to support materials.

Improving the backbone of the crafting system. Also materials and food
code.

🆑
refactor: Refactored crafting backend. Report possible pesky bugs.
balance: the MEAT backpack (from the MEAT cargo pack) may be a smidge
different because of code standardization.
/🆑
2025-06-05 20:05:13 -04:00

789 lines
28 KiB
Plaintext

/obj/item/food/meat
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
w_class = WEIGHT_CLASS_SMALL
icon = 'icons/obj/food/meat.dmi'
var/subjectname = ""
var/subjectjob = null
var/blood_decal_type = /obj/effect/decal/cleanable/blood
/obj/item/food/meat/Initialize(mapload, blood_dna_list = list("meaty DNA" = get_blood_type(BLOOD_TYPE_MEAT)))
. = ..()
if(!blood_decal_type || !length(custom_materials))
return
AddComponent(
/datum/component/blood_walk,\
blood_type = blood_decal_type,\
blood_spawn_chance = 45,\
transfer_blood_dna = TRUE,\
max_blood = custom_materials[custom_materials[1]] / SHEET_MATERIAL_AMOUNT,\
)
AddComponent(
/datum/component/bloody_spreader,\
blood_left = custom_materials[custom_materials[1]] / SHEET_MATERIAL_AMOUNT,\
blood_dna = blood_dna_list,\
)
/obj/item/food/meat/slab
name = "meat"
desc = "A slab of meat."
icon_state = "meat"
bite_consumption = 3
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
/datum/reagent/consumable/nutriment/fat = 2,
/datum/reagent/consumable/nutriment/vitamin = 1,
) //Meat has fats that a food processor can process into cooking oil
tastes = list("meat" = 1)
foodtypes = MEAT | RAW
///Legacy code, handles the coloring of the overlay of the cutlets made from this.
var/slab_color = COLOR_RED
/obj/item/food/meat/slab/Initialize(mapload)
. = ..()
AddElement(/datum/element/dryable, /obj/item/food/sosjerky/healthy)
/obj/item/food/meat/slab/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
/obj/item/food/meat/slab/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain, MEATSLAB_PROCESSED_AMOUNT, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
///////////////////////////////////// HUMAN MEATS //////////////////////////////////////////////////////
/obj/item/food/meat/slab/human
name = "meat"
tastes = list("tender meat" = 1)
foodtypes = MEAT | RAW | GORE
venue_value = FOOD_MEAT_HUMAN
/obj/item/food/meat/slab/human/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
/obj/item/food/meat/slab/human/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/human/mutant/slime
icon_state = "slimemeat"
desc = "Because jello wasn't offensive enough to vegans."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 4,
/datum/reagent/toxin/slimejelly = 3,
)
tastes = list("slime" = 1, "jelly" = 1)
foodtypes = MEAT | RAW | TOXIC
venue_value = FOOD_MEAT_MUTANT_RARE
blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/golem
icon_state = "golemmeat"
desc = "Edible rocks, welcome to the future."
food_reagents = list(
/datum/reagent/consumable/nutriment = 3,
/datum/reagent/iron = 3,
)
tastes = list("rock" = 1)
foodtypes = MEAT | RAW | GROSS
venue_value = FOOD_MEAT_MUTANT_RARE
blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/golem/adamantine
icon_state = "agolemmeat"
desc = "From the slime pen to the rune to the kitchen, science."
foodtypes = MEAT | RAW | GROSS
/obj/item/food/meat/slab/human/mutant/lizard
icon_state = "lizardmeat"
desc = "Delicious dino damage."
tastes = list("meat" = 4, "scales" = 1)
foodtypes = MEAT | RAW | GORE
venue_value = FOOD_MEAT_MUTANT
starting_reagent_purity = 0.4 // Take a look at their diet
/obj/item/food/meat/slab/human/mutant/lizard/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human/lizard, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/human/mutant/plant
icon_state = "plantmeat"
desc = "All the joys of healthy eating with all the fun of cannibalism."
tastes = list("salad" = 1, "wood" = 1)
foodtypes = VEGETABLES
venue_value = FOOD_MEAT_MUTANT_RARE
blood_decal_type = /obj/effect/decal/cleanable/food/plant_smudge
/obj/item/food/meat/slab/human/mutant/shadow
icon_state = "shadowmeat"
desc = "Ow, the edge."
tastes = list("darkness" = 1, "meat" = 1)
foodtypes = MEAT | RAW | GORE
venue_value = FOOD_MEAT_MUTANT_RARE
/obj/item/food/meat/slab/human/mutant/fly
icon_state = "flymeat"
desc = "Nothing says tasty like maggot filled radioactive mutant flesh."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 4,
/datum/reagent/uranium = 3,
)
tastes = list("maggots" = 1, "the inside of a reactor" = 1)
foodtypes = MEAT | RAW | GROSS | BUGS | GORE
venue_value = FOOD_MEAT_MUTANT
blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/human/mutant/moth
icon_state = "mothmeat"
desc = "Unpleasantly powdery and dry. Kind of pretty, though."
tastes = list("dust" = 1, "powder" = 1, "meat" = 2)
foodtypes = MEAT | RAW | BUGS | GORE
venue_value = FOOD_MEAT_MUTANT
/obj/item/food/meat/slab/human/mutant/skeleton
name = "bone"
icon_state = "skeletonmeat"
desc = "There's a point where this needs to stop, and clearly we have passed it."
tastes = list("bone" = 1)
foodtypes = GROSS | GORE
venue_value = FOOD_MEAT_MUTANT_RARE
blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/skeleton/make_processable()
return //skeletons don't have cutlets
/obj/item/food/meat/slab/human/mutant/zombie
name = "meat (rotten)"
icon_state = "rottenmeat"
desc = "Halfway to becoming fertilizer for your garden."
tastes = list("brains" = 1, "meat" = 1)
foodtypes = RAW | MEAT | TOXIC | GORE | GROSS
/obj/item/food/meat/slab/human/mutant/ethereal
icon_state = "etherealmeat"
desc = "So shiny you feel like ingesting it might make you shine too"
food_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 10)
tastes = list("pure electricity" = 2, "meat" = 1)
foodtypes = RAW | MEAT | TOXIC | GORE
venue_value = FOOD_MEAT_MUTANT
blood_decal_type = null
////////////////////////////////////// OTHER MEATS ////////////////////////////////////////////////////////
/obj/item/food/meat/slab/synthmeat
name = "synthmeat"
icon_state = "meat_old"
desc = "A synthetic slab of meat."
foodtypes = RAW | MEAT //hurr durr chemicals were harmed in the production of this meat thus its non-vegan.
venue_value = FOOD_PRICE_WORTHLESS
starting_reagent_purity = 0.3
/obj/item/food/meat/slab/synthmeat/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/synth, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/meatproduct
name = "meat product"
icon_state = "meatproduct"
desc = "A slab of station reclaimed and chemically processed meat product."
tastes = list("meat flavoring" = 2, "modified starches" = 2, "natural & artificial dyes" = 1, "butyric acid" = 1)
foodtypes = RAW | MEAT
starting_reagent_purity = 0.3
/obj/item/food/meat/slab/meatproduct/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/meatproduct, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/monkey
name = "monkey meat"
foodtypes = RAW | MEAT
starting_reagent_purity = 0.3 // Monkeys are considered synthetic life
/obj/item/food/meat/slab/bugmeat
name = "bug meat"
icon_state = "spidermeat"
foodtypes = RAW | MEAT | BUGS
blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/mouse
name = "mouse meat"
desc = "A slab of mouse meat. Best not eat it raw."
foodtypes = RAW | MEAT | GORE
/obj/item/food/meat/slab/mouse/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOUSE, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/corgi
name = "corgi meat"
desc = "Tastes like... well you know..."
tastes = list("meat" = 4, "a fondness for wearing hats" = 1)
foodtypes = RAW | MEAT | GORE
/obj/item/food/meat/slab/corgi/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/mothroach
name = "mothroach meat"
desc = "A light slab of meat."
foodtypes = RAW | MEAT | GROSS
/obj/item/food/meat/slab/mothroach/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/pug
name = "pug meat"
desc = "Tastes like... well you know..."
foodtypes = RAW | MEAT | GORE
/obj/item/food/meat/slab/pug/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_PUG, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/killertomato
name = "killer tomato meat"
desc = "A slice from a huge tomato."
icon_state = "tomatomeat"
food_reagents = list(/datum/reagent/consumable/nutriment = 2)
custom_materials = null
tastes = list("tomato" = 1)
foodtypes = FRUIT
blood_decal_type = /obj/effect/decal/cleanable/food/tomato_smudge
/obj/item/food/meat/slab/killertomato/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/killertomato, rand(70 SECONDS, 85 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/killertomato/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/killertomato, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/bear
name = "bear meat"
desc = "A very manly slab of meat."
icon_state = "bearmeat"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 16,
/datum/reagent/medicine/morphine = 5,
/datum/reagent/consumable/nutriment/vitamin = 2,
/datum/reagent/consumable/nutriment/fat = 6,
)
tastes = list("meat" = 1, "salmon" = 1)
foodtypes = RAW | MEAT
/obj/item/food/meat/slab/bear/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/bear, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/bear/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/bear, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/bear/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/xeno
name = "xeno meat"
desc = "A slab of meat."
icon_state = "xenomeat"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 8,
/datum/reagent/consumable/nutriment/vitamin = 3,
)
bite_consumption = 4
tastes = list("meat" = 1, "acid" = 1)
foodtypes = RAW | MEAT
blood_decal_type = /obj/effect/decal/cleanable/blood/xeno
/obj/item/food/meat/slab/xeno/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/xeno/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/xeno, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/spider
name = "spider meat"
desc = "A slab of spider meat. That is so Kafkaesque."
icon_state = "spidermeat"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
/datum/reagent/toxin = 3,
/datum/reagent/consumable/nutriment/vitamin = 1,
)
tastes = list("cobwebs" = 1)
foodtypes = RAW | MEAT | TOXIC
blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/spider/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/spider/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/spider, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/goliath
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
/datum/reagent/toxin = 5,
/datum/reagent/consumable/nutriment/fat = 3,
)
icon_state = "goliathmeat"
tastes = list("meat" = 1)
foodtypes = RAW | MEAT | TOXIC
/obj/item/food/meat/slab/goliath/burn()
visible_message(span_notice("[src] finishes cooking!"))
new /obj/item/food/meat/steak/goliath(loc)
qdel(src)
/obj/item/food/meat/slab/meatwheat
name = "meatwheat clump"
desc = "This doesn't look like meat, but your standards aren't <i>that</i> high to begin with."
food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/blood = 5, /datum/reagent/consumable/nutriment/fat = 1)
icon_state = "meatwheat_clump"
bite_consumption = 4
tastes = list("meat" = 1, "wheat" = 1)
/obj/item/food/meat/slab/gorilla
name = "gorilla meat"
desc = "Much meatier than monkey meat."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 7,
/datum/reagent/consumable/nutriment/vitamin = 1,
/datum/reagent/consumable/nutriment/fat = 5, //Plenty of fat!
)
/obj/item/food/meat/rawbacon
name = "raw piece of bacon"
desc = "A raw piece of bacon."
icon_state = "bacon"
bite_consumption = 2
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT)
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 2,
/datum/reagent/consumable/nutriment/fat = 3,
)
tastes = list("bacon" = 1)
foodtypes = RAW | MEAT
crafting_complexity = FOOD_COMPLEXITY_1
/obj/item/food/meat/rawbacon/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/bacon, rand(25 SECONDS, 45 SECONDS), TRUE, TRUE)
/obj/item/food/meat/bacon
name = "piece of bacon"
desc = "A delicious piece of bacon."
icon_state = "baconcooked"
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT)
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 2,
/datum/reagent/consumable/nutriment/vitamin = 1,
/datum/reagent/consumable/nutriment/fat = 2,
)
tastes = list("bacon" = 1)
foodtypes = MEAT | BREAKFAST
crafting_complexity = FOOD_COMPLEXITY_1
blood_decal_type = null
/obj/item/food/meat/slab/gondola
name = "gondola meat"
desc = "According to legends of old, consuming raw gondola flesh grants one inner peace."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 4,
/datum/reagent/gondola_mutation_toxin = 5,
/datum/reagent/consumable/nutriment/fat = 3,
)
tastes = list("meat" = 4, "tranquility" = 1)
foodtypes = RAW | MEAT | GORE
/obj/item/food/meat/slab/gondola/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/gondola/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/gondola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
/obj/item/food/meat/slab/penguin
name = "penguin meat"
icon_state = "birdmeat"
desc = "A slab of penguin meat."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 4,
/datum/reagent/consumable/nutriment/fat = 3,
)
tastes = list("beef" = 1, "cod fish" = 1)
/obj/item/food/meat/slab/penguin/make_processable()
. = ..()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/penguin, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/penguin/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/penguin, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
/obj/item/food/meat/slab/rawcrab
name = "raw crab meat"
desc = "A pile of raw crab meat."
icon_state = "crabmeatraw"
bite_consumption = 3
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 3,
/datum/reagent/consumable/nutriment/fat = 3,
)
tastes = list("raw crab" = 1)
foodtypes = RAW | MEAT
/obj/item/food/meat/slab/rawcrab/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/crab, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
/obj/item/food/meat/crab
name = "crab meat"
desc = "Some deliciously cooked crab meat."
icon_state = "crabmeat"
food_reagents = list(
/datum/reagent/consumable/nutriment = 2,
/datum/reagent/consumable/nutriment/vitamin = 2,
/datum/reagent/consumable/nutriment/fat = 2,
)
tastes = list("crab" = 1)
foodtypes = SEAFOOD
crafting_complexity = FOOD_COMPLEXITY_1
blood_decal_type = null
/obj/item/food/meat/slab/chicken
name = "chicken meat"
icon_state = "birdmeat"
desc = "A slab of raw chicken. Remember to wash your hands!"
food_reagents = list(/datum/reagent/consumable/nutriment/protein = 6) //low fat
tastes = list("chicken" = 1)
starting_reagent_purity = 1
/obj/item/food/meat/slab/chicken/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/chicken, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
/obj/item/food/meat/slab/chicken/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/chicken, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? (no this is chicken)
/obj/item/food/meat/slab/chicken/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/slab/pig
name = "raw pork"
desc = "A slab of raw pork. This little piggy went to the butcher's."
icon_state = "pig_meat"
tastes = list("pig" = 1)
foodtypes = RAW | MEAT | GORE
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 2,
/datum/reagent/consumable/nutriment/fat = 5,
/datum/reagent/consumable/nutriment/vitamin = 1,
) // Fatty piece
starting_reagent_purity = 1
/obj/item/food/meat/slab/pig/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/pig, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE)
/obj/item/food/meat/slab/grassfed
name = "eco meat"
desc = "A slab of 100% grass fed award-winning farm meat."
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 3,
/datum/reagent/consumable/nutriment/fat = 4,
/datum/reagent/consumable/nutriment/vitamin = 1,
) // Marble
starting_reagent_purity = 1
////////////////////////////////////// MEAT STEAKS ///////////////////////////////////////////////////////////
/obj/item/food/meat/steak
name = "steak"
desc = "A piece of hot spicy meat."
icon_state = "meatsteak"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
/datum/reagent/consumable/nutriment/fat = 2,
/datum/reagent/consumable/nutriment/vitamin = 1,
)
foodtypes = MEAT
tastes = list("meat" = 1)
crafting_complexity = FOOD_COMPLEXITY_1
blood_decal_type = null
/obj/item/food/meat/steak/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ITEM_MICROWAVE_COOKED, PROC_REF(on_microwave_cooked))
/obj/item/food/meat/steak/proc/on_microwave_cooked(datum/source, atom/source_item, cooking_efficiency = 1)
SIGNAL_HANDLER
name = "[source_item.name] steak"
/obj/item/food/meat/steak/plain
/obj/item/food/meat/steak/plain/human
tastes = list("tender meat" = 1)
foodtypes = MEAT | GORE
///Make sure the steak has the correct name
/obj/item/food/meat/steak/plain/human/on_microwave_cooked(datum/source, atom/source_item, cooking_efficiency = 1)
. = ..()
if(!istype(source_item, /obj/item/food/meat))
return
var/obj/item/food/meat/origin_meat = source_item
subjectname = origin_meat.subjectname
subjectjob = origin_meat.subjectjob
if(subjectname)
name = "[origin_meat.subjectname] meatsteak"
else if(subjectjob)
name = "[origin_meat.subjectjob] meatsteak"
/obj/item/food/meat/steak/killertomato
name = "killer tomato steak"
tastes = list("tomato" = 1)
foodtypes = FRUIT
/obj/item/food/meat/steak/bear
name = "bear steak"
tastes = list("meat" = 1, "salmon" = 1)
/obj/item/food/meat/steak/xeno
name = "xeno steak"
tastes = list("meat" = 1, "acid" = 1)
/obj/item/food/meat/steak/spider
name = "spider steak"
tastes = list("cobwebs" = 1)
foodtypes = parent_type::foodtypes | TOXIC
/obj/item/food/meat/steak/goliath
name = "goliath steak"
desc = "A delicious, lava cooked steak."
resistance_flags = LAVA_PROOF | FIRE_PROOF
icon_state = "goliathsteak"
trash_type = null
tastes = list("meat" = 1, "rock" = 1)
/obj/item/food/meat/steak/gondola
name = "gondola steak"
tastes = list("meat" = 1, "tranquility" = 1)
/obj/item/food/meat/steak/penguin
name = "penguin steak"
icon_state = "birdsteak"
tastes = list("beef" = 1, "cod fish" = 1)
/obj/item/food/meat/steak/chicken
name = "chicken steak" //Can you have chicken steaks? Maybe this should be renamed once it gets new sprites.
icon_state = "birdsteak"
tastes = list("chicken" = 1)
/obj/item/food/meat/steak/plain/human/lizard
name = "lizard steak"
icon_state = "birdsteak"
tastes = list("juicy chicken" = 3, "scales" = 1)
foodtypes = MEAT | GORE
/obj/item/food/meat/steak/meatproduct
name = "thermally processed meat product"
icon_state = "meatproductsteak"
tastes = list("enhanced char" = 2, "suspicious tenderness" = 2, "natural & artificial dyes" = 2, "emulsifying agents" = 1)
/obj/item/food/meat/steak/plain/synth
name = "synthsteak"
desc = "A synthetic meat steak. It doesn't look quite right, now does it?"
icon_state = "meatsteak_old"
tastes = list("meat" = 4, "cryoxandone" = 1)
/obj/item/food/meat/steak/plain/pig
name = "pork chops"
desc = "A pork chop. Quit bustin' my chops!"
icon_state = "pigsteak"
tastes = list("pig" = 1)
foodtypes = MEAT
//////////////////////////////// MEAT CUTLETS ///////////////////////////////////////////////////////
//Raw cutlets
/obj/item/food/meat/rawcutlet
name = "raw cutlet"
desc = "A raw meat cutlet."
icon_state = "rawcutlet"
bite_consumption = 2
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT)
food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2)
tastes = list("meat" = 1)
foodtypes = MEAT | RAW
var/meat_type = "meat"
/obj/item/food/meat/rawcutlet/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom)
. = ..()
if(!istype(original_atom, /obj/item/food/meat/slab))
return
var/obj/item/food/meat/slab/original_slab = original_atom
var/mutable_appearance/filling = mutable_appearance(icon, "rawcutlet_coloration")
filling.color = original_slab.slab_color
add_overlay(filling)
name = "raw [original_atom.name] cutlet"
meat_type = original_atom.name
/obj/item/food/meat/rawcutlet/plain
foodtypes = MEAT
/obj/item/food/meat/rawcutlet/plain/human
tastes = list("tender meat" = 1)
foodtypes = MEAT | RAW | GORE
/obj/item/food/meat/rawcutlet/plain/human/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain/human, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/plain/human/OnCreatedFromProcessing(mob/living/user, obj/item/item, list/chosen_option, atom/original_atom)
. = ..()
if(!istype(original_atom, /obj/item/food/meat))
return
var/obj/item/food/meat/origin_meat = original_atom
subjectname = origin_meat.subjectname
subjectjob = origin_meat.subjectjob
if(subjectname)
name = "raw [origin_meat.subjectname] cutlet"
else if(subjectjob)
name = "raw [origin_meat.subjectjob] cutlet"
/obj/item/food/meat/rawcutlet/killertomato
name = "raw killer tomato cutlet"
tastes = list("tomato" = 1)
foodtypes = FRUIT
blood_decal_type = /obj/effect/decal/cleanable/food/tomato_smudge
/obj/item/food/meat/rawcutlet/killertomato/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/killertomato, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/bear
name = "raw bear cutlet"
tastes = list("meat" = 1, "salmon" = 1)
/obj/item/food/meat/rawcutlet/bear/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB)
/obj/item/food/meat/rawcutlet/bear/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/bear, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/xeno
name = "raw xeno cutlet"
tastes = list("meat" = 1, "acid" = 1)
blood_decal_type = /obj/effect/decal/cleanable/blood/xeno
/obj/item/food/meat/rawcutlet/xeno/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/xeno, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/spider
name = "raw spider cutlet"
tastes = list("cobwebs" = 1)
blood_decal_type = /obj/effect/decal/cleanable/insectguts
foodtypes = parent_type::foodtypes | TOXIC
/obj/item/food/meat/rawcutlet/spider/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/spider, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/gondola
name = "raw gondola cutlet"
tastes = list("meat" = 1, "tranquility" = 1)
/obj/item/food/meat/rawcutlet/gondola/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/gondola, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/penguin
name = "raw penguin cutlet"
tastes = list("beef" = 1, "cod fish" = 1)
/obj/item/food/meat/rawcutlet/penguin/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/penguin, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/chicken
name = "raw chicken cutlet"
tastes = list("chicken" = 1)
/obj/item/food/meat/rawcutlet/chicken/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/chicken, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
/obj/item/food/meat/rawcutlet/chicken/Initialize(mapload)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB)
//Cooked cutlets
/obj/item/food/meat/cutlet
name = "cutlet"
desc = "A cooked meat cutlet."
icon_state = "cutlet"
bite_consumption = 2
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT)
food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2)
tastes = list("meat" = 1)
foodtypes = MEAT
crafting_complexity = FOOD_COMPLEXITY_1
blood_decal_type = null
/obj/item/food/meat/cutlet/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ITEM_MICROWAVE_COOKED, PROC_REF(on_microwave_cooked))
///This proc handles setting up the correct meat name for the cutlet, this should definitely be changed with the food rework.
/obj/item/food/meat/cutlet/proc/on_microwave_cooked(datum/source, atom/source_item, cooking_efficiency)
SIGNAL_HANDLER
if(!istype(source_item, /obj/item/food/meat/rawcutlet))
return
var/obj/item/food/meat/rawcutlet/original_cutlet = source_item
name = "[original_cutlet.meat_type] cutlet"
/obj/item/food/meat/cutlet/plain
/obj/item/food/meat/cutlet/plain/human
tastes = list("tender meat" = 1)
foodtypes = MEAT | GORE
/obj/item/food/meat/cutlet/plain/human/on_microwave_cooked(datum/source, atom/source_item, cooking_efficiency)
. = ..()
if(!istype(source_item, /obj/item/food/meat))
return
var/obj/item/food/meat/origin_meat = source_item
if(subjectname)
name = "[origin_meat.subjectname] [initial(name)]"
else if(subjectjob)
name = "[origin_meat.subjectjob] [initial(name)]"
/obj/item/food/meat/cutlet/killertomato
name = "killer tomato cutlet"
tastes = list("tomato" = 1)
foodtypes = FRUIT
/obj/item/food/meat/cutlet/bear
name = "bear cutlet"
tastes = list("meat" = 1, "salmon" = 1)
/obj/item/food/meat/cutlet/xeno
name = "xeno cutlet"
tastes = list("meat" = 1, "acid" = 1)
/obj/item/food/meat/cutlet/spider
name = "spider cutlet"
tastes = list("cobwebs" = 1)
foodtypes = parent_type::foodtypes | TOXIC
/obj/item/food/meat/cutlet/gondola
name = "gondola cutlet"
tastes = list("meat" = 1, "tranquility" = 1)
/obj/item/food/meat/cutlet/penguin
name = "penguin cutlet"
tastes = list("beef" = 1, "cod fish" = 1)
/obj/item/food/meat/cutlet/chicken
name = "chicken cutlet"
tastes = list("chicken" = 1)