diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index e1e29dfa8aa..d3b0a37760b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -44962,7 +44962,7 @@ "nWN" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/bed/roller, -/obj/item/food/pizzaslice/moldy, +/obj/item/food/pizzaslice/moldy/bacteria, /turf/open/floor/iron/white, /area/medical/abandoned) "nXg" = ( diff --git a/code/datums/components/food/decomposition.dm b/code/datums/components/food/decomposition.dm index 55a86d5354b..ff3da2bdc96 100644 --- a/code/datums/components/food/decomposition.dm +++ b/code/datums/components/food/decomposition.dm @@ -20,16 +20,23 @@ var/time_remaining = DECOMPOSITION_TIME /// Used to give raw/gross food lower timers var/decomp_flags + /// Use for determining what kind of item the food decomposes into. + var/decomp_result + /// Does our food attract ants? + var/produce_ants = TRUE /// Used for examining var/examine_type = DECOMP_EXAM_NORMAL -/datum/component/decomposition/Initialize(mapload, decomp_req_handle, decomp_flags = NONE) +/datum/component/decomposition/Initialize(mapload, decomp_req_handle, decomp_flags = NONE, decomp_result, ant_attracting = TRUE) if(!isobj(parent)) return COMPONENT_INCOMPATIBLE src.decomp_flags = decomp_flags + src.decomp_result = decomp_result if(mapload || decomp_req_handle) handled = FALSE + if(!ant_attracting) + produce_ants = FALSE RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/handle_movement) RegisterSignal(parent, list( @@ -104,8 +111,9 @@ /datum/component/decomposition/proc/decompose() var/obj/decomp = parent //Lets us spawn things at decomp - new /obj/effect/decal/cleanable/ants(decomp.loc) - new /obj/item/food/badrecipe/moldy(decomp.loc) + if(produce_ants) + new /obj/effect/decal/cleanable/ants(decomp.loc) + new decomp_result(decomp.loc) decomp.visible_message("[decomp] gets overtaken by mold and ants! Gross!") qdel(decomp) return diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index 6e684628f6b..f2991861cbb 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -40,6 +40,10 @@ var/venue_value ///Food that's immune to decomposition. var/preserved_food = FALSE + ///Does our food normally attract ants? + var/ant_attracting = TRUE + ///What our food decomposes into. + var/decomp_type = /obj/item/food/badrecipe/moldy ///Food that needs to be picked up in order to decompose. var/decomp_req_handle = FALSE @@ -102,4 +106,5 @@ ///Set decomp_req_handle to TRUE to only make it decompose when someone picks it up. /obj/item/food/proc/MakeDecompose(mapload) if(!preserved_food) - AddComponent(/datum/component/decomposition, mapload, decomp_req_handle, decomp_flags = foodtypes) + AddComponent(/datum/component/decomposition, mapload, decomp_req_handle, decomp_flags = foodtypes, decomp_result = decomp_type, ant_attracting = ant_attracting) + diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index 6fb231e7ce2..0e1a56aef4b 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -48,20 +48,26 @@ foodtypes = GRAIN food_reagents = list(/datum/reagent/consumable/nutriment = 2) venue_value = FOOD_PRICE_TRASH + decomp_type = /obj/item/food/breadslice/moldy /obj/item/food/breadslice/plain/Initialize() . = ..() AddComponent(/datum/component/customizable_reagent_holder, null, CUSTOM_INGREDIENT_ICON_STACK) /obj/item/food/breadslice/moldy - name = "moldy bread slice" + 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, /datum/reagent/consumable/mold = 10) tastes = list("decaying fungus" = 1) foodtypes = GROSS + preserved_food = TRUE -/obj/item/food/breadslice/moldy/Initialize() +/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() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOLD, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 25) diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index 6d52c7575d5..fb05b662919 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -19,8 +19,17 @@ microwaved_type = /obj/item/food/boiledegg foodtypes = MEAT w_class = WEIGHT_CLASS_TINY + ant_attracting = FALSE + decomp_type = /obj/item/food/egg/rotten + decomp_req_handle = TRUE //so laid eggs can actually become chickens var/static/chick_count = 0 //I copied this from the chicken_count (note the "en" in there) variable from chicken code. +/obj/item/food/egg/rotten + food_reagents = list(/datum/reagent/consumable/eggrot = 10, /datum/reagent/consumable/mold = 10) + microwaved_type = /obj/item/food/boiledegg/rotten + foodtypes = GROSS + preserved_food = TRUE + /obj/item/food/egg/gland desc = "An egg! It looks weird..." @@ -53,11 +62,21 @@ to_chat(usr, span_notice("You colour [src] with [W].")) icon_state = "egg-[clr]" + else if(istype(W, /obj/item/stamp/clown)) var/clowntype = pick("grock", "grimaldi", "rainbow", "chaos", "joker", "sexy", "standard", "bobble", "krusty", "bozo", "pennywise", "ronald", "jacobs", "kelly", "popov", "cluwne") icon_state = "egg-clown-[clowntype]" desc = "An egg that has been decorated with the grotesque, robustable likeness of a clown's face. " to_chat(usr, span_notice("You stamp [src] with [W], creating an artistic and not remotely horrifying likeness of clown makeup.")) + + else if(is_reagent_container(W)) + var/obj/item/reagent_containers/dunk_test_container = W + if(dunk_test_container.is_drainable() && dunk_test_container.reagents.has_reagent(/datum/reagent/water)) + to_chat(user, span_notice("You check if [src] is rotten.")) + if(istype(src, /obj/item/food/egg/rotten)) + to_chat(user, span_warning("[src] floats in the [dunk_test_container]!")) + else + to_chat(user, span_notice("[src] sinks into the [dunk_test_container]!")) else ..() @@ -104,6 +123,14 @@ foodtypes = MEAT | BREAKFAST food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL + ant_attracting = FALSE + decomp_type = /obj/item/food/boiledegg/rotten + +/obj/item/food/boiledegg/rotten + food_reagents = list(/datum/reagent/consumable/eggrot = 10) + tastes = list("rotten egg" = 1) + foodtypes = GROSS + preserved_food = TRUE /obj/item/food/omelette //FUCK THIS name = "omelette du fromage" diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 0ea1795de9e..80b123a2d9f 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -201,7 +201,11 @@ desc = "A rancid, disgusting culture of mold and ants. Somewhere under there, at some point, there was food." food_reagents = list(/datum/reagent/consumable/mold = 30) -/obj/item/food/badrecipe/moldy/Initialize() +/obj/item/food/badrecipe/moldy/bacteria + name = "bacteria rich moldy mess" + desc = "Not only is this rancid lump of disgusting bile crawling with insect life, but it is also teeming with various microscopic cultures. It moves when you're not looking." + +/obj/item/food/badrecipe/moldy/bacteria/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOLD, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 25) diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index 4f7a354517e..5898d47604c 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -33,8 +33,9 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 5) foodtypes = GRAIN | DAIRY | VEGETABLES w_class = WEIGHT_CLASS_SMALL + decomp_type = /obj/item/food/pizzaslice/moldy -/obj/item/food/pizzaslice/MakeProcessable() +/obj/item/food/pizzaslice/bacteria/MakeProcessable() AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/stack/sheet/pizza, 1, 10) @@ -277,8 +278,13 @@ food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/peptides = 3, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/toxin/amatoxin = 2) tastes = list("stale crust" = 1, "rancid cheese" = 2, "mushroom" = 1) foodtypes = GRAIN | VEGETABLES | DAIRY | GROSS + preserved_food = TRUE -/obj/item/food/pizzaslice/moldy/Initialize() +/obj/item/food/pizzaslice/moldy/bacteria + name = "bacteria rich moldy pizza slice" + desc = "Not only is this once delicious pizza encrusted with a layer of spore-spewing fungus, it also seems to shift and slide when unattended, teeming with new life." + +/obj/item/food/pizzaslice/moldy/bacteria/Initialize() . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOLD, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 25) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 1587bff56e0..e07b7b47cd1 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -125,6 +125,9 @@ if(prob(50)) new /obj/effect/spawner/lootdrop/refreshing_beverage(src) if(prob(40)) - new /obj/item/food/pizzaslice/moldy(src) + if(prob(50)) + new /obj/item/food/pizzaslice/moldy/bacteria(src) + else + new /obj/item/food/breadslice/moldy/bacteria(src) else if(prob(30)) new /obj/item/food/syndicake(src) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index aab6ef03a91..02546eec655 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -203,6 +203,7 @@ foodtypes = GROSS | MEAT | RAW grind_results = list(/datum/reagent/blood = 20, /datum/reagent/liquidgibs = 5) decomp_req_handle = TRUE + decomp_type = /obj/item/food/deadmouse/moldy /obj/item/food/deadmouse/Initialize() . = ..() @@ -240,3 +241,11 @@ /obj/item/food/deadmouse/on_grind() . = ..() reagents.clear_reagents() + +/obj/item/food/deadmouse/moldy + name = "moldy dead mouse" + desc = "A dead rodent, consumed by mold and rot. There is a slim chance that a lizard might still eat it." + icon_state = "mouse_gray_dead" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/mold = 10) + grind_results = list(/datum/reagent/blood = 20, /datum/reagent/liquidgibs = 5, /datum/reagent/consumable/mold = 10) + preserved_food = TRUE diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 3db25a88afd..44f5a5d8043 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -656,6 +656,13 @@ taste_description = "rancid fungus" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/consumable/eggrot + name = "Rotten Eggyolk" + description = "It smells absolutely dreadful." + color ="#708a88" + taste_description = "rotten eggs" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + /datum/reagent/consumable/tearjuice name = "Tear Juice" description = "A blinding substance extracted from certain onions."