From a3096ac87b6bfa7bb2d88847ef16ad0b992601c9 Mon Sep 17 00:00:00 2001
From: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Date: Sun, 14 May 2023 03:23:23 -0400
Subject: [PATCH 01/14] [WIP] Newfood: Part 1 of 4 (#8748)
* https://github.com/tgstation/tgstation/pull/49192
* https://github.com/tgstation/tgstation/pull/53047/files
* fixerino
* food_storage component
* https://github.com/tgstation/tgstation/pull/53316
* https://github.com/tgstation/tgstation/pull/53225
* https://github.com/tgstation/tgstation/pull/53574
* 515 compat
* fix maps
* https://github.com/tgstation/tgstation/pull/69095
* bread slicing
* https://github.com/tgstation/tgstation/pull/71449
* fixes
* finger food & edible fixes
* https://github.com/tgstation/tgstation/pull/66257
* FIX THIS SHIT
* accidental_consumption
* fix trash runtime
* fixes some runtimes
* microwavable
* https://github.com/tgstation/tgstation/pull/55150
* 515 compat
* Revert "515 compat"
This reverts commit 5681ca6cf6f8bcc187ceb4c263407631b461659b.
* Revert "https://github.com/tgstation/tgstation/pull/55150"
This reverts commit aadbe1c392ade3caa4f1bcaf56abd8ea51dbd12d.
* Revert "microwavable"
This reverts commit 3b2f465d2cb79675e49dde08f45dcc694be29595.
* fix exploit with pasta
---
.../LavaRuins/lavaland_surface_pizzaparty.dmm | 2 +-
_maps/map_files/generic/CentCom.dmm | 22 +
code/__DEFINES/food.dm | 79 +--
code/__DEFINES/is_helpers.dm | 5 +
code/__DEFINES/processing.dm | 3 +
code/__DEFINES/reagents.dm | 22 +-
code/__DEFINES/tools.dm | 1 +
code/__HELPERS/string_assoc_lists.dm | 21 +-
code/__HELPERS/string_lists.dm | 14 +
code/datums/components/edible.dm | 256 --------
code/datums/components/food/edible.dm | 452 +++++++++++++
code/datums/components/food/food_storage.dm | 204 ++++++
code/datums/elements/food/dunkable.dm | 34 +
code/datums/elements/food/food_trash.dm | 40 ++
code/datums/elements/food/processable.dm | 47 ++
code/datums/materials/_material.dm | 9 +
code/datums/traits/negative.dm | 2 +-
code/game/atoms.dm | 94 ++-
code/game/objects/items.dm | 92 +++
code/game/objects/items/food/_food.dm | 67 ++
code/game/objects/items/food/bread.dm | 412 ++++++++++++
code/game/objects/items/food/cake.dm | 614 ++++++++++++++++++
code/game/objects/items/food/spaghetti.dm | 137 ++++
code/game/objects/items/kitchen.dm | 1 +
code/game/objects/items/storage/bags.dm | 14 +-
code/game/objects/items/storage/belt.dm | 2 +-
code/modules/cargo/bounties/chef.dm | 4 +-
code/modules/food_and_drinks/drinks/drinks.dm | 2 +-
.../food_and_drinks/food/customizables.dm | 60 +-
code/modules/food_and_drinks/food/snacks.dm | 36 +-
.../food_and_drinks/food/snacks/dough.dm | 4 +-
.../food_and_drinks/food/snacks_bread.dm | 302 ---------
.../food_and_drinks/food/snacks_cake.dm | 431 ------------
.../food_and_drinks/food/snacks_egg.dm | 7 +-
.../food_and_drinks/food/snacks_frozen.dm | 10 +-
.../food_and_drinks/food/snacks_meat.dm | 7 +
.../food_and_drinks/food/snacks_other.dm | 36 +-
.../food_and_drinks/food/snacks_pastry.dm | 29 +-
.../food/snacks_sandwichtoast.dm | 4 +
.../food_and_drinks/food/snacks_spaghetti.dm | 106 ---
.../food_and_drinks/food/snacks_vend.dm | 9 +
.../kitchen_machinery/deep_fryer.dm | 8 +-
.../kitchen_machinery/icecream_vat.dm | 5 +-
.../recipes/processor_recipes.dm | 2 +-
.../recipes/tablecraft/recipes_bread.dm | 56 +-
.../recipes/tablecraft/recipes_cake.dm | 97 +--
.../recipes/tablecraft/recipes_egg.dm | 2 +-
.../recipes/tablecraft/recipes_misc.dm | 10 +-
.../recipes/tablecraft/recipes_pastry.dm | 4 +-
.../recipes/tablecraft/recipes_sandwich.dm | 10 +-
.../recipes/tablecraft/recipes_spaghetti.dm | 71 +-
code/modules/holiday/easter.dm | 23 +-
.../mob/living/simple_animal/friendly/cat.dm | 22 +-
.../chemistry/reagents/food_reagents.dm | 5 +-
.../chemistry/recipes/slime_extracts.dm | 2 +-
.../reagents/reagent_containers/glass.dm | 1 +
.../xenobiology/crossbreeding/charged.dm | 2 +-
code/modules/unit_tests/create_and_destroy.dm | 2 +-
shiptest.dme | 34 +-
59 files changed, 2625 insertions(+), 1424 deletions(-)
create mode 100644 code/__DEFINES/processing.dm
delete mode 100644 code/datums/components/edible.dm
create mode 100644 code/datums/components/food/edible.dm
create mode 100644 code/datums/components/food/food_storage.dm
create mode 100644 code/datums/elements/food/dunkable.dm
create mode 100644 code/datums/elements/food/food_trash.dm
create mode 100644 code/datums/elements/food/processable.dm
create mode 100644 code/game/objects/items/food/_food.dm
create mode 100644 code/game/objects/items/food/bread.dm
create mode 100644 code/game/objects/items/food/cake.dm
create mode 100644 code/game/objects/items/food/spaghetti.dm
delete mode 100644 code/modules/food_and_drinks/food/snacks_bread.dm
delete mode 100644 code/modules/food_and_drinks/food/snacks_cake.dm
delete mode 100644 code/modules/food_and_drinks/food/snacks_spaghetti.dm
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
index d035e25f5cbd..330311a52692 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
@@ -205,7 +205,7 @@
/area/ruin/unpowered)
"F" = (
/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/store/cake/birthday,
+/obj/item/food/cake/birthday,
/turf/open/floor/wood{
initial_gas_mix = "o2=14;n2=5;co2=13;TEMP=300"
},
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 209466a1b2ef..817e02e67f2b 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -11634,6 +11634,28 @@
/obj/effect/turf_decal/corner/transparent/neutral{
dir = 8
},
+/obj/merge_conflict_marker{
+ name = "---Merge Conflict Marker---",desc = "A best-effort merge was performed. You must resolve this conflict yourself (manually) and remove this object once complete."
+ },
+/obj/structure/closet/secure_closet/freezer/meat/open,
+/obj/item/reagent_containers/food/snacks/meat/slab/bear,
+/obj/item/reagent_containers/food/snacks/meat/slab/bear,
+/obj/item/reagent_containers/food/snacks/meat/slab/bear,
+/obj/item/reagent_containers/food/snacks/meat/slab/bear,
+/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
+/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
+/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
+/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
+/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+/obj/item/food/spaghetti/raw,
+/obj/item/food/spaghetti/raw,
+/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
+/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
+/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
+/obj/effect/turf_decal/tile/neutral/fourcorners/contrasted,
/turf/open/floor/plasteel/dark,
/area/tdome/tdomeobserve)
"miW" = (
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index f2b6a8fd196d..e1fb3fbf55f7 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -1,54 +1,35 @@
-#define MEAT (1<<0)
-#define VEGETABLES (1<<1)
-#define RAW (1<<2)
-#define JUNKFOOD (1<<3)
-#define GRAIN (1<<4)
-#define FRUIT (1<<5)
-#define DAIRY (1<<6)
-#define FRIED (1<<7)
-#define ALCOHOL (1<<8)
-#define SUGAR (1<<9)
-#define GROSS (1<<10)
-#define TOXIC (1<<11)
-#define PINEAPPLE (1<<12)
-#define BREAKFAST (1<<13)
-#define CLOTH (1<<14)
-#define GRILLED (1<<15)
-/*#define NUTS (1<<16)
-#define SEAFOOD (1<<17)
-#define ORANGES (1<<18)
-#define BUGS (1<<19)*/
-#define GORE (1<<20)
+#define MEAT (1<<0)
+#define VEGETABLES (1<<1)
+#define RAW (1<<2)
+#define JUNKFOOD (1<<3)
+#define GRAIN (1<<4)
+#define FRUIT (1<<5)
+#define DAIRY (1<<6)
+#define FRIED (1<<7)
+#define ALCOHOL (1<<8)
+#define SUGAR (1<<9)
+#define GROSS (1<<10)
+#define TOXIC (1<<11)
+#define PINEAPPLE (1<<12)
+#define BREAKFAST (1<<13)
+#define CLOTH (1<<14)
-/// IC meaning (more or less) for food flags
-#define FOOD_FLAGS_IC list( \
- "Meat", \
- "Vegetables", \
- "Raw food", \
- "Junk food", \
- "Grain", \
- "Fruits", \
- "Dairy products", \
- "Fried food", \
- "Alcohol", \
- "Sugary food", \
- "Gross food", \
- "Toxic food", \
- "Pineapples", \
- "Breakfast food", \
- "Clothing", \
- "Nuts", \
- "Seafood", \
- "Oranges", \
- "Bugs", \
-)
-
-#define DRINK_NICE 1
-#define DRINK_GOOD 2
-#define DRINK_VERYGOOD 3
-#define DRINK_FANTASTIC 4
-#define FOOD_AMAZING 5
+#define DRINK_BAD 1
+#define DRINK_NICE 2
+#define DRINK_GOOD 3
+#define DRINK_VERYGOOD 4
+#define DRINK_FANTASTIC 5
+/// Food is "in a container", not in a code sense, but in a literal sense (canned foods)
#define FOOD_IN_CONTAINER (1<<0)
+/// Finger food can be eaten while walking / running around
+#define FOOD_FINGER_FOOD (1<<1)
#define STOP_SERVING_BREAKFAST (15 MINUTES)
+
+///Amount of reagents you start with on crafted food excluding the used parts
+#define CRAFTED_FOOD_BASE_REAGENT_MODIFIER 0.7
+///Modifier of reagents you get when crafting food from the parts used
+#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5
+
+#define IS_EDIBLE(O) (O.GetComponent(/datum/component/edible))
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index c0a4d30aba8b..46a675eab844 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -228,6 +228,11 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
#define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs))
+/// isnum() returns TRUE for NaN. Also, NaN != NaN. Checkmate, BYOND.
+#define isnan(x) ( (x) != (x) )
+
+#define isinf(x) (isnum((x)) && (((x) == SYSTEM_TYPE_INFINITY) || ((x) == -SYSTEM_TYPE_INFINITY)))
+
#define isProbablyWallMounted(O) (O.pixel_x > 20 || O.pixel_x < -20 || O.pixel_y > 20 || O.pixel_y < -20)
#define isbook(O) (is_type_in_typecache(O, GLOB.book_types))
diff --git a/code/__DEFINES/processing.dm b/code/__DEFINES/processing.dm
new file mode 100644
index 000000000000..905c03830d51
--- /dev/null
+++ b/code/__DEFINES/processing.dm
@@ -0,0 +1,3 @@
+#define TOOL_PROCESSING_RESULT "result"
+#define TOOL_PROCESSING_AMOUNT "amount"
+#define TOOL_PROCESSING_TIME "time"
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index c66d3f34c1ad..9816ae5ac388 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -2,19 +2,21 @@
#define LIQUID 2
#define GAS 3
-#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
-#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
+#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
+#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
-#define REFILLABLE (1<<2) // Makes it possible to add reagents through any reagent container.
-#define DRAINABLE (1<<3) // Makes it possible to remove reagents through any reagent container.
-#define DUNKABLE (1<<4) // Allows items to be dunked into this container for transfering reagents. Used in conjunction with the dunkable component.
+#define REFILLABLE (1<<2) // Makes it possible to add reagents through any reagent container.
+#define DRAINABLE (1<<3) // Makes it possible to remove reagents through any reagent container.
+#define DUNKABLE (1<<4) // Allows items to be dunked into this container for transfering reagents. Used in conjunction with the dunkable component.
-#define TRANSPARENT (1<<5) // Used on containers which you want to be able to see the reagents off.
-#define AMOUNT_VISIBLE (1<<6) // For non-transparent containers that still have the general amount of reagents in them visible.
-#define NO_REACT (1<<7) // Applied to a reagent holder, the contents will not react with each other.
+#define TRANSPARENT (1<<5) // Used on containers which you want to be able to see the reagents off.
+#define AMOUNT_VISIBLE (1<<6) // For non-transparent containers that still have the general amount of reagents in them visible.
+#define NO_REACT (1<<7) // Applied to a reagent holder, the contents will not react with each other.
-// Is an open container for all intents and purposes.
-#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
+#define ABSOLUTELY_GRINDABLE (1<<8) //! used in 'All-In-One Grinder' that it can grind anything if it has this bitflag
+
+/// Is an open container for all intents and purposes.
+#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
#define TOUCH 1 // splashing
diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm
index 320648170b44..3d4cdae52323 100644
--- a/code/__DEFINES/tools.dm
+++ b/code/__DEFINES/tools.dm
@@ -14,6 +14,7 @@
#define TOOL_DRILL "drill"
#define TOOL_SCALPEL "scalpel"
#define TOOL_SAW "saw"
+#define TOOL_KNIFE "knife"
// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY,
// tool sound is only played when op is started. If not, it's played twice.
diff --git a/code/__HELPERS/string_assoc_lists.dm b/code/__HELPERS/string_assoc_lists.dm
index cded3a349691..e269da7da5eb 100644
--- a/code/__HELPERS/string_assoc_lists.dm
+++ b/code/__HELPERS/string_assoc_lists.dm
@@ -1,17 +1,18 @@
GLOBAL_LIST_EMPTY(string_assoc_lists)
+
/**
- * Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number).
- */
+ * Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number).
+ */
/datum/proc/string_assoc_list(list/values)
- var/list/string_id = list()
- for(var/val in values)
- string_id += "[val]_[values[val]]"
- string_id = string_id.Join("-")
+ var/list/string_id = list()
+ for(var/val in values)
+ string_id += "[val]_[values[val]]"
+ string_id.Join("-")
- . = GLOB.string_assoc_lists[string_id]
+ . = GLOB.string_assoc_lists[string_id]
- if(.)
- return
+ if(.)
+ return
- return GLOB.string_assoc_lists[string_id] = values
+ return GLOB.string_assoc_lists[string_id] = values
diff --git a/code/__HELPERS/string_lists.dm b/code/__HELPERS/string_lists.dm
index 5b3646def6e1..5ace769133eb 100644
--- a/code/__HELPERS/string_lists.dm
+++ b/code/__HELPERS/string_lists.dm
@@ -1,5 +1,19 @@
GLOBAL_LIST_EMPTY(string_lists)
+/**
+ * Caches lists with non-numeric stringify-able values (text or typepath).
+ */
+/datum/proc/string_list(list/values)
+ var/string_id = values.Join("-")
+
+ . = GLOB.string_lists[string_id]
+
+ if(.)
+ return
+
+ return GLOB.string_lists[string_id] = values
+GLOBAL_LIST_EMPTY(string_lists)
+
/**
* Caches lists with non-numeric stringify-able values (text or typepath).
*/
diff --git a/code/datums/components/edible.dm b/code/datums/components/edible.dm
deleted file mode 100644
index 3a047d082868..000000000000
--- a/code/datums/components/edible.dm
+++ /dev/null
@@ -1,256 +0,0 @@
-/*!
-
-This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items).
-These items take a specific time to eat, and can do most of the things our original food items could.
-
-Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else:
- Components:
- Drying component (jerky etc)
- Customizable component (custom pizzas etc)
- Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.)
- Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents)
-
- Misc:
- Something for cakes (You can store things inside)
-
-*/
-/datum/component/edible
- ///Amount of reagents taken per bite
- var/bite_consumption = 2
- ///Amount of bites taken so far
- var/bitecount = 0
- ///Flags for food
- var/food_flags = NONE
- ///Bitfield of the types of this food
- var/foodtypes = NONE
- ///Amount of seconds it takes to eat this food
- var/eat_time = 30
- ///Defines how much it lowers someones satiety (Need to eat, essentialy)
- var/junkiness = 0
- ///Message to send when eating
- var/list/eatverbs
- ///Callback to be ran for when you take a bite of something
- var/datum/callback/after_eat
- ///Last time we checked for food likes
- var/last_check_time
-
-/datum/component/edible/Initialize(list/initial_reagents, food_flags = NONE, foodtypes = NONE, volume = 50, eat_time = 30, list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, datum/callback/after_eat)
- if(!isatom(parent))
- return COMPONENT_INCOMPATIBLE
-
- RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
- RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal))
- if(isitem(parent))
- RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(UseFromHand))
- else if(isturf(parent))
- RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(TryToEatTurf))
-
- src.bite_consumption = bite_consumption
- src.food_flags = food_flags
- src.foodtypes = foodtypes
- src.eat_time = eat_time
- src.eatverbs = eatverbs
- src.junkiness = junkiness
- src.after_eat = after_eat
-
- var/atom/owner = parent
-
- owner.create_reagents(volume, INJECTABLE)
-
- if(initial_reagents)
- for(var/rid in initial_reagents)
- var/amount = initial_reagents[rid]
- if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin))
- owner.reagents.add_reagent(rid, amount, tastes.Copy())
- else
- owner.reagents.add_reagent(rid, amount)
-
-/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list)
- SIGNAL_HANDLER
-
- if(!(food_flags & FOOD_IN_CONTAINER))
- switch (bitecount)
- if (0)
- return
- if(1)
- examine_list += "[parent] was bitten by someone!"
- if(2,3)
- examine_list += "[parent] was bitten [bitecount] times!"
- else
- examine_list += "[parent] was bitten multiple times!"
-
-/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
- SIGNAL_HANDLER
-
- return TryToEat(M, user)
-
-/datum/component/edible/proc/TryToEatTurf(datum/source, mob/user)
- SIGNAL_HANDLER
-
- return TryToEat(user, user)
-
-///All the checks for the act of eating itself and
-/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder)
-
- set waitfor = FALSE
-
- var/atom/owner = parent
-
- if(feeder.a_intent == INTENT_HARM)
- return
- if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it.
- to_chat(feeder, "None of [owner] left, oh no!")
- if(isturf(parent))
- var/turf/T = parent
- T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
- else
- qdel(parent)
- return
- if(!CanConsume(eater, feeder))
- return
- var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this
- for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting
- fullness += C.nutriment_factor * C.volume / C.metabolization_rate
-
- . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose
-
- if(eater == feeder)//If you're eating it yourself.
- if(!do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time
- return
- var/eatverb = pick(eatverbs)
- if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
- to_chat(eater, "You don't feel like eating any more junk food at the moment!")
- return
- else if(fullness <= 50)
- eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!")
- else if(fullness > 50 && fullness < 150)
- eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].")
- else if(fullness > 150 && fullness < 500)
- eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].")
- else if(fullness > 500 && fullness < 600)
- eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].")
- else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat
- eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!")
- return
- else //If you're feeding it to someone else.
- if(isbrain(eater))
- to_chat(feeder, "[eater] doesn't seem to have a mouth!")
- return
- if(fullness <= (600 * (1 + eater.overeatduration / 1000)))
- eater.visible_message("[feeder] attempts to feed [eater] [parent].", \
- "[feeder] attempts to feed you [parent].")
- else
- eater.visible_message("[feeder] cannot force any more of [parent] down [eater]'s throat!", \
- "[feeder] cannot force any more of [parent] down your throat!")
- return
- if(!do_mob(feeder, eater)) //Wait 3 seconds before you can feed
- return
-
- log_combat(feeder, eater, "fed", owner.reagents.log_list())
- eater.visible_message("[feeder] forces [eater] to eat [parent]!", \
- "[feeder] forces you to eat [parent]!")
-
- TakeBite(eater, feeder)
-
-///This function lets the eater take a bite and transfers the reagents to the eater.
-/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder)
-
- var/atom/owner = parent
-
- if(!owner?.reagents)
- return FALSE
- if(eater.satiety > -200)
- eater.satiety -= junkiness
- playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
- if(owner.reagents.total_volume)
- SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder)
- var/fraction = min(bite_consumption / owner.reagents.total_volume, 1)
- owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, method = INGEST)
- bitecount++
- On_Consume(eater)
- checkLiked(fraction, eater)
-
- //Invoke our after eat callback if it is valid
- if(after_eat)
- after_eat.Invoke(eater, feeder)
-
- return TRUE
-
-///Checks whether or not the eater can actually consume the food
-/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder)
- if(!iscarbon(eater))
- return FALSE
- var/mob/living/carbon/C = eater
- var/covered = ""
- if(C.is_mouth_covered(head_only = 1))
- covered = "headgear"
- else if(C.is_mouth_covered(mask_only = 1))
- covered = "mask"
- if(covered)
- var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]"
- to_chat(feeder, "You have to remove [who] [covered] first!")
- return FALSE
- return TRUE
-
-///Check foodtypes to see if we should send a moodlet
-/datum/component/edible/proc/checkLiked(fraction, mob/M)
- if(last_check_time + 50 > world.time)
- return FALSE
- if(!ishuman(M))
- return FALSE
- var/mob/living/carbon/human/H = M
- if(HAS_TRAIT(H, TRAIT_AGEUSIA) && foodtypes & H.dna.species.toxic_food)
- to_chat(H, "You don't feel so good...")
- H.adjust_disgust(25 + 30 * fraction)
- else
- if(foodtypes & H.dna.species.toxic_food)
- to_chat(H,"What the hell was that thing?!")
- H.adjust_disgust(25 + 30 * fraction)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
- else if(foodtypes & H.dna.species.disliked_food)
- to_chat(H,"That didn't taste very good...")
- H.adjust_disgust(11 + 15 * fraction)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
- else if(foodtypes & H.dna.species.liked_food)
- to_chat(H,"I love this taste!")
- H.adjust_disgust(-5 + -2.5 * fraction)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
- if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast)
- last_check_time = world.time
-
-///Delete the item when it is fully eaten
-/datum/component/edible/proc/On_Consume(mob/living/eater)
-
- var/atom/owner = parent
-
- if(!eater)
- return
- if(!owner.reagents.total_volume)
- if(isturf(parent))
- var/turf/T = parent
- T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
- else
- qdel(parent)
-
-///Ability to feed food to puppers
-/datum/component/edible/proc/UseByAnimal(datum/source, mob/user)
-
- SIGNAL_HANDLER
-
-
- var/atom/owner = parent
-
- if(!isdog(user))
- return
- var/mob/living/L = user
- if(bitecount == 0 || prob(50))
- L.manual_emote("nibbles away at \the [parent]")
- bitecount++
- . = COMPONENT_ITEM_NO_ATTACK
- L.taste(owner.reagents) // why should carbons get all the fun?
- if(bitecount >= 5)
- var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [parent] was")
- if(sattisfaction_text)
- L.manual_emote(sattisfaction_text)
- qdel(parent)
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
new file mode 100644
index 000000000000..89d8a52d67d9
--- /dev/null
+++ b/code/datums/components/food/edible.dm
@@ -0,0 +1,452 @@
+/*!
+
+This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items).
+These items take a specific time to eat, and can do most of the things our original food items could.
+
+Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else:
+ Components:
+ Drying component (jerky etc)
+ Customizable component (custom pizzas etc)
+ Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.)
+ Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents)
+
+ Misc:
+ Something for cakes (You can store things inside)
+
+*/
+/datum/component/edible
+ ///Amount of reagents taken per bite
+ var/bite_consumption = 2
+ ///Amount of bites taken so far
+ var/bitecount = 0
+ ///Flags for food
+ var/food_flags = NONE
+ ///Bitfield of the types of this food
+ var/foodtypes = NONE
+ ///Amount of seconds it takes to eat this food
+ var/eat_time = 30
+ ///Defines how much it lowers someones satiety (Need to eat, essentialy)
+ var/junkiness = 0
+ ///Message to send when eating
+ var/list/eatverbs
+ ///Callback to be ran for when you take a bite of something
+ var/datum/callback/after_eat
+ ///Callback to be ran for when you finish eating something
+ var/datum/callback/on_consume
+ ///Last time we checked for food likes
+ var/last_check_time
+ ///The initial reagents of this food when it is made
+ var/list/initial_reagents
+ ///The initial volume of the foods reagents
+ var/volume
+ ///The flavortext for taste
+ var/list/tastes
+ ///The type of atom this creates when the object is microwaved.
+ var/microwaved_type
+
+/datum/component/edible/Initialize(list/initial_reagents,
+ food_flags = NONE,
+ foodtypes = NONE,
+ volume = 50,
+ eat_time = 10,
+ list/tastes,
+ list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"),
+ bite_consumption = 2,
+ microwaved_type,
+ junkiness,
+ datum/callback/pre_eat,
+ datum/callback/on_compost,
+ datum/callback/after_eat,
+ datum/callback/on_consume
+)
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal))
+ RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(on_craft))
+ RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(on_processed))
+ RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_COOKED, PROC_REF(on_microwave_cooked))
+ if(isitem(parent))
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(use_from_hand))
+ RegisterSignal(parent, COMSIG_ITEM_FRIED, PROC_REF(on_fried))
+ RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_ACT, PROC_REF(on_microwaved))
+
+ var/obj/item/item = parent
+ if (!item.grind_results)
+ item.grind_results = list() //If this doesn't already exist, add it as an empty list. This is needed for the grinder to accept it.
+
+ src.bite_consumption = bite_consumption
+ src.food_flags = food_flags
+ src.foodtypes = foodtypes
+ src.eat_time = eat_time
+ src.eatverbs = string_list(eatverbs)
+ src.junkiness = junkiness
+ src.after_eat = after_eat
+ src.on_consume = on_consume
+ src.initial_reagents = string_assoc_list(initial_reagents)
+ src.tastes = string_assoc_list(tastes)
+ src.microwaved_type = microwaved_type
+
+ var/atom/owner = parent
+
+ owner.create_reagents(volume, INJECTABLE)
+
+ if(initial_reagents)
+ for(var/rid in initial_reagents)
+ var/amount = initial_reagents[rid]
+ if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin))
+ owner.reagents.add_reagent(rid, amount, tastes.Copy())
+ else
+ owner.reagents.add_reagent(rid, amount)
+
+/datum/component/edible/InheritComponent(datum/component/C,
+ i_am_original,
+ list/initial_reagents,
+ food_flags = NONE,
+ foodtypes = NONE,
+ volume = 50,
+ eat_time = 30,
+ list/tastes,
+ list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"),
+ bite_consumption = 2,
+ datum/callback/pre_eat,
+ datum/callback/on_compost,
+ datum/callback/after_eat,
+ datum/callback/on_consume
+ )
+
+ . = ..()
+ src.bite_consumption = bite_consumption
+ src.food_flags = food_flags
+ src.foodtypes = foodtypes
+ src.eat_time = eat_time
+ src.eatverbs = eatverbs
+ src.junkiness = junkiness
+ src.pre_eat = pre_eat
+ src.on_compost = on_compost
+ src.after_eat = after_eat
+ src.on_consume = on_consume
+
+/datum/component/edible/Destroy(force, silent)
+ QDEL_NULL(pre_eat)
+ QDEL_NULL(on_compost)
+ QDEL_NULL(after_eat)
+ QDEL_NULL(on_consume)
+ return ..()
+
+/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list)
+ SIGNAL_HANDLER
+
+ if(!(food_flags & FOOD_IN_CONTAINER))
+ switch (bitecount)
+ if (0)
+ return
+ if(1)
+ examine_list += "[parent] was bitten by someone!"
+ if(2,3)
+ examine_list += "[parent] was bitten [bitecount] times!"
+ else
+ examine_list += "[parent] was bitten multiple times!"
+
+/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
+ SIGNAL_HANDLER
+
+ return TryToEat(M, user)
+
+/datum/component/edible/proc/on_fried(fry_object)
+ SIGNAL_HANDLER
+ var/atom/our_atom = parent
+ our_atom.reagents.trans_to(fry_object, our_atom.reagents.total_volume)
+ qdel(our_atom)
+ return COMSIG_FRYING_HANDLED
+
+///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents.
+/datum/component/edible/proc/on_processed(datum/source, atom/original_atom, list/chosen_processing_option)
+ SIGNAL_HANDLER
+
+ if(!original_atom.reagents)
+ return
+
+ var/atom/this_food = parent
+ var/reagents_for_slice = chosen_processing_option[TOOL_PROCESSING_AMOUNT]
+
+ this_food.create_reagents(volume) //Make sure we have a reagent container
+
+ original_atom.reagents.trans_to(this_food, reagents_for_slice)
+
+ if(original_atom.name != initial(original_atom.name))
+ this_food.name = "slice of [original_atom.name]"
+ if(original_atom.desc != initial(original_atom.desc))
+ this_food.desc = "[original_atom.desc]"
+
+///Called when food is crafted through a crafting recipe datum.
+/datum/component/edible/proc/on_craft(datum/source, list/parts_list, datum/crafting_recipe/food/recipe)
+ SIGNAL_HANDLER
+
+ var/atom/this_food = parent
+
+ this_food.reagents.clear_reagents()
+
+ for(var/obj/item/crafted_part in this_food.contents)
+ crafted_part.reagents?.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume, CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER)
+
+ var/list/objects_to_delete = list()
+
+ // Remove all non recipe objects from the contents
+ for(var/content_object in this_food.contents)
+ for(var/recipe_object in recipe.real_parts)
+ if(istype(content_object, recipe_object))
+ continue
+ objects_to_delete += content_object
+
+ QDEL_LIST(objects_to_delete)
+
+ for(var/r_id in initial_reagents)
+ var/amount = initial_reagents[r_id] * CRAFTED_FOOD_BASE_REAGENT_MODIFIER
+ if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin)
+ this_food.reagents.add_reagent(r_id, amount, tastes)
+ else
+ this_food.reagents.add_reagent(r_id, amount)
+
+ SSblackbox.record_feedback("tally", "food_made", 1, type)
+
+/datum/component/edible/proc/on_microwaved(datum/source, obj/machinery/microwave/used_microwave)
+ SIGNAL_HANDLER
+
+ var/turf/parent_turf = get_turf(parent)
+
+ if(!microwaved_type)
+ new /obj/item/reagent_containers/food/snacks/badrecipe(parent_turf)
+ qdel(src)
+ return
+
+
+ var/obj/item/result
+
+ result = new microwaved_type(parent_turf)
+
+ var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1
+
+ SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, parent, efficiency)
+
+ SSblackbox.record_feedback("tally", "food_made", 1, result.type)
+
+///Corrects the reagents on the newly cooked food
+/datum/component/edible/proc/on_microwave_cooked(datum/source, obj/item/source_item, cooking_efficiency = 1)
+ SIGNAL_HANDLER
+
+ var/atom/this_food = parent
+
+ this_food.reagents.clear_reagents()
+
+ source_item.reagents?.trans_to(this_food, source_item.reagents.total_volume)
+
+ for(var/r_id in initial_reagents)
+ var/amount = initial_reagents[r_id] * cooking_efficiency * CRAFTED_FOOD_BASE_REAGENT_MODIFIER
+ if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin)
+ this_food.reagents.add_reagent(r_id, amount, tastes)
+ else
+ this_food.reagents.add_reagent(r_id, amount)
+
+///Makes sure the thing hasn't been destroyed or fully eaten to prevent eating phantom edibles
+/datum/component/edible/proc/IsFoodGone(atom/owner, mob/living/feeder)
+ if(QDELETED(owner)|| !(IS_EDIBLE(owner)))
+ return TRUE
+ if(owner.reagents.total_volume)
+ return FALSE
+ return TRUE
+
+/// Normal time to forcefeed someone something
+#define EAT_TIME_FORCE_FEED (3 SECONDS)
+
+///All the checks for the act of eating itself and
+/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder)
+
+ set waitfor = FALSE // We might end up sleeping here, so we don't want to hold up anything
+
+ var/atom/owner = parent
+
+ if(feeder.a_intent == INTENT_HARM)
+ return
+
+ . = COMPONENT_CANCEL_ATTACK_CHAIN //Point of no return I suppose
+
+ if(IsFoodGone(owner, feeder))
+ return
+
+ if(!CanConsume(eater, feeder))
+ return
+ var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this
+ for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting
+ fullness += C.nutriment_factor * C.volume / C.metabolization_rate
+
+ var/time_to_eat = (eater = feeder) ? eat_time : EAT_TIME_FORCE_FEED
+
+ if(eater == feeder)//If you're eating it yourself.
+ if(eat_time && !do_after(feeder, time_to_eat, eater, timed_action_flags = food_flags & FOOD_FINGER_FOOD ? IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE : NONE)) //Gotta pass the minimal eat time
+ return
+ if(IsFoodGone(owner, feeder))
+ return
+ var/eatverb = pick(eatverbs)
+
+ if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
+ to_chat(eater, "You don't feel like eating any more junk food at the moment!")
+ return
+ else if(fullness <= 50)
+ eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!")
+ else if(fullness > 50 && fullness < 150)
+ eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].")
+ else if(fullness > 150 && fullness < 500)
+ eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].")
+ else if(fullness > 500 && fullness < 600)
+ eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].")
+ else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat
+ eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!")
+ return
+
+
+
+
+
+ else //If you're feeding it to someone else.
+ if(isbrain(eater))
+ to_chat(feeder, "[eater] doesn't seem to have a mouth!")
+ return
+ if(fullness <= (600 * (1 + eater.overeatduration / 1000)))
+ eater.visible_message(
+ "[feeder] attempts to feed [eater] [parent].", \
+ "[feeder] attempts to feed you [parent]."
+ )
+ if(eater.is_blind())
+ to_chat(eater, "You feel someone trying to feed you something!")
+ else
+ eater.visible_message(
+ "[feeder] cannot force any more of [parent] down [eater]'s throat!", \
+ "[feeder] cannot force any more of [parent] down your throat!"
+ )
+ if(eater.is_blind())
+ to_chat(eater, "You're too full to eat what's being fed to you!")
+ return
+ if(!do_after(feeder, delay = time_to_eat, target = eater)) //Wait 3 seconds before you can feed
+ return
+ if(IsFoodGone(owner, feeder))
+ return
+ log_combat(feeder, eater, "fed", owner.reagents.log_list())
+ eater.visible_message(
+ "[feeder] forces [eater] to eat [parent]!", \
+ "[feeder] forces you to eat [parent]!"
+ )
+ if(eater.is_blind())
+ to_chat(eater, "You're forced to eat something!")
+
+ TakeBite(eater, feeder)
+
+ //If we're not force-feeding, try take another bite
+ if(eater == feeder && eat_time)
+ INVOKE_ASYNC(src, PROC_REF(TryToEat), eater, feeder)
+
+#undef EAT_TIME_FORCE_FEED
+
+///This function lets the eater take a bite and transfers the reagents to the eater.
+/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder)
+
+ var/atom/owner = parent
+
+ if(!owner?.reagents)
+ return FALSE
+ if(eater.satiety > -200)
+ eater.satiety -= junkiness
+ playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
+ if(!owner.reagents.total_volume)
+ return
+ SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder, bitecount, bite_consumption)
+ var/fraction = min(bite_consumption / owner.reagents.total_volume, 1)
+ owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, method = INGEST)
+ bitecount++
+ check_liked(fraction, eater)
+ if(!owner.reagents.total_volume)
+ on_consume(eater, feeder)
+
+ //Invoke our after eat callback if it is valid
+ if(after_eat)
+ after_eat.Invoke(eater, feeder, bitecount)
+
+ return TRUE
+
+///Checks whether or not the eater can actually consume the food
+/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder)
+ if(!iscarbon(eater))
+ return FALSE
+ var/mob/living/carbon/C = eater
+ var/covered = ""
+ if(C.is_mouth_covered(head_only = 1))
+ covered = "headgear"
+ else if(C.is_mouth_covered(mask_only = 1))
+ covered = "mask"
+ if(covered)
+ var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]"
+ to_chat(feeder, "You have to remove [who] [covered] first!")
+ return FALSE
+ return TRUE
+
+///Check foodtypes to see if we should send a moodlet
+/datum/component/edible/proc/checkLiked(fraction, mob/M)
+ if(last_check_time + 50 > world.time)
+ return FALSE
+ if(!ishuman(M))
+ return FALSE
+ var/mob/living/carbon/human/H = M
+ if(HAS_TRAIT(H, TRAIT_AGEUSIA) && foodtypes & H.dna.species.toxic_food)
+ to_chat(H, "You don't feel so good...")
+ H.adjust_disgust(25 + 30 * fraction)
+ else
+ if(foodtypes & H.dna.species.toxic_food)
+ to_chat(H,"What the hell was that thing?!")
+ H.adjust_disgust(25 + 30 * fraction)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
+ else if(foodtypes & H.dna.species.disliked_food)
+ to_chat(H,"That didn't taste very good...")
+ H.adjust_disgust(11 + 15 * fraction)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
+ else if(foodtypes & H.dna.species.liked_food)
+ to_chat(H,"I love this taste!")
+ H.adjust_disgust(-5 + -2.5 * fraction)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
+ if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast)
+ last_check_time = world.time
+
+///Delete the item when it is fully eaten
+/datum/component/edible/proc/on_consume(mob/living/eater, mob/living/feeder)
+ SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder)
+
+ on_consume?.Invoke(eater, feeder)
+
+ if(isturf(parent))
+ var/turf/T = parent
+ T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
+ else
+ qdel(parent)
+
+///Ability to feed food to puppers
+/datum/component/edible/proc/UseByAnimal(datum/source, mob/user)
+
+ SIGNAL_HANDLER
+
+
+ var/atom/owner = parent
+
+ if(!isdog(user))
+ return
+ var/mob/living/L = user
+ if(bitecount == 0 || prob(50))
+ L.manual_emote("nibbles away at \the [parent]")
+ bitecount++
+ . = COMPONENT_ITEM_NO_ATTACK
+ L.taste(owner.reagents) // why should carbons get all the fun?
+ if(bitecount >= 5)
+ var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [parent] was")
+ if(sattisfaction_text)
+ L.manual_emote(sattisfaction_text)
+ qdel(parent)
diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm
new file mode 100644
index 000000000000..6e1226b2dc69
--- /dev/null
+++ b/code/datums/components/food/food_storage.dm
@@ -0,0 +1,204 @@
+/// --Food storage component--
+/// This component lets you slide one item into large foods, such as bread, cheese wheels, or cakes.
+/// Consuming food storages with an item inside can cause unique interactions, such as eating glass shards.
+
+/datum/component/food_storage
+ /// Reference to what we have in our food.
+ var/obj/item/stored_item
+ /// The amount of volume the food has on creation - Used for probabilities
+ var/initial_volume = 10
+ /// Minimum size items that can be inserted
+ var/minimum_weight_class = WEIGHT_CLASS_SMALL
+ /// What are the odds we bite into the stored item?
+ var/bad_chance_of_discovery = 0
+ /// What are the odds we see the stored item before we bite it?
+ var/good_chance_of_discovery = 100
+ /// The stored item was found out somehow.
+ var/discovered = FALSE
+
+/datum/component/food_storage/Initialize(_minimum_weight_class = WEIGHT_CLASS_SMALL, _bad_chance = 0, _good_chance = 100)
+
+ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(try_inserting_item))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(try_removing_item))
+ RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(consume_food_storage))
+
+ var/atom/food = parent
+ initial_volume = food.reagents.total_volume
+
+ minimum_weight_class = _minimum_weight_class
+ bad_chance_of_discovery = _bad_chance
+ good_chance_of_discovery = _good_chance
+
+/datum/component/food_storage/Destroy(force, silent)
+ if(stored_item)
+ stored_item.forceMove(stored_item.drop_location())
+ stored_item.dropped()
+ stored_item = null
+ . = ..()
+
+/** Begins the process of inserted an item.
+ *
+ * Clicking on the food storage with an item on disarm intent will begin a do_after, which if successful inserts the item.
+ *
+ * Arguments
+ * inserted_item - the item being placed into the food
+ * user - the person inserting the item
+ */
+/datum/component/food_storage/proc/try_inserting_item(datum/source, obj/item/inserted_item, mob/user, params)
+ SIGNAL_HANDLER
+
+ // No matryoshka-ing food storage
+ if(istype(inserted_item, /obj/item/storage) || IS_EDIBLE(inserted_item))
+ return
+
+ //Harm intent will bypass inserting for injecting food with syringes and such
+ if(user.a_intent == INTENT_HARM)
+ return
+
+ if(inserted_item.w_class > minimum_weight_class)
+ to_chat(user, "\The [inserted_item.name] won't fit in \the [parent].")
+ return
+
+ if(!QDELETED(stored_item))
+ to_chat(user, "There's something in \the [parent].")
+ return
+
+ if(HAS_TRAIT(inserted_item, TRAIT_NODROP))
+ to_chat(user, "\the [inserted_item] is stuck to your hand, you can't put into \the [parent]!")
+ return
+
+ user.visible_message("[user.name] begins inserting [inserted_item.name] into \the [parent].", \
+ "You start to insert the [inserted_item.name] into \the [parent].")
+
+ INVOKE_ASYNC(src, PROC_REF(insert_item), inserted_item, user)
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+/** Begins the process of attempting to remove the stored item.
+ *
+ * Clicking on food storage on grab intent will begin a do_after, which if successful removes the stored_item.
+ *
+ * Arguments
+ * user - the person removing the item.
+ */
+/datum/component/food_storage/proc/try_removing_item(datum/source, mob/user)
+ SIGNAL_HANDLER
+
+ var/atom/food = parent
+
+ if(user.a_intent != INTENT_GRAB)
+ return
+
+ if(QDELETED(stored_item))
+ return
+
+ if(!food.can_interact(user))
+ return
+
+ user.visible_message("[user.name] begins tearing at \the [parent].", \
+ "You start to rip into \the [parent].")
+
+ INVOKE_ASYNC(src, PROC_REF(begin_remove_item), user)
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+/** Inserts the item into the food, after a do_after.
+ *
+ * Arguments
+ * inserted_item - The item being inserted.
+ * user - the person inserting the item.
+ */
+/datum/component/food_storage/proc/insert_item(obj/item/inserted_item, mob/user)
+ if(do_after(user, 1.5 SECONDS, target = parent))
+ var/atom/food = parent
+ to_chat(user, "You slip [inserted_item.name] inside \the [parent].")
+ inserted_item.forceMove(food)
+ user.log_message("[key_name(user)] inserted [inserted_item] into [parent] at [AREACOORD(user)]", LOG_ATTACK)
+ food.add_fingerprint(user)
+ inserted_item.add_fingerprint(user)
+
+ stored_item = inserted_item
+
+/** Removes the item from the food, after a do_after.
+ *
+ * Arguments
+ * user - person removing the item.
+ */
+/datum/component/food_storage/proc/begin_remove_item(mob/user)
+ if(do_after(user, 10 SECONDS, target = parent))
+ remove_item(user)
+
+/**
+ * Removes the stored item, putting it in user's hands or on the ground, then updates the reference.
+ */
+/datum/component/food_storage/proc/remove_item(mob/user)
+ if(user.put_in_hands(stored_item))
+ user.visible_message("[user.name] slowly pulls [stored_item.name] out of \the [parent].", \
+ "You slowly pull [stored_item.name] out of \the [parent].")
+ else
+ stored_item.dropped()
+ stored_item.visible_message("[stored_item.name] falls out of \the [parent].")
+
+ update_stored_item()
+
+/** Checks for stored items when the food is eaten.
+ *
+ * If the food is eaten while an item is stored in it, calculates the odds that the item will be found.
+ * Then, if the item is found before being bitten, the item is removed.
+ * If the item is found by biting into it, calls on_accidental_consumption on the stored item.
+ * Afterwards, removes the item from the food if it was discovered.
+ *
+ * Arguments
+ * target - person doing the eating (can be the same as user)
+ * user - person causing the eating to happen
+ * bitecount - how many times the current food has been bitten
+ * bitesize - how large bties are for this food
+ */
+/datum/component/food_storage/proc/consume_food_storage(datum/source, mob/living/target, mob/living/user, bitecount, bitesize)
+ SIGNAL_HANDLER
+
+ if(QDELETED(stored_item)) //if the stored item was deleted/null...
+ if(!update_stored_item()) //check if there's a replacement item
+ return
+
+ /// Chance of biting the held item = amount of bites / (intitial reagents / reagents per bite) * 100
+ bad_chance_of_discovery = (bitecount / (initial_volume / bitesize))*100
+ /// Chance of finding the held item = bad chance - 50
+ good_chance_of_discovery = bad_chance_of_discovery - 50
+
+ if(prob(good_chance_of_discovery)) //finding the item, without biting it
+ discovered = TRUE
+ to_chat(target, "It feels like there's something in \the [parent]...!")
+
+ else if(prob(bad_chance_of_discovery)) //finding the item, BY biting it
+ user.log_message("[key_name(user)] just fed [key_name(target)] a/an [stored_item] which was hidden in [parent] at [AREACOORD(target)]", LOG_ATTACK)
+ discovered = stored_item.on_accidental_consumption(target, user, parent)
+ update_stored_item() //make sure if the item was changed, the reference changes as well
+
+ if(!QDELETED(stored_item) && discovered)
+ INVOKE_ASYNC(src, PROC_REF(remove_item), user)
+
+/** Updates the reference of the stored item.
+ *
+ * Checks the food's contents for if an alternate item was placed into the food.
+ * If there is an alternate item, updates the reference to the new item.
+ * If there isn't, updates the reference to null.
+ *
+ * Returns FALSE if the ref is nulled, or TRUE is another item replaced it.
+ */
+/datum/component/food_storage/proc/update_stored_item()
+ var/atom/food = parent
+ if(!food?.contents.len) //if there's no items in the food or food is deleted somehow
+ stored_item = null
+ return FALSE
+
+ for(var/obj/item/i in food.contents) //search the food's contents for a replacement item
+ if(IS_EDIBLE(i))
+ continue
+ if(QDELETED(i))
+ continue
+
+ stored_item = i //we found something to replace it
+ return TRUE
+
+ //if there's nothing else in the food, or we found nothing valid
+ stored_item = null
+ return FALSE
diff --git a/code/datums/elements/food/dunkable.dm b/code/datums/elements/food/dunkable.dm
new file mode 100644
index 000000000000..80661d5c4ac0
--- /dev/null
+++ b/code/datums/elements/food/dunkable.dm
@@ -0,0 +1,34 @@
+// If an item has the dunkable element, it's able to be dunked into reagent containers like beakers and glasses.
+// Dunking the item into a container will transfer reagents from the container to the item.
+/datum/element/dunkable
+ element_flags = ELEMENT_BESPOKE
+ id_arg_index = 2
+ var/dunk_amount // the amount of reagents that will be transfered from the container to the item on each click
+
+/datum/element/dunkable/Attach(datum/target, amount_per_dunk)
+ . = ..()
+ if(!isitem(target))
+ return ELEMENT_INCOMPATIBLE
+ dunk_amount = amount_per_dunk
+ RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(get_dunked))
+
+/datum/element/dunkable/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK)
+
+/datum/element/dunkable/proc/get_dunked(datum/source, atom/target, mob/user, proximity_flag)
+ if(!proximity_flag) // if the user is not adjacent to the container
+ return
+ var/obj/item/reagent_containers/container = target // the container we're trying to dunk into
+ if(istype(container) && container.reagent_flags & DUNKABLE) // container should be a valid target for dunking
+ if(!container.is_drainable())
+ to_chat(user, "[container] is unable to be dunked in!")
+ return
+ var/obj/item/I = source // the item that has the dunkable element
+ if(container.reagents.trans_to(I, dunk_amount, transfered_by = user)) //if reagents were transfered, show the message
+ to_chat(user, "You dunk \the [I] into \the [container].")
+ return
+ if(!container.reagents.total_volume)
+ to_chat(user, "[container] is empty!")
+ else
+ to_chat(user, "[I] is full!")
diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm
new file mode 100644
index 000000000000..6c484c414a07
--- /dev/null
+++ b/code/datums/elements/food/food_trash.dm
@@ -0,0 +1,40 @@
+// If an item has the food_trash element it will drop an item when it is consumed.
+/datum/element/food_trash
+ element_flags = ELEMENT_BESPOKE
+ id_arg_index = 2
+ /// The type of trash that is spawned by this element
+ var/trash
+ ///Flags of the trash element that change its behavior UNUSED UNTIL PART 2
+ //var/flags
+ ///Generate trash proc path
+ var/generate_trash_procpath
+
+/datum/element/food_trash/Attach(datum/target, atom/trash, flags, generate_trash_proc)
+ . = ..()
+ if(!isatom(target))
+ return ELEMENT_INCOMPATIBLE
+ src.trash = trash
+ //src.flags = flags
+ RegisterSignal(target, COMSIG_FOOD_CONSUMED, PROC_REF(generate_trash))
+ if(!generate_trash_procpath && generate_trash_proc)
+ generate_trash_procpath = generate_trash_proc
+
+/datum/element/food_trash/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, COMSIG_FOOD_CONSUMED)
+
+/datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder)
+ SIGNAL_HANDLER
+
+ ///cringy signal_handler shouldnt be needed if you dont want to return but oh well
+ INVOKE_ASYNC(src, PROC_REF(async_generate_trash), source)
+
+/datum/element/food_trash/proc/async_generate_trash(datum/source)
+ var/atom/edible_object = source
+
+ var/obj/item/trash_item = generate_trash_procpath ? call(source, generate_trash_procpath)() : new trash(edible_object.drop_location())
+
+ if(isliving(edible_object.loc))
+ var/mob/living/food_holding_mob = edible_object.loc
+ food_holding_mob.dropItemToGround(edible_object)
+ food_holding_mob.put_in_hands(trash_item)
diff --git a/code/datums/elements/food/processable.dm b/code/datums/elements/food/processable.dm
new file mode 100644
index 000000000000..503e5169c877
--- /dev/null
+++ b/code/datums/elements/food/processable.dm
@@ -0,0 +1,47 @@
+// If an item has the processable item, it can be processed into another item with a specific tool. This adds generic behavior for those actions to make it easier to set-up generically.
+/datum/element/processable
+ element_flags = ELEMENT_BESPOKE
+ id_arg_index = 2
+ ///The type of atom this creates when the processing recipe is used.
+ var/result_atom_type
+ ///The tool behaviour for this processing recipe
+ var/tool_behaviour
+ ///Time to process the atom
+ var/time_to_process
+ ///Amount of the resulting actor this will create
+ var/amount_created
+ ///Whether or not the atom being processed has to be on a table or tray to process it
+ var/table_required
+
+/datum/element/processable/Attach(datum/target, tool_behaviour, result_atom_type, amount_created = 3, time_to_process = 20, table_required = FALSE)
+ . = ..()
+ if(!isatom(target))
+ return ELEMENT_INCOMPATIBLE
+
+ src.tool_behaviour = tool_behaviour
+ src.amount_created = amount_created
+ src.time_to_process = time_to_process
+ src.result_atom_type = result_atom_type
+ src.table_required = table_required
+
+ RegisterSignal(target, COMSIG_ATOM_TOOL_ACT(tool_behaviour), PROC_REF(try_process))
+
+/datum/element/processable/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, COMSIG_ATOM_TOOL_ACT(tool_behaviour))
+
+/datum/element/processable/proc/try_process(datum/source, mob/living/user, obj/item/I, list/mutable_recipes)
+ SIGNAL_HANDLER
+
+ if(table_required)
+ var/obj/item/found_item = source
+ var/found_location = found_item.loc
+ var/found_turf = isturf(found_location)
+ var/found_table = locate(/obj/structure/table) in found_location
+ var/found_tray = locate(/obj/item/storage/bag/tray) in found_location
+ if(!found_turf && !istype(found_location, /obj/item/storage/bag/tray) || found_turf && !(found_table || found_tray))
+ to_chat(user, "You cannot make that here! You need a table or at least a tray.")
+ return
+
+ mutable_recipes += list(list(TOOL_PROCESSING_RESULT = result_atom_type, TOOL_PROCESSING_AMOUNT = amount_created, TOOL_PROCESSING_TIME = time_to_process))
+ return COMPONENT_NO_AFTERATTACK
diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm
index 4f505cb2a3e7..28ae234cf702 100644
--- a/code/datums/materials/_material.dm
+++ b/code/datums/materials/_material.dm
@@ -162,5 +162,14 @@ Simple datum which is instanced once per type and is used for every object of sa
* - amount: The amount of the material to break down.
* - breakdown_flags: Some flags dictating how exactly this material is being broken down.
*/
+/**
+ * This proc is called when the mat is found in an item that's consumed by accident. see /obj/item/proc/on_accidental_consumption.
+ * Arguments
+ * * M - person consuming the mat
+ * * S - (optional) item the mat is contained in (NOT the item with the mat itself)
+ */
+/datum/material/proc/on_accidental_mat_consumption(mob/living/carbon/M, obj/item/S)
+ return FALSE
+
/datum/material/proc/return_composition(amount=1, breakdown_flags=NONE)
return list((src) = amount) // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break.
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 8cb9f50008f4..2f96084223e9 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -469,7 +469,7 @@
to_chat(H, "You think of a dumb thing you said a long time ago and scream internally.")
dumb_thing = FALSE //only once per life
if(prob(1))
- new/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code
+ new/obj/item/food/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code
// small chance to make eye contact with inanimate objects/mindless mobs because of nerves
/datum/quirk/social_anxiety/proc/looks_at_floor(datum/source, atom/A)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6c6849724bde..77f211c97148 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -453,22 +453,24 @@
* Otherwise it simply forceMoves the atom into this atom
*/
/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R)
+ SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
+ if(parts_list, datum/crafting_recipe/R)
SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
if(parts_list)
- for(var/A in parts_list)
- if(istype(A, /datum/reagent))
- if(!reagents)
- reagents = new()
- reagents.reagent_list.Add(A)
- reagents.conditional_update()
- else if(ismovable(A))
- var/atom/movable/M = A
- if(isliving(M.loc))
- var/mob/living/L = M.loc
- L.transferItemToLoc(M, src)
- else
- M.forceMove(src)
- SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, src)
+ for(var/A in parts_list)
+ if(istype(A, /datum/reagent))
+ if(!reagents)
+ reagents = new()
+ reagents.reagent_list.Add(A)
+ reagents.conditional_update()
+ else if(ismovable(A))
+ var/atom/movable/M = A
+ if(isliving(M.loc))
+ var/mob/living/L = M.loc
+ L.transferItemToLoc(M, src)
+ else
+ M.forceMove(src)
+ SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, src)
parts_list.Cut()
///Take air from the passed in gas mixture datum
@@ -1275,25 +1277,71 @@
* Must return parent proc ..() in the end if overridden
*/
/atom/proc/tool_act(mob/living/user, obj/item/I, tool_type)
+ var/signal_result
+
+ var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal
+ signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, I, processing_recipes)
+ if(processing_recipes.len)
+ process_recipes(user, I, processing_recipes)
+ if(QDELETED(I))
+ return TRUE
switch(tool_type)
if(TOOL_CROWBAR)
- . |= crowbar_act(user, I)
+ . = crowbar_act(user, I)
if(TOOL_MULTITOOL)
- . |= multitool_act(user, I)
+ . = multitool_act(user, I)
if(TOOL_SCREWDRIVER)
- . |= screwdriver_act(user, I)
+ . = screwdriver_act(user, I)
if(TOOL_WRENCH)
- . |= wrench_act(user, I)
+ . = wrench_act(user, I)
if(TOOL_WIRECUTTER)
- . |= wirecutter_act(user, I)
+ . = wirecutter_act(user, I)
if(TOOL_WELDER)
- . |= welder_act(user, I)
+ . = welder_act(user, I)
if(TOOL_ANALYZER)
- . |= analyzer_act(user, I)
- if(. & COMPONENT_BLOCK_TOOL_ATTACK)
+ . = analyzer_act(user, I)
+ if(. || signal_result & COMPONENT_BLOCK_TOOL_ATTACK) //Either the proc or the signal handled the tool's events in some way.
return TRUE
-//! Tool-specific behavior procs. They send signals, so try to call ..()
+/atom/proc/process_recipes(mob/living/user, obj/item/I, list/processing_recipes)
+ //Only one recipe? use the first
+ if(processing_recipes.len == 1)
+ StartProcessingAtom(user, I, processing_recipes[1])
+ return
+ //Otherwise, select one with a radial
+ ShowProcessingGui(user, I, processing_recipes)
+
+///Creates the radial and processes the selected option
+/atom/proc/ShowProcessingGui(mob/living/user, obj/item/I, list/possible_options)
+ var/list/choices_to_options = list() //Dict of object name | dict of object processing settings
+ var/list/choices = list()
+
+ for(var/i in possible_options)
+ var/list/current_option = i
+ var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT]
+ choices_to_options[initial(current_option_type.name)] = current_option
+ var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state))
+ choices += list("[initial(current_option_type.name)]" = option_image)
+
+ var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE)
+
+ StartProcessingAtom(user, I, choices_to_options[pick])
+
+
+/atom/proc/StartProcessingAtom(mob/living/user, obj/item/I, list/chosen_option)
+ to_chat(user, "You start working on [src]")
+ if(I.use_tool(src, user, chosen_option[TOOL_PROCESSING_TIME], volume=50))
+ var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT]
+ for(var/i = 1 to chosen_option[TOOL_PROCESSING_AMOUNT])
+ new atom_to_create(loc)
+ to_chat(user, "You manage to create [chosen_option[TOOL_PROCESSING_AMOUNT]] [initial(atom_to_create.name)] from [src]")
+ qdel(src)
+ return
+
+/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/I, list/chosen_option, atom/original_atom)
+ return
+
+//! Tool-specific behavior procs.
///
///Crowbar act
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index df7c5ae431c5..f380bc6bfa52 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -1059,6 +1059,98 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
embed_chance_turf_mod = (!isnull(embedding["embed_chance_turf_mod"]) ? embedding["embed_chance_turf_mod"] : EMBED_CHANCE_TURF_MOD))
return TRUE
+/// How many different types of mats will be counted in a bite?
+#define MAX_MATS_PER_BITE 2
+
+/*
+ * On accidental consumption: when you somehow end up eating an item accidentally (currently, this is used for when items are hidden in food like bread or cake)
+ *
+ * The base proc will check if the item is sharp and has a decent force.
+ * Then, it checks the item's mat datums for the effects it applies afterwards.
+ * Then, it checks tiny items.
+ * After all that, it returns TRUE if the item is set to be discovered. Otherwise, it returns FALSE.
+ *
+ * This works similarily to /suicide_act: if you want an item to have a unique interaction, go to that item
+ * and give it an /on_accidental_consumption proc override. For a simple example of this, check out the nuke disk.
+ *
+ * Arguments
+ * * M - the mob accidentally consuming the item
+ * * user - the mob feeding M the item - usually, it's the same as M
+ * * source_item - the item that held the item being consumed - bread, cake, etc
+ * * discover_after - if the item will be discovered after being chomped (FALSE will usually mean it was swallowed, TRUE will usually mean it was bitten into and discovered)
+ */
+/obj/item/proc/on_accidental_consumption(mob/living/carbon/victim, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE)
+ if(is_sharp() && force >= 5) //if we've got something sharp with a decent force (ie, not plastic)
+ INVOKE_ASYNC(victim, TYPE_PROC_REF(/mob, emote), "scream")
+ victim.visible_message("[victim] looks like [victim.p_theyve()] just bit something they shouldn't have!", \
+ "OH GOD! Was that a crunch? That didn't feel good at all!!")
+
+ victim.apply_damage(max(15, force), BRUTE, BODY_ZONE_HEAD)
+ victim.losebreath += 2
+ if(tryEmbed(victim.get_bodypart(BODY_ZONE_CHEST), forced = TRUE)) //and if it embeds successfully in their chest, cause a lot of pain
+ victim.apply_damage(max(25, force*1.5), BRUTE, BODY_ZONE_CHEST)
+ victim.losebreath += 6
+ discover_after = FALSE
+ if(QDELETED(src)) // in case trying to embed it caused its deletion (say, if it's DROPDEL)
+ return
+ source_item?.reagents?.add_reagent(/datum/reagent/blood, 2)
+
+ else if(custom_materials?.len) //if we've got materials, lets see whats in it
+ /// How many mats have we found? You can only be affected by two material datums by default
+ var/found_mats = 0
+ /// How much of each material is in it? Used to determine if the glass should break
+ var/total_material_amount = 0
+
+ for(var/mats in custom_materials)
+ total_material_amount += custom_materials[mats]
+ if(found_mats >= MAX_MATS_PER_BITE)
+ continue //continue instead of break so we can finish adding up all the mats to the total
+
+ var/datum/material/discovered_mat = mats
+ if(discovered_mat.on_accidental_mat_consumption(victim, source_item))
+ found_mats++
+
+ //if there's glass in it and the glass is more than 60% of the item, then we can shatter it
+ if(custom_materials[getmaterialref(/datum/material/glass)] >= total_material_amount * 0.60)
+ if(prob(66)) //66% chance to break it
+ /// The glass shard that is spawned into the source item
+ var/obj/item/shard/broken_glass = new /obj/item/shard(loc)
+ broken_glass.name = "broken [name]"
+ broken_glass.desc = "This used to be \a [name], but it sure isn't anymore."
+ playsound(victim, "shatter", 25, TRUE)
+ qdel(src)
+ if(QDELETED(source_item))
+ broken_glass.on_accidental_consumption(victim, user)
+ else //33% chance to just "crack" it (play a sound) and leave it in the bread
+ playsound(victim, "shatter", 15, TRUE)
+ discover_after = FALSE
+
+ victim.adjust_disgust(33)
+ victim.visible_message(
+ "[victim] looks like [victim.p_theyve()] just bitten into something hard.", \
+ "Eugh! Did I just bite into something?")
+
+ else if(w_class == WEIGHT_CLASS_TINY) //small items like soap or toys that don't have mat datums
+ /// victim's chest (for cavity implanting the item)
+ var/obj/item/bodypart/chest/victim_cavity = victim.get_bodypart(BODY_ZONE_CHEST)
+ if(victim_cavity.cavity_item)
+ victim.vomit(5, FALSE, FALSE, distance = 0)
+ forceMove(drop_location())
+ to_chat(victim, "You vomit up a [name]! [source_item? "Was that in \the [source_item]?" : ""]")
+ else
+ victim.transferItemToLoc(src, victim, TRUE)
+ victim.losebreath += 2
+ victim_cavity.cavity_item = src
+ to_chat(victim, "You swallow hard. [source_item? "Something small was in \the [source_item]..." : ""]")
+ discover_after = FALSE
+
+ else
+ to_chat(victim, "[source_item? "Something strange was in the \the [source_item]..." : "I just bit something strange..."] ")
+
+ return discover_after
+
+#undef MAX_MATS_PER_BITE
+
// Update icons if this is being carried by a mob
/obj/item/wash(clean_types)
. = ..()
diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm
new file mode 100644
index 000000000000..b8233e0ecc76
--- /dev/null
+++ b/code/game/objects/items/food/_food.dm
@@ -0,0 +1,67 @@
+///Abstract class to allow us to easily create all the generic "normal" food without too much copy pasta of adding more components
+/obj/item/food
+ name = "food"
+ desc = "you eat this"
+ resistance_flags = FLAMMABLE
+ w_class = WEIGHT_CLASS_SMALL
+ icon = 'icons/obj/food/food.dmi'
+ icon_state = null
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ ///List of reagents this food gets on creation
+ var/list/food_reagents
+ ///Extra flags for things such as if the food is in a container or not
+ var/food_flags
+ ///Bitflag of the types of food this food is
+ var/foodtypes
+ ///Amount of volume the food can contain
+ var/max_volume
+ ///How long it will take to eat this food without any other modifiers
+ var/eat_time
+ ///Tastes to describe this food
+ var/list/tastes
+ ///Verbs used when eating this food in the to_chat messages
+ var/list/eatverbs
+ ///How much reagents per bite
+ var/bite_consumption
+ ///What you get if you microwave the food, this should be replaced once I fully re-work cooking.
+ var/microwaved_type
+ ///Type of atom thats spawned after eating this item
+ var/trash_type
+
+/obj/item/food/Initialize()
+ . = ..()
+ if(food_reagents)
+ food_reagents = string_assoc_list(food_reagents)
+ if(tastes)
+ tastes = string_assoc_list(tastes)
+ if(eatverbs)
+ eatverbs = string_list(eatverbs)
+ make_edible()
+ make_processable()
+ make_leave_trash()
+
+///This proc adds the edible component, overwrite this if you for some reason want to change some specific args like callbacks.
+/obj/item/food/proc/make_edible()
+ AddComponent(/datum/component/edible,\
+ initial_reagents = food_reagents,\
+ food_flags = food_flags,\
+ foodtypes = foodtypes,\
+ volume = max_volume,\
+ eat_time = eat_time,\
+ tastes = tastes,\
+ eatverbs = eatverbs,\
+ bite_consumption = bite_consumption,\
+ microwaved_type = microwaved_type,\
+ )
+
+
+///This proc handles processable elements, overwrite this if you want to add behavior such as slicing, forking, spooning, whatever, to turn the item into something else
+/obj/item/food/proc/make_processable()
+ return
+
+///This proc handles trash components, overwrite this if you want the object to spawn trash
+/obj/item/food/proc/make_leave_trash()
+ if(trash_type)
+ AddElement(/datum/element/food_trash, trash_type)
+ return
diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm
new file mode 100644
index 000000000000..87cddc63be1a
--- /dev/null
+++ b/code/game/objects/items/food/bread.dm
@@ -0,0 +1,412 @@
+
+/obj/item/food/bread
+ name = "bread?"
+ desc = "This shouldn't exist, report to codermonkeys"
+ icon = 'icons/obj/food/burgerbread.dmi'
+ max_volume = 80
+ tastes = list("bread" = 10)
+ foodtypes = GRAIN
+ eat_time = 3 SECONDS
+ /// type is spawned 5 at a time and replaces this bread loaf when processed by cutting tool
+ var/obj/item/food/breadslice/slice_type
+ /// so that the yield can change if it isnt 5
+ var/yield = 5
+
+/obj/item/food/bread/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/dunkable, 10)
+ AddComponent(/datum/component/food_storage)
+
+/obj/item/food/bread/make_processable()
+ if (slice_type)
+ AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE)
+ AddElement(/datum/element/processable, TOOL_SAW, slice_type, yield, 4 SECONDS, table_required = TRUE)
+
+/obj/item/food/breadslice
+ name = "breadslice?"
+ desc = "This shouldn't exist, report to codermonkeys"
+ icon = 'icons/obj/food/burgerbread.dmi'
+ foodtypes = GRAIN
+ food_flags = FOOD_FINGER_FOOD
+ eat_time = 0.5 SECONDS
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/breadslice/Initialize()
+ . = ..()
+ AddElement(/datum/element/dunkable, 10)
+
+/obj/item/food/bread/plain
+ name = "bread"
+ desc = "Some plain old earthen bread."
+ icon_state = "bread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 10
+ )
+ tastes = list("bread" = 10)
+ foodtypes = GRAIN
+ w_class = WEIGHT_CLASS_SMALL
+ slice_type = /obj/item/food/breadslice/plain
+
+/obj/item/food/breadslice/plain
+ name = "bread slice"
+ desc = "A slice of home."
+ icon_state = "breadslice"
+ foodtypes = GRAIN
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2
+ )
+
+/*
+ * REAL MOLDY FOOD. We just cant support it right now. Start porting after newfood is complete
+ *
+/obj/item/food/breadslice/moldy
+ name = "moldy 'bread' slice"
+ desc = "Entire stations have been ripped apart arguing whether this is still good to eat."
+ icon_state = "moldybreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2,
+ /datum/reagent/consumable/mold = 10,
+ )
+ tastes = list("decaying fungus" = 1)
+ foodtypes = GROSS
+ preserved_food = TRUE
+
+/obj/item/food/breadslice/moldy/bacteria
+ name = "bacteria-rich moldy 'bread' slice"
+ desc = "Something (possibly necroyeast) has caused this bread to rise in a macabre state of unlife. \
+ It lurchs about when unattended. You might want to locate a priest if you see this. Or maybe a flamethrower."
+
+/obj/item/food/breadslice/moldy/bacteria/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOLD, CELL_VIRUS_TABLE_GENERIC, rand(2, 4), 25)
+*/
+
+/obj/item/food/breadslice/moldy
+ name = "moldy bread slice"
+ desc = "Entire stations have been ripped apart over arguing whether this is still good to eat."
+ icon_state = "moldybreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2
+ )
+ tastes = list("decaying fungus" = 1)
+ foodtypes = GROSS
+
+/obj/item/food/bread/meat
+ name = "meatbread loaf"
+ desc = "The culinary base of every self-respecting eloquen/tg/entleman."
+ icon_state = "meatbread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "meat" = 10)
+ foodtypes = GRAIN | MEAT
+ slice_type = /obj/item/food/breadslice/meat
+
+/obj/item/food/breadslice/meat
+ name = "meatbread slice"
+ desc = "A slice of delicious meatbread."
+ icon_state = "meatbreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 2
+ )
+ tastes = list("bread" = 1, "meat" = 1)
+ foodtypes = GRAIN | MEAT
+
+/obj/item/food/bread/xenomeat
+ name = "xenomeatbread loaf"
+ desc = "Extra Heretical."
+ icon_state = "xenomeatbread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "acid" = 10)
+ foodtypes = GRAIN | MEAT
+ slice_type = /obj/item/food/breadslice/xenomeat
+
+/obj/item/food/breadslice/xenomeat
+ name = "xenomeatbread slice"
+ desc = "A slice of delicious meatbread. Extra Heretical."
+ icon_state = "xenobreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 2
+ )
+ tastes = list("bread" = 10, "acid" = 10)
+ foodtypes = GRAIN | MEAT
+
+/obj/item/food/bread/spidermeat
+ name = "spider meat loaf"
+ desc = "Reassuringly green meatloaf made from spider meat."
+ icon_state = "spidermeatbread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/toxin = 15,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "cobwebs" = 5)
+ foodtypes = GRAIN | MEAT | TOXIC
+ slice_type = /obj/item/food/breadslice/spidermeat
+
+/obj/item/food/breadslice/spidermeat
+ name = "spider meat bread slice"
+ desc = "A slice of meatloaf made from an animal that most likely still wants you dead."
+ icon_state = "xenobreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/toxin = 3,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("bread" = 10, "cobwebs" = 5)
+ foodtypes = GRAIN | MEAT | TOXIC
+
+/obj/item/food/bread/banana
+ name = "banana-nut bread"
+ desc = "A heavenly and filling treat."
+ icon_state = "bananabread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/banana = 20
+ )
+ tastes = list("bread" = 10) // bananjuice will also flavour
+ foodtypes = GRAIN | FRUIT
+ slice_type = /obj/item/food/breadslice/banana
+
+/obj/item/food/breadslice/banana
+ name = "banana-nut bread slice"
+ desc = "A slice of delicious banana bread."
+ icon_state = "bananabreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/banana = 4
+ )
+ tastes = list("bread" = 10)
+ foodtypes = GRAIN | FRUIT
+
+/obj/item/food/bread/tofu
+ name = "Tofubread"
+ desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
+ icon_state = "tofubread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "tofu" = 10)
+ foodtypes = GRAIN | VEGETABLES
+ slice_type = /obj/item/food/breadslice/tofu
+
+/obj/item/food/breadslice/tofu
+ name = "tofubread slice"
+ desc = "A slice of delicious tofubread."
+ icon_state = "tofubreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 2
+ )
+ tastes = list("bread" = 10, "tofu" = 10)
+ foodtypes = GRAIN | VEGETABLES
+
+/obj/item/food/bread/creamcheese
+ name = "cream cheese bread"
+ desc = "Just a schmear."
+ icon_state = "creamcheesebread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "cheese" = 10)
+ foodtypes = GRAIN | DAIRY
+ slice_type = /obj/item/food/breadslice/creamcheese
+
+/obj/item/food/breadslice/creamcheese
+ name = "cream cheese bread slice"
+ desc = "A slice of Brotherly love!"
+ icon_state = "creamcheesebreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/consumable/nutriment/vitamin = 2
+ )
+ tastes = list("bread" = 10, "cheese" = 10)
+ foodtypes = GRAIN | DAIRY
+
+/obj/item/food/bread/mimana
+ name = "mimana bread"
+ desc = "Best eaten in silence."
+ icon_state = "mimanabread"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/toxin/mutetoxin = 10,
+ /datum/reagent/consumable/nothing = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("bread" = 10, "silence" = 10)
+ foodtypes = GRAIN | FRUIT
+ slice_type = /obj/item/food/breadslice/mimana
+
+/obj/item/food/breadslice/mimana
+ name = "mimana bread slice"
+ desc = "A slice of silence!"
+ icon_state = "mimanabreadslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/toxin/mutetoxin = 2,
+ /datum/reagent/consumable/nothing = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 2
+ )
+ foodtypes = GRAIN | FRUIT
+
+/obj/item/food/breadslice/custom
+ name = "bread slice"
+ icon_state = "tofubreadslice"
+ foodtypes = GRAIN
+
+/obj/item/food/baguette
+ name = "baguette"
+ desc = "Bon appetit!"
+ icon = 'icons/obj/food/burgerbread.dmi'
+ icon_state = "baguette"
+ item_state = null
+ worn_icon_state = "baguette"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 8,
+ /datum/reagent/consumable/nutriment/vitamin = 3
+ )
+ bite_consumption = 3
+ w_class = WEIGHT_CLASS_NORMAL
+ slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
+ attack_verb = list("touche")
+ tastes = list("bread" = 1)
+ foodtypes = GRAIN
+
+/obj/item/food/baguette/mime
+ name = "French Baguette"
+ desc = "It would be a shame if it was consumed by someone unworthy..."
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/nothing = 2
+ )
+ bite_consumption = null
+
+/obj/item/food/garlicbread
+ name = "garlic bread"
+ desc = "Alas, it is limited."
+ icon = 'icons/obj/food/burgerbread.dmi'
+ icon_state = "garlicbread"
+ item_state = null
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 6,
+ /datum/reagent/consumable/garlic = 2
+ )
+ bite_consumption = 3
+ tastes = list("bread" = 1, "garlic" = 1, "butter" = 1)
+ foodtypes = GRAIN
+
+/obj/item/food/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 = ""
+ bite_consumption = 2
+
+/obj/item/food/deepfryholder/make_edible()
+ AddComponent(/datum/component/edible,\
+ initial_reagents = food_reagents,\
+ food_flags = food_flags,\
+ foodtypes = foodtypes,\
+ volume = max_volume,\
+ eat_time = eat_time,\
+ tastes = tastes,\
+ eatverbs = eatverbs,\
+ bite_consumption = bite_consumption,\
+ on_consume = CALLBACK(src, PROC_REF(On_Consume)))
+
+
+/obj/item/food/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
+ worn_icon_state = fried.worn_icon_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
+ inhand_x_dimension = fried.inhand_x_dimension
+ inhand_y_dimension = fried.inhand_y_dimension
+
+ if(!(SEND_SIGNAL(fried, COMSIG_ITEM_FRIED, src) & COMSIG_FRYING_HANDLED)) //If frying is handled by signal don't do the defaault behavior.
+ fried.forceMove(src)
+
+
+/obj/item/food/deepfryholder/Destroy()
+ if(contents)
+ QDEL_LIST(contents)
+ return ..()
+
+/obj/item/food/deepfryholder/proc/On_Consume(eater, feeder)
+ if(contents)
+ QDEL_LIST(contents)
+
+
+/obj/item/food/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."
+ 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)]%."
+ if(50 to 59)
+ add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY)
+ name = "deep-fried [name]"
+ desc = "[desc] Deep-fried to perfection."
+ if(60 to INFINITY)
+ add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY)
+ name = "\proper the physical manifestation of the very concept of fried foods"
+ desc = "A heavily-fried... something. Who can tell anymore?"
+ foodtypes |= FRIED
+
+/obj/item/food/butterbiscuit
+ name = "butter biscuit"
+ desc = "Well butter my biscuit!"
+ icon = 'icons/obj/food/food.dmi'
+ icon_state = "butterbiscuit"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("butter" = 1, "biscuit" = 1)
+ foodtypes = GRAIN | BREAKFAST
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/butterdog
+ name = "butterdog"
+ desc = "Made from exotic butters."
+ icon = 'icons/obj/food/food.dmi'
+ icon_state = "butterdog"
+ bite_consumption = 1
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("butter" = 1, "exotic butter" = 1)
+ foodtypes = GRAIN | DAIRY
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/butterdog/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/slippery, 8 SECONDS)
diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm
new file mode 100644
index 000000000000..7bfd1c7f0ec1
--- /dev/null
+++ b/code/game/objects/items/food/cake.dm
@@ -0,0 +1,614 @@
+/obj/item/food/cake
+ icon = 'icons/obj/food/piecake.dmi'
+ bite_consumption = 3
+ max_volume = 80
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5
+ )
+ tastes = list("cake" = 1)
+ foodtypes = GRAIN | DAIRY
+ /// type is spawned 5 at a time and replaces this cake when processed by cutting tool
+ var/obj/item/food/cakeslice/slice_type
+ /// changes yield of sliced cake, default for cake is 5
+ var/yield = 5
+
+/obj/item/food/cake/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/food_storage)
+
+/obj/item/food/cake/make_processable()
+ if (slice_type)
+ AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE)
+
+/obj/item/food/cakeslice
+ icon = 'icons/obj/food/piecake.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("cake" = 1)
+ foodtypes = GRAIN | DAIRY
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/cake/plain
+ name = "plain cake"
+ desc = "A plain cake, not a lie." //Many of the cakes seem to follow this desc scheme, so I am going to try and put either a hint about its contents, or a fun fact. Lets try to follow this.
+ icon_state = "plaincake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 30,
+ /datum/reagent/consumable/nutriment/vitamin = 7
+ )
+ tastes = list("sweetness" = 2, "cake" = 5)
+ foodtypes = GRAIN | DAIRY | SUGAR
+ slice_type = /obj/item/food/cakeslice/plain
+
+/obj/item/food/cakeslice/plain
+ name = "plain cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "plaincake_slice"
+ tastes = list("sweetness" = 2,"cake" = 5)
+ foodtypes = GRAIN | DAIRY | SUGAR
+
+/obj/item/food/cake/carrot
+ name = "carrot cake"
+ desc = "Scientifically proven to improve eyesight! Not a lie."
+ icon_state = "carrotcake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/medicine/oculine = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 5
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1)
+ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR
+ slice_type = /obj/item/food/cakeslice/carrot
+
+/obj/item/food/cakeslice/carrot
+ name = "carrot cake slice"
+ desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
+ icon_state = "carrotcake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/medicine/oculine = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1)
+ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR
+
+/obj/item/food/cake/brain
+ name = "brain cake"
+ desc = "Yeah... its actually made out of brain. I wish it were a lie."
+ icon_state = "braincake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 15,
+ /datum/reagent/medicine/mannitol = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 5
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1)
+ foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR
+ slice_type = /obj/item/food/cakeslice/brain
+
+/obj/item/food/cakeslice/brain
+ name = "brain cake slice"
+ desc = "Lemme tell you something about prions. THEY'RE DELICIOUS. A terrifying not-lie."
+ icon_state = "braincakeslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/medicine/mannitol = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1)
+ foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR
+
+/obj/item/food/cake/cheese
+ name = "cheese cake"
+ desc = "DANGEROUSLY cheesy."
+ icon_state = "cheesecake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 8
+ )
+ tastes = list("cake" = 4, "cream cheese" = 3)
+ foodtypes = GRAIN | DAIRY
+ slice_type = /obj/item/food/cakeslice/cheese
+
+/obj/item/food/cakeslice/cheese
+ name = "cheese cake slice"
+ desc = "Slice of pure cheestisfaction."
+ icon_state = "cheesecake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1.3
+ )
+ tastes = list("cake" = 4, "cream cheese" = 3)
+ foodtypes = GRAIN | DAIRY
+
+/obj/item/food/cake/orange
+ name = "orange cake"
+ desc = "A cake with added orange."
+ icon_state = "orangecake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/orange
+
+/obj/item/food/cakeslice/orange
+ name = "orange cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "orangecake_slice"
+ tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/lime
+ name = "lime cake"
+ desc = "A cake with added lime."
+ icon_state = "limecake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/lime
+
+/obj/item/food/cakeslice/lime
+ name = "lime cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "limecake_slice"
+ tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/lemon
+ name = "lemon cake"
+ desc = "A cake with added lemon."
+ icon_state = "lemoncake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 3, "sourness" = 1) //lemon cake is never as sour as it is sweet, have you ever actually eaten it?
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/lemon
+
+/obj/item/food/cakeslice/lemon
+ name = "lemon cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "lemoncake_slice"
+ tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/chocolate
+ name = "chocolate cake"
+ desc = "A cake with added chocolate."
+ icon_state = "chocolatecake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
+ foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR
+ slice_type = /obj/item/food/cakeslice/chocolate
+
+/obj/item/food/cakeslice/chocolate
+ name = "chocolate cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "chocolatecake_slice"
+ tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
+ foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR
+
+/obj/item/food/cake/birthday
+ name = "birthday cake"
+ desc = "Happy Birthday little clown..."
+ icon_state = "birthdaycake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/sprinkles = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 5
+ )
+ tastes = list("cake" = 5, "sweetness" = 1)
+ foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR
+ slice_type = /obj/item/food/cakeslice/birthday
+
+/obj/item/food/cake/birthday/microwave_act(obj/machinery/microwave/M) //super sekrit club
+ new /obj/item/clothing/head/hardhat/cakehat(get_turf(src))
+ qdel(src)
+
+/obj/item/food/cakeslice/birthday
+ name = "birthday cake slice"
+ desc = "A slice of your birthday."
+ icon_state = "birthdaycakeslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/sprinkles = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 1
+ )
+ tastes = list("cake" = 5, "sweetness" = 1)
+ foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR
+
+/obj/item/food/cake/birthday/energy
+ name = "energy cake"
+ desc = "Just enough calories for a whole nuclear operative squad."
+ icon_state = "energycake"
+ force = 5
+ hitsound = 'sound/weapons/blade1.ogg'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 10,
+ /datum/reagent/consumable/sprinkles = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/pwr_game = 10,
+ /datum/reagent/consumable/liquidelectricity = 10
+ )
+ tastes = list("cake" = 3, "a Vlad's Salad" = 1)
+ slice_type = /obj/item/food/cakeslice/birthday/energy
+
+/obj/item/food/cake/birthday/energy/microwave_act(obj/machinery/microwave/M) //super sekriter club
+ new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src))
+ qdel(src)
+
+/obj/item/food/cake/birthday/energy/proc/energy_bite(mob/living/user)
+ to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!")
+ user.apply_damage(30, BURN, BODY_ZONE_HEAD) // ITs an ENERGY sword, so it burns, duh
+ playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE)
+
+/obj/item/food/cake/birthday/energy/attack(mob/living/target_mob, mob/living/user)
+ . = ..()
+ if(HAS_TRAIT(user, TRAIT_PACIFISM) && target_mob != user) //Prevents pacifists from attacking others directly
+ return
+ energy_bite(target_mob, user)
+
+/obj/item/food/cakeslice/birthday/energy
+ name = "energy cake slice"
+ desc = "For the traitor on the go."
+ icon_state = "energycakeslice"
+ force = 2
+ hitsound = 'sound/weapons/blade1.ogg'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/sprinkles = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/pwr_game = 2,
+ /datum/reagent/consumable/liquidelectricity = 2
+ )
+ tastes = list("cake" = 3, "a Vlad's Salad" = 1)
+
+/obj/item/food/cakeslice/birthday/energy/proc/energy_bite(mob/living/user)
+ to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!")
+ user.apply_damage(18, BURN, BODY_ZONE_HEAD)
+ playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE)
+
+/obj/item/food/cakeslice/birthday/energy/attack(mob/living/target_mob, mob/living/user)
+ . = ..()
+ if(HAS_TRAIT(user, TRAIT_PACIFISM) && target_mob != user) //Prevents pacifists from attacking others directly
+ return
+ energy_bite(target_mob, user)
+
+/obj/item/food/cake/apple
+ name = "apple cake"
+ desc = "A cake centred with Apple."
+ icon_state = "applecake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/apple
+
+/obj/item/food/cakeslice/apple
+ name = "apple cake slice"
+ desc = "A slice of heavenly cake."
+ icon_state = "applecakeslice"
+ tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/slimecake
+ name = "Slime cake"
+ desc = "A cake made of slimes. Probably not electrified."
+ icon_state = "slimecake"
+ tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR
+ slice_type = /obj/item/food/cakeslice/slimecake
+
+/obj/item/food/cakeslice/slimecake
+ name = "slime cake slice"
+ desc = "A slice of slime cake."
+ icon_state = "slimecake_slice"
+ tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR
+
+/obj/item/food/cake/pumpkinspice
+ name = "pumpkin spice cake"
+ desc = "A hollow cake with real pumpkin."
+ icon_state = "pumpkinspicecake"
+ tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1)
+ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR
+ slice_type = /obj/item/food/cakeslice/pumpkinspice
+
+/obj/item/food/cakeslice/pumpkinspice
+ name = "pumpkin spice cake slice"
+ desc = "A spicy slice of pumpkin goodness."
+ icon_state = "pumpkinspicecakeslice"
+ tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1)
+ foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR
+
+/obj/item/food/cake/bsvc // blackberry strawberries vanilla cake
+ name = "blackberry and strawberry vanilla cake"
+ desc = "A plain cake, filled with assortment of blackberries and strawberries!"
+ icon_state = "blackbarry_strawberries_cake_vanilla_cake"
+ tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/bsvc
+
+/obj/item/food/cakeslice/bsvc
+ name = "blackberry and strawberry vanilla cake slice"
+ desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
+ icon_state = "blackbarry_strawberries_cake_vanilla_slice"
+ tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/bscc // blackbarry strawberries chocolate cake
+ name = "blackberry and strawberry chocolate cake"
+ desc = "A chocolate cake, filled with assortment of blackberries and strawberries!"
+ icon_state = "blackbarry_strawberries_cake_coco_cake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/cocoa = 5
+ )
+ tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/bscc
+
+/obj/item/food/cakeslice/bscc
+ name = "blackberry and strawberry chocolate cake slice"
+ desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
+ icon_state = "blackbarry_strawberries_cake_coco_slice"
+ tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/holy_cake
+ name = "angel food cake"
+ desc = "A cake made for angels and chaplains alike! Contains holy water."
+ icon_state = "holy_cake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 1,
+ /datum/reagent/consumable/nutriment/vitamin = 3,
+ /datum/reagent/water/holywater = 10
+ )
+ tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR
+ slice_type = /obj/item/food/cakeslice/holy_cake_slice
+
+/obj/item/food/cakeslice/holy_cake_slice
+ name = "angel food cake slice"
+ desc = "A slice of heavenly cake."
+ icon_state = "holy_cake_slice"
+ tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR
+
+/obj/item/food/cake/pound_cake
+ name = "pound cake"
+ desc = "A condensed cake made for filling people up quickly."
+ icon_state = "pound_cake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 60,
+ /datum/reagent/consumable/nutriment/vitamin = 5
+ )
+ tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD
+ slice_type = /obj/item/food/cakeslice/pound_cake_slice
+ yield = 10 //cause its so damn THICC (seriously these things are fucking huge a pound of each ingredient are you kidding)
+
+/obj/item/food/cakeslice/pound_cake_slice
+ name = "pound cake slice"
+ desc = "A slice of condensed cake made for filling people up quickly."
+ icon_state = "pound_cake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 9,
+ /datum/reagent/consumable/nutriment/vitamin = 0.5
+ )
+ tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD
+
+/obj/item/food/cake/hardware_cake
+ name = "hardware cake"
+ desc = "A quote on quote cake that is made with electronic boards and leaks acid..."
+ icon_state = "hardware_cake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/toxin/acid = 15,
+ /datum/reagent/oil = 15
+ )
+ tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
+ foodtypes = GRAIN | GROSS
+ slice_type = /obj/item/food/cakeslice/hardware_cake_slice
+
+/obj/item/food/cakeslice/hardware_cake_slice
+ name = "hardware cake slice"
+ desc = "A slice of electronic boards and some acid."
+ icon_state = "hardware_cake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/toxin/acid = 3,
+ /datum/reagent/oil = 3
+ )
+ tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
+ foodtypes = GRAIN | GROSS
+
+/obj/item/food/cake/vanilla_cake
+ name = "vanilla cake"
+ desc = "A vanilla frosted cake."
+ icon_state = "vanillacake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/sugar = 15,
+ /datum/reagent/consumable/vanilla = 15
+ )
+ tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
+ foodtypes = GRAIN | SUGAR | DAIRY
+ slice_type = /obj/item/food/cakeslice/vanilla_slice
+
+/obj/item/food/cakeslice/vanilla_slice
+ name = "vanilla cake slice"
+ desc = "A slice of vanilla frosted cake."
+ icon_state = "vanillacake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/sugar = 3,
+ /datum/reagent/consumable/vanilla = 3
+ )
+ tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
+ foodtypes = GRAIN | SUGAR | DAIRY
+
+/obj/item/food/cake/clown_cake
+ name = "clown cake"
+ desc = "A funny cake with a clown face on it."
+ icon_state = "clowncake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/banana = 15
+ )
+ tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
+ foodtypes = GRAIN | SUGAR | DAIRY
+ slice_type = /obj/item/food/cakeslice/clown_slice
+
+/obj/item/food/cakeslice/clown_slice
+ name = "clown cake slice"
+ desc = "A slice of bad jokes, and silly props."
+ icon_state = "clowncake_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/banana = 3
+ )
+ tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
+ foodtypes = GRAIN | SUGAR | DAIRY
+
+/obj/item/food/cake/trumpet
+ name = "spaceman's cake"
+ desc = "A spaceman's trumpet frosted cake."
+ icon_state = "trumpetcake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/medicine/polypyr = 15,
+ /datum/reagent/consumable/cream = 5,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/berryjuice = 5
+ )
+ tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/trumpet
+
+/obj/item/food/cakeslice/trumpet
+ name = "spaceman's cake"
+ desc = "A spaceman's trumpet frosted cake."
+ icon_state = "trumpetcakeslice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/medicine/polypyr = 3,
+ /datum/reagent/consumable/cream = 1,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/berryjuice = 1
+ )
+ tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cake/brioche
+ name = "brioche cake"
+ desc = "A ring of sweet, glazed buns."
+ icon_state = "briochecake"
+ tastes = list("cake" = 4, "butter" = 2, "cream" = 1)
+ foodtypes = GRAIN | DAIRY | SUGAR
+ slice_type = /obj/item/food/cakeslice/brioche
+ yield = 6
+
+/obj/item/food/cakeslice/brioche
+ name = "brioche cake slice"
+ desc = "Delicious sweet-bread. Who needs anything else?"
+ icon_state = "briochecake_slice"
+
+/*
+/obj/item/food/cake/pavlova
+ name = "pavlova"
+ desc = "A sweet berry pavlova. Invented in New Zealand, but named after a Russian ballerina... And scientifically proven to be the best at dinner parties!"
+ icon_state = "pavlova"
+ tastes = list("meringue" = 5, "creaminess" = 1, "berries" = 1)
+ foodtypes = DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/pavlova
+
+/obj/item/food/cake/pavlova/nuts
+ name = "pavlova with nuts"
+ foodtypes = NUTS | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/pavlova/nuts
+
+/obj/item/food/cakeslice/pavlova
+ name = "pavlova slice"
+ desc = "A cracked slice of pavlova stacked with berries. \
+ You even got it sliced in such a way that more berries ended up on your slice, how delightfully devilish."
+ icon_state = "pavlova_slice"
+ tastes = list("meringue" = 5, "creaminess" = 1, "berries" = 1)
+ foodtypes = DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cakeslice/pavlova/nuts
+ foodtypes = NUTS | FRUIT | SUGAR
+
+/obj/item/food/cake/fruit
+ name = "english fruitcake"
+ desc = "A proper good cake, innit?"
+ icon_state = "fruitcake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 15,
+ /datum/reagent/consumable/sugar = 10,
+ /datum/reagent/consumable/cherryjelly = 5,
+ )
+ tastes = list("dried fruit" = 5, "treacle" = 2, "christmas" = 2)
+ force = 7
+ throwforce = 7
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ slice_type = /obj/item/food/cakeslice/fruit
+
+/obj/item/food/cakeslice/fruit
+ name = "english fruitcake slice"
+ desc = "A proper good slice, innit?"
+ icon_state = "fruitcake_slice1"
+ base_icon_state = "fruitcake_slice"
+ tastes = list("dried fruit" = 5, "treacle" = 2, "christmas" = 2)
+ force = 2
+ throwforce = 2
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/food/cakeslice/fruit/Initialize(mapload)
+ . = ..()
+ icon_state = "[base_icon_state][rand(1,3)]"
+
+/obj/item/food/cake/plum
+ name = "plum cake"
+ desc = "A cake centred with Plums."
+ icon_state = "plumcake"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 20,
+ /datum/reagent/consumable/nutriment/vitamin = 10,
+ /datum/reagent/impurity/rosenol = 8,
+ )
+ tastes = list("cake" = 5, "sweetness" = 1, "plum" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+ venue_value = FOOD_PRICE_CHEAP
+ slice_type = /obj/item/food/cakeslice/plum
+
+/obj/item/food/cakeslice/plum
+ name = "plum cake slice"
+ desc = "A slice of plum cake."
+ icon_state = "plumcakeslice"
+ tastes = list("cake" = 5, "sweetness" = 1, "plum" = 2)
+ foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
+*/
diff --git a/code/game/objects/items/food/spaghetti.dm b/code/game/objects/items/food/spaghetti.dm
new file mode 100644
index 000000000000..077bde7f65be
--- /dev/null
+++ b/code/game/objects/items/food/spaghetti.dm
@@ -0,0 +1,137 @@
+/obj/item/food/spaghetti
+ icon = 'icons/obj/food/pizzaspaghetti.dmi'
+ food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
+ foodtypes = GRAIN
+
+/obj/item/food/spaghetti/Initialize()
+ . = ..()
+ if(!microwaved_type) // This isn't cooked, why would you put uncooked spaghetti in your pocket?
+ var/list/display_message = list(
+ "Something wet falls out of their pocket and hits the ground. Is that... [name]?",
+ "Oh shit! All your pocket [name] fell out!")
+ AddComponent(/datum/component/spill, display_message, 'sound/effects/splat.ogg')
+
+/obj/item/food/spaghetti/raw
+ name = "spaghetti"
+ desc = "Now that's a nic'e pasta!"
+ icon_state = "spaghetti"
+ tastes = list("pasta" = 1)
+ microwaved_type = /obj/item/food/spaghetti/boiledspaghetti
+
+/obj/item/food/spaghetti/boiledspaghetti
+ name = "boiled spaghetti"
+ desc = "A plain dish of noodles, this needs more ingredients."
+ icon_state = "spaghettiboiled"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
+ microwaved_type = null
+
+/obj/item/food/spaghetti/pastatomato
+ name = "spaghetti"
+ desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"
+ icon_state = "pastatomato"
+ trash_type = /obj/item/trash/plate
+ bite_consumption = 4
+ food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "tomato" = 1)
+ foodtypes = GRAIN | VEGETABLES
+
+/obj/item/food/spaghetti/copypasta
+ name = "copypasta"
+ desc = "You probably shouldn't try this, you always hear people talking about how bad it is..."
+ icon_state = "copypasta"
+ trash_type = /obj/item/trash/plate
+ bite_consumption = 4
+ food_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/consumable/tomatojuice = 20, /datum/reagent/consumable/nutriment/vitamin = 8)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "tomato" = 1)
+ foodtypes = GRAIN | VEGETABLES
+
+/obj/item/food/spaghetti/meatballspaghetti
+ name = "spaghetti and meatballs"
+ desc = "Now that's a nic'e meatball!"
+ icon_state = "meatballspaghetti"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 2)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "meat" = 1)
+ foodtypes = GRAIN | MEAT
+
+/obj/item/food/spaghetti/spesslaw
+ name = "spesslaw"
+ desc = "A lawyers favourite."
+ icon_state = "spesslaw"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 3)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "meat" = 1)
+
+/obj/item/food/spaghetti/chowmein
+ name = "chow mein"
+ desc = "A nice mix of noodles and fried vegetables."
+ icon_state = "chowmein"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 6)
+ microwaved_type = null
+ tastes = list("noodle" = 1, "tomato" = 1)
+
+/obj/item/food/spaghetti/beefnoodle
+ name = "beef noodle"
+ desc = "Nutritious, beefy and noodly."
+ icon_state = "beefnoodle"
+ trash_type = /obj/item/reagent_containers/glass/bowl
+ food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/liquidgibs = 3)
+ microwaved_type = null
+ tastes = list("noodle" = 1, "meat" = 1)
+ foodtypes = GRAIN | MEAT
+
+/obj/item/food/spaghetti/butternoodles
+ name = "butter noodles"
+ desc = "Noodles covered in savory butter. Simple and slippery, but delicious."
+ icon_state = "butternoodles"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 9, /datum/reagent/consumable/nutriment/vitamin = 2)
+ microwaved_type = null
+ tastes = list("noodle" = 1, "butter" = 1)
+ foodtypes = GRAIN | DAIRY
+
+/obj/item/food/spaghetti/kasespatzle
+ name = "käsespätzle"
+ desc = "A special kind of pasta made with eggs, served with tasty cheese."
+ icon_state = "kasespatzle"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 4)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "cheese" = 1, "egg" = 1)
+ foodtypes = GRAIN | DAIRY
+
+/obj/item/food/spaghetti/spaghettinapolitan
+ name = "spaghetti napolitan"
+ desc = "The only excuse to ever put ketchup into your spaghetti."
+ icon_state = "spaghettinapolitan"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 6)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "ketchup" = 1, "sausage" = 1)
+ foodtypes = GRAIN | MEAT | VEGETABLES
+
+/obj/item/food/spaghetti/lasagna
+ name = "lasagna"
+ desc = "Somewhere, in some different universe, a cat is smoking your pipe."
+ icon_state = "lasagna"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 5, /datum/reagent/consumable/nutriment/vitamin = 4)
+ microwaved_type = null
+ tastes = list("pasta" = 1, "tomato" = 1, "cheese" = 1, "mondays" = 1)
+ foodtypes = GRAIN | DAIRY | VEGETABLES | MEAT
+
+/obj/item/food/spaghetti/glassnoodles
+ name = "glass noodles"
+ desc = "Noodles so transparent, you can see through them!"
+ icon_state = "glassnoodles"
+ trash_type = /obj/item/trash/plate
+ food_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 6)
+ microwaved_type = null
+ tastes = list("noodle" = 1, "sweetness" = 1, "tofu" = 1)
+ foodtypes = GRAIN | VEGETABLES
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 2732e0d37719..b7b5b27697d2 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -85,6 +85,7 @@
item_flags = EYE_STAB
var/bayonet = FALSE //Can this be attached to a gun?
custom_price = 250
+ tool_behaviour = TOOL_KNIFE
/obj/item/kitchen/knife/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index dc3d2deff0ba..2cc81075125c 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -515,6 +515,14 @@
/obj/item/storage/bag/bio/holding/ComponentInitialize()
. = ..()
- var/datum/component/storage/storage = GetComponent(/datum/component/storage)
- storage.max_combined_w_class = INFINITY
- storage.max_items = 150
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.max_combined_w_class = 32
+ STR.max_items = 32
+ STR.display_numerical_stacking = FALSE
+ STR.can_hold = typecacheof (list( /obj/item/mail,
+ /obj/item/small_delivery,
+ /obj/item/paper,
+ /obj/item/reagent_containers/food/condiment/milk,
+ /obj/item/food/bread/plain
+ ))
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 157f9c611f30..b4c4fef265fa 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -503,7 +503,7 @@
/obj/item/reagent_containers/food/snacks/cheesynachos,
/obj/item/reagent_containers/food/snacks/cubannachos,
/obj/item/reagent_containers/food/snacks/nugget,
- /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato,
+ /obj/item/food/spaghetti/pastatomato,
/obj/item/reagent_containers/food/snacks/rofflewaffles,
/obj/item/reagent_containers/food/snacks/donkpocket,
/obj/item/reagent_containers/food/drinks/soda_cans/cola,
diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm
index d0e946ba2a6e..969a41601fbb 100644
--- a/code/modules/cargo/bounties/chef.dm
+++ b/code/modules/cargo/bounties/chef.dm
@@ -2,7 +2,7 @@
name = "Birthday Cake"
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
reward = 4000
- wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday)
+ wanted_types = list(/obj/item/food/cake/birthday, /obj/item/food/cakeslice/birthday)
/datum/bounty/item/chef/soup
name = "Soup"
@@ -43,7 +43,7 @@
name = "Bread"
description = "Problems with central planning have led to bread prices skyrocketing. Ship some bread to ease tensions."
reward = 1000
- wanted_types = list(/obj/item/reagent_containers/food/snacks/store/bread, /obj/item/reagent_containers/food/snacks/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/rawpastrybase)
+ wanted_types = list(/obj/item/food/bread, /obj/item/food/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/rawpastrybase)
/datum/bounty/item/chef/pie
name = "Pie"
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 64bb4fdae667..73d3519a138d 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -10,7 +10,7 @@
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
pickup_sound = 'sound/items/handling/bottle_pickup.ogg'
drop_sound = 'sound/items/handling/bottle_drop.ogg'
- reagent_flags = OPENCONTAINER | DUNKABLE
+ reagent_flags = OPENCONTAINER | DUNKABLE | DUNKABLE
var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index c4daa88869a7..bdfaff13e0bb 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -42,7 +42,7 @@
to_chat(user, "The ingredient is too big for [src]!")
else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume))
to_chat(user, "You can't add more ingredients to [src]!")
- else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(I, /obj/item/reagent_containers/food/snacks/cakeslice/custom))
+ else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom))
to_chat(user, "Adding [I.name] to [src] would make a mess.")
else
if(!user.transferItemToLoc(I, src))
@@ -161,27 +161,6 @@
icon_state = "custburg"
foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/customizable/bread
- name = "bread"
- ingMax = 6
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/custom
- slices_num = 5
- icon = 'icons/obj/food/burgerbread.dmi'
- icon_state = "tofubread"
- foodtype = GRAIN
-
-
-/obj/item/reagent_containers/food/snacks/customizable/cake
- name = "cake"
- ingMax = 6
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/custom
- slices_num = 5
- icon = 'icons/obj/food/piecake.dmi'
- icon_state = "plaincake"
- foodtype = GRAIN | DAIRY
-
-
/obj/item/reagent_containers/food/snacks/customizable/kebab
name = "kebab"
desc = "Delicious food on a stick."
@@ -230,43 +209,6 @@
icon_state = "bowl"
-/obj/item/reagent_containers/food/snacks/customizable/sandwich
- name = "toast"
- desc = "A timeless classic."
- ingredients_placement = INGREDIENTS_STACK
- icon = 'icons/obj/food/burgerbread.dmi'
- icon_state = "breadslice"
- var/finished = 0
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/customizable/sandwich/initialize_custom_food(obj/item/reagent_containers/BASE, obj/item/I, mob/user)
- icon_state = BASE.icon_state
- ..()
-
-/obj/item/reagent_containers/food/snacks/customizable/sandwich/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/reagent_containers/food/snacks/breadslice)) //we're finishing the custom food.
- var/obj/item/reagent_containers/food/snacks/breadslice/BS = I
- if(finished)
- return
- to_chat(user, "You finish the [src.name].")
- finished = 1
- name = "[customname] sandwich"
- BS.reagents.trans_to(src, BS.reagents.total_volume, transfered_by = user)
- ingMax = ingredients.len //can't add more ingredients after that
- var/mutable_appearance/TOP = mutable_appearance(icon, "[BS.icon_state]")
- TOP.pixel_y = 2 * ingredients.len + 3
- add_overlay(TOP)
- if(istype(BS, /obj/item/reagent_containers/food/snacks/breadslice/custom))
- var/mutable_appearance/filling = new(icon, "[initial(BS.icon_state)]_filling")
- filling.color = BS.filling_color
- filling.pixel_y = 2 * ingredients.len + 3
- add_overlay(filling)
- qdel(BS)
- return
- else
- ..()
-
-
/obj/item/reagent_containers/food/snacks/customizable/soup
name = "soup"
desc = "A bowl with liquid and... stuff in it."
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index 2dd04174ba85..fb3525a795bb 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -45,7 +45,6 @@ All foods are distributed among various categories. Use common sense.
var/eatverb
var/dried_type = null
var/dry = 0
- var/dunk_amount = 10 // how much reagent is transferred per dunk
var/cooked_type = null //for microwave cooking. path of the resulting item after microwaving
var/filling_color = "#FFFFFF" //color to use when added to custom food.
var/custom_food_type = null //for food customizing. path of the custom food to create
@@ -56,6 +55,16 @@ All foods are distributed among various categories. Use common sense.
//Placeholder for effect that trigger on eating that aren't tied to reagents.
+/obj/item/reagent_containers/food/snacks/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_ITEM_FRIED, PROC_REF(on_fried))
+
+
+/obj/item/reagent_containers/food/snacks/proc/on_fried(fry_object)
+ reagents.trans_to(fry_object, reagents.total_volume)
+ qdel()
+ return COMSIG_FRYING_HANDLED
+
/obj/item/reagent_containers/food/snacks/add_initial_reagents()
if(tastes && tastes.len)
if(list_reagents)
@@ -174,7 +183,7 @@ All foods are distributed among various categories. Use common sense.
if(S.w_class > WEIGHT_CLASS_SMALL)
to_chat(user, "[S] is too big for [src]!")
return 0
- if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(W, /obj/item/reagent_containers/food/snacks/cakeslice/custom))
+ if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom))
to_chat(user, "[src] can't be filled with [S]!")
return 0
if(contents.len >= 20)
@@ -331,31 +340,14 @@ All foods are distributed among various categories. Use common sense.
M.emote(sattisfaction_text)
qdel(src)
-
// //////////////////////////////////////////////Store////////////////////////////////////////
/// All the food items that can store an item inside itself, like bread or cake.
/obj/item/reagent_containers/food/snacks/store
w_class = WEIGHT_CLASS_NORMAL
- var/stored_item = 0
-/obj/item/reagent_containers/food/snacks/store/attackby(obj/item/W, mob/user, params)
- ..()
- if(W.w_class <= WEIGHT_CLASS_SMALL & !istype(W, /obj/item/reagent_containers/food/snacks)) //can't slip snacks inside, they're used for custom foods.
- if(W.get_sharpness())
- return 0
- if(stored_item)
- return 0
- if(!iscarbon(user))
- return 0
- if(contents.len >= 20)
- to_chat(user, "[src] is full.")
- return 0
- to_chat(user, "You slip [W] inside [src].")
- user.transferItemToLoc(W, src)
- add_fingerprint(user)
- contents += W
- stored_item = 1
- return 1 // no afterattack here
+/obj/item/reagent_containers/food/snacks/store/Initialize()
+ . = ..()
+ AddComponent(/datum/component/food_storage)
/obj/item/reagent_containers/food/snacks/MouseDrop(atom/over)
var/turf/T = get_turf(src)
diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm
index 9567690dc71c..4f5f06379927 100644
--- a/code/modules/food_and_drinks/food/snacks/dough.dm
+++ b/code/modules/food_and_drinks/food/snacks/dough.dm
@@ -7,7 +7,7 @@
desc = "A piece of dough."
icon = 'icons/obj/food/food_ingredients.dmi'
icon_state = "dough"
- cooked_type = /obj/item/reagent_containers/food/snacks/store/bread/plain
+ cooked_type = /obj/item/food/bread/plain
list_reagents = list(/datum/reagent/consumable/nutriment = 6)
w_class = WEIGHT_CLASS_NORMAL
tastes = list("dough" = 1)
@@ -82,7 +82,7 @@
desc = "Cook it to get a cake."
icon = 'icons/obj/food/food_ingredients.dmi'
icon_state = "cakebatter"
- cooked_type = /obj/item/reagent_containers/food/snacks/store/cake/plain
+ cooked_type = /obj/item/food/cake/plain
list_reagents = list(/datum/reagent/consumable/nutriment = 9)
w_class = WEIGHT_CLASS_NORMAL
tastes = list("batter" = 1)
diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm
deleted file mode 100644
index 13342a968900..000000000000
--- a/code/modules/food_and_drinks/food/snacks_bread.dm
+++ /dev/null
@@ -1,302 +0,0 @@
-
-/obj/item/reagent_containers/food/snacks/store/bread
- icon = 'icons/obj/food/burgerbread.dmi'
- volume = 80
- slices_num = 5
- tastes = list("bread" = 10)
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/store/bread/Initialize()
- . = ..()
- AddElement(/datum/element/dunkable, 10)
-
-/obj/item/reagent_containers/food/snacks/breadslice
- icon = 'icons/obj/food/burgerbread.dmi'
- bitesize = 2
- custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/sandwich
- filling_color = "#FFA500"
- list_reagents = list(/datum/reagent/consumable/nutriment = 2)
- slot_flags = ITEM_SLOT_HEAD
- customfoodfilling = 0 //to avoid infinite bread-ception
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/breadslice/Initialize()
- . = ..()
- AddElement(/datum/element/dunkable, 10)
-
-/obj/item/reagent_containers/food/snacks/store/bread/plain
- name = "bread"
- desc = "Some plain old earthen bread."
- icon_state = "bread"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 7)
- list_reagents = list(/datum/reagent/consumable/nutriment = 10)
- custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/bread
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/plain
- tastes = list("bread" = 10)
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/breadslice/plain
- name = "bread slice"
- desc = "A slice of home."
- icon_state = "breadslice"
- customfoodfilling = 1
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/breadslice/moldy
- name = "moldy bread slice"
- desc = "Entire stations have been ripped apart over arguing whether this is still good to eat."
- icon_state = "moldybreadslice"
- customfoodfilling = 0
- bonus_reagents = list(/datum/reagent/consumable/mold = 10)
- tastes = list("decaying fungus" = 1)
- foodtype = GROSS
-
-/obj/item/reagent_containers/food/snacks/store/bread/meat
- name = "meatbread loaf"
- desc = "The culinary base of every self-respecting eloquen/tg/entleman."
- icon_state = "meatbread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/meat
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "meat" = 10)
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/breadslice/meat
- name = "meatbread slice"
- desc = "A slice of delicious meatbread."
- icon_state = "meatbreadslice"
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/store/bread/xenomeat
- name = "xenomeatbread loaf"
- desc = "The culinary base of every self-respecting eloquen/tg/entleman. Extra Heretical."
- icon_state = "xenomeatbread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/xenomeat
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "acid" = 10)
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/breadslice/xenomeat
- name = "xenomeatbread slice"
- desc = "A slice of delicious meatbread. Extra Heretical."
- icon_state = "xenobreadslice"
- filling_color = "#32CD32"
- list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1)
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/store/bread/spidermeat
- name = "spider meat loaf"
- desc = "Reassuringly green meatloaf made from spider meat."
- icon_state = "spidermeatbread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/spidermeat
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/toxin = 15, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "cobwebs" = 5)
- foodtype = GRAIN | MEAT | TOXIC
-
-/obj/item/reagent_containers/food/snacks/breadslice/spidermeat
- name = "spider meat bread slice"
- desc = "A slice of meatloaf made from an animal that most likely still wants you dead."
- icon_state = "spiderbreadslice"
- filling_color = "#7CFC00"
- list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin = 3, /datum/reagent/consumable/nutriment/vitamin = 1)
- foodtype = GRAIN | MEAT | TOXIC
-
-/obj/item/reagent_containers/food/snacks/store/bread/banana
- name = "banana-nut bread"
- desc = "A heavenly and filling treat."
- icon_state = "bananabread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/banana
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/banana = 20)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/banana = 20)
- tastes = list("bread" = 10) // bananjuice will also flavour
- foodtype = GRAIN | FRUIT
-
-
-/obj/item/reagent_containers/food/snacks/breadslice/banana
- name = "banana-nut bread slice"
- desc = "A slice of delicious banana bread."
- icon_state = "bananabreadslice"
- filling_color = "#FFD700"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/banana = 4)
- foodtype = GRAIN | FRUIT
-
-/obj/item/reagent_containers/food/snacks/store/bread/tofu
- name = "Tofubread"
- desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
- icon_state = "tofubread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/tofu
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "tofu" = 10)
- foodtype = GRAIN | VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/breadslice/tofu
- name = "tofubread slice"
- desc = "A slice of delicious tofubread."
- icon_state = "tofubreadslice"
- filling_color = "#FF8C00"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1)
- foodtype = GRAIN | VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/store/bread/creamcheese
- name = "cream cheese bread"
- desc = "Yum yum yum!"
- icon_state = "creamcheesebread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/creamcheese
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "cheese" = 10)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/breadslice/creamcheese
- name = "cream cheese bread slice"
- desc = "A slice of yum!"
- icon_state = "creamcheesebreadslice"
- filling_color = "#FF8C00"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/bread/mimana
- name = "mimana bread"
- desc = "Best eaten in silence."
- icon_state = "mimanabread"
- slice_path = /obj/item/reagent_containers/food/snacks/breadslice/mimana
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("bread" = 10, "silence" = 10)
- foodtype = GRAIN | FRUIT
-
-/obj/item/reagent_containers/food/snacks/breadslice/mimana
- name = "mimana bread slice"
- desc = "A slice of silence!"
- icon_state = "mimanabreadslice"
- filling_color = "#C0C0C0"
- list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/toxin/mutetoxin = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- foodtype = GRAIN | FRUIT
-
-/obj/item/reagent_containers/food/snacks/breadslice/custom
- name = "bread slice"
- icon_state = "tofubreadslice"
- filling_color = "#FFFFFF"
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/baguette
- name = "baguette"
- desc = "Bon appetit!"
- icon = 'icons/obj/food/burgerbread.dmi'
- icon_state = "baguette"
- item_state = "baguette"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2)
- list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1)
- bitesize = 3
- w_class = WEIGHT_CLASS_NORMAL
- slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
- attack_verb = list("touche'd")
- tastes = list("bread" = 1)
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/garlicbread
- name = "garlic bread"
- desc = "Alas, it is limited."
- icon = 'icons/obj/food/burgerbread.dmi'
- icon_state = "garlicbread"
- item_state = "garlicbread"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 2)
- list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/garlic = 2)
- bitesize = 3
- 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
-
-/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
- inhand_x_dimension = fried.inhand_x_dimension
- inhand_y_dimension = fried.inhand_y_dimension
-
- if(istype(fried, /obj/item/reagent_containers/food/snacks))
- fried.reagents.trans_to(src, fried.reagents.total_volume)
- qdel(fried)
- else
- fried.forceMove(src)
-
-/obj/item/reagent_containers/food/snacks/deepfryholder/Destroy()
- if(contents)
- QDEL_LIST(contents)
- . = ..()
-
-/obj/item/reagent_containers/food/snacks/deepfryholder/On_Consume(mob/living/eater)
- if(contents)
- QDEL_LIST(contents)
- ..()
-
-/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."
- 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)]%."
- if(50 to 59)
- add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY)
- name = "deep-fried [name]"
- desc = "[desc] Deep-fried to perfection."
- if(60 to INFINITY)
- add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY)
- name = "\proper the physical manifestation of the very concept of fried foods"
- desc = "A heavily-fried...something. Who can tell anymore?"
- filling_color = color
- foodtype |= FRIED
-
-/obj/item/reagent_containers/food/snacks/butterbiscuit
- name = "butter biscuit"
- desc = "Well butter my biscuit!"
- icon = 'icons/obj/food/food.dmi'
- icon_state = "butterbiscuit"
- filling_color = "#F0E68C"
- list_reagents = list(/datum/reagent/consumable/nutriment = 5)
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("butter" = 1, "biscuit" = 1)
- foodtype = GRAIN | BREAKFAST
-
-/obj/item/reagent_containers/food/snacks/butterdog
- name = "butterdog"
- desc = "Made from exotic butters."
- icon = 'icons/obj/food/food.dmi'
- icon_state = "butterdog"
- bitesize = 1
- filling_color = "#F1F49A"
- list_reagents = list(/datum/reagent/consumable/nutriment = 5)
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("butter", "exotic butter")
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/butterdog/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/slippery, 80)
diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm
deleted file mode 100644
index a048fb0e4371..000000000000
--- a/code/modules/food_and_drinks/food/snacks_cake.dm
+++ /dev/null
@@ -1,431 +0,0 @@
-/obj/item/reagent_containers/food/snacks/store/cake
- icon = 'icons/obj/food/piecake.dmi'
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/plain
- slices_num = 5
- bitesize = 3
- volume = 80
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("cake" = 1)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/cakeslice
- icon = 'icons/obj/food/piecake.dmi'
- trash = /obj/item/trash/plate
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1)
- customfoodfilling = 0 //to avoid infinite cake-ception
- tastes = list("cake" = 1)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/cake/plain
- name = "plain cake"
- desc = "A plain cake, not a lie."
- icon_state = "plaincake"
- custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/cake
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2)
- tastes = list("sweetness" = 2,"cake" = 5)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/plain
- name = "plain cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "plaincake_slice"
- filling_color = "#FFD700"
- customfoodfilling = 1
- tastes = list("sweetness" = 2,"cake" = 5)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/carrot
- name = "carrot cake"
- desc = "A favorite desert of a certain wascally wabbit. Not a lie."
- icon_state = "carrotcake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/carrot
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/medicine/oculine = 5, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/oculine = 10, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1)
- foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/carrot
- name = "carrot cake slice"
- desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
- icon_state = "carrotcake_slice"
- filling_color = "#FFA500"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/oculine = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1)
- foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/brain
- name = "brain cake"
- desc = "A squishy cake-thing."
- icon_state = "braincake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brain
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 10)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1)
- foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/brain
- name = "brain cake slice"
- desc = "Lemme tell you something about prions. THEY'RE DELICIOUS."
- icon_state = "braincakeslice"
- filling_color = "#FF69B4"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/mannitol = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1)
- foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/cheese
- name = "cheese cake"
- desc = "DANGEROUSLY cheesy."
- icon_state = "cheesecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/cheese
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 4, "cream cheese" = 3)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/cakeslice/cheese
- name = "cheese cake slice"
- desc = "Slice of pure cheestisfaction."
- icon_state = "cheesecake_slice"
- filling_color = "#FFFACD"
- tastes = list("cake" = 4, "cream cheese" = 3)
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/cake/orange
- name = "orange cake"
- desc = "A cake with added orange."
- icon_state = "orangecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/orange
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/orange
- name = "orange cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "orangecake_slice"
- filling_color = "#FFA500"
- tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/lime
- name = "lime cake"
- desc = "A cake with added lime."
- icon_state = "limecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lime
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/lime
- name = "lime cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "limecake_slice"
- filling_color = "#00FF00"
- tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/lemon
- name = "lemon cake"
- desc = "A cake with added lemon."
- icon_state = "lemoncake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lemon
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/lemon
- name = "lemon cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "lemoncake_slice"
- filling_color = "#FFEE00"
- tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/chocolate
- name = "chocolate cake"
- desc = "A cake with added chocolate."
- icon_state = "chocolatecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/chocolate
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
- foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/chocolate
- name = "chocolate cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "chocolatecake_slice"
- filling_color = "#A0522D"
- tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
- foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday
- name = "birthday cake"
- desc = "Happy Birthday little clown..."
- icon_state = "birthdaycake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5)
- list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("cake" = 5, "sweetness" = 1)
- foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/microwave_act(obj/machinery/microwave/M) //super sekrit club
- new /obj/item/clothing/head/hardhat/cakehat(get_turf(src))
- qdel(src)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday
- name = "birthday cake slice"
- desc = "A slice of your birthday."
- icon_state = "birthdaycakeslice"
- filling_color = "#DC143C"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("cake" = 5, "sweetness" = 1)
- foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy
- name = "energy cake"
- desc = "Just enough calories for a whole nuclear operative squad."
- icon_state = "energycake"
- force = 5
- hitsound = 'sound/weapons/blade1.ogg'
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy
- list_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/pwr_game = 10, /datum/reagent/consumable/liquidelectricity = 10)
- tastes = list("cake" = 3, "a Vlad's Salad" = 1)
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/proc/energy_bite(mob/living/user)
- to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!")
- user.apply_damage(30,BRUTE,BODY_ZONE_HEAD)
- playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE)
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/attack(mob/living/M, mob/living/user)
- . = ..()
- if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly
- return
- energy_bite(M, user)
-
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/microwave_act(obj/machinery/microwave/M) //super sekriter club
- new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src))
- qdel(src)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy
- name = "energy cake slice"
- desc = "For the traitor on the go."
- icon_state = "energycakeslice"
- force = 2
- hitsound = 'sound/weapons/blade1.ogg'
- filling_color = "#00FF00"
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/pwr_game = 2, /datum/reagent/consumable/liquidelectricity = 2)
- tastes = list("cake" = 3, "a Vlad's Salad" = 1)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/proc/energy_bite(mob/living/user)
- to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!")
- user.apply_damage(18,BRUTE,BODY_ZONE_HEAD)
- playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/attack(mob/living/M, mob/living/user)
- . = ..()
- if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly
- return
- energy_bite(M, user)
-
-/obj/item/reagent_containers/food/snacks/store/cake/apple
- name = "apple cake"
- desc = "A cake centred with Apple."
- icon_state = "applecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/apple
- slices_num = 5
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
- tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/apple
- name = "apple cake slice"
- desc = "A slice of heavenly cake."
- icon_state = "applecakeslice"
- filling_color = "#FF4500"
- tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/custom
- name = "cake slice"
- icon_state = "plaincake_slice"
- filling_color = "#FFFFFF"
- foodtype = GRAIN | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/cake/slimecake
- name = "Slime cake"
- desc = "A cake made of slimes. Probably not electrified."
- icon_state = "slimecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/slimecake
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3)
- tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/slimecake
- name = "slime cake slice"
- desc = "A slice of slime cake."
- icon_state = "slimecake_slice"
- filling_color = "#00FFFF"
- tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice
- name = "pumpkin spice cake"
- desc = "A hollow cake with real pumpkin."
- icon_state = "pumpkinspicecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 5)
- tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1)
- foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice
- name = "pumpkin spice cake slice"
- desc = "A spicy slice of pumpkin goodness."
- icon_state = "pumpkinspicecakeslice"
- filling_color = "#FFD700"
- tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1)
- foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake
- name = "blackberry and strawberry vanilla cake"
- desc = "A plain cake, filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_vanilla_cake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4)
- tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/bsvc
- name = "blackberry and strawberry vanilla cake slice"
- desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_vanilla_slice"
- filling_color = "#FFD700"
- tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake
- name = "blackberry and strawberry chocolate cake"
- desc = "A chocolate cake, filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_coco_cake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/coco = 5)
- tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/bscc
- name = "blackberry and strawberry chocolate cake slice"
- desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_coco_slice"
- filling_color = "#FFD700"
- tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/holy_cake
- name = "angel food cake"
- desc = "A cake made for angels and chaplains alike! Contains holy water."
- icon_state = "holy_cake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3, /datum/reagent/water/holywater = 10)
- tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
- name = "angel food cake slice"
- desc = "A slice of heavenly cake."
- icon_state = "holy_cake_slice"
- filling_color = "#00FFFF"
- tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
- foodtype = GRAIN | DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/store/cake/pound_cake
- name = "pound cake"
- desc = "A condensed cake made for filling people up quickly."
- icon_state = "pound_cake"
- slices_num = 7 //Its ment to feed the party
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 60)
- tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1)
- foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
- name = "pound cake slice"
- desc = "A slice of condensed cake made for filling people up quickly."
- icon_state = "pound_cake_slice"
- filling_color = "#00FFFF"
- tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1)
- foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
- name = "hardware cake"
- desc = "A quote on quote cake that is made with electronic boards and leaks acid..."
- icon_state = "hardware_cake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
- bonus_reagents = list(/datum/reagent/toxin/acid = 15, /datum/reagent/fuel/oil = 15)
- tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
- foodtype = GRAIN | GROSS
-
-/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
- name = "hardware cake slice"
- desc = "A slice of electronic boards and some acid."
- icon_state = "hardware_cake_slice"
- filling_color = "#00FFFF"
- tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
- foodtype = GRAIN | GROSS
-
-/obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
- name = "vanilla cake"
- desc = "A vanilla frosted cake."
- icon_state = "vanillacake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
- bonus_reagents = list(/datum/reagent/consumable/sugar = 15, /datum/reagent/consumable/vanilla = 15)
- tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
- foodtype = GRAIN | SUGAR | DAIRY
-
-/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
- name = "vanilla cake slice"
- desc = "A slice of vanilla frosted cake."
- icon_state = "vanillacake_slice"
- filling_color = "#00FFFF"
- tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
- foodtype = GRAIN | SUGAR | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/cake/clown_cake
- name = "clown cake"
- desc = "A funny cake with a clown face on it."
- icon_state = "clowncake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice
- bonus_reagents = list(/datum/reagent/consumable/sugar = 15)
- tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
- foodtype = GRAIN | SUGAR | DAIRY
-
-/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice
- name = "clown cake slice"
- desc = "A slice of bad jokes, and silly props."
- icon_state = "clowncake_slice"
- filling_color = "#00FFFF"
- tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
- foodtype = GRAIN | SUGAR | DAIRY
-
-/obj/item/reagent_containers/food/snacks/store/cake/trumpet
- name = "spaceman's cake"
- desc = "A spaceman's trumpet frosted cake."
- icon_state = "trumpetcake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/trumpet
- bonus_reagents = list(/datum/reagent/medicine/polypyr = 15, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/berryjuice = 5)
- filling_color = "#7A3D80"
- tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/cakeslice/trumpet
- name = "spaceman's cake"
- desc = "A spaceman's trumpet frosted cake."
- icon_state = "trumpetcakeslice"
- filling_color = "#7A3D80"
- tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
- foodtype = GRAIN | DAIRY | FRUIT | SUGAR
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index 360053c28ca4..ee28460adb62 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -10,6 +10,8 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 4, "sweetness" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/egg
name = "egg"
@@ -18,7 +20,8 @@
list_reagents = list(/datum/reagent/consumable/eggyolk = 5)
cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg
filling_color = "#F0E68C"
- foodtype = MEAT
+ foodtype = MEAT | RAW
+ w_class = WEIGHT_CLASS_TINY
grind_results = list()
var/static/chick_count = 0 //I copied this from the chicken_count (note the "en" in there) variable from chicken code.
@@ -106,6 +109,8 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
tastes = list("egg" = 1)
foodtype = MEAT | BREAKFAST
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/omelette //FUCK THIS
name = "omelette du fromage"
diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm
index 930fabc31775..722d99debb7d 100644
--- a/code/modules/food_and_drinks/food/snacks_frozen.dm
+++ b/code/modules/food_and_drinks/food/snacks_frozen.dm
@@ -8,20 +8,24 @@
desc = "Portable Ice-cream in its own packaging."
icon = 'icons/obj/food/frozen_treats.dmi'
icon_state = "icecreamsandwich"
+ w_class = WEIGHT_CLASS_TINY
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/ice = 2)
list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2)
tastes = list("ice cream" = 1)
- foodtype = GRAIN | DAIRY | SUGAR
+ foodtype = GRAIN | DAIRY
+ /*food_flags = FOOD_FINGER_FOOD*/
/obj/item/reagent_containers/food/snacks/strawberryicecreamsandwich
name = "strawberry ice cream sandwich"
desc = "Portable ice-cream in its own packaging of the strawberry variety."
icon = 'icons/obj/food/frozen_treats.dmi'
icon_state = "strawberryicecreamsandwich"
+ w_class = WEIGHT_CLASS_TINY
bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2)
list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2)
tastes = list("ice cream" = 2, "berry" = 2)
foodtype = FRUIT | DAIRY | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
/obj/item/reagent_containers/food/snacks/spacefreezy
@@ -29,6 +33,7 @@
desc = "The best icecream in space."
icon = 'icons/obj/food/frozen_treats.dmi'
icon_state = "spacefreezy"
+ w_class = WEIGHT_CLASS_TINY
bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2)
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/bluecherryjelly = 5, /datum/reagent/consumable/nutriment/vitamin = 4)
filling_color = "#87CEFA"
@@ -40,6 +45,7 @@
desc = "A classic dessert."
icon = 'icons/obj/food/frozen_treats.dmi'
icon_state = "sundae"
+ w_class = WEIGHT_CLASS_SMALL
bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/banana = 5, /datum/reagent/consumable/nutriment/vitamin = 2)
filling_color = "#FFFACD"
@@ -66,12 +72,14 @@
desc = "It's just shaved ice. Still fun to chew on."
icon = 'icons/obj/food/frozen_treats.dmi'
icon_state = "flavorless_sc"
+ w_class = WEIGHT_CLASS_SMALL
trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups
bonus_reagents = list(/datum/reagent/water = 10) //Base line will allways give water
list_reagents = list(/datum/reagent/water = 1) // We dont get food for water/juices
filling_color = "#FFFFFF" //Ice is white
tastes = list("ice" = 1, "water" = 1)
foodtype = SUGAR //We use SUGAR as a base line to act in as junkfood, other wise we use fruit
+ /*food_flags = FOOD_FINGER_FOOD*/
/obj/item/reagent_containers/food/snacks/snowcones/lime
name = "lime snowcone"
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 510130ce08be..c088b2259610 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -211,6 +211,8 @@
filling_color = "#800000"
tastes = list("meat" = 1)
foodtype = MEAT
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/sausage
name = "sausage"
@@ -223,6 +225,7 @@
slices_num = 6
slice_path = /obj/item/reagent_containers/food/snacks/salami
foodtype = MEAT | BREAKFAST
+ /*food_flags = FOOD_FINGER_FOOD*/
var/roasted = FALSE
/obj/item/reagent_containers/food/snacks/sausage/Initialize()
@@ -266,6 +269,8 @@
filling_color = "#CD853F"
tastes = list("the jungle" = 1, "bananas" = 1)
foodtype = MEAT | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
var/faction
var/spawned_mob = /mob/living/carbon/monkey
custom_price = 300
@@ -359,6 +364,8 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 2)
tastes = list("\"chicken\"" = 1)
foodtype = MEAT
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/nugget/Initialize()
. = ..()
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 3d5adf18e6fd..9b00c74f5f4e 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -37,7 +37,9 @@
filling_color = "#FF1493"
tastes = list("watermelon" = 1)
foodtype = FRUIT
+ /*food_flags = FOOD_FINGER_FOOD*/
juice_results = list(/datum/reagent/consumable/watermelonjuice = 5)
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/candy_corn
name = "candy corn"
@@ -47,6 +49,8 @@
filling_color = "#FF8C00"
tastes = list("candy corn" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/candy_corn/prison
name = "desiccated candy corn"
@@ -64,6 +68,8 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/hugemushroomslice
name = "huge mushroom slice"
@@ -120,6 +126,8 @@
filling_color = "FFD700"
tastes = list("potato" = 3, "valids" = 1)
foodtype = FRIED | VEGETABLES
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/tatortot/Initialize()
. = ..()
@@ -144,7 +152,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 6)
filling_color = "#FFD700"
tastes = list("fries" = 3, "cheese" = 1)
- foodtype = VEGETABLES | GRAIN | DAIRY
+ foodtype = VEGETABLES | GRAIN
/obj/item/reagent_containers/food/snacks/cheesyfries/Initialize()
. = ..()
@@ -192,6 +200,8 @@
list_reagents = list(/datum/reagent/toxin/minttoxin = 2)
filling_color = "#800000"
foodtype = TOXIC | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/eggwrap
name = "egg wrap"
@@ -229,6 +239,8 @@
filling_color = "#00800"
tastes = list("cobwebs" = 1, "sugar" = 2)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/chococoin
name = "chocolate coin"
@@ -239,6 +251,8 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/fudgedice
name = "fudge dice"
@@ -250,6 +264,8 @@
trash = /obj/item/dice/fudge
tastes = list("fudge" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/chocoorange
name = "chocolate orange"
@@ -260,6 +276,8 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 3, "oranges" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/eggplantparm
name = "eggplant parmigiana"
@@ -404,6 +422,8 @@
filling_color = "#F2CE91"
tastes = list("oats" = 3, "nuts" = 2, "honey" = 1)
foodtype = GRAIN | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/stuffedlegion
name = "stuffed legion"
@@ -484,6 +504,15 @@
next_succ = 0
tastes = list("candy" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ slot_flags = ITEM_SLOT_MASK
+ w_class = WEIGHT_CLASS_TINY
+ ///Essentially IsEquipped
+ var/chewing = TRUE
+ ///Time between bites
+ var/bite_frequency = 30 SECONDS
+ ///ID for timer
+ var/timer_id
/obj/item/reagent_containers/food/snacks/chewable/lollipop/Initialize()
. = ..()
@@ -574,6 +603,8 @@
list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/bicaridine = 2, /datum/reagent/medicine/kelotane = 2) //Kek
tastes = list("candy")
foodtype = JUNKFOOD
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/gumball/Initialize()
. = ..()
@@ -654,6 +685,7 @@
desc = "delicious, golden, fatty goodness on a stick."
icon_state = "butteronastick"
trash = /obj/item/stack/rods
+ /*food_flags = FOOD_FINGER_FOOD*/
/obj/item/reagent_containers/food/snacks/onionrings
name = "onion rings"
@@ -664,6 +696,7 @@
gender = PLURAL
tastes = list("batter" = 3, "onion" = 1)
foodtype = VEGETABLES
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/pineappleslice
name = "pineapple slice"
@@ -673,6 +706,7 @@
juice_results = list(/datum/reagent/consumable/pineapplejuice = 3)
tastes = list("pineapple" = 1)
foodtype = FRUIT | PINEAPPLE
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/tinychocolate
name = "chocolate"
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index d060dc1c2969..ddc57e425b1a 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -13,6 +13,8 @@
filling_color = "#D2691E"
tastes = list("donut" = 1)
foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR | BREAKFAST
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
var/decorated_icon = "donut_homer"
var/is_decorated = FALSE
var/extra_reagent = null
@@ -336,6 +338,8 @@
filling_color = "#F4A460"
tastes = list("muffin" = 1)
foodtype = GRAIN | SUGAR | BREAKFAST
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/muffin/berry
name = "berry muffin"
@@ -420,6 +424,8 @@
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
foodtype = GRAIN
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/donkpocket/warm
name = "warm Donk-pocket"
@@ -565,14 +571,13 @@
filling_color = "#F0E68C"
tastes = list("cookie" = 1)
foodtype = GRAIN | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/cookie/Initialize()
. = ..()
AddElement(/datum/element/dunkable, 10)
-/obj/item/reagent_containers/food/snacks/cookie/sleepy
- list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/toxin/chloralhydrate = 10)
-
/obj/item/reagent_containers/food/snacks/fortunecookie
name = "fortune cookie"
desc = "A true prophecy in each cookie!"
@@ -582,6 +587,8 @@
filling_color = "#F4A460"
tastes = list("cookie" = 1)
foodtype = GRAIN | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/poppypretzel
name = "poppy pretzel"
@@ -592,6 +599,8 @@
filling_color = "#F0E68C"
tastes = list("pretzel" = 1)
foodtype = GRAIN | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit
name = "plump helmet biscuit"
@@ -602,6 +611,8 @@
filling_color = "#F0E68C"
tastes = list("mushroom" = 1, "biscuit" = 1)
foodtype = GRAIN | VEGETABLES
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize()
var/fey = prob(10)
@@ -623,6 +634,8 @@
filling_color = "#F0E68C"
tastes = list("cracker" = 1)
foodtype = GRAIN
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/hotdog
name = "hotdog"
@@ -711,21 +724,19 @@
name = "cherry cupcake"
desc = "A sweet cupcake with cherry bits."
icon_state = "cherrycupcake"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3)
list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 1)
filling_color = "#F0E68C"
tastes = list("cake" = 3, "cherry" = 1)
foodtype = GRAIN | FRUIT | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
-/obj/item/reagent_containers/food/snacks/bluecherrycupcake
+/obj/item/reagent_containers/food/snacks/cherrycupcake/blue
name = "blue cherry cupcake"
desc = "Blue cherries inside a delicious cupcake."
icon_state = "bluecherrycupcake"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3)
- list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 1)
- filling_color = "#F0E68C"
tastes = list("cake" = 3, "blue cherry" = 1)
- foodtype = GRAIN | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/honeybun
name = "honey bun"
diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
index c15a6606be97..169d208bf30d 100644
--- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
+++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
@@ -9,6 +9,8 @@
cooked_type = /obj/item/reagent_containers/food/snacks/toastedsandwich
tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1)
foodtype = GRAIN | VEGETABLES
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/toastedsandwich
name = "toasted sandwich"
@@ -31,6 +33,8 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1)
tastes = list("toast" = 1, "cheese" = 1)
foodtype = GRAIN | DAIRY
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/jellysandwich
name = "jelly sandwich"
diff --git a/code/modules/food_and_drinks/food/snacks_spaghetti.dm b/code/modules/food_and_drinks/food/snacks_spaghetti.dm
deleted file mode 100644
index 88c1188f1dee..000000000000
--- a/code/modules/food_and_drinks/food/snacks_spaghetti.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-
-/obj/item/reagent_containers/food/snacks/spaghetti
- name = "spaghetti"
- desc = "Now that's a nic'e pasta!"
- icon = 'icons/obj/food/pizzaspaghetti.dmi'
- icon_state = "spaghetti"
- list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- cooked_type = /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti
- filling_color = "#F0E68C"
- tastes = list("pasta" = 1)
- foodtype = GRAIN
-
-/obj/item/reagent_containers/food/snacks/spaghetti/Initialize()
- . = ..()
- if(!cooked_type) // This isn't cooked, why would you put uncooked spaghetti in your pocket?
- var/list/display_message = list(
- "Something wet falls out of their pocket and hits the ground. Is that... [name]?",
- "Oh shit! All your pocket [name] fell out!")
- AddComponent(/datum/component/spill, display_message, 'sound/effects/splat.ogg')
-
-/obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti
- name = "boiled spaghetti"
- desc = "A plain dish of noodles, this needs more ingredients."
- icon_state = "spaghettiboiled"
- trash = /obj/item/trash/plate
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 2)
- list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1)
- cooked_type = null
- custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/pasta
-
-/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato
- name = "spaghetti"
- desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"
- icon_state = "pastatomato"
- trash = /obj/item/trash/plate
- bitesize = 4
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4)
- list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4)
- cooked_type = null
- filling_color = "#DC143C"
- tastes = list("pasta" = 1, "tomato" = 1)
- foodtype = GRAIN | VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/spaghetti/copypasta
- name = "copypasta"
- desc = "You probably shouldn't try this, you always hear people talking about how bad it is..."
- icon_state = "copypasta"
- trash = /obj/item/trash/plate
- bitesize = 4
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 4)
- list_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/consumable/tomatojuice = 20, /datum/reagent/consumable/nutriment/vitamin = 8)
- cooked_type = null
- filling_color = "#DC143C"
- tastes = list("pasta" = 1, "tomato" = 1)
- foodtype = GRAIN | VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/spaghetti/meatballspaghetti
- name = "spaghetti and meatballs"
- desc = "Now that's a nic'e meatball!"
- icon_state = "meatballspaghetti"
- trash = /obj/item/trash/plate
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 4)
- list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 4)
- cooked_type = null
- tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1)
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/spaghetti/spesslaw
- name = "spesslaw"
- desc = "A lawyers favourite."
- icon_state = "spesslaw"
- trash = /obj/item/trash/plate
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 6)
- list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 6)
- cooked_type = null
- tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1)
-
-/obj/item/reagent_containers/food/snacks/spaghetti/chowmein
- name = "chow mein"
- desc = "A nice mix of noodles and fried vegetables."
- icon_state = "chowmein"
- trash = /obj/item/trash/plate
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 4)
- list_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 6)
- cooked_type = null
- tastes = list("noodle" = 1, "tomato" = 1)
-
-/obj/item/reagent_containers/food/snacks/spaghetti/beefnoodle
- name = "beef noodle"
- desc = "Nutritious, beefy and noodly."
- icon_state = "beefnoodle"
- trash = /obj/item/reagent_containers/glass/bowl
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/liquidgibs = 3)
- cooked_type = null
- tastes = list("noodle" = 1, "meat" = 1)
- foodtype = GRAIN | MEAT
-
-/obj/item/reagent_containers/food/snacks/spaghetti/butternoodles
- name = "butter noodles"
- desc = "Noodles covered in savory butter. Simple and slippery, but delicious."
- icon_state = "butternoodles"
- trash = /obj/item/trash/plate
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 1)
- cooked_type = null
- tastes = list("noodle" = 1, "butter" = 1)
- foodtype = GRAIN | DAIRY
diff --git a/code/modules/food_and_drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm
index 8bff9db3384f..45a691deb982 100644
--- a/code/modules/food_and_drinks/food/snacks_vend.dm
+++ b/code/modules/food_and_drinks/food/snacks_vend.dm
@@ -12,6 +12,8 @@
filling_color = "#D2691E"
tastes = list("candy" = 1)
foodtype = JUNKFOOD | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_TINY
/obj/item/reagent_containers/food/snacks/candy/bronx
name = "South Bronx Paradise bar"
@@ -82,7 +84,9 @@
filling_color = "#8B0000"
tastes = list("dried raisins" = 1)
foodtype = JUNKFOOD | FRUIT | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
custom_price = 90
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/no_raisin/healthy
name = "homemade raisins"
@@ -99,6 +103,7 @@
junkiness = 25
filling_color = "#FFD700"
foodtype = JUNKFOOD | GRAIN | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
custom_price = 30
/obj/item/reagent_containers/food/snacks/candy_trash
@@ -114,6 +119,7 @@
/obj/item/reagent_containers/food/snacks/candy_trash/nicotine
desc = "The leftover from a smoked-out candy cigarette. Smells like nicotine..?"
list_reagents = list(/datum/reagent/consumable/sugar = 4, /datum/reagent/ash = 3, /datum/reagent/drug/nicotine = 1)
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/cheesiehonkers
name = "cheesie honkers"
@@ -136,6 +142,7 @@
filling_color = "#F5F5DC"
tastes = list("sweetness" = 3, "cake" = 1)
foodtype = GRAIN | FRUIT | VEGETABLES
+ w_class = WEIGHT_CLASS_SMALL
/obj/item/reagent_containers/food/snacks/energybar
name = "High-power energy bars"
@@ -146,3 +153,5 @@
filling_color = "#97ee63"
tastes = list("pure electricity" = 3, "fitness" = 2)
foodtype = TOXIC
+ /*food_flags = FOOD_FINGER_FOOD*/
+ w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 4fa5354339c5..5433750b92a1 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -27,7 +27,7 @@
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/food/deepfryholder/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
@@ -93,7 +93,7 @@
if(I.resistance_flags & INDESTRUCTIBLE)
to_chat(user, "You don't feel it would be wise to fry [I]...")
return
- if(istype(I, /obj/item/reagent_containers/food/snacks/deepfryholder))
+ if(istype(I, /obj/item/food/deepfryholder))
to_chat(user, "Your cooking skills are not up to the legendary Doublefry technique.")
return
if(default_unfasten_wrench(user, I))
@@ -105,7 +105,9 @@
return ..()
else if(!frying && user.transferItemToLoc(I, src))
to_chat(user, "You put [I] into [src].")
- frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I)
+ log_game("[key_name(user)] deep fried [I.name] ([I.type]) at [AREACOORD(src)].")
+ user.log_message("deep fried [I.name] ([I.type]) at [AREACOORD(src)].", LOG_GAME)
+ frying = new/obj/item/food/deepfryholder(src, I)
icon_state = "fryer_on"
fry_loop.start()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 1d4e366ad6d9..9b8d00785afe 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -210,7 +210,7 @@
return
/obj/item/reagent_containers/food/snacks/icecream
- name = "ice cream cone"
+ name = "waffle cone"
desc = "Delicious waffle cone, but no ice cream."
icon = 'icons/obj/kitchen.dmi'
icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time
@@ -218,8 +218,9 @@
tastes = list("cream" = 2, "waffle" = 1)
var/ice_creamed = 0
var/cone_type
- bitesize = 4
+ bitesize = 3
foodtype = DAIRY | SUGAR
+ /*food_flags = FOOD_FINGER_FOOD*/
/obj/item/reagent_containers/food/snacks/icecream/Initialize()
. = ..()
diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm
index 55db7cf06b84..3bad9cf0c265 100644
--- a/code/modules/food_and_drinks/recipes/processor_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm
@@ -35,7 +35,7 @@
/datum/food_processor_process/spaghetti
input = /obj/item/reagent_containers/food/snacks/doughslice
- output = /obj/item/reagent_containers/food/snacks/spaghetti
+ output = /obj/item/food/spaghetti/raw
/datum/food_processor_process/corn
input = /obj/item/reagent_containers/food/snacks/grown/corn
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
index f29e948adf4c..d4dab76aa945 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
@@ -6,83 +6,83 @@
/datum/crafting_recipe/food/meatbread
name = "Meat bread"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet/plain = 3,
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/meat
+ result = /obj/item/food/bread/meat
subcategory = CAT_BREAD
/datum/crafting_recipe/food/xenomeatbread
name = "Xenomeat bread"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet/xeno = 3,
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/xenomeat
+ result = /obj/item/food/bread/xenomeat
subcategory = CAT_BREAD
/datum/crafting_recipe/food/spidermeatbread
name = "Spidermeat bread"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet/spider = 3,
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/spidermeat
+ result = /obj/item/food/bread/spidermeat
subcategory = CAT_BREAD
/datum/crafting_recipe/food/banananutbread
name = "Banana nut bread"
reqs = list(
/datum/reagent/consumable/milk = 5,
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/boiledegg = 3,
/obj/item/reagent_containers/food/snacks/grown/banana = 1
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/banana
+ result = /obj/item/food/bread/banana
subcategory = CAT_BREAD
/datum/crafting_recipe/food/tofubread
name = "Tofu bread"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/tofu = 3,
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/tofu
+ result = /obj/item/food/bread/tofu
subcategory = CAT_BREAD
/datum/crafting_recipe/food/creamcheesebread
name = "Cream cheese bread"
reqs = list(
/datum/reagent/consumable/milk = 5,
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/cheesewedge = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/creamcheese
+ result = /obj/item/food/bread/creamcheese
subcategory = CAT_BREAD
/datum/crafting_recipe/food/mimanabread
name = "Mimana bread"
reqs = list(
/datum/reagent/consumable/soymilk = 5,
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/tofu = 3,
/obj/item/reagent_containers/food/snacks/grown/banana/mime = 1
)
- result = /obj/item/reagent_containers/food/snacks/store/bread/mimana
+ result = /obj/item/food/bread/mimana
subcategory = CAT_BREAD
/datum/crafting_recipe/food/garlicbread
name = "Garlic Bread"
time = 40
reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 1,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1,
+ /obj/item/food/breadslice/plain = 1,
/obj/item/reagent_containers/food/snacks/butter = 1
)
- result = /obj/item/reagent_containers/food/snacks/garlicbread
+ result = /obj/item/food/garlicbread
subcategory = CAT_BREAD
/datum/crafting_recipe/food/butterbiscuit
@@ -91,7 +91,7 @@
/obj/item/reagent_containers/food/snacks/bun = 1,
/obj/item/reagent_containers/food/snacks/butter = 1
)
- result = /obj/item/reagent_containers/food/snacks/butterbiscuit
+ result = /obj/item/food/butterbiscuit
subcategory = CAT_BREAD
/datum/crafting_recipe/food/butterdog
@@ -100,14 +100,28 @@
/obj/item/reagent_containers/food/snacks/bun = 1,
/obj/item/reagent_containers/food/snacks/butter = 3,
)
- result = /obj/item/reagent_containers/food/snacks/butterdog
+ result = /obj/item/food/butterdog
subcategory = CAT_BREAD
/datum/crafting_recipe/food/moldybread // why would you make this?
name = "Moldy Bread"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1,
- /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita = 1
+ /obj/item/food/bread/plain = 1,
+ /obj/item/organ/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab = 3,
+ /datum/reagent/blood = 50,
+ /datum/reagent/medicine/strange_reagent = 5
)
- result = /obj/item/reagent_containers/food/snacks/breadslice/moldy
+ result = /mob/living/simple_animal/pet/cat/breadcat
+ subcategory = CAT_BREAD
+
+/datum/crafting_recipe/food/hotdog
+ name = "Hot dog"
+ reqs = list(
+ /datum/reagent/consumable/ketchup = 5,
+ /obj/item/reagent_containers/food/snacks/bun = 1,
+ /obj/item/reagent_containers/food/snacks/sausage = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/hotdog
subcategory = CAT_BREAD
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index dcae05095ae8..31ff03ba75bf 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -6,190 +6,190 @@
/datum/crafting_recipe/food/carrotcake
name = "Carrot cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/carrot = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/carrot
+ result = /obj/item/food/cake/carrot
subcategory = CAT_CAKE
/datum/crafting_recipe/food/cheesecake
name = "Cheese cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/cheesewedge = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/cheese
+ result = /obj/item/food/cake/cheese
subcategory = CAT_CAKE
/datum/crafting_recipe/food/applecake
name = "Apple cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/apple = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/apple
+ result = /obj/item/food/cake/apple
subcategory = CAT_CAKE
/datum/crafting_recipe/food/orangecake
name = "Orange cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/orange
+ result = /obj/item/food/cake/orange
subcategory = CAT_CAKE
/datum/crafting_recipe/food/limecake
name = "Lime cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/lime
+ result = /obj/item/food/cake/lime
subcategory = CAT_CAKE
/datum/crafting_recipe/food/lemoncake
name = "Lemon cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/lemon
+ result = /obj/item/food/cake/lemon
subcategory = CAT_CAKE
/datum/crafting_recipe/food/chocolatecake
name = "Chocolate cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/chocolatebar = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/chocolate
+ result = /obj/item/food/cake/chocolate
subcategory = CAT_CAKE
/datum/crafting_recipe/food/birthdaycake
name = "Birthday cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/candle = 1,
/datum/reagent/consumable/sugar = 5,
/datum/reagent/consumable/caramel = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/birthday
+ result = /obj/item/food/cake/birthday
subcategory = CAT_CAKE
/datum/crafting_recipe/food/energycake
name = "Energy cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1,
+ /obj/item/food/cake/birthday = 1,
/obj/item/melee/transforming/energy/sword = 1,
)
- blacklist = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy)
- result = /obj/item/reagent_containers/food/snacks/store/cake/birthday/energy
+ blacklist = list(/obj/item/food/cake/birthday/energy)
+ result = /obj/item/food/cake/birthday/energy
subcategory = CAT_CAKE
/datum/crafting_recipe/food/braincake
name = "Brain cake"
reqs = list(
/obj/item/organ/brain = 1,
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1
+ /obj/item/food/cake/plain = 1
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/brain
+ result = /obj/item/food/cake/brain
subcategory = CAT_CAKE
/datum/crafting_recipe/food/slimecake
name = "Slime cake"
reqs = list(
/obj/item/slime_extract = 1,
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1
+ /obj/item/food/cake/plain = 1
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/slimecake
+ result = /obj/item/food/cake/slimecake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/pumpkinspicecake
name = "Pumpkin spice cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/pumpkin = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice
+ result = /obj/item/food/cake/pumpkinspice
subcategory = CAT_CAKE
/datum/crafting_recipe/food/holycake
name = "Angel food cake"
reqs = list(
/datum/reagent/water/holywater = 15,
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1
+ /obj/item/food/cake/plain = 1
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake
+ result = /obj/item/food/cake/holy_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/poundcake
name = "Pound cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 4
+ /obj/item/food/cake/plain = 4
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake
+ result = /obj/item/food/cake/pound_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/hardwarecake
name = "Hardware cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/circuitboard = 2,
/datum/reagent/toxin/acid = 5
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
+ result = /obj/item/food/cake/hardware_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscccake
name = "blackberry and strawberry chocolate cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/chocolatebar = 2,
/obj/item/reagent_containers/food/snacks/grown/berries = 5
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/bscc
+ result = /obj/item/food/cake/bscc
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscvcake
name = "blackberry and strawberry vanilla cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/berries = 5
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc
+ result = /obj/item/food/cake/bsvc
subcategory = CAT_CAKE
/datum/crafting_recipe/food/clowncake
name = "clown cake"
always_availible = FALSE
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/sundae = 2,
/obj/item/reagent_containers/food/snacks/grown/banana = 5
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake
+ result = /obj/item/food/cake/clown_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/vanillacake
name = "vanilla cake"
always_availible = FALSE
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/vanillapod = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
+ result = /obj/item/food/cake/vanilla_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/trumpetcake
name = "Spaceman's Cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
- /obj/item/reagent_containers/food/snacks/grown/trumpet = 2,
+ /obj/item/food/cake/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/flower/trumpet = 2,
/datum/reagent/consumable/cream = 5,
/datum/reagent/consumable/berryjuice = 5
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/trumpet
+ result = /obj/item/food/cake/trumpet
subcategory = CAT_CAKE
@@ -198,7 +198,7 @@
reqs = list(
/obj/item/organ/brain = 1,
/obj/item/organ/heart = 1,
- /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1,
+ /obj/item/food/cake/birthday = 1,
/obj/item/reagent_containers/food/snacks/meat/slab = 3,
/datum/reagent/blood = 30,
/datum/reagent/consumable/sprinkles = 5,
@@ -206,3 +206,14 @@
)
result = /mob/living/simple_animal/pet/cat/cak
subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Felines
+
+/datum/crafting_recipe/food/popup_cake
+ name = "Towering pile of cakes"
+ reqs = list(
+ /obj/item/food/cake/plain = 3,
+ /datum/reagent/consumable/sugar = 10,
+ /datum/reagent/consumable/cream = 5,
+ /obj/item/bikehorn/airhorn = 1
+ )
+ result = /obj/structure/popout_cake
+ subcategory = CAT_CAKE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
index 522f362e777e..a4ab818fdd6f 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
@@ -36,7 +36,7 @@
reqs = list(
/obj/item/reagent_containers/food/snacks/friedegg = 1,
/obj/item/reagent_containers/food/snacks/meat/steak = 1,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1,
+ /obj/item/food/breadslice/plain = 1,
)
result = /obj/item/reagent_containers/food/snacks/benedict
subcategory = CAT_EGG
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index 1bb3d250a9ae..b1191fda7ada 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -102,7 +102,7 @@
/datum/reagent/consumable/blackpepper = 1,
/obj/item/reagent_containers/food/snacks/pastrybase = 2
)
- result = /obj/item/reagent_containers/food/snacks/baguette
+ result = /obj/item/food/baguette
subcategory = CAT_MISCFOOD
////////////////////////////////////////////////TOAST////////////////////////////////////////////////
@@ -111,7 +111,7 @@
name = "Slime toast"
reqs = list(
/datum/reagent/toxin/slimejelly = 5,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1
+ /obj/item/food/breadslice/plain = 1
)
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime
subcategory = CAT_MISCFOOD
@@ -120,7 +120,7 @@
name = "Jellied toast"
reqs = list(
/datum/reagent/consumable/cherryjelly = 5,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1
+ /obj/item/food/breadslice/plain = 1
)
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry
subcategory = CAT_MISCFOOD
@@ -128,7 +128,7 @@
/datum/crafting_recipe/food/butteredtoast
name = "Buttered Toast"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 1,
+ /obj/item/food/breadslice/plain = 1,
/obj/item/reagent_containers/food/snacks/butter = 1
)
result = /obj/item/reagent_containers/food/snacks/butteredtoast
@@ -138,7 +138,7 @@
name = "Two bread"
reqs = list(
/datum/reagent/consumable/ethanol/wine = 5,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2
+ /obj/item/food/breadslice/plain = 2
)
result = /obj/item/reagent_containers/food/snacks/twobread
subcategory = CAT_MISCFOOD
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index ec04dcaa4ec9..d982b6705bda 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -474,7 +474,7 @@
reqs = list(
/datum/reagent/consumable/eggyolk = 5,
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1
+ /obj/item/food/bread/plain = 1
)
result = /obj/item/reagent_containers/food/snacks/khachapuri
subcategory = CAT_PASTRY
@@ -576,7 +576,7 @@
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/grown/bluecherries = 1
)
- result = /obj/item/reagent_containers/food/snacks/bluecherrycupcake
+ result = /obj/item/reagent_containers/food/snacks/cherrycupcake/blue
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/honeybun
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
index 41829e9ec2b8..022011d3bfc9 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
@@ -9,7 +9,7 @@
/datum/crafting_recipe/food/sandwich
name = "Sandwich"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
/obj/item/reagent_containers/food/snacks/meat/steak = 1,
/obj/item/reagent_containers/food/snacks/cheesewedge = 1
)
@@ -19,7 +19,7 @@
/datum/crafting_recipe/food/grilledcheesesandwich
name = "Cheese sandwich"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
/obj/item/reagent_containers/food/snacks/cheesewedge = 2
)
result = /obj/item/reagent_containers/food/snacks/grilledcheese
@@ -29,7 +29,7 @@
name = "Jelly sandwich"
reqs = list(
/datum/reagent/toxin/slimejelly = 5,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
)
result = /obj/item/reagent_containers/food/snacks/jellysandwich/slime
subcategory = CAT_SANDWICH
@@ -38,7 +38,7 @@
name = "Jelly sandwich"
reqs = list(
/datum/reagent/consumable/cherryjelly = 5,
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
)
result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry
subcategory = CAT_SANDWICH
@@ -46,7 +46,7 @@
/datum/crafting_recipe/food/notasandwich
name = "Not a sandwich"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
/obj/item/clothing/mask/fakemoustache = 1
)
result = /obj/item/reagent_containers/food/snacks/notasandwich
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
index 796c360c3448..bd2186687d37 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
@@ -6,65 +6,108 @@
/datum/crafting_recipe/food/tomatopasta
name = "Tomato pasta"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/grown/tomato = 2
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato
+ result = /obj/item/food/spaghetti/pastatomato
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/copypasta
name = "Copypasta"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato = 2
+ /obj/item/food/spaghetti/pastatomato = 2
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/copypasta
+ result = /obj/item/food/spaghetti/copypasta
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/spaghettimeatball
name = "Spaghetti meatball"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/meatball = 2
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/meatballspaghetti
+ result = /obj/item/food/spaghetti/meatballspaghetti
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/spesslaw
name = "Spesslaw"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/meatball = 4
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/spesslaw
+ result = /obj/item/food/spaghetti/spesslaw
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/beefnoodle
name = "Beef noodle"
reqs = list(
/obj/item/reagent_containers/glass/bowl = 1,
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet = 2,
/obj/item/reagent_containers/food/snacks/grown/cabbage = 1
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/beefnoodle
+ result = /obj/item/food/spaghetti/beefnoodle
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/chowmein
name = "Chowmein"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
/obj/item/reagent_containers/food/snacks/grown/cabbage = 2,
/obj/item/reagent_containers/food/snacks/grown/carrot = 1
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/chowmein
+ result = /obj/item/food/spaghetti/chowmein
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/butternoodles
name = "Butter Noodles"
reqs = list(
- /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1,
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
/obj/item/reagent_containers/food/snacks/butter = 1
)
- result = /obj/item/reagent_containers/food/snacks/spaghetti/butternoodles
+ result = /obj/item/food/spaghetti/butternoodles
+ subcategory = CAT_SPAGHETTI
+
+/datum/crafting_recipe/food/kasespatzle
+ name = "Käsespätzle"
+ reqs = list(
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
+ /datum/reagent/consumable/eggyolk = 10,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1
+ )
+ result = /obj/item/food/spaghetti/kasespatzle
+ subcategory = CAT_SPAGHETTI
+
+/datum/crafting_recipe/food/spaghettinapolitan
+ name = "Spaghetti Napolitan"
+ reqs = list(
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
+ /datum/reagent/consumable/ketchup = 10,
+ /obj/item/reagent_containers/food/snacks/sausage = 1,
+ /obj/item/reagent_containers/food/snacks/grown/chili = 1
+ )
+ result = /obj/item/food/spaghetti/spaghettinapolitan
+ subcategory = CAT_SPAGHETTI
+
+/datum/crafting_recipe/food/lasagna
+ name = "Lasagna"
+ reqs = list(
+ /obj/item/food/spaghetti = 1,
+ /obj/item/reagent_containers/food/snacks/meatball = 1,
+ /obj/item/reagent_containers/food/snacks/grown/tomato = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1
+ )
+ result = /obj/item/food/spaghetti/lasagna
+ subcategory = CAT_SPAGHETTI
+
+/datum/crafting_recipe/food/glassnoodles
+ name = "Glass Noodles"
+ reqs = list(
+ /obj/item/food/spaghetti/boiledspaghetti = 1,
+ /obj/item/reagent_containers/food/snacks/grown/carrot = 1,
+ /obj/item/reagent_containers/food/snacks/tofu = 1,
+ /obj/item/stack/sheet/glass = 1
+ )
+ result = /obj/item/food/spaghetti/glassnoodles
subcategory = CAT_SPAGHETTI
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index 9d88d3107551..e698785fa5a0 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -174,34 +174,19 @@
/datum/crafting_recipe/food/hotcrossbun
name = "Hot-Cross Bun"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/datum/reagent/consumable/sugar = 1
)
result = /obj/item/reagent_containers/food/snacks/hotcrossbun
subcategory = CAT_MISCFOOD
-
-/obj/item/reagent_containers/food/snacks/store/cake/brioche
- name = "brioche cake"
- desc = "A ring of sweet, glazed buns."
- icon_state = "briochecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche
- slices_num = 6
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/brioche
- name = "brioche cake slice"
- desc = "Delicious sweet-bread. Who needs anything else?"
- icon_state = "briochecake_slice"
- filling_color = "#FFD700"
-
/datum/crafting_recipe/food/briochecake
name = "Brioche cake"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/food/cake/plain = 1,
/datum/reagent/consumable/sugar = 2
)
- result = /obj/item/reagent_containers/food/snacks/store/cake/brioche
+ result = /obj/item/food/cake/brioche
subcategory = CAT_MISCFOOD
/obj/item/reagent_containers/food/snacks/scotchegg
@@ -234,7 +219,7 @@
/datum/crafting_recipe/food/mammi
name = "Mammi"
reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
+ /obj/item/food/bread/plain = 1,
/obj/item/reagent_containers/food/snacks/chocolatebar = 1,
/datum/reagent/consumable/milk = 5
)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 1916a7c52adb..90fd719abd07 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -270,7 +270,7 @@
maxHealth = 50
gender = FEMALE
harm_intent_damage = 10
- butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/reagent_containers/food/snacks/cakeslice/birthday = 3, \
+ butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/food/cakeslice/birthday = 3, \
/obj/item/reagent_containers/food/snacks/meat/slab = 2)
response_harm_continuous = "takes a bite out of"
response_harm_simple = "take a bite out of"
@@ -308,3 +308,23 @@
if(L.a_intent == INTENT_HARM && L.reagents && !stat)
L.reagents.add_reagent(/datum/reagent/consumable/nutriment, 0.4)
L.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.4)
+
+/mob/living/simple_animal/pet/cat/breadcat
+ name = "bread cat"
+ desc = "It's a cat... with a bread!"
+ gender = MALE
+ icon_state = "breadcat"
+ icon_living = "breadcat"
+ icon_dead = "breadcat_dead"
+ collar_type = null
+ held_state = "breadcat"
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2, /obj/item/organ/ears/cat = 1, /obj/item/organ/tail/cat = 1, /obj/item/organ/tongue/cat = 1, /obj/item/food/breadslice/plain = 1)
+
+/mob/living/simple_animal/pet/cat/halal
+ name = "arabian cat"
+ desc = "It's a cat with Agal on his head."
+ gender = MALE
+ icon_state = "cathalal"
+ icon_living = "cathalal"
+ collar_type = null
+ held_state = "cathalal"
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index e4e6bdd1d620..692f7831a07b 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -112,9 +112,10 @@
/datum/reagent/consumable/cooking_oil/expose_obj(obj/O, reac_volume)
if(holder && holder.chem_temp >= fry_temperature)
- if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder))
+ if(isitem(O) && !istype(O, /obj/item/food/deepfryholder))
+ log_game("[O.name] ([O.type]) has been deep fried by a reaction with cooking oil reagent at [AREACOORD(O)].")
O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.")
- var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O)
+ var/obj/item/food/deepfryholder/F = new(O.drop_location(), O)
F.fry(volume)
F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 97290d54213f..855f75fd0dc6 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -139,7 +139,7 @@
var/chosen = getbork()
var/obj/B = new chosen(T)
if(prob(5))//Fry it!
- var/obj/item/reagent_containers/food/snacks/deepfryholder/fried
+ var/obj/item/food/deepfryholder/fried
fried = new(T, B)
fried.fry() // actually set the name and colour it
B = fried
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 6682a9ba7943..76ee50e8d7d1 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -3,6 +3,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
volume = 50
+ obj_flags = UNIQUE_RENAME
reagent_flags = OPENCONTAINER | DUNKABLE
spillable = TRUE
resistance_flags = ACID_PROOF
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 501ff548e08f..8e01ed935a3a 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -107,7 +107,7 @@ Charged extracts:
effect_desc = "Creates a slime cake and some drinks."
/obj/item/slimecross/charged/silver/do_effect(mob/user)
- new /obj/item/reagent_containers/food/snacks/store/cake/slimecake(get_turf(user))
+ new /obj/item/food/cake/slimecake(get_turf(user))
for(var/i in 1 to 10)
var/drink_type = get_random_drink()
new drink_type(get_turf(user))
diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm
index 017356d9152a..9aee2ca10624 100644
--- a/code/modules/unit_tests/create_and_destroy.dm
+++ b/code/modules/unit_tests/create_and_destroy.dm
@@ -72,7 +72,7 @@
ignore += typesof(/obj/effect/pod_landingzone_effect)
ignore += typesof(/obj/effect/pod_landingzone)
//These want fried food to take on the shape of, we can't pass that in
- ignore += typesof(/obj/item/reagent_containers/food/snacks/deepfryholder)
+ ignore += typesof(/obj/item/food/deepfryholder)
//Can't pass in a thing to glow
ignore += typesof(/obj/effect/abstract/eye_lighting)
//It wants a lot more context then we have
diff --git a/shiptest.dme b/shiptest.dme
index bb107a1f00f2..9f03241da9cb 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -106,6 +106,7 @@
#include "code\__DEFINES\plumbing.dm"
#include "code\__DEFINES\power.dm"
#include "code\__DEFINES\preferences.dm"
+#include "code\__DEFINES\processing.dm"
#include "code\__DEFINES\procpath.dm"
#include "code\__DEFINES\profile.dm"
#include "code\__DEFINES\projectiles.dm"
@@ -195,6 +196,7 @@
#include "code\__HELPERS\stat_tracking.dm"
#include "code\__HELPERS\string_assoc_lists.dm"
#include "code\__HELPERS\string_lists.dm"
+#include "code\__HELPERS\stoplag.dm"
#include "code\__HELPERS\text.dm"
#include "code\__HELPERS\time.dm"
#include "code\__HELPERS\type2type.dm"
@@ -465,10 +467,7 @@
#include "code\datums\components\creamed.dm"
#include "code\datums\components\deadchat_control.dm"
#include "code\datums\components\dejavu.dm"
-#include "code\datums\components\deployable.dm"
-#include "code\datums\components\dooropendeathproc.dm"
-#include "code\datums\components\earprotection.dm"
-#include "code\datums\components\edible.dm"
+#include "code\datums\components\drift.dm"
#include "code\datums\components\edit_complainer.dm"
#include "code\datums\components\embedded.dm"
#include "code\datums\components\empprotection.dm"
@@ -537,10 +536,8 @@
#include "code\datums\components\crafting\guncrafting.dm"
#include "code\datums\components\crafting\recipes.dm"
#include "code\datums\components\crafting\tailoring.dm"
-#include "code\datums\components\fantasy\_fantasy.dm"
-#include "code\datums\components\fantasy\affix.dm"
-#include "code\datums\components\fantasy\prefixes.dm"
-#include "code\datums\components\fantasy\suffixes.dm"
+#include "code\datums\components\food\edible.dm"
+#include "code\datums\components\food\food_storage.dm"
#include "code\datums\components\plumbing\_plumbing.dm"
#include "code\datums\components\plumbing\chemical_acclimator.dm"
#include "code\datums\components\plumbing\filter.dm"
@@ -643,6 +640,19 @@
#include "code\datums\elements\waddling.dm"
#include "code\datums\elements\decals\_decals.dm"
#include "code\datums\elements\decals\blood.dm"
+#include "code\datums\elements\food\dunkable.dm"
+#include "code\datums\elements\food\food_trash.dm"
+#include "code\datums\elements\food\processable.dm"
+#include "code\datums\enumeration\callback_enumerator.dm"
+#include "code\datums\enumeration\enumeration_operations.dm"
+#include "code\datums\enumeration\enumerator.dm"
+#include "code\datums\enumeration\list_dereferencer_enumerator.dm"
+#include "code\datums\enumeration\list_enumerator.dm"
+#include "code\datums\enumeration\safe_enumerator.dm"
+#include "code\datums\greyscale\_greyscale_config.dm"
+#include "code\datums\greyscale\greyscale_configs.dm"
+#include "code\datums\greyscale\json_reader.dm"
+#include "code\datums\greyscale\layer.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\icon_snapshot.dm"
@@ -1222,6 +1232,11 @@
#include "code\game\objects\items\devices\radio\headset.dm"
#include "code\game\objects\items\devices\radio\intercom.dm"
#include "code\game\objects\items\devices\radio\radio.dm"
+#include "code\game\objects\items\food\_food.dm"
+#include "code\game\objects\items\food\bread.dm"
+#include "code\game\objects\items\food\cake.dm"
+#include "code\game\objects\items\food\spaghetti.dm"
+#include "code\game\objects\items\grenades\_grenade.dm"
#include "code\game\objects\items\grenades\antigravity.dm"
#include "code\game\objects\items\grenades\chem_grenade.dm"
#include "code\game\objects\items\grenades\clusterbuster.dm"
@@ -2138,9 +2153,7 @@
#include "code\modules\food_and_drinks\food\customizables.dm"
#include "code\modules\food_and_drinks\food\ration.dm"
#include "code\modules\food_and_drinks\food\snacks.dm"
-#include "code\modules\food_and_drinks\food\snacks_bread.dm"
#include "code\modules\food_and_drinks\food\snacks_burgers.dm"
-#include "code\modules\food_and_drinks\food\snacks_cake.dm"
#include "code\modules\food_and_drinks\food\snacks_egg.dm"
#include "code\modules\food_and_drinks\food\snacks_frozen.dm"
#include "code\modules\food_and_drinks\food\snacks_meat.dm"
@@ -2151,7 +2164,6 @@
#include "code\modules\food_and_drinks\food\snacks_salad.dm"
#include "code\modules\food_and_drinks\food\snacks_sandwichtoast.dm"
#include "code\modules\food_and_drinks\food\snacks_soup.dm"
-#include "code\modules\food_and_drinks\food\snacks_spaghetti.dm"
#include "code\modules\food_and_drinks\food\snacks_vend.dm"
#include "code\modules\food_and_drinks\food\snacks\dough.dm"
#include "code\modules\food_and_drinks\food\snacks\meat.dm"
From 8a72a0dc102597a2e67d267dea05ecd9c99c64b4 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 16:46:05 -0700
Subject: [PATCH 02/14] Patch
---
code/__DEFINES/dcs/signals.dm | 18 ++++++++++++++++--
code/game/atoms.dm | 29 +++++++++++++----------------
shiptest.dme | 11 -----------
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 2b8dc67cb684..677582579b26 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -158,6 +158,8 @@
///from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMSIG_ATOM_CANREACH "atom_can_reach"
#define COMPONENT_BLOCK_REACH 1
+///for when an atom has been created through processing (atom/original_atom, list/chosen_processing_option)
+#define COMSIG_ATOM_CREATEDBY_PROCESSING "atom_createdby_processing"
///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act"
///from base of atom/wrench_act(): (mob/living/user, obj/item/I)
@@ -528,7 +530,10 @@
#define COMPONENT_BLOCK_MARK_RETRIEVAL 1
#define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args)
#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable, mob/living/crossed)
-#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" //called on item when microwaved (): (obj/machinery/microwave/M)
+///called on item when microwaved (): (obj/machinery/microwave/M)
+#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act"
+///called on item when created through microwaving (): (obj/machinery/microwave/M, cooking_efficiency)
+#define COMSIG_ITEM_MICROWAVE_COOKED "microwave_cooked"
#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act" //from base of item/sharpener/attackby(): (amount, max)
#define COMPONENT_BLOCK_SHARPEN_APPLIED 1
#define COMPONENT_BLOCK_SHARPEN_BLOCKED 2
@@ -649,7 +654,16 @@
#define COMSIG_COMPONENT_CLEAN_FACE_ACT "clean_face_act" //called when you wash your face at a sink: (num/strength)
//Food
-#define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder)
+///from base of obj/item/reagent_containers/food/snacks/attack() & Edible component: (mob/living/eater, mob/feeder)
+#define COMSIG_FOOD_EATEN "food_eaten"
+///from base of Component/edible/On_Consume: (mob/living/eater, mob/living/feeder)
+#define COMSIG_FOOD_CONSUMED "food_consumed"
+#define COMSIG_ITEM_FRIED "item_fried"
+ #define COMSIG_FRYING_HANDLED (1<<0)
+///From /datum/component/edible/on_compost(source, /mob/living/user)
+#define COMSIG_EDIBLE_ON_COMPOST "on_compost"
+ // Used to stop food from being composted.
+ #define COMPONENT_EDIBLE_BLOCK_COMPOST 1
//Gibs
#define COMSIG_GIBS_STREAK "gibs_streak" // from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 77f211c97148..b248161df8ed 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -453,24 +453,21 @@
* Otherwise it simply forceMoves the atom into this atom
*/
/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R)
- SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
- if(parts_list, datum/crafting_recipe/R)
SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R)
if(parts_list)
- for(var/A in parts_list)
- if(istype(A, /datum/reagent))
- if(!reagents)
- reagents = new()
- reagents.reagent_list.Add(A)
- reagents.conditional_update()
- else if(ismovable(A))
- var/atom/movable/M = A
- if(isliving(M.loc))
- var/mob/living/L = M.loc
- L.transferItemToLoc(M, src)
- else
- M.forceMove(src)
- SEND_SIGNAL(M, COMSIG_ATOM_USED_IN_CRAFT, src)
+ for(var/A in parts_list)
+ if(istype(A, /datum/reagent))
+ if(!reagents)
+ reagents = new()
+ reagents.reagent_list.Add(A)
+ reagents.conditional_update()
+ else if(ismovable(A))
+ var/atom/movable/M = A
+ if(isliving(M.loc))
+ var/mob/living/L = M.loc
+ L.transferItemToLoc(M, src)
+ else
+ M.forceMove(src)
parts_list.Cut()
///Take air from the passed in gas mixture datum
diff --git a/shiptest.dme b/shiptest.dme
index 9f03241da9cb..35d7345c269f 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -643,16 +643,6 @@
#include "code\datums\elements\food\dunkable.dm"
#include "code\datums\elements\food\food_trash.dm"
#include "code\datums\elements\food\processable.dm"
-#include "code\datums\enumeration\callback_enumerator.dm"
-#include "code\datums\enumeration\enumeration_operations.dm"
-#include "code\datums\enumeration\enumerator.dm"
-#include "code\datums\enumeration\list_dereferencer_enumerator.dm"
-#include "code\datums\enumeration\list_enumerator.dm"
-#include "code\datums\enumeration\safe_enumerator.dm"
-#include "code\datums\greyscale\_greyscale_config.dm"
-#include "code\datums\greyscale\greyscale_configs.dm"
-#include "code\datums\greyscale\json_reader.dm"
-#include "code\datums\greyscale\layer.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\icon_snapshot.dm"
@@ -1236,7 +1226,6 @@
#include "code\game\objects\items\food\bread.dm"
#include "code\game\objects\items\food\cake.dm"
#include "code\game\objects\items\food\spaghetti.dm"
-#include "code\game\objects\items\grenades\_grenade.dm"
#include "code\game\objects\items\grenades\antigravity.dm"
#include "code\game\objects\items\grenades\chem_grenade.dm"
#include "code\game\objects\items\grenades\clusterbuster.dm"
From 13248b952af8c1224683ffc0002c73de868f2fd7 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 17:42:50 -0700
Subject: [PATCH 03/14] This commit is far too large
---
code/__DEFINES/dcs/signals.dm | 30 +++++-----
code/__DEFINES/food.dm | 56 +++++++++++++++----
code/__HELPERS/string_lists.dm | 14 -----
code/__HELPERS/unsorted.dm | 4 +-
code/datums/components/food/edible.dm | 8 ++-
code/datums/elements/dunkable.dm | 36 ------------
code/datums/elements/food/dunkable.dm | 3 +
code/datums/traits/negative.dm | 2 +-
code/game/atoms.dm | 28 +++++-----
code/game/objects/items.dm | 7 +--
code/game/objects/items/RSF.dm | 9 ---
code/game/objects/items/food/bread.dm | 4 +-
code/game/objects/items/food/cake.dm | 24 +-------
code/game/objects/items/storage/bags.dm | 4 +-
.../structures/icemoon/cave_entrance.dm | 6 --
code/modules/cargo/packs/food.dm | 6 +-
code/modules/events/wizard/rpgloot.dm | 16 ++----
code/modules/food_and_drinks/drinks/drinks.dm | 2 +-
code/modules/food_and_drinks/food.dm | 2 +-
code/modules/food_and_drinks/food/snacks.dm | 2 +-
.../food_and_drinks/food/snacks/dough.dm | 1 -
.../food_and_drinks/food/snacks_pastry.dm | 2 +-
.../recipes/tablecraft/recipes_bread.dm | 13 -----
.../recipes/tablecraft/recipes_cake.dm | 23 --------
.../recipes/tablecraft/recipes_drink.dm | 2 +-
.../recipes/tablecraft/recipes_sandwich.dm | 2 +-
code/modules/mapping/mapping_helpers.dm | 7 ---
.../mob/living/simple_animal/friendly/cat.dm | 20 -------
code/modules/mob/living/taste.dm | 2 +-
code/modules/paperwork/fax.dm | 9 +--
.../chemistry/reagents/food_reagents.dm | 4 +-
.../chemistry/recipes/slime_extracts.dm | 2 +-
.../xenobiology/crossbreeding/_misc.dm | 2 +-
.../xenobiology/crossbreeding/burning.dm | 2 +
.../xenobiology/crossbreeding/industrial.dm | 2 +
.../research/xenobiology/xenobiology.dm | 2 +
code/modules/vending/sustenance.dm | 2 +-
shiptest.dme | 9 ++-
38 files changed, 125 insertions(+), 244 deletions(-)
delete mode 100644 code/datums/elements/dunkable.dm
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 677582579b26..f61e71ab847e 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -161,19 +161,6 @@
///for when an atom has been created through processing (atom/original_atom, list/chosen_processing_option)
#define COMSIG_ATOM_CREATEDBY_PROCESSING "atom_createdby_processing"
///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act"
-///from base of atom/wrench_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_WRENCH_ACT "atom_wrench_act"
-///from base of atom/multitool_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_MULTITOOL_ACT "atom_multitool_act"
-///from base of atom/welder_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_WELDER_ACT "atom_welder_act"
-///from base of atom/wirecutter_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_WIRECUTTER_ACT "atom_wirecutter_act"
-///from base of atom/crowbar_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_CROWBAR_ACT "atom_crowbar_act"
-///from base of atom/analyser_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_ANALYSER_ACT "atom_analyser_act"
#define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
///called when teleporting into a protected turf: (channel, turf/origin)
#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport"
@@ -184,6 +171,14 @@
#define COMSIG_ATOM_ORBIT_BEGIN "atom_orbit_begin"
///called when an atom stops orbiting another atom: (atom)
#define COMSIG_ATOM_ORBIT_STOP "atom_orbit_stop"
+
+/* Attack signals. They should share the returned flags, to standardize the attack chain. */
+/// tool_act -> pre_attack -> target.attackby (item.attack) -> afterattack
+ ///Ends the attack chain. If sent early might cause posterior attacks not to happen.
+ #define COMPONENT_CANCEL_ATTACK_CHAIN (1<<0)
+ ///Skips the specific attack step, continuing for the next one to happen.
+ #define COMPONENT_SKIP_ATTACK (1<<1)
+
///from base of atom/attack_ghost(): (mob/dead/observer/ghost)
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost"
///from base of atom/attack_hand(): (mob/user)
@@ -550,11 +545,18 @@
#define COMSIG_ITEM_OFFERING "item_offering"
///Interrupts the offer proc
#define COMPONENT_OFFER_INTERRUPT (1<<0)
+
///Called when an someone tries accepting an offered item, from [/obj/item/proc/on_offer_taken(mob/living/carbon/offerer, mob/living/carbon/taker)]
#define COMSIG_ITEM_OFFER_TAKEN "item_offer_taken"
///Interrupts the offer acceptance
#define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0)
-/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params)
+
+///for any tool behaviors: (mob/living/user, obj/item/I, list/recipes)
+#define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_act_[tooltype]"
+ #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
+//not widely used yet, but has lot of potential
+
+///sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params)
#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked"
// /obj/item signals for economy
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index e1fb3fbf55f7..5313de6b2626 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -1,24 +1,56 @@
#define MEAT (1<<0)
-#define VEGETABLES (1<<1)
-#define RAW (1<<2)
-#define JUNKFOOD (1<<3)
-#define GRAIN (1<<4)
-#define FRUIT (1<<5)
-#define DAIRY (1<<6)
-#define FRIED (1<<7)
-#define ALCOHOL (1<<8)
-#define SUGAR (1<<9)
-#define GROSS (1<<10)
-#define TOXIC (1<<11)
+#define VEGETABLES (1<<1)
+#define RAW (1<<2)
+#define JUNKFOOD (1<<3)
+#define GRAIN (1<<4)
+#define FRUIT (1<<5)
+#define DAIRY (1<<6)
+#define FRIED (1<<7)
+#define ALCOHOL (1<<8)
+#define SUGAR (1<<9)
+#define GROSS (1<<10)
+#define TOXIC (1<<11)
#define PINEAPPLE (1<<12)
#define BREAKFAST (1<<13)
-#define CLOTH (1<<14)
+#define CLOTH (1<<14)
+#define GRILLED (1<<15)
+/*
+#define NUTS (1<<16)
+#define SEAFOOD (1<<17)
+#define ORANGES (1<<18) wip
+#define BUGS (1<<19)
+*/
+#define GORE (1<<20)
+
+/// IC meaning (more or less) for food flags
+#define FOOD_FLAGS_IC list( \
+ "Meat", \
+ "Vegetables", \
+ "Raw food", \
+ "Junk food", \
+ "Grain", \
+ "Fruits", \
+ "Dairy products", \
+ "Fried food", \
+ "Alcohol", \
+ "Sugary food", \
+ "Gross food", \
+ "Toxic food", \
+ "Pineapples", \
+ "Breakfast food", \
+ "Clothing", \
+ "Nuts", \
+ "Seafood", \
+ "Oranges", \
+ "Bugs", \
+)
#define DRINK_BAD 1
#define DRINK_NICE 2
#define DRINK_GOOD 3
#define DRINK_VERYGOOD 4
#define DRINK_FANTASTIC 5
+#define DRINK_AMAZING 6
/// Food is "in a container", not in a code sense, but in a literal sense (canned foods)
#define FOOD_IN_CONTAINER (1<<0)
diff --git a/code/__HELPERS/string_lists.dm b/code/__HELPERS/string_lists.dm
index 5ace769133eb..5b3646def6e1 100644
--- a/code/__HELPERS/string_lists.dm
+++ b/code/__HELPERS/string_lists.dm
@@ -1,19 +1,5 @@
GLOBAL_LIST_EMPTY(string_lists)
-/**
- * Caches lists with non-numeric stringify-able values (text or typepath).
- */
-/datum/proc/string_list(list/values)
- var/string_id = values.Join("-")
-
- . = GLOB.string_lists[string_id]
-
- if(.)
- return
-
- return GLOB.string_lists[string_id] = values
-GLOBAL_LIST_EMPTY(string_lists)
-
/**
* Caches lists with non-numeric stringify-able values (text or typepath).
*/
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 8e9a1dbc9979..9b9d66cae5e4 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1456,7 +1456,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
else if(isatom(target))
var/atom/the_atom2 = target
REMOVE_TRAIT(the_atom2,trait,source)
-
+/*
/proc/get_random_food()
var/list/blocked = list(/obj/item/reagent_containers/food/snacks/store/bread,
/obj/item/reagent_containers/food/snacks/breadslice,
@@ -1482,7 +1482,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable)
return pick(subtypesof(/obj/item/reagent_containers/food/snacks) - blocked)
-
+*/
/proc/get_random_drink()
var/list/blocked = list(/obj/item/reagent_containers/food/drinks/soda_cans,
/obj/item/reagent_containers/food/drinks/bottle
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
index 89d8a52d67d9..c288effea931 100644
--- a/code/datums/components/food/edible.dm
+++ b/code/datums/components/food/edible.dm
@@ -29,10 +29,14 @@ Behavior that's still missing from this component that original food items had t
var/junkiness = 0
///Message to send when eating
var/list/eatverbs
+ ///Callback to be ran before you eat something, so you can check if someone *can* eat it.
+ var/datum/callback/pre_eat
///Callback to be ran for when you take a bite of something
var/datum/callback/after_eat
///Callback to be ran for when you finish eating something
var/datum/callback/on_consume
+ ///Callback to be ran before composting something, in case you don't want a piece of food to be compostable for some reason.
+ var/datum/callback/on_compost
///Last time we checked for food likes
var/last_check_time
///The initial reagents of this food when it is made
@@ -149,7 +153,7 @@ Behavior that's still missing from this component that original food items had t
else
examine_list += "[parent] was bitten multiple times!"
-/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
+/datum/component/edible/proc/use_from_hand(obj/item/source, mob/living/M, mob/living/user)
SIGNAL_HANDLER
return TryToEat(M, user)
@@ -391,7 +395,7 @@ Behavior that's still missing from this component that original food items had t
return TRUE
///Check foodtypes to see if we should send a moodlet
-/datum/component/edible/proc/checkLiked(fraction, mob/M)
+/datum/component/edible/proc/check_liked(fraction, mob/M)
if(last_check_time + 50 > world.time)
return FALSE
if(!ishuman(M))
diff --git a/code/datums/elements/dunkable.dm b/code/datums/elements/dunkable.dm
deleted file mode 100644
index 1eaee1d8cbbc..000000000000
--- a/code/datums/elements/dunkable.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-// If an item has the dunkable element, it's able to be dunked into reagent containers like beakers and glasses.
-// Dunking the item into a container will transfer reagents from the container to the item.
-/datum/element/dunkable
- element_flags = ELEMENT_BESPOKE
- id_arg_index = 2
- var/dunk_amount // the amount of reagents that will be transfered from the container to the item on each click
-
-/datum/element/dunkable/Attach(datum/target, amount_per_dunk)
- . = ..()
- if(!isitem(target))
- return ELEMENT_INCOMPATIBLE
- dunk_amount = amount_per_dunk
- RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(get_dunked))
-
-/datum/element/dunkable/Detach(datum/target)
- . = ..()
- UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK)
-
-/datum/element/dunkable/proc/get_dunked(datum/source, atom/target, mob/user, proximity_flag)
- SIGNAL_HANDLER
-
- if(!proximity_flag) // if the user is not adjacent to the container
- return
- var/obj/item/reagent_containers/container = target // the container we're trying to dunk into
- if(istype(container) && container.reagent_flags & DUNKABLE) // container should be a valid target for dunking
- if(!container.is_drainable())
- to_chat(user, "[container] is unable to be dunked in!")
- return
- var/obj/item/I = source // the item that has the dunkable element
- if(container.reagents.trans_to(I, dunk_amount, transfered_by = user)) //if reagents were transfered, show the message
- to_chat(user, "You dunk \the [I] into \the [container].")
- return
- if(!container.reagents.total_volume)
- to_chat(user, "[container] is empty!")
- else
- to_chat(user, "[I] is full!")
diff --git a/code/datums/elements/food/dunkable.dm b/code/datums/elements/food/dunkable.dm
index 80661d5c4ac0..592b4be7e3de 100644
--- a/code/datums/elements/food/dunkable.dm
+++ b/code/datums/elements/food/dunkable.dm
@@ -17,8 +17,11 @@
UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK)
/datum/element/dunkable/proc/get_dunked(datum/source, atom/target, mob/user, proximity_flag)
+ SIGNAL_HANDLER
+
if(!proximity_flag) // if the user is not adjacent to the container
return
+
var/obj/item/reagent_containers/container = target // the container we're trying to dunk into
if(istype(container) && container.reagent_flags & DUNKABLE) // container should be a valid target for dunking
if(!container.is_drainable())
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 2f96084223e9..6e1f93840fd5 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -105,7 +105,7 @@
if("Clown")
heirloom_type = /obj/item/bikehorn/golden
if("Mime")
- heirloom_type = /obj/item/reagent_containers/food/snacks/baguette
+ heirloom_type = /obj/item/food/baguette
if("Janitor")
heirloom_type = pick(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap)
if("Cook")
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index b248161df8ed..2f244e2fae6c 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1284,19 +1284,19 @@
return TRUE
switch(tool_type)
if(TOOL_CROWBAR)
- . = crowbar_act(user, I)
+ crowbar_act(user, I)
if(TOOL_MULTITOOL)
- . = multitool_act(user, I)
+ multitool_act(user, I)
if(TOOL_SCREWDRIVER)
- . = screwdriver_act(user, I)
+ screwdriver_act(user, I)
if(TOOL_WRENCH)
- . = wrench_act(user, I)
+ wrench_act(user, I)
if(TOOL_WIRECUTTER)
- . = wirecutter_act(user, I)
+ wirecutter_act(user, I)
if(TOOL_WELDER)
- . = welder_act(user, I)
+ welder_act(user, I)
if(TOOL_ANALYZER)
- . = analyzer_act(user, I)
+ analyzer_act(user, I)
if(. || signal_result & COMPONENT_BLOCK_TOOL_ATTACK) //Either the proc or the signal handled the tool's events in some way.
return TRUE
@@ -1343,11 +1343,11 @@
///Crowbar act
/atom/proc/crowbar_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_CROWBAR_ACT, user, I)
+ return
///Multitool act
/atom/proc/multitool_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_MULTITOOL_ACT, user, I)
+ return
///Check if the multitool has an item in it's data buffer
/atom/proc/multitool_check_buffer(user, obj/item/I, silent = FALSE)
@@ -1359,23 +1359,23 @@
///Screwdriver act
/atom/proc/screwdriver_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_SCREWDRIVER_ACT, user, I)
+ return
///Wrench act
/atom/proc/wrench_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_WRENCH_ACT, user, I)
+ return
///Wirecutter act
/atom/proc/wirecutter_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_WIRECUTTER_ACT, user, I)
+ return
///Welder act
/atom/proc/welder_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_WELDER_ACT, user, I)
+ return
///Analyzer act
/atom/proc/analyzer_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_ANALYSER_ACT, user, I)
+ return
///Generate a tag for this atom
/atom/proc/GenerateTag()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index f380bc6bfa52..6c23c829b98b 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -249,9 +249,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
updateEmbedding()
- if(GLOB.rpg_loot_items)
- AddComponent(/datum/component/fantasy)
-
if(sharpness) //give sharp objects butchering functionality, for consistency
AddComponent(/datum/component/butchering, 80 * toolspeed)
@@ -1080,7 +1077,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
* * discover_after - if the item will be discovered after being chomped (FALSE will usually mean it was swallowed, TRUE will usually mean it was bitten into and discovered)
*/
/obj/item/proc/on_accidental_consumption(mob/living/carbon/victim, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE)
- if(is_sharp() && force >= 5) //if we've got something sharp with a decent force (ie, not plastic)
+ if(get_sharpness() && force >= 5) //if we've got something sharp with a decent force (ie, not plastic)
INVOKE_ASYNC(victim, TYPE_PROC_REF(/mob, emote), "scream")
victim.visible_message("[victim] looks like [victim.p_theyve()] just bit something they shouldn't have!", \
"OH GOD! Was that a crunch? That didn't feel good at all!!")
@@ -1111,7 +1108,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
found_mats++
//if there's glass in it and the glass is more than 60% of the item, then we can shatter it
- if(custom_materials[getmaterialref(/datum/material/glass)] >= total_material_amount * 0.60)
+ if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)] >= total_material_amount * 0.60)
if(prob(66)) //66% chance to break it
/// The glass shard that is spawned into the source item
var/obj/item/shard/broken_glass = new /obj/item/shard(loc)
diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm
index d82a37d5ee6d..abf7ba9b7e3c 100644
--- a/code/game/objects/items/RSF.dm
+++ b/code/game/objects/items/RSF.dm
@@ -153,8 +153,6 @@ RSF
discriptor = "cookie-units"
action_type = "Fabricates"
to_dispense = /obj/item/reagent_containers/food/snacks/cookie
- ///Tracks whether or not the cookiesynth is about to print a poisoned cookie
- var/toxin = FALSE //This might be better suited to some initialize fuckery, but I don't have a good "poisoned" sprite
///Holds a copy of world.time taken the last time the synth gained a charge. Used with cooldowndelay to track when the next charge should be gained
var/cooldown = 0
///The period between recharges
@@ -179,15 +177,8 @@ RSF
to_chat(user, "You reset [src]'s reagent safety checker!")
/obj/item/rsf/cookiesynth/attack_self(mob/user)
- var/mob/living/silicon/robot/P = null
if(iscyborg(user))
P = user
- if(((obj_flags & EMAGGED) || (P && P.emagged)) && !toxin)
- toxin = TRUE
- to_dispense = /obj/item/reagent_containers/food/snacks/cookie/sleepy
- to_chat(user, "Cookie Synthesizer hacked.")
- else
- toxin = FALSE
to_dispense = /obj/item/reagent_containers/food/snacks/cookie
to_chat(user, "Cookie Synthesizer reset.")
diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm
index 87cddc63be1a..220456bfa077 100644
--- a/code/game/objects/items/food/bread.dm
+++ b/code/game/objects/items/food/bread.dm
@@ -268,7 +268,7 @@
icon = 'icons/obj/food/burgerbread.dmi'
icon_state = "baguette"
item_state = null
- worn_icon_state = "baguette"
+ mob_overlay_icon = "baguette"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
/datum/reagent/consumable/nutriment/vitamin = 3
@@ -333,7 +333,7 @@
plane = initial(plane)
lefthand_file = fried.lefthand_file
righthand_file = fried.righthand_file
- worn_icon_state = fried.worn_icon_state
+ mob_overlay_icon = fried.mob_overlay_icon
desc = fried.desc
w_class = fried.w_class
slowdown = fried.slowdown
diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm
index 7bfd1c7f0ec1..fb2e24590c0e 100644
--- a/code/game/objects/items/food/cake.dm
+++ b/code/game/objects/items/food/cake.dm
@@ -349,26 +349,6 @@
tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3)
foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
-/obj/item/food/cake/bscc // blackbarry strawberries chocolate cake
- name = "blackberry and strawberry chocolate cake"
- desc = "A chocolate cake, filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_coco_cake"
- food_reagents = list(
- /datum/reagent/consumable/nutriment = 20,
- /datum/reagent/consumable/nutriment/vitamin = 5,
- /datum/reagent/consumable/cocoa = 5
- )
- tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3)
- foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
- slice_type = /obj/item/food/cakeslice/bscc
-
-/obj/item/food/cakeslice/bscc
- name = "blackberry and strawberry chocolate cake slice"
- desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
- icon_state = "blackbarry_strawberries_cake_coco_slice"
- tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3)
- foodtypes = GRAIN | DAIRY | FRUIT | SUGAR
-
/obj/item/food/cake/holy_cake
name = "angel food cake"
desc = "A cake made for angels and chaplains alike! Contains holy water."
@@ -421,7 +401,7 @@
/datum/reagent/consumable/nutriment = 20,
/datum/reagent/consumable/nutriment/vitamin = 5,
/datum/reagent/toxin/acid = 15,
- /datum/reagent/oil = 15
+ /datum/reagent/fuel/oil = 15
)
tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
foodtypes = GRAIN | GROSS
@@ -435,7 +415,7 @@
/datum/reagent/consumable/nutriment = 4,
/datum/reagent/consumable/nutriment/vitamin = 1,
/datum/reagent/toxin/acid = 3,
- /datum/reagent/oil = 3
+ /datum/reagent/fuel/oil = 3
)
tastes = list("acid" = 3, "metal" = 4, "glass" = 5)
foodtypes = GRAIN | GROSS
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 2cc81075125c..c9da5056e963 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -520,9 +520,7 @@
STR.max_combined_w_class = 32
STR.max_items = 32
STR.display_numerical_stacking = FALSE
- STR.can_hold = typecacheof (list( /obj/item/mail,
- /obj/item/small_delivery,
- /obj/item/paper,
+ STR.can_hold = typecacheof(list( /obj/item/paper,
/obj/item/reagent_containers/food/condiment/milk,
/obj/item/food/bread/plain
))
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index 9fc83f9ddc88..7c62dd1301d0 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -871,12 +871,6 @@ GLOBAL_LIST_INIT(ore_probability, list(
if(prob(55))
new /obj/item/clothing/gloves/butchering(loc)
new /mob/living/simple_animal/hostile/killertomato(loc)
- if(prob(45))
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- new /obj/item/reagent_containers/food/snacks/store/bread/meat(loc)
- if(prob(55))
- new /obj/item/reagent_containers/food/snacks/store/cake/trumpet(loc)
if(prob(35))
new /obj/item/reagent_containers/food/snacks/pizza/dank(loc)
new /mob/living/simple_animal/hostile/killertomato(loc)
diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm
index f383e4e706f1..afbc3d64e4f7 100644
--- a/code/modules/cargo/packs/food.dm
+++ b/code/modules/cargo/packs/food.dm
@@ -164,9 +164,9 @@
desc = "A crate full of various breads. Bready to either be eaten or made into delicious meals."
cost = 1000
contains = list(/obj/item/reagent_containers/food/snacks/store/bread/plain,
- /obj/item/reagent_containers/food/snacks/breadslice/plain,
- /obj/item/reagent_containers/food/snacks/breadslice/plain,
- /obj/item/reagent_containers/food/snacks/breadslice/plain, //Weighted to be more common
+ /obj/item/food/breadslice/plain,
+ /obj/item/food/breadslice/plain,
+ /obj/item/food/breadslice/plain, //Weighted to be more common
/obj/item/reagent_containers/food/snacks/bun,
/obj/item/reagent_containers/food/snacks/tortilla,
/obj/item/reagent_containers/food/snacks/pizzabread
diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm
index b2719c03a78f..73ef746e85c6 100644
--- a/code/modules/events/wizard/rpgloot.dm
+++ b/code/modules/events/wizard/rpgloot.dm
@@ -31,15 +31,12 @@
/obj/item/upgradescroll
name = "item fortification scroll"
- desc = "Somehow, this piece of paper can be applied to items to make them \"better\". Apparently there's a risk of losing the item if it's already \"too good\". This all feels so arbitrary..."
+ desc = "Some stupid LARPing crap. You can't even believe the junk you're reading."
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
- w_class = WEIGHT_CLASS_TINY
-
- var/upgrade_amount = 1
- var/can_backfire = TRUE
- var/uses = 1
+ w_class = WEIGHT_CLASS_SMALL
+/*
/obj/item/upgradescroll/afterattack(obj/item/target, mob/user , proximity)
. = ..()
if(!proximity || !istype(target))
@@ -49,9 +46,4 @@
if(--uses <= 0)
qdel(src)
-
-/obj/item/upgradescroll/unlimited
- name = "unlimited foolproof item fortification scroll"
- desc = "Somehow, this piece of paper can be applied to items to make them \"better\". This scroll is made from the tongues of dead paper wizards, and can be used an unlimited number of times, with no drawbacks."
- uses = INFINITY
- can_backfire = FALSE
+*/
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 73d3519a138d..0e8c4e357ade 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -48,7 +48,7 @@
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(gulp_size/reagents.total_volume, 1)
- checkLiked(fraction, M)
+ check_liked(fraction, M)
reagents.trans_to(M, gulp_size, transfered_by = user, method = INGEST)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
return TRUE
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 38e68b50a24f..e88a8c8b0163 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -22,7 +22,7 @@
pixel_y = rand(-5, 5)
ADD_TRAIT(src, FISHING_BAIT_TRAIT, INNATE_TRAIT)
-/obj/item/reagent_containers/food/proc/checkLiked(fraction, mob/M)
+/obj/item/reagent_containers/food/proc/check_liked(fraction, mob/M)
if(last_check_time + 50 < world.time)
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index fb3525a795bb..d0d19f5746ef 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -155,7 +155,7 @@ All foods are distributed among various categories. Use common sense.
reagents.trans_to(M, bitesize, transfered_by = user, method = INGEST)
bitecount++
On_Consume(M)
- checkLiked(fraction, M)
+ check_liked(fraction, M)
return TRUE
return 0
diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm
index 4f5f06379927..8e6722c22542 100644
--- a/code/modules/food_and_drinks/food/snacks/dough.dm
+++ b/code/modules/food_and_drinks/food/snacks/dough.dm
@@ -65,7 +65,6 @@
tastes = list("dough" = 1)
foodtype = GRAIN
-
/obj/item/reagent_containers/food/snacks/bun
name = "bun"
desc = "A base for any self-respecting burger."
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index ddc57e425b1a..bc8087322cc9 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -43,7 +43,7 @@
/obj/item/reagent_containers/food/snacks/donut/proc/in_box_sprite()
return "[icon_state]_inbox"
-/obj/item/reagent_containers/food/snacks/donut/checkLiked(fraction, mob/M) //Sec officers always love donuts
+/obj/item/reagent_containers/food/snacks/donut/check_liked(fraction, mob/M) //Sec officers always love donuts
if(last_check_time + 50 < world.time)
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
index d4dab76aa945..1ffda35477b9 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
@@ -103,19 +103,6 @@
result = /obj/item/food/butterdog
subcategory = CAT_BREAD
-/datum/crafting_recipe/food/moldybread // why would you make this?
- name = "Moldy Bread"
- reqs = list(
- /obj/item/food/bread/plain = 1,
- /obj/item/organ/ears/cat = 1,
- /obj/item/organ/tail/cat = 1,
- /obj/item/reagent_containers/food/snacks/meat/slab = 3,
- /datum/reagent/blood = 50,
- /datum/reagent/medicine/strange_reagent = 5
- )
- result = /mob/living/simple_animal/pet/cat/breadcat
- subcategory = CAT_BREAD
-
/datum/crafting_recipe/food/hotdog
name = "Hot dog"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index 31ff03ba75bf..f85613dc7e4e 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -181,18 +181,6 @@
result = /obj/item/food/cake/vanilla_cake
subcategory = CAT_CAKE
-/datum/crafting_recipe/food/trumpetcake
- name = "Spaceman's Cake"
- reqs = list(
- /obj/item/food/cake/plain = 1,
- /obj/item/reagent_containers/food/snacks/grown/flower/trumpet = 2,
- /datum/reagent/consumable/cream = 5,
- /datum/reagent/consumable/berryjuice = 5
- )
- result = /obj/item/food/cake/trumpet
- subcategory = CAT_CAKE
-
-
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
@@ -206,14 +194,3 @@
)
result = /mob/living/simple_animal/pet/cat/cak
subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Felines
-
-/datum/crafting_recipe/food/popup_cake
- name = "Towering pile of cakes"
- reqs = list(
- /obj/item/food/cake/plain = 3,
- /datum/reagent/consumable/sugar = 10,
- /datum/reagent/consumable/cream = 5,
- /obj/item/bikehorn/airhorn = 1
- )
- result = /obj/structure/popout_cake
- subcategory = CAT_CAKE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
index 4e0ade4fa22d..7a89b78965f2 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
@@ -139,7 +139,7 @@
time = 30
reqs = list(
/obj/item/storage/bag/trash = 1,
- /obj/item/reagent_containers/food/snacks/breadslice/moldy = 1,
+ ///obj/item/reagent_containers/food/snacks/breadslice/moldy = 1,
/obj/item/reagent_containers/food/snacks/grown = 4,
/obj/item/reagent_containers/food/snacks/candy_corn = 2,
/datum/reagent/water = 15
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
index 022011d3bfc9..b8cefcb9bd80 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
@@ -55,7 +55,7 @@
/datum/crafting_recipe/food/blt
name = "BLT"
reqs = list(
- /obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
+ /obj/item/food/breadslice/plain = 2,
/obj/item/reagent_containers/food/snacks/meat/bacon = 2,
/obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
/obj/item/reagent_containers/food/snacks/grown/tomato = 1
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index e9ac7662edab..9e88f34750bc 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -277,13 +277,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
else
openturfs += thing
- //cake + knife to cut it!
- if(length(table))
- var/turf/food_turf = get_turf(pick(table))
- new /obj/item/kitchen/knife(food_turf)
- var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf)
- iancake.desc = "Happy birthday, Ian!"
-
//some balloons! this picks an open turf and pops a few balloons in and around that turf, yay.
for(var/i in 1 to balloon_clusters)
var/turf/clusterspot = pick_n_take(openturfs)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 90fd719abd07..646a3eb8436b 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -308,23 +308,3 @@
if(L.a_intent == INTENT_HARM && L.reagents && !stat)
L.reagents.add_reagent(/datum/reagent/consumable/nutriment, 0.4)
L.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.4)
-
-/mob/living/simple_animal/pet/cat/breadcat
- name = "bread cat"
- desc = "It's a cat... with a bread!"
- gender = MALE
- icon_state = "breadcat"
- icon_living = "breadcat"
- icon_dead = "breadcat_dead"
- collar_type = null
- held_state = "breadcat"
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2, /obj/item/organ/ears/cat = 1, /obj/item/organ/tail/cat = 1, /obj/item/organ/tongue/cat = 1, /obj/item/food/breadslice/plain = 1)
-
-/mob/living/simple_animal/pet/cat/halal
- name = "arabian cat"
- desc = "It's a cat with Agal on his head."
- gender = MALE
- icon_state = "cathalal"
- icon_living = "cathalal"
- collar_type = null
- held_state = "cathalal"
diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm
index df9fe8be6641..00029754f653 100644
--- a/code/modules/mob/living/taste.dm
+++ b/code/modules/mob/living/taste.dm
@@ -26,7 +26,7 @@
if(hallucination > 50 && prob(25))
text_output = pick("spiders","dreams","nightmares","the future","the past","victory",\
"defeat","pain","bliss","revenge","poison","time","space","death","life","truth","lies","justice","memory",\
- "regrets","your soul","suffering","music","noise","blood","hunger","the american way")
+ "regrets","your soul","suffering","music","noise","blood","hunger")
if((text_output != last_taste_text || last_taste_time + 100 < world.time) && (taste_sensitivity != NO_TASTE_SENSITIVITY))
to_chat(src, "You can taste [text_output].")
// "something indescribable" -> too many tastes, not enough flavor.
diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm
index 41381a2d3aa1..46efbd37db1e 100644
--- a/code/modules/paperwork/fax.dm
+++ b/code/modules/paperwork/fax.dm
@@ -36,14 +36,7 @@
/// List of types which should be allowed to be faxed if hacked
var/static/list/exotic_types = list(
/obj/item/reagent_containers/food/snacks/pizzaslice,
- /obj/item/reagent_containers/food/snacks/breadslice,
- /obj/item/reagent_containers/food/snacks/donkpocket,
- /obj/item/reagent_containers/food/snacks/cookie,
- /obj/item/reagent_containers/food/snacks/salami,
- /obj/item/reagent_containers/food/snacks/sugarcookie,
- /obj/item/reagent_containers/food/snacks/oatmealcookie,
- /obj/item/reagent_containers/food/snacks/raisincookie,
- /obj/item/reagent_containers/food/snacks/pancakes,
+ /obj/item/food/breadslice/plain,
/obj/item/throwing_star,
/obj/item/spacecash,
/obj/item/holochip,
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 692f7831a07b..6cffe2592127 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -34,7 +34,7 @@
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_verygood)
if (DRINK_FANTASTIC)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_fantastic)
- if (FOOD_AMAZING)
+ if (DRINK_AMAZING)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_food", /datum/mood_event/amazingtaste)
return ..()
@@ -754,7 +754,7 @@
nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#792300"
taste_description = "indescribable"
- quality = FOOD_AMAZING
+ quality = DRINK_AMAZING
taste_mult = 100
can_synth = FALSE
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 855f75fd0dc6..91c85415df32 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -149,7 +149,7 @@
..()
/datum/chemical_reaction/slime/slimebork/proc/getbork()
- return get_random_food()
+ return //get_random_food()
/datum/chemical_reaction/slime/slimebork/drinks
required_reagents = list(/datum/reagent/water = 1)
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
index 2af2ecf64689..8dfdc0289d1b 100644
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm
@@ -153,7 +153,7 @@ Slimecrossing Items
foodtype = null //Don't ask what went into them. You're better off not knowing.
list_reagents = list(/datum/reagent/consumable/nutriment/stabilized = 10, /datum/reagent/consumable/nutriment = 2) //Won't make you fat. Will make you question your sanity.
-/obj/item/reagent_containers/food/snacks/rationpack/checkLiked(fraction, mob/M) //Nobody likes rationpacks. Nobody.
+/obj/item/reagent_containers/food/snacks/rationpack/check_liked(fraction, mob/M) //Nobody likes rationpacks. Nobody.
if(last_check_time + 50 < world.time)
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index e9fd98232e2c..e928403d387e 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -133,6 +133,7 @@ Burning extracts:
colour = "silver"
effect_desc = "Creates a few pieces of slime jelly laced food."
+/*
/obj/item/slimecross/burning/silver/do_effect(mob/user)
var/amount = rand(3,6)
var/list/turfs = list()
@@ -146,6 +147,7 @@ Burning extracts:
O.desc += " It smells strange..."
user.visible_message("[src] produces a few pieces of food!")
..()
+*/
/obj/item/slimecross/burning/bluespace
colour = "bluespace"
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index da9387883f0c..456d02dcf7fd 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -115,9 +115,11 @@ Industrial extracts:
plasmarequired = 1
//Item picked below.
+/*
/obj/item/slimecross/industrial/silver/process()
itempath = pick(list(get_random_food(), get_random_drink()))
..()
+*/
/obj/item/slimecross/industrial/bluespace
colour = "bluespace"
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 113f130562de..d697752795b0 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -155,6 +155,7 @@
/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
switch(activation_type)
+ /*
if(SLIME_ACTIVATE_MINOR)
var/food_type = get_random_food()
var/obj/O = new food_type
@@ -163,6 +164,7 @@
playsound(user, 'sound/effects/splat.ogg', 50, TRUE)
user.visible_message("[user] spits out [O]!", "You spit out [O]!")
return 200
+ */
if(SLIME_ACTIVATE_MAJOR)
var/drink_type = get_random_drink()
var/obj/O = new drink_type
diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm
index aa8ae97fb112..7082a385a2f1 100644
--- a/code/modules/vending/sustenance.dm
+++ b/code/modules/vending/sustenance.dm
@@ -7,7 +7,7 @@
icon_state = "sustenance"
products = list(
/obj/item/reagent_containers/food/snacks/tofu/prison = 24,
- /obj/item/reagent_containers/food/snacks/breadslice/moldy = 15,
+ ///obj/item/reagent_containers/food/snacks/breadslice/moldy = 15, after newfood is finished fix this
/obj/item/reagent_containers/food/drinks/ice/prison = 12,
/obj/item/reagent_containers/food/snacks/candy_corn/prison = 6)
contraband = list(
diff --git a/shiptest.dme b/shiptest.dme
index 35d7345c269f..ab730aefb95d 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -196,7 +196,6 @@
#include "code\__HELPERS\stat_tracking.dm"
#include "code\__HELPERS\string_assoc_lists.dm"
#include "code\__HELPERS\string_lists.dm"
-#include "code\__HELPERS\stoplag.dm"
#include "code\__HELPERS\text.dm"
#include "code\__HELPERS\time.dm"
#include "code\__HELPERS\type2type.dm"
@@ -467,7 +466,8 @@
#include "code\datums\components\creamed.dm"
#include "code\datums\components\deadchat_control.dm"
#include "code\datums\components\dejavu.dm"
-#include "code\datums\components\drift.dm"
+#include "code\datums\components\deployable.dm"
+#include "code\datums\components\earprotection.dm"
#include "code\datums\components\edit_complainer.dm"
#include "code\datums\components\embedded.dm"
#include "code\datums\components\empprotection.dm"
@@ -536,6 +536,10 @@
#include "code\datums\components\crafting\guncrafting.dm"
#include "code\datums\components\crafting\recipes.dm"
#include "code\datums\components\crafting\tailoring.dm"
+#include "code\datums\components\fantasy\_fantasy.dm"
+#include "code\datums\components\fantasy\affix.dm"
+#include "code\datums\components\fantasy\prefixes.dm"
+#include "code\datums\components\fantasy\suffixes.dm"
#include "code\datums\components\food\edible.dm"
#include "code\datums\components\food\food_storage.dm"
#include "code\datums\components\plumbing\_plumbing.dm"
@@ -620,7 +624,6 @@
#include "code\datums\elements\cleaning.dm"
#include "code\datums\elements\connect_loc.dm"
#include "code\datums\elements\digitalcamo.dm"
-#include "code\datums\elements\dunkable.dm"
#include "code\datums\elements\earhealing.dm"
#include "code\datums\elements\embed.dm"
#include "code\datums\elements\firestacker.dm"
From e34d210e15e78948fabd1ea62ed1c8ef173c5c47 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 17:56:17 -0700
Subject: [PATCH 04/14] This commit now compiles
---
code/datums/components/food/edible.dm | 2 +-
code/datums/components/remote_materials.dm | 2 +-
code/datums/components/rotation.dm | 2 +-
code/game/objects/items/RSF.dm | 53 -------------------
code/game/objects/items/food/bread.dm | 2 +-
code/game/turfs/open/floor/conc_floor.dm | 3 +-
code/modules/cargo/packs/food.dm | 17 +++---
.../clothing/outfits/ert/frontiersmen_ert.dm | 1 -
.../recipes/tablecraft/recipes_cake.dm | 24 ---------
.../mob/living/silicon/robot/robot_modules.dm | 1 -
10 files changed, 16 insertions(+), 91 deletions(-)
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
index c288effea931..11149717e7f8 100644
--- a/code/datums/components/food/edible.dm
+++ b/code/datums/components/food/edible.dm
@@ -288,7 +288,7 @@ Behavior that's still missing from this component that original food items had t
var/time_to_eat = (eater = feeder) ? eat_time : EAT_TIME_FORCE_FEED
if(eater == feeder)//If you're eating it yourself.
- if(eat_time && !do_after(feeder, time_to_eat, eater, timed_action_flags = food_flags & FOOD_FINGER_FOOD ? IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE : NONE)) //Gotta pass the minimal eat time
+ if(eat_time && !do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time
return
if(IsFoodGone(owner, feeder))
return
diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm
index de61c13ae295..8abead8429f9 100644
--- a/code/datums/components/remote_materials.dm
+++ b/code/datums/components/remote_materials.dm
@@ -24,7 +24,7 @@ handles linking back and forth.
src.allow_standalone = allow_standalone
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(OnAttackBy))
- RegisterSignal(parent, COMSIG_ATOM_MULTITOOL_ACT, PROC_REF(OnMultitool))
+ //RegisterSignal(parent, COMSIG_ATOM_MULTITOOL_ACT, PROC_REF(OnMultitool)) todo: port component rework of multitool buffers (bee)
if (allow_standalone)
_MakeLocal()
diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm
index 506d744d6c8c..eed9b8c1a46e 100644
--- a/code/datums/components/rotation.dm
+++ b/code/datums/components/rotation.dm
@@ -55,7 +55,7 @@
RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(HandRot))
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(ExamineMessage))
if(rotation_flags & ROTATION_WRENCH)
- RegisterSignal(parent, COMSIG_ATOM_WRENCH_ACT, PROC_REF(WrenchRot))
+ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(WrenchRot))
/datum/component/simple_rotation/proc/add_verbs()
if(rotation_flags & ROTATION_VERBS)
diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm
index abf7ba9b7e3c..b6a45e9e636e 100644
--- a/code/game/objects/items/RSF.dm
+++ b/code/game/objects/items/RSF.dm
@@ -141,56 +141,3 @@ RSF
if(istype(to_check, sort))
return TRUE
return FALSE
-
-/obj/item/rsf/cookiesynth
- name = "Cookie Synthesizer"
- desc = "A self-recharging device used to rapidly deploy cookies."
- icon_state = "rcd"
- spent_icon_state = "rcd"
- max_matter = 10
- cost_by_item = list()
- dispense_cost = 100
- discriptor = "cookie-units"
- action_type = "Fabricates"
- to_dispense = /obj/item/reagent_containers/food/snacks/cookie
- ///Holds a copy of world.time taken the last time the synth gained a charge. Used with cooldowndelay to track when the next charge should be gained
- var/cooldown = 0
- ///The period between recharges
- var/cooldowndelay = 10
-
-/obj/item/rsf/cookiesynth/Initialize()
- . = ..()
- START_PROCESSING(SSprocessing, src)
-
-/obj/item/rsf/cookiesynth/Destroy()
- STOP_PROCESSING(SSprocessing, src)
- return ..()
-
-/obj/item/rsf/cookiesynth/attackby()
- return
-
-/obj/item/rsf/cookiesynth/emag_act(mob/user)
- obj_flags ^= EMAGGED
- if(obj_flags & EMAGGED)
- to_chat(user, "You short out [src]'s reagent safety checker!")
- else
- to_chat(user, "You reset [src]'s reagent safety checker!")
-
-/obj/item/rsf/cookiesynth/attack_self(mob/user)
- if(iscyborg(user))
- P = user
- to_dispense = /obj/item/reagent_containers/food/snacks/cookie
- to_chat(user, "Cookie Synthesizer reset.")
-
-/obj/item/rsf/cookiesynth/process()
- matter = min(matter + 1, max_matter) //We add 1 up to a point
- if(matter >= max_matter)
- STOP_PROCESSING(SSprocessing, src)
-
-/obj/item/rsf/cookiesynth/afterattack(atom/A, mob/user, proximity)
- if(cooldown > world.time)
- return
- . = ..()
- cooldown = world.time + cooldowndelay
- if(!(datum_flags & DF_ISPROCESSING))
- START_PROCESSING(SSprocessing, src)
diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm
index 220456bfa077..9b7eb0fce3e6 100644
--- a/code/game/objects/items/food/bread.dm
+++ b/code/game/objects/items/food/bread.dm
@@ -37,7 +37,7 @@
/obj/item/food/bread/plain
name = "bread"
- desc = "Some plain old earthen bread."
+ desc = "Some plain old bread."
icon_state = "bread"
food_reagents = list(
/datum/reagent/consumable/nutriment = 10
diff --git a/code/game/turfs/open/floor/conc_floor.dm b/code/game/turfs/open/floor/conc_floor.dm
index 542ac66c1355..d60c1c87a66e 100644
--- a/code/game/turfs/open/floor/conc_floor.dm
+++ b/code/game/turfs/open/floor/conc_floor.dm
@@ -193,8 +193,7 @@
return // can't be easily replaced
/turf/open/floor/concrete/crowbar_act(mob/living/user, obj/item/I)
- return SEND_SIGNAL(src, COMSIG_ATOM_CROWBAR_ACT, user, I) // can't be pried up
-
+ return
/turf/open/floor/concrete/slab_1
icon_state = "conc_slab_1"
diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm
index afbc3d64e4f7..4e90b7b81e61 100644
--- a/code/modules/cargo/packs/food.dm
+++ b/code/modules/cargo/packs/food.dm
@@ -159,17 +159,22 @@
crate_type = /obj/structure/closet/crate/freezer
items = 10
-/datum/supply_pack/food/ingredients_randomized/bread
+/datum/supply_pack/food/ingredients_randomized/bread //bread :thumbsup:
name = "Bread Crate"
desc = "A crate full of various breads. Bready to either be eaten or made into delicious meals."
cost = 1000
- contains = list(/obj/item/reagent_containers/food/snacks/store/bread/plain,
- /obj/item/food/breadslice/plain,
- /obj/item/food/breadslice/plain,
- /obj/item/food/breadslice/plain, //Weighted to be more common
+ contains = list(/obj/item/food/bread/plain,
+ /obj/item/food/bread/plain,
+ /obj/item/food/bread/plain,
/obj/item/reagent_containers/food/snacks/bun,
+ /obj/item/reagent_containers/food/snacks/bun,
+ /obj/item/reagent_containers/food/snacks/bun,
+ /obj/item/reagent_containers/food/snacks/tortilla,
+ /obj/item/reagent_containers/food/snacks/tortilla,
/obj/item/reagent_containers/food/snacks/tortilla,
- /obj/item/reagent_containers/food/snacks/pizzabread
+ /obj/item/reagent_containers/food/snacks/pizzabread,
+ /obj/item/reagent_containers/food/snacks/pizzabread,
+ /obj/item/reagent_containers/food/snacks/pizzabread,
)
crate_name = "food crate"
crate_type = /obj/structure/closet/crate/freezer
diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm
index f0fd3bb81eb2..8b86caa71470 100644
--- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm
+++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm
@@ -59,7 +59,6 @@
/obj/item/storage/backpack/satchel = 20,
/obj/item/storage/backpack/messenger = 20,
/obj/item/melee/baton/cattleprod/loaded = 5,
- /obj/item/reagent_containers/food/snacks/baguette = 2, // yes you can put this on your back
/obj/item/deployable_turret_folded = 1,
))
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index f85613dc7e4e..bdc259fbeb5c 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -141,16 +141,6 @@
result = /obj/item/food/cake/hardware_cake
subcategory = CAT_CAKE
-/datum/crafting_recipe/food/bscccake
- name = "blackberry and strawberry chocolate cake"
- reqs = list(
- /obj/item/food/cake/plain = 1,
- /obj/item/reagent_containers/food/snacks/chocolatebar = 2,
- /obj/item/reagent_containers/food/snacks/grown/berries = 5
- )
- result = /obj/item/food/cake/bscc
- subcategory = CAT_CAKE
-
/datum/crafting_recipe/food/bscvcake
name = "blackberry and strawberry vanilla cake"
reqs = list(
@@ -180,17 +170,3 @@
)
result = /obj/item/food/cake/vanilla_cake
subcategory = CAT_CAKE
-
-/datum/crafting_recipe/food/cak
- name = "Living cat/cake hybrid"
- reqs = list(
- /obj/item/organ/brain = 1,
- /obj/item/organ/heart = 1,
- /obj/item/food/cake/birthday = 1,
- /obj/item/reagent_containers/food/snacks/meat/slab = 3,
- /datum/reagent/blood = 30,
- /datum/reagent/consumable/sprinkles = 5,
- /datum/reagent/teslium = 1 //To shock the whole thing into life
- )
- result = /mob/living/simple_animal/pet/cat/cak
- subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Felines
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 27819d97cf15..3b5f71ff3171 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -622,7 +622,6 @@
name = "Peacekeeper"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
- /obj/item/rsf/cookiesynth,
/obj/item/harmalarm,
/obj/item/reagent_containers/borghypo/peace,
/obj/item/holosign_creator/cyborg,
From fdea65643214128e0028b75ec3aa5e407c65ff22 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:04:04 -0700
Subject: [PATCH 05/14] asdsadfs
---
_maps/map_files/generic/CentCom.dmm | 22 ----------------------
1 file changed, 22 deletions(-)
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 817e02e67f2b..209466a1b2ef 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -11634,28 +11634,6 @@
/obj/effect/turf_decal/corner/transparent/neutral{
dir = 8
},
-/obj/merge_conflict_marker{
- name = "---Merge Conflict Marker---",desc = "A best-effort merge was performed. You must resolve this conflict yourself (manually) and remove this object once complete."
- },
-/obj/structure/closet/secure_closet/freezer/meat/open,
-/obj/item/reagent_containers/food/snacks/meat/slab/bear,
-/obj/item/reagent_containers/food/snacks/meat/slab/bear,
-/obj/item/reagent_containers/food/snacks/meat/slab/bear,
-/obj/item/reagent_containers/food/snacks/meat/slab/bear,
-/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
-/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
-/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
-/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
-/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
-/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
-/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
-/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
-/obj/item/food/spaghetti/raw,
-/obj/item/food/spaghetti/raw,
-/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
-/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
-/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
-/obj/effect/turf_decal/tile/neutral/fourcorners/contrasted,
/turf/open/floor/plasteel/dark,
/area/tdome/tdomeobserve)
"miW" = (
From 2006dbfeb64be78ffaf510cbf2ab183e0dba8e8e Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:05:20 -0700
Subject: [PATCH 06/14] Unit test
---
code/modules/unit_tests/serving_tray.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/unit_tests/serving_tray.dm b/code/modules/unit_tests/serving_tray.dm
index 9bd487ba68a8..f89272054500 100644
--- a/code/modules/unit_tests/serving_tray.dm
+++ b/code/modules/unit_tests/serving_tray.dm
@@ -6,7 +6,7 @@
var/obj/structure/table/the_table = allocate(/obj/structure/table)
var/obj/item/storage/bag/tray/test_tray = allocate(/obj/item/storage/bag/tray)
var/obj/item/reagent_containers/food/banana = allocate(/obj/item/reagent_containers/food/snacks/grown/banana)
- var/obj/item/reagent_containers/food/the_bread = allocate(/obj/item/reagent_containers/food/snacks/breadslice)
+ var/obj/item/reagent_containers/food/the_bread = allocate(/obj/item/food/breadslice/plain)
var/obj/item/reagent_containers/food/sugarcookie = allocate(/obj/item/reagent_containers/food/snacks/sugarcookie)
var/obj/item/clothing/under/jumpsuit = allocate(/obj/item/clothing/under/color/black)
From e8e9bb94493f1aa2c0633e6714ffa3ae701ebe95 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:15:45 -0700
Subject: [PATCH 07/14] Lints + Maps
---
.../BeachRuins/beach_ancient_ruin.dmm | 1 -
.../BeachRuins/beach_crashed_starwalker.dmm | 3 -
.../BeachRuins/beach_treasure_cove.dmm | 4 -
.../JungleRuins/jungle_paradise.dmm | 7 --
.../whitesands_surface_camp_drugstore.dmm | 1 -
.../whitesands_surface_waterplant.dmm | 8 +-
_maps/RandomRuins/SpaceRuins/clericden.dmm | 1 -
_maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 1 -
_maps/RandomRuins/SpaceRuins/spacemall.dmm | 2 +-
.../wasteplanet_fortress_of_solitide.dmm | 9 +--
_maps/map_files/generic/CentCom.dmm | 4 +-
_maps/outpost/nanotrasen_asteroid.dmm | 4 -
.../independent/independent_shepherd.dmm | 1 -
.../independent/independent_tranquility.dmm | 7 --
_maps/shuttles/pirate/pirate_ember.dmm | 7 --
_maps/shuttles/solgov/solgov_inkwell.dmm | 8 +-
_maps/shuttles/solgov/solgov_paracelsus.dmm | 8 +-
_maps/shuttles/syndicate/syndicate_aegis.dmm | 8 --
code/__HELPERS/string_assoc_lists.dm | 16 ++--
code/datums/components/food/food_storage.dm | 74 +++++++++----------
20 files changed, 58 insertions(+), 116 deletions(-)
diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm
index b67667e26c69..9eefb23cedf6 100644
--- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm
+++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm
@@ -609,7 +609,6 @@
/area/ruin/beach/complex)
"kK" = (
/obj/structure/closet/crate/bin,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy,
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/concrete/slab_4,
/area/ruin/beach/complex)
diff --git a/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm b/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm
index 346458a87daf..822274c731f3 100644
--- a/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm
+++ b/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm
@@ -762,9 +762,6 @@
icon_state = "1-4"
},
/obj/structure/spacevine/weak,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_x = 5
- },
/turf/open/floor/pod,
/area/ruin/beach/starwalker)
"lq" = (
diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm
index 7943cf93372e..81105f08d81b 100644
--- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm
+++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm
@@ -240,10 +240,6 @@
},
/obj/structure/table/wood/reinforced,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_x = 3;
- pixel_y = 6
- },
/obj/item/storage/fancy/nugget_box{
pixel_y = 10;
pixel_x = -5
diff --git a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm
index 5aff7b4501b5..925d147cffa2 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm
@@ -5384,9 +5384,6 @@
"Ih" = (
/obj/structure/table/wood,
/obj/machinery/light/directional/south,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_x = -8
- },
/obj/item/reagent_containers/food/snacks/grown/berries/poison{
pixel_x = -6;
pixel_y = 6
@@ -7512,10 +7509,6 @@
},
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier,
/obj/effect/decal/cleanable/vomit/old,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_x = -4;
- pixel_y = 16
- },
/obj/item/reagent_containers/food/snacks/grown/berries/poison{
pixel_x = 2;
pixel_y = 19
diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm
index 4bf53b738636..124c55547c44 100644
--- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm
+++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm
@@ -33,7 +33,6 @@
"f" = (
/obj/structure/rack,
/obj/item/reagent_containers/food/snacks/cornchips,
-/obj/item/reagent_containers/food/snacks/butterdog,
/obj/item/reagent_containers/food/snacks/candy,
/obj/item/reagent_containers/food/snacks/canned/peaches,
/obj/item/reagent_containers/food/drinks/bottle/sarsaparilla,
diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
index 0babadd59a8d..f7c8431fc01d 100644
--- a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
+++ b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
@@ -423,11 +423,6 @@
},
/turf/closed/wall/r_wall/rust,
/area/ruin/powered)
-"lN" = (
-/obj/structure/table/wood/fancy,
-/obj/item/reagent_containers/food/snacks/cakeslice/lime,
-/turf/open/floor/carpet,
-/area/ruin/powered)
"lQ" = (
/obj/effect/turf_decal/industrial/loading{
dir = 8
@@ -1064,7 +1059,6 @@
/area/ruin/powered)
"Aj" = (
/obj/structure/table/wood/fancy,
-/obj/item/reagent_containers/food/snacks/cakeslice/cheese,
/turf/open/floor/carpet,
/area/ruin/powered)
"AC" = (
@@ -2851,7 +2845,7 @@ It
Uu
ux
kZ
-lN
+Aj
dd
Va
"}
diff --git a/_maps/RandomRuins/SpaceRuins/clericden.dmm b/_maps/RandomRuins/SpaceRuins/clericden.dmm
index e163b6f46cea..c750afb3e7df 100644
--- a/_maps/RandomRuins/SpaceRuins/clericden.dmm
+++ b/_maps/RandomRuins/SpaceRuins/clericden.dmm
@@ -560,7 +560,6 @@
"AU" = (
/obj/structure/table/wood/reinforced,
/obj/item/toy/figure/chaplain,
-/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice,
/turf/open/floor/carpet/royalblack/airless,
/area/ruin/unpowered/no_grav)
"AV" = (
diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm
index 291fd054aa63..854ae25519b7 100644
--- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm
+++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm
@@ -1745,7 +1745,6 @@
/area/ruin/space/has_grav/powerpuzzle/secure)
"sc" = (
/obj/effect/mob_spawn/human/corpse/cargo_tech,
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday,
/obj/effect/decal/cleanable/confetti,
/obj/machinery/light/small/broken/directional/east,
/obj/structure/toilet,
diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
index c2efbe90506d..50d4b5648bd7 100644
--- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
@@ -3620,7 +3620,7 @@
/area/ruin/space/has_grav/spacemall/shop)
"nS" = (
/obj/effect/turf_decal/corner/transparent/black/diagonal,
-/obj/item/reagent_containers/food/snacks/store/bread/spidermeat,
+/obj/item/food/bread/spidermeat,
/obj/structure/table,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/spacemall/dorms)
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
index e931e0091d26..cdf8c90654bb 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
@@ -330,7 +330,6 @@
/area/ruin/powered)
"cS" = (
/obj/structure/table/wood/fancy/orange,
-/obj/item/reagent_containers/food/snacks/store/cake/clown_cake,
/turf/open/floor/plating,
/area/ruin/powered)
"cU" = (
@@ -462,7 +461,6 @@
/area/ruin/powered)
"ep" = (
/obj/effect/spawner/lootdrop/maintenance/two,
-/obj/item/reagent_containers/food/snacks/butterdog,
/obj/structure/table,
/obj/item/coin/plastic,
/turf/open/floor/plating,
@@ -760,10 +758,6 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plating,
/area/ruin/powered)
-"hd" = (
-/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice,
-/turf/open/floor/mineral/bananium,
-/area/ruin/powered)
"he" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 9
@@ -1396,7 +1390,6 @@
/area/ruin/powered)
"nc" = (
/obj/structure/table/reinforced,
-/obj/item/reagent_containers/food/snacks/cakeslice/brain,
/turf/open/floor/plating,
/area/ruin/powered)
"nd" = (
@@ -5822,7 +5815,7 @@ ik
HL
xx
ZL
-hd
+gL
Gq
Xe
av
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 209466a1b2ef..6c3a51ac2469 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -11619,8 +11619,8 @@
/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
-/obj/item/reagent_containers/food/snacks/spaghetti,
-/obj/item/reagent_containers/food/snacks/spaghetti,
+/obj/item/food/spaghetti/pastatomato,
+/obj/item/food/spaghetti/pastatomato,
/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
/obj/item/reagent_containers/food/snacks/meat/rawcutlet,
diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm
index 987c9f970948..fb576e699b3a 100644
--- a/_maps/outpost/nanotrasen_asteroid.dmm
+++ b/_maps/outpost/nanotrasen_asteroid.dmm
@@ -125,10 +125,6 @@
/area/outpost/maintenance/fore)
"aE" = (
/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/cakeslice/birthday{
- pixel_x = -3;
- pixel_y = -5
- },
/obj/effect/decal/cleanable/confetti{
pixel_x = -12;
pixel_y = -3
diff --git a/_maps/shuttles/independent/independent_shepherd.dmm b/_maps/shuttles/independent/independent_shepherd.dmm
index 891811e17789..b87ae38ee42b 100644
--- a/_maps/shuttles/independent/independent_shepherd.dmm
+++ b/_maps/shuttles/independent/independent_shepherd.dmm
@@ -2056,7 +2056,6 @@
/area/ship/crew/library)
"sc" = (
/obj/structure/table/wood/reinforced,
-/obj/item/reagent_containers/food/snacks/store/bread/meat,
/obj/item/reagent_containers/food/drinks/bottle/trappist{
pixel_x = -6;
pixel_y = 7
diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm
index fd1a368ebc50..535bb93bbb2c 100644
--- a/_maps/shuttles/independent/independent_tranquility.dmm
+++ b/_maps/shuttles/independent/independent_tranquility.dmm
@@ -2747,7 +2747,6 @@
/area/ship/crew/crewtwo)
"wA" = (
/obj/structure/table,
-/obj/item/reagent_containers/food/snacks/cakeslice/lime,
/obj/item/kitchen/fork/plastic{
pixel_x = -11
},
@@ -3534,7 +3533,6 @@
/area/ship/crew/hydroponics)
"CH" = (
/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/garlicbread,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange{
pixel_x = -8;
pixel_y = 7
@@ -6089,11 +6087,6 @@
pixel_x = -11;
pixel_y = 11
},
-/obj/item/reagent_containers/food/snacks/store/bread/banana{
- pixel_x = 14;
- pixel_y = 1
- },
-/obj/item/reagent_containers/food/snacks/breadslice/banana,
/turf/open/floor/plasteel,
/area/ship/crew/cryo)
"Vg" = (
diff --git a/_maps/shuttles/pirate/pirate_ember.dmm b/_maps/shuttles/pirate/pirate_ember.dmm
index ff37ec89e5bc..73c5e92955dc 100644
--- a/_maps/shuttles/pirate/pirate_ember.dmm
+++ b/_maps/shuttles/pirate/pirate_ember.dmm
@@ -4532,14 +4532,7 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_x = -6;
- pixel_y = 10
- },
/obj/structure/table/wood/reinforced,
-/obj/item/reagent_containers/food/snacks/breadslice/creamcheese{
- pixel_x = -1
- },
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm
index 3c8e75a7ace0..8065eaa4a3b2 100644
--- a/_maps/shuttles/solgov/solgov_inkwell.dmm
+++ b/_maps/shuttles/solgov/solgov_inkwell.dmm
@@ -1837,10 +1837,10 @@
/area/ship/crew/canteen/kitchen)
"mz" = (
/obj/structure/closet/crate,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm
index 70bfabe5d26b..585e18321da3 100644
--- a/_maps/shuttles/solgov/solgov_paracelsus.dmm
+++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm
@@ -733,10 +733,10 @@
/area/ship/hallway/starboard)
"hh" = (
/obj/structure/closet/crate,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
-/obj/item/reagent_containers/food/snacks/store/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
+/obj/item/food/bread/plain,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
diff --git a/_maps/shuttles/syndicate/syndicate_aegis.dmm b/_maps/shuttles/syndicate/syndicate_aegis.dmm
index d86cb9b23de7..b3882fb90859 100644
--- a/_maps/shuttles/syndicate/syndicate_aegis.dmm
+++ b/_maps/shuttles/syndicate/syndicate_aegis.dmm
@@ -2016,14 +2016,6 @@
pixel_x = -4;
pixel_y = -8
},
-/obj/item/reagent_containers/food/snacks/store/cake/bsvc{
- pixel_x = 5;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/snacks/store/cake/bscc{
- pixel_x = -4;
- pixel_y = 7
- },
/turf/open/floor/wood/walnut,
/area/ship/crew/office)
"re" = (
diff --git a/code/__HELPERS/string_assoc_lists.dm b/code/__HELPERS/string_assoc_lists.dm
index e269da7da5eb..569649ed5961 100644
--- a/code/__HELPERS/string_assoc_lists.dm
+++ b/code/__HELPERS/string_assoc_lists.dm
@@ -5,14 +5,14 @@ GLOBAL_LIST_EMPTY(string_assoc_lists)
* Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number).
*/
/datum/proc/string_assoc_list(list/values)
- var/list/string_id = list()
- for(var/val in values)
- string_id += "[val]_[values[val]]"
- string_id.Join("-")
+ var/list/string_id = list()
+ for(var/val in values)
+ string_id += "[val]_[values[val]]"
+ string_id.Join("-")
- . = GLOB.string_assoc_lists[string_id]
+ . = GLOB.string_assoc_lists[string_id]
- if(.)
- return
+ if(.)
+ return
- return GLOB.string_assoc_lists[string_id] = values
+ return GLOB.string_assoc_lists[string_id] = values
diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm
index 6e1226b2dc69..d95470655e53 100644
--- a/code/datums/components/food/food_storage.dm
+++ b/code/datums/components/food/food_storage.dm
@@ -37,13 +37,13 @@
. = ..()
/** Begins the process of inserted an item.
- *
- * Clicking on the food storage with an item on disarm intent will begin a do_after, which if successful inserts the item.
- *
- * Arguments
- * inserted_item - the item being placed into the food
- * user - the person inserting the item
- */
+ *
+ * Clicking on the food storage with an item on disarm intent will begin a do_after, which if successful inserts the item.
+ *
+ * Arguments
+ * inserted_item - the item being placed into the food
+ * user - the person inserting the item
+*/
/datum/component/food_storage/proc/try_inserting_item(datum/source, obj/item/inserted_item, mob/user, params)
SIGNAL_HANDLER
@@ -74,12 +74,12 @@
return COMPONENT_CANCEL_ATTACK_CHAIN
/** Begins the process of attempting to remove the stored item.
- *
- * Clicking on food storage on grab intent will begin a do_after, which if successful removes the stored_item.
- *
- * Arguments
- * user - the person removing the item.
- */
+ *
+ * Clicking on food storage on grab intent will begin a do_after, which if successful removes the stored_item.
+ *
+ * Arguments
+ * user - the person removing the item.
+*/
/datum/component/food_storage/proc/try_removing_item(datum/source, mob/user)
SIGNAL_HANDLER
@@ -101,11 +101,11 @@
return COMPONENT_CANCEL_ATTACK_CHAIN
/** Inserts the item into the food, after a do_after.
- *
- * Arguments
- * inserted_item - The item being inserted.
- * user - the person inserting the item.
- */
+ *
+ * Arguments
+ * inserted_item - The item being inserted.
+ * user - the person inserting the item.
+*/
/datum/component/food_storage/proc/insert_item(obj/item/inserted_item, mob/user)
if(do_after(user, 1.5 SECONDS, target = parent))
var/atom/food = parent
@@ -140,18 +140,18 @@
update_stored_item()
/** Checks for stored items when the food is eaten.
- *
- * If the food is eaten while an item is stored in it, calculates the odds that the item will be found.
- * Then, if the item is found before being bitten, the item is removed.
- * If the item is found by biting into it, calls on_accidental_consumption on the stored item.
- * Afterwards, removes the item from the food if it was discovered.
- *
- * Arguments
- * target - person doing the eating (can be the same as user)
- * user - person causing the eating to happen
- * bitecount - how many times the current food has been bitten
- * bitesize - how large bties are for this food
- */
+ *
+ * If the food is eaten while an item is stored in it, calculates the odds that the item will be found.
+ * Then, if the item is found before being bitten, the item is removed.
+ * If the item is found by biting into it, calls on_accidental_consumption on the stored item.
+ * Afterwards, removes the item from the food if it was discovered.
+ *
+ * Arguments
+ * target - person doing the eating (can be the same as user)
+ * user - person causing the eating to happen
+ * bitecount - how many times the current food has been bitten
+ * bitesize - how large bties are for this food
+*/
/datum/component/food_storage/proc/consume_food_storage(datum/source, mob/living/target, mob/living/user, bitecount, bitesize)
SIGNAL_HANDLER
@@ -177,13 +177,13 @@
INVOKE_ASYNC(src, PROC_REF(remove_item), user)
/** Updates the reference of the stored item.
- *
- * Checks the food's contents for if an alternate item was placed into the food.
- * If there is an alternate item, updates the reference to the new item.
- * If there isn't, updates the reference to null.
- *
- * Returns FALSE if the ref is nulled, or TRUE is another item replaced it.
- */
+ *
+ * Checks the food's contents for if an alternate item was placed into the food.
+ * If there is an alternate item, updates the reference to the new item.
+ * If there isn't, updates the reference to null.
+ *
+ * Returns FALSE if the ref is nulled, or TRUE is another item replaced it.
+*/
/datum/component/food_storage/proc/update_stored_item()
var/atom/food = parent
if(!food?.contents.len) //if there's no items in the food or food is deleted somehow
From 56d998037f356a123d5b36399fc24ecdb8fe4827 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:18:54 -0700
Subject: [PATCH 08/14] Maps pt 2
---
.../SandRuins/whitesands_surface_waterplant.dmm | 7 +------
_maps/RandomRuins/SpaceRuins/spacemall.dmm | 3 ---
_maps/shuttles/independent/independent_lagoon.dmm | 4 ----
3 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
index f7c8431fc01d..2d798bc26a47 100644
--- a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
+++ b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm
@@ -656,11 +656,6 @@
},
/turf/open/floor/plasteel,
/area/ruin/powered)
-"qv" = (
-/obj/structure/table/wood/fancy,
-/obj/item/reagent_containers/food/snacks/cakeslice/chocolate,
-/turf/open/floor/carpet,
-/area/ruin/powered)
"qC" = (
/obj/structure/rack,
/obj/effect/turf_decal/corner/opaque/red{
@@ -2781,7 +2776,7 @@ It
hy
Bz
DT
-qv
+Aj
AM
Va
"}
diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
index 50d4b5648bd7..99d1fc71bd4f 100644
--- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
@@ -6795,9 +6795,6 @@
dir = 8
},
/obj/item/trash/plate,
-/obj/item/reagent_containers/food/snacks/breadslice/moldy{
- pixel_y = 6
- },
/obj/item/reagent_containers/food/snacks/spiderling{
pixel_y = 5;
pixel_x = 6
diff --git a/_maps/shuttles/independent/independent_lagoon.dmm b/_maps/shuttles/independent/independent_lagoon.dmm
index c015f0c262a1..d44be2011d08 100644
--- a/_maps/shuttles/independent/independent_lagoon.dmm
+++ b/_maps/shuttles/independent/independent_lagoon.dmm
@@ -2094,10 +2094,6 @@
pixel_y = 1
},
/obj/item/toy/cards/deck,
-/obj/item/reagent_containers/food/snacks/butterbiscuit{
- pixel_x = 6;
- pixel_y = 6
- },
/turf/open/floor/wood,
/area/ship/crew/dorm)
"nE" = (
From 74fbcf25ad6ee7d80f4a0abc7f55ab42c90b58e4 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:24:37 -0700
Subject: [PATCH 09/14] Lint
---
code/__HELPERS/string_assoc_lists.dm | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/code/__HELPERS/string_assoc_lists.dm b/code/__HELPERS/string_assoc_lists.dm
index 569649ed5961..a711c1fc2991 100644
--- a/code/__HELPERS/string_assoc_lists.dm
+++ b/code/__HELPERS/string_assoc_lists.dm
@@ -1,9 +1,8 @@
GLOBAL_LIST_EMPTY(string_assoc_lists)
-
/**
- * Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number).
- */
+ * Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number).
+*/
/datum/proc/string_assoc_list(list/values)
var/list/string_id = list()
for(var/val in values)
From f4d3a6058f7a95e8b385e427777cb609c8d6fbe2 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:29:50 -0700
Subject: [PATCH 10/14] more lints
---
code/datums/components/food/food_storage.dm | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm
index d95470655e53..b04493193534 100644
--- a/code/datums/components/food/food_storage.dm
+++ b/code/datums/components/food/food_storage.dm
@@ -118,17 +118,17 @@
stored_item = inserted_item
/** Removes the item from the food, after a do_after.
- *
- * Arguments
- * user - person removing the item.
- */
+ *
+ * Arguments
+ * user - person removing the item.
+*/
/datum/component/food_storage/proc/begin_remove_item(mob/user)
if(do_after(user, 10 SECONDS, target = parent))
remove_item(user)
/**
- * Removes the stored item, putting it in user's hands or on the ground, then updates the reference.
- */
+ * Removes the stored item, putting it in user's hands or on the ground, then updates the reference.
+*/
/datum/component/food_storage/proc/remove_item(mob/user)
if(user.put_in_hands(stored_item))
user.visible_message("[user.name] slowly pulls [stored_item.name] out of \the [parent].", \
From be25d53b52e981bfbd7b685624b376c49e33b16a Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:44:47 -0700
Subject: [PATCH 11/14] ENOUGH
---
code/__DEFINES/dcs/signals.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index f61e71ab847e..768fbeaf6fe9 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -160,8 +160,6 @@
#define COMPONENT_BLOCK_REACH 1
///for when an atom has been created through processing (atom/original_atom, list/chosen_processing_option)
#define COMSIG_ATOM_CREATEDBY_PROCESSING "atom_createdby_processing"
-///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
- #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
///called when teleporting into a protected turf: (channel, turf/origin)
#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport"
#define COMPONENT_BLOCK_TELEPORT (1<<0)
From 09b4d58eb4606d68ac0dc6d0ad5abc0c2a481995 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 18:59:56 -0700
Subject: [PATCH 12/14] stop!!
---
code/__DEFINES/food.dm | 38 ++++++++++-----------
code/__DEFINES/is_helpers.dm | 2 +-
code/__DEFINES/reagents.dm | 4 +--
code/datums/components/food/food_storage.dm | 2 +-
code/game/atoms.dm | 2 +-
5 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 5313de6b2626..33e14087f214 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -1,26 +1,26 @@
-#define MEAT (1<<0)
-#define VEGETABLES (1<<1)
-#define RAW (1<<2)
-#define JUNKFOOD (1<<3)
-#define GRAIN (1<<4)
-#define FRUIT (1<<5)
-#define DAIRY (1<<6)
-#define FRIED (1<<7)
-#define ALCOHOL (1<<8)
-#define SUGAR (1<<9)
-#define GROSS (1<<10)
-#define TOXIC (1<<11)
-#define PINEAPPLE (1<<12)
-#define BREAKFAST (1<<13)
-#define CLOTH (1<<14)
-#define GRILLED (1<<15)
-/*
+#define MEAT (1<<0)
+#define VEGETABLES (1<<1)
+#define RAW (1<<2)
+#define JUNKFOOD (1<<3)
+#define GRAIN (1<<4)
+#define FRUIT (1<<5)
+#define DAIRY (1<<6)
+#define FRIED (1<<7)
+#define ALCOHOL (1<<8)
+#define SUGAR (1<<9)
+#define GROSS (1<<10)
+#define TOXIC (1<<11)
+#define PINEAPPLE (1<<12)
+#define BREAKFAST (1<<13)
+#define CLOTH (1<<14)
+#define GRILLED (1<<15)
+/* WIP
#define NUTS (1<<16)
#define SEAFOOD (1<<17)
-#define ORANGES (1<<18) wip
+#define ORANGES (1<<18)
#define BUGS (1<<19)
*/
-#define GORE (1<<20)
+#define GORE (1<<20)
/// IC meaning (more or less) for food flags
#define FOOD_FLAGS_IC list( \
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 46a675eab844..69a7fe2bce1b 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -229,7 +229,7 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
#define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs))
/// isnum() returns TRUE for NaN. Also, NaN != NaN. Checkmate, BYOND.
-#define isnan(x) ( (x) != (x) )
+#define isnan(x) ((x) != (x))
#define isinf(x) (isnum((x)) && (((x) == SYSTEM_TYPE_INFINITY) || ((x) == -SYSTEM_TYPE_INFINITY)))
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index 9816ae5ac388..3c056c23b830 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -13,10 +13,10 @@
#define AMOUNT_VISIBLE (1<<6) // For non-transparent containers that still have the general amount of reagents in them visible.
#define NO_REACT (1<<7) // Applied to a reagent holder, the contents will not react with each other.
-#define ABSOLUTELY_GRINDABLE (1<<8) //! used in 'All-In-One Grinder' that it can grind anything if it has this bitflag
+#define ABSOLUTELY_GRINDABLE (1<<8) //! used in 'All-In-One Grinder' that it can grind anything if it has this bitflag
/// Is an open container for all intents and purposes.
-#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
+#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
#define TOUCH 1 // splashing
diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm
index b04493193534..408b7761d6ab 100644
--- a/code/datums/components/food/food_storage.dm
+++ b/code/datums/components/food/food_storage.dm
@@ -167,7 +167,7 @@
if(prob(good_chance_of_discovery)) //finding the item, without biting it
discovered = TRUE
to_chat(target, "It feels like there's something in \the [parent]...!")
-
+
else if(prob(bad_chance_of_discovery)) //finding the item, BY biting it
user.log_message("[key_name(user)] just fed [key_name(target)] a/an [stored_item] which was hidden in [parent] at [AREACOORD(target)]", LOG_ATTACK)
discovered = stored_item.on_accidental_consumption(target, user, parent)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 2f244e2fae6c..03e85eadc1f2 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1275,7 +1275,7 @@
*/
/atom/proc/tool_act(mob/living/user, obj/item/I, tool_type)
var/signal_result
-
+
var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal
signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, I, processing_recipes)
if(processing_recipes.len)
From e75986e8352833d28d452319df4e0b33bb159988 Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 19:05:24 -0700
Subject: [PATCH 13/14] why does it detect commented code
---
code/__DEFINES/food.dm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 33e14087f214..8e8b41565c7a 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -15,10 +15,10 @@
#define CLOTH (1<<14)
#define GRILLED (1<<15)
/* WIP
-#define NUTS (1<<16)
-#define SEAFOOD (1<<17)
-#define ORANGES (1<<18)
-#define BUGS (1<<19)
+#define NUTS (1<<16)
+#define SEAFOOD (1<<17)
+#define ORANGES (1<<18)
+#define BUGS (1<<19)
*/
#define GORE (1<<20)
From 3a843560be80c55ffa448559d99a877a6f1a4f4d Mon Sep 17 00:00:00 2001
From: thgvr
Date: Mon, 11 Mar 2024 19:08:53 -0700
Subject: [PATCH 14/14] it didn't catch this one last time
---
code/__DEFINES/food.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 8e8b41565c7a..98493090dda0 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -62,6 +62,6 @@
///Amount of reagents you start with on crafted food excluding the used parts
#define CRAFTED_FOOD_BASE_REAGENT_MODIFIER 0.7
///Modifier of reagents you get when crafting food from the parts used
-#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5
+#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5
#define IS_EDIBLE(O) (O.GetComponent(/datum/component/edible))