mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 16:05:07 +00:00
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. /🆑
632 lines
24 KiB
Plaintext
632 lines
24 KiB
Plaintext
// Pizza (Whole)
|
|
/obj/item/food/pizza
|
|
name = "pizza"
|
|
icon = 'icons/obj/food/pizza.dmi'
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
max_volume = 80
|
|
icon_state = "pizzamargherita"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 28,
|
|
/datum/reagent/consumable/nutriment/protein = 3,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1)
|
|
foodtypes = GRAIN
|
|
venue_value = FOOD_PRICE_CHEAP
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
/// type is spawned 6 at a time and replaces this pizza when processed by cutting tool
|
|
var/obj/item/food/pizzaslice/slice_type = /obj/item/food/pizzaslice
|
|
///What label pizza boxes use if this pizza spawns in them.
|
|
var/boxtag = ""
|
|
/// how many slices left
|
|
var/slices_left = 6
|
|
/// have we been sliced? like sliced and you can take it apart by hand
|
|
var/sliced = FALSE
|
|
/// cutting tools
|
|
var/list/cutting_tools = list(TOOL_KNIFE, TOOL_SAW, TOOL_SCALPEL)
|
|
|
|
/obj/item/food/pizza/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/drag_pickup)
|
|
register_context()
|
|
|
|
/obj/item/food/pizza/add_context(atom/source, list/context, obj/item/held_item, mob/user)
|
|
. = ..()
|
|
|
|
if(istype(held_item) && (held_item.tool_behaviour in cutting_tools))
|
|
context[SCREENTIP_CONTEXT_LMB] = "Slice"
|
|
context[SCREENTIP_CONTEXT_RMB] = "Slice apart"
|
|
return TRUE
|
|
|
|
if(sliced)
|
|
context[SCREENTIP_CONTEXT_LMB] = "Take Slice"
|
|
return TRUE
|
|
|
|
/obj/item/food/pizza/examine(mob/user)
|
|
. = ..()
|
|
if(isnull(slice_type) || !sliced)
|
|
return
|
|
. += span_notice("You can slice this to make it possible to take out slices with an empty hand!")
|
|
|
|
/obj/item/food/pizza/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
|
. = NONE
|
|
if(isnull(slice_type) || !(tool.tool_behaviour in cutting_tools))
|
|
return
|
|
if(!sliced)
|
|
slice(user, tool)
|
|
return ITEM_INTERACT_SUCCESS
|
|
user.visible_message(span_notice("[user] seperates [src] into individual slices with [tool]."))
|
|
cut_apart()
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/obj/item/food/pizza/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers)
|
|
. = NONE
|
|
if(isnull(slice_type) || !(tool.tool_behaviour in cutting_tools))
|
|
return
|
|
visible_message(span_notice("[user] seperates [src] into individual slices with [tool]."))
|
|
cut_apart()
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/obj/item/food/pizza/attack_hand(mob/user, list/modifiers)
|
|
. = ..()
|
|
if(!sliced)
|
|
return
|
|
user.visible_message(span_notice("You take a slice of [src]."), span_notice("[user] takes a slice of [src]."))
|
|
produce_slice(user)
|
|
|
|
/obj/item/food/pizza/proc/get_slices_filter() //to not repeat code
|
|
return alpha_mask_filter(icon = icon('icons/obj/food/pizza.dmi', "[slices_left]slices"))
|
|
|
|
/// slices this pizza. all arguments optional.
|
|
/obj/item/food/pizza/proc/slice(mob/user, obj/item/tool)
|
|
if(sliced)
|
|
return
|
|
tool?.play_tool_sound(src)
|
|
sliced = TRUE
|
|
user?.visible_message(span_notice("[user] cuts [src] into 6 slices with [tool]."))
|
|
interaction_flags_item &= ~INTERACT_ITEM_ATTACK_HAND_PICKUP
|
|
|
|
/obj/item/food/pizza/proc/cut_apart()
|
|
for(var/_ in 1 to slices_left)
|
|
produce_slice(no_update = TRUE)
|
|
|
|
/// make a slice and give it to user. no_update means no filter work is done. user is optional
|
|
/obj/item/food/pizza/proc/produce_slice(mob/user, no_update = FALSE)
|
|
var/turf/our_turf = get_turf(src)
|
|
var/obj/item/food/pizzaslice/slice = new slice_type(our_turf)
|
|
if(HAS_TRAIT(src, TRAIT_FOOD_SILVER))
|
|
ADD_TRAIT(slice, TRAIT_FOOD_SILVER, INNATE_TRAIT)
|
|
if(HAS_TRAIT(src, TRAIT_FOOD_CHEF_MADE))
|
|
ADD_TRAIT(slice, TRAIT_FOOD_CHEF_MADE, GET_TRAIT_SOURCES(src, TRAIT_FOOD_CHEF_MADE)[1]) // wack thing to inherit first source
|
|
slice.pixel_x += rand(-6, 6)
|
|
slice.pixel_y += rand(-6, 6)
|
|
user?.put_in_active_hand(slice)
|
|
slices_left--
|
|
if(slices_left <= 0)
|
|
qdel(src)
|
|
return
|
|
if(no_update)
|
|
return
|
|
remove_filter("pizzaslices")
|
|
add_filter("pizzaslices", 1, get_slices_filter())
|
|
|
|
// Raw Pizza
|
|
/obj/item/food/pizza/raw
|
|
foodtypes = GRAIN | RAW
|
|
slice_type = null
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
|
|
/obj/item/food/pizza/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
// Pizza Slice
|
|
/obj/item/food/pizzaslice
|
|
name = "pizza slice"
|
|
icon = 'icons/obj/food/pizza.dmi'
|
|
food_reagents = list(/datum/reagent/consumable/nutriment = 5)
|
|
icon_state = "pizzamargheritaslice"
|
|
foodtypes = GRAIN
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
decomp_type = /obj/item/food/pizzaslice/moldy
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
|
|
/obj/item/food/pizzaslice/make_processable()
|
|
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/stack/sheet/pizza, 1, 1 SECONDS, table_required = TRUE, screentip_verb = "Flatten")
|
|
|
|
/obj/item/food/pizza/margherita
|
|
name = "pizza margherita"
|
|
desc = "The most cheezy pizza in galaxy."
|
|
icon_state = "pizzamargherita"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/nutriment/protein = 8,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
slice_type = /obj/item/food/pizzaslice/margherita
|
|
boxtag = "Margherita Deluxe"
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizza/margherita/raw
|
|
name = "raw pizza margherita"
|
|
icon_state = "pizzamargherita_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/margherita/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/margherita, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizza/margherita/robo
|
|
food_reagents = list(
|
|
/datum/reagent/cyborg_mutation_nanomachines = 70,
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/nutriment/protein = 8,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
|
|
/obj/item/food/pizzaslice/margherita
|
|
name = "margherita slice"
|
|
desc = "A slice of the most cheezy pizza in galaxy."
|
|
icon_state = "pizzamargheritaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizzaslice/margherita/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/ingredients_holder, null, CUSTOM_INGREDIENT_ICON_FILL, max_ingredients = 12)
|
|
|
|
/obj/item/food/pizza/meat
|
|
name = "meatpizza"
|
|
desc = "Greasy pizza with delicious meat."
|
|
icon_state = "meatpizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/nutriment/protein = 8,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 8,
|
|
)
|
|
foodtypes = GRAIN | VEGETABLES| DAIRY | MEAT
|
|
slice_type = /obj/item/food/pizzaslice/meat
|
|
boxtag = "Meatlovers' Supreme"
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT * 4)
|
|
|
|
/obj/item/food/pizza/meat/raw
|
|
name = "raw meatpizza"
|
|
icon_state = "meatpizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES| DAIRY | MEAT | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/meat/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/meat, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/meat
|
|
name = "meatpizza slice"
|
|
desc = "A nutritious slice of meatpizza."
|
|
icon_state = "meatpizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizzaslice/meat/pizzeria //Reward for pizzeria bitrunning domain
|
|
name = "pizzeria meatpizza slice"
|
|
desc = "An ostensibly nutritious slice of meatpizza from a long-closed pizzeria."
|
|
food_reagents = null
|
|
tastes = list("crust" = 1, "ketchup" = 1, "'cheese'" = 1, "mystery meat" = 1, "glue" = 1)
|
|
foodtypes = null
|
|
|
|
/obj/item/food/pizza/mushroom
|
|
name = "mushroom pizza"
|
|
desc = "Very special pizza."
|
|
icon_state = "mushroompizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 28,
|
|
/datum/reagent/consumable/nutriment/protein = 3,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "mushroom" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
slice_type = /obj/item/food/pizzaslice/mushroom
|
|
boxtag = "Mushroom Special"
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
|
|
/obj/item/food/pizza/mushroom/raw
|
|
name = "raw mushroom pizza"
|
|
icon_state = "mushroompizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/mushroom/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/mushroom, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/mushroom
|
|
name = "mushroom pizza slice"
|
|
desc = "Maybe it is the last slice of pizza in your life."
|
|
icon_state = "mushroompizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "mushroom" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
|
|
|
|
/obj/item/food/pizza/vegetable
|
|
name = "vegetable pizza"
|
|
desc = "No one of Tomatoes Sapiens were harmed during making this pizza."
|
|
icon_state = "vegetablepizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 2, "cheese" = 1, "carrot" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
slice_type = /obj/item/food/pizzaslice/vegetable
|
|
boxtag = "Gourmet Vegetable"
|
|
venue_value = FOOD_PRICE_NORMAL
|
|
|
|
/obj/item/food/pizza/vegetable/raw
|
|
name = "raw vegetable pizza"
|
|
icon_state = "vegetablepizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | RAW
|
|
slice_type = null
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizza/vegetable/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/vegetable, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/vegetable
|
|
name = "vegetable pizza slice"
|
|
desc = "A slice of the most green pizza of all pizzas not containing green ingredients."
|
|
icon_state = "vegetablepizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 2, "cheese" = 1, "carrot" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizza/donkpocket
|
|
name = "donkpocket pizza"
|
|
desc = "Who thought this would be a good idea?"
|
|
icon_state = "donkpocketpizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 20,
|
|
/datum/reagent/consumable/nutriment/protein = 15,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/medicine/omnizine = 10,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "umami" = 1, "laziness" = 1)
|
|
foodtypes = GRAIN|VEGETABLES|DAIRY|JUNKFOOD
|
|
slice_type = /obj/item/food/pizzaslice/donkpocket
|
|
boxtag = "Bangin' Donk"
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
intrisic_food_materials = list(/datum/material/meat) //default donkpockets do not contain meat but homemade ones do.
|
|
|
|
/obj/item/food/pizza/donkpocket/raw
|
|
name = "raw donkpocket pizza"
|
|
icon_state = "donkpocketpizza_raw"
|
|
foodtypes = GRAIN|VEGETABLES|DAIRY|JUNKFOOD|RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/donkpocket/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/donkpocket, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/donkpocket
|
|
name = "donkpocket pizza slice"
|
|
desc = "Smells like donkpocket."
|
|
icon_state = "donkpocketpizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "umami" = 1, "laziness" = 1)
|
|
foodtypes = GRAIN|VEGETABLES|DAIRY|JUNKFOOD
|
|
intrisic_food_materials = list(/datum/material/meat) //default donkpockets do not contain meat but homemade ones do.
|
|
|
|
/obj/item/food/pizza/dank
|
|
name = "dank pizza"
|
|
desc = "The hippie's pizza of choice."
|
|
icon_state = "dankpizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/doctor_delight = 5,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 5,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "weed" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
slice_type = /obj/item/food/pizzaslice/dank
|
|
boxtag = "Fresh Herb"
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizza/dank/raw
|
|
name = "raw dank pizza"
|
|
icon_state = "dankpizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/dank/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/dank, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/dank
|
|
name = "dank pizza slice"
|
|
desc = "So good, man..."
|
|
icon_state = "dankpizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "weed" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY
|
|
|
|
/obj/item/food/pizza/sassysage
|
|
name = "sassysage pizza"
|
|
desc = "You can almost taste the sassiness."
|
|
icon_state = "sassysagepizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 20,
|
|
/datum/reagent/consumable/nutriment/protein = 15,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 6,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT
|
|
slice_type = /obj/item/food/pizzaslice/sassysage
|
|
boxtag = "Sausage Lovers"
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/food/pizza/sassysage/raw
|
|
name = "raw sassysage pizza"
|
|
icon_state = "sassysagepizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/sassysage/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/sassysage, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/sassysage
|
|
name = "sassysage pizza slice"
|
|
desc = "Deliciously sassy."
|
|
icon_state = "sassysagepizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/pizza/pineapple
|
|
name = "\improper Hawaiian pizza"
|
|
desc = "The pizza equivalent of Einstein's riddle."
|
|
icon_state = "pineapplepizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 20,
|
|
/datum/reagent/consumable/nutriment/protein = 5,
|
|
/datum/reagent/consumable/tomatojuice = 6,
|
|
/datum/reagent/consumable/nutriment/vitamin = 6,
|
|
/datum/reagent/consumable/pineapplejuice = 8,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE
|
|
slice_type = /obj/item/food/pizzaslice/pineapple
|
|
boxtag = "Honolulu Chew"
|
|
crafting_complexity = FOOD_COMPLEXITY_4
|
|
custom_materials = list(/datum/material/meat = MEATDISH_MATERIAL_AMOUNT * 2)
|
|
|
|
/obj/item/food/pizza/pineapple/raw
|
|
name = "raw Hawaiian pizza"
|
|
icon_state = "pineapplepizza_raw"
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE | RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/pineapple/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/pineapple, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/pineapple
|
|
name = "\improper Hawaiian pizza slice"
|
|
desc = "A slice of delicious controversy."
|
|
icon_state = "pineapplepizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE
|
|
|
|
|
|
// Moldly Pizza
|
|
// Used in cytobiology.
|
|
/obj/item/food/pizzaslice/moldy
|
|
name = "moldy pizza slice"
|
|
desc = "This was once a perfectly good slice of pizza pie, but now it lies here, rancid and bursting with spores. \
|
|
What a bummer! But we should not dwell on the past, only look towards the future."
|
|
icon_state = "moldy_slice"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 4,
|
|
/datum/reagent/consumable/nutriment/peptides = 3,
|
|
/datum/reagent/consumable/tomatojuice = 1,
|
|
/datum/reagent/toxin/amatoxin = 2,
|
|
)
|
|
tastes = list("stale crust" = 1, "rancid cheese" = 2, "mushroom" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | GROSS
|
|
preserved_food = TRUE
|
|
|
|
/obj/item/food/pizzaslice/moldy/bacteria
|
|
name = "bacteria rich moldy pizza slice"
|
|
desc = "Not only is this once delicious pizza encrusted with a layer of spore-spewing fungus, it also seems to shift and slide when unattended, teeming with new life."
|
|
|
|
/obj/item/food/pizzaslice/moldy/bacteria/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOLD, CELL_VIRUS_TABLE_GENERIC, rand(2, 4), 25)
|
|
|
|
// Arnold Pizza
|
|
// Has meme code.
|
|
/obj/item/food/pizza/arnold
|
|
name = "\improper Arnold pizza"
|
|
desc = "Hello, you've reached Arnold's pizza shop. I'm not here now, I'm out killing pepperoni."
|
|
icon_state = "arnoldpizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 25,
|
|
/datum/reagent/consumable/nutriment/protein = 9,
|
|
/datum/reagent/consumable/nutriment/vitamin = 6,
|
|
/datum/reagent/iron = 10,
|
|
/datum/reagent/medicine/omnizine = 30,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2)
|
|
slice_type = /obj/item/food/pizzaslice/arnold
|
|
boxtag = "9mm Pepperoni"
|
|
foodtypes = MEAT|GRAIN|DAIRY|VEGETABLES
|
|
crafting_complexity = FOOD_COMPLEXITY_4
|
|
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, /datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/food/pizza/arnold/raw
|
|
name = "raw Arnold pizza"
|
|
icon_state = "arnoldpizza_raw"
|
|
foodtypes = MEAT|GRAIN|DAIRY|VEGETABLES|RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/arnold/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/arnold, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
//fuck it, i will leave this at the food level for now.
|
|
/obj/item/food/proc/try_break_off(mob/living/attacker, mob/living/user) //maybe i give you a pizza maybe i break off your arm
|
|
if(prob(50) || (attacker != user) || !iscarbon(user) || HAS_TRAIT(user, TRAIT_NODISMEMBER))
|
|
return
|
|
var/obj/item/bodypart/arm/left = user.get_bodypart(BODY_ZONE_L_ARM)
|
|
var/obj/item/bodypart/arm/right = user.get_bodypart(BODY_ZONE_R_ARM)
|
|
var/did_the_thing = (left?.dismember() || right?.dismember()) //not all limbs can be removed, so important to check that we did. the. thing.
|
|
if(!did_the_thing)
|
|
return
|
|
to_chat(user, span_userdanger("Maybe I'll give you a pizza, maybe I'll break off your arm.")) //makes the reference more obvious
|
|
user.visible_message(span_warning("\The [src] breaks off [user]'s arm!"), span_warning("\The [src] breaks off your arm!"))
|
|
playsound(user, SFX_DESECRATION, 50, TRUE, -1)
|
|
|
|
/obj/item/food/proc/i_kill_you(obj/item/item, mob/living/user)
|
|
if(istype(item, /obj/item/food/pineappleslice))
|
|
to_chat(user, "<font color='red' size='7'>If you want something crazy like pineapple, I'll kill you.</font>") //this is in bigger text because it's hard to spam something that gibs you, and so that you're perfectly aware of the reason why you died
|
|
user.investigate_log("has been gibbed by putting pineapple on an arnold pizza.", INVESTIGATE_DEATHS)
|
|
user.gib(DROP_ALL_REMAINS) //if you want something crazy like pineapple, i'll kill you
|
|
else if(istype(item, /obj/item/food/grown/mushroom) && iscarbon(user))
|
|
to_chat(user, span_userdanger("So, if you want mushroom, shut up.")) //not as large as the pineapple text, because you could in theory spam it
|
|
var/mob/living/carbon/shutup = user
|
|
shutup.gain_trauma(/datum/brain_trauma/severe/mute)
|
|
|
|
/obj/item/food/pizza/arnold/attack(mob/living/target, mob/living/user)
|
|
. = ..()
|
|
try_break_off(target, user)
|
|
|
|
/obj/item/food/pizza/arnold/attackby(obj/item/item, mob/user)
|
|
i_kill_you(item, user)
|
|
. = ..()
|
|
|
|
/obj/item/food/pizzaslice/arnold
|
|
name = "\improper Arnold pizza slice"
|
|
desc = "I come over, maybe I give you a pizza, maybe I break off your arm."
|
|
icon_state = "arnoldpizzaslice"
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT
|
|
crafting_complexity = FOOD_COMPLEXITY_4
|
|
|
|
/obj/item/food/pizzaslice/arnold/attack(mob/living/target, mob/living/user)
|
|
. =..()
|
|
try_break_off(target, user)
|
|
|
|
/obj/item/food/pizzaslice/arnold/attackby(obj/item/item, mob/user)
|
|
i_kill_you(item, user)
|
|
. = ..()
|
|
|
|
// Ant Pizza, now with more ants.
|
|
/obj/item/food/pizzaslice/ants
|
|
name = "\improper Ant Party pizza slice"
|
|
desc = "The key to a perfect slice of pizza is not to overdo it with the ants."
|
|
icon_state = "antpizzaslice"
|
|
food_reagents = list(
|
|
/datum/reagent/ants = 5,
|
|
/datum/reagent/consumable/nutriment/protein = 2,
|
|
)
|
|
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "insects" = 1)
|
|
foodtypes = GRAIN | VEGETABLES | DAIRY | BUGS
|
|
|
|
// Ethereal Pizza, for when they want a slice
|
|
/obj/item/food/pizza/energy
|
|
name = "energy pizza"
|
|
desc = "You could probably power a RIPLEY with this. You should avoid eating this if you aren't an Ethereal."
|
|
icon_state ="energypizza"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 18,
|
|
/datum/reagent/consumable/liquidelectricity/enriched = 18,
|
|
)
|
|
tastes = list("pure electricity" = 4, "pizza" = 2)
|
|
slice_type = /obj/item/food/pizzaslice/energy
|
|
foodtypes = GRAIN|TOXIC
|
|
boxtag = "24 Hour Energy"
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.4, /datum/material/glass = SMALL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/food/pizza/energy/raw
|
|
name = "raw energy pizza"
|
|
icon_state = "energypizza_raw"
|
|
foodtypes = GRAIN|TOXIC|RAW
|
|
slice_type = null
|
|
|
|
/obj/item/food/pizza/energy/raw/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/pizza/energy, rand(70 SECONDS, 80 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/pizzaslice/energy
|
|
name = "energy pizza slice"
|
|
desc = "You're thinking about using this to power your modsuit. You should avoid eating this if you aren't an Ethereal."
|
|
icon_state ="energypizzaslice"
|
|
tastes = list("pure electricity" = 4, "pizza" = 2)
|
|
foodtypes = GRAIN|TOXIC
|
|
crafting_complexity = FOOD_COMPLEXITY_2
|
|
|
|
/obj/item/food/raw_meat_calzone
|
|
name = "raw meat calzone"
|
|
desc = "A raw calzone, ready to be put in the oven."
|
|
icon_state = "raw_calzone"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 4,
|
|
/datum/reagent/consumable/nutriment/vitamin = 2,
|
|
/datum/reagent/consumable/nutriment/protein = 2,
|
|
)
|
|
tastes = list("raw dough" = 1, "raw meat" = 1, "cheese" = 1, "tomato sauce" = 1)
|
|
foodtypes = GRAIN|VEGETABLES|DAIRY|MEAT|RAW
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/food/raw_meat_calzone/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/meat_calzone, rand(20 SECONDS, 40 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/meat_calzone
|
|
name = "meat calzone"
|
|
desc = "A calzone filled with cheese, meat, and a tomato sauce. Don't burn your tongue!."
|
|
icon_state = "meat_calzone"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 8,
|
|
/datum/reagent/consumable/nutriment/vitamin = 6,
|
|
/datum/reagent/consumable/nutriment/protein = 6,
|
|
)
|
|
tastes = list("baked dough" = 1, "juicy meat" = 1, "melted cheese" = 1, "tomato sauce" = 1)
|
|
foodtypes = GRAIN|VEGETABLES|DAIRY|MEAT
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/food/raw_vegetarian_calzone
|
|
name = "raw vegetarian calzone"
|
|
desc = "A raw calzone, ready to be put in the oven."
|
|
icon_state = "raw_calzone"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 4,
|
|
/datum/reagent/consumable/nutriment/vitamin = 4,
|
|
)
|
|
tastes = list("raw dough" = 1, "vegetables" = 1, "tomato sauce" = 1)
|
|
foodtypes = GRAIN|VEGETABLES|RAW
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|
|
|
|
/obj/item/food/raw_vegetarian_calzone/make_bakeable()
|
|
AddComponent(/datum/component/bakeable, /obj/item/food/vegetarian_calzone, rand(20 SECONDS, 40 SECONDS), TRUE, TRUE)
|
|
|
|
/obj/item/food/vegetarian_calzone
|
|
name = "vegetarian calzone"
|
|
desc = "A calzone filled with mixed vegetables and a tomato sauce. A healthier, yet less satisfying alternative."
|
|
icon_state = "vegetarian_calzone"
|
|
food_reagents = list(
|
|
/datum/reagent/consumable/nutriment = 10,
|
|
/datum/reagent/consumable/nutriment/vitamin = 8,
|
|
)
|
|
tastes = list("baked dough" = 1, "baked vegetables" = 1, "tomato sauce" = 1)
|
|
foodtypes = GRAIN | VEGETABLES
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
crafting_complexity = FOOD_COMPLEXITY_3
|