diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 75f110ad334..467da581dc8 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -1766,5 +1766,34 @@ /obj/item/stock_parts/water_recycler = 1) category = CAT_STRUCTURE +/datum/crafting_recipe/toiletbong + name = "Toiletbong" + category = CAT_STRUCTURE + tool_behaviors = list(TOOL_WRENCH) + reqs = list( + /obj/item/flamethrower = 1) + result = /obj/structure/toiletbong + time = 5 SECONDS + additional_req_text = " plasma tank (on flamethrower), toilet" + +/datum/crafting_recipe/toiletbong/check_requirements(mob/user, list/collected_requirements) + if((locate(/obj/structure/toilet) in range(1, user.loc)) == null) + return FALSE + var/obj/item/flamethrower/flamethrower = collected_requirements[/obj/item/flamethrower][1] + if(flamethrower.ptank == null) + return FALSE + return TRUE + +/datum/crafting_recipe/toiletbong/on_craft_completion(mob/user, atom/result) + var/obj/structure/toiletbong/toiletbong = result + var/obj/structure/toilet/toilet = locate(/obj/structure/toilet) in range(1, user.loc) + for (var/obj/item/cistern_item in toilet.contents) + cistern_item.forceMove(user.loc) + to_chat(user, span_warning("[cistern_item] falls out of the toilet!")) + toiletbong.dir = toilet.dir + toiletbong.loc = toilet.loc + qdel(toilet) + to_chat(user, span_notice("[user] attaches the flamethrower to the repurposed toilet.")) + #undef CRAFTING_MACHINERY_CONSUME #undef CRAFTING_MACHINERY_USE diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm index 5d30d489f11..02888d77c88 100644 --- a/code/game/objects/items/food/cake.dm +++ b/code/game/objects/items/food/cake.dm @@ -517,3 +517,22 @@ /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 + +/obj/item/food/cake/plum/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/plum, 5, 3 SECONDS, table_required = TRUE) + +/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/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm new file mode 100644 index 00000000000..c487c373ef9 --- /dev/null +++ b/code/game/objects/structures/toiletbong.dm @@ -0,0 +1,110 @@ +/obj/structure/toiletbong + name = "toilet bong" + desc = "A repurposed toilet with re-arranged piping and an attached flamethrower. Why would anyone build this?" + icon = 'icons/obj/watercloset.dmi' + icon_state = "toiletbong" + density = TRUE + anchored = TRUE + var/emagged = FALSE + var/smokeradius = 1 + var/mutable_appearance/weed_overlay + +/obj/structure/toiletbong/Initialize() + . = ..() + create_storage() + atom_storage.attack_hand_interact = FALSE + atom_storage.set_holdable(list(/obj/item/food/)) + atom_storage.max_total_storage = 100 + atom_storage.max_slots = 12 + weed_overlay = mutable_appearance('icons/obj/watercloset.dmi', "toiletbong_overlay") + START_PROCESSING(SSobj, src) + +/obj/structure/toiletbong/update_icon() + . = ..() + cut_overlays() + if (LAZYLEN(contents)) + add_overlay(weed_overlay) + +/obj/structure/toiletbong/attack_hand(mob/living/carbon/user) + . = ..() + if (!anchored) + user.balloon_alert(user, "Secure it first!") + return + if (!LAZYLEN(contents)) + user.balloon_alert(user, "It's empty!") + return + user.visible_message(span_boldnotice("[user] takes a huge drag on the [src].")) + if (do_after(user, 2 SECONDS, target = src)) + var/turf/toiletbong_location = loc + toiletbong_location.hotspot_expose(1000, 5) + for (var/obj/item/item in contents) + if (item.resistance_flags & INDESTRUCTIBLE) + user.balloon_alert(user, "[item.name] is blocking the pipes!") + continue + playsound(src, 'sound/items/modsuit/flamethrower.ogg', 50) + var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/puff = new + puff.set_up(smokeradius, holder = src, location = user, carry = item.reagents, efficiency = 20) + puff.start() + if (prob(5) && !emagged) + if(islizard(user)) + to_chat(user, span_boldnotice("A hidden treat in the pipes!")) + user.balloon_alert(user, "A hidden treat in the pipes!") + user.visible_message(span_danger("[user] fishes a mouse out of the pipes.")) + else + to_chat(user, span_userdanger("There was something disgusting in the pipes!")) + user.visible_message(span_danger("[user] spits out a mouse.")) + user.adjust_disgust(50) + user.vomit(10) + var/mob/living/spawned_mob = new /mob/living/simple_animal/mouse(get_turf(user)) + spawned_mob.faction |= "[REF(user)]" + if(prob(50)) + for(var/j in 1 to rand(1, 3)) + step(spawned_mob, pick(NORTH,SOUTH,EAST,WEST)) + qdel(item) + if(!emagged) + break + update_icon() + +/obj/structure/toiletbong/wrench_act(mob/living/user, obj/item/tool) + tool.play_tool_sound(src) + if(anchored) + to_chat(user, span_notice("You begin unsecuring the [src].")) + anchored = FALSE + else + to_chat(user, span_notice("You secure the [src] to the floor.")) + anchored = TRUE + return TRUE + +/obj/structure/toiletbong/crowbar_act(mob/living/user, obj/item/tool) + if(anchored) + return FALSE + tool.play_tool_sound(src) + to_chat(user, span_notice("You begin taking apart the [src].")) + if (!do_after(user, 10 SECONDS, target = src)) + return FALSE + new /obj/item/flamethrower(get_turf(src)) + new /obj/item/stack/sheet/iron(get_turf(src)) + var/obj/item/tank/internals/plasma/ptank = new /obj/item/tank/internals/plasma(get_turf(src)) + ptank.air_contents.gases[/datum/gas/plasma][MOLES] = (0) + qdel(src) + return TRUE + +/obj/structure/toiletbong/AltClick(mob/living/user) + if(anchored) + return ..() + setDir(turn(dir,90)) + playsound(src, 'sound/items/deconstruct.ogg', 50) + return + +/obj/structure/toiletbong/emag_act(mob/user, obj/item/card/emag/emag_card) + playsound(src, 'sound/effects/fish_splash.ogg', 50) + user.balloon_alert(user, "Whoops!") + if(!emagged) + emagged = TRUE + smokeradius = 2 + to_chat(user, span_boldwarning("The [emag_card.name] falls into the toilet. You fish it back out. Looks like you broke the toilet.")) + +/obj/structure/toiletbong/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/card/emag)) + return + . = ..() diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 438596ee536..faef4b67db3 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -790,3 +790,7 @@ results = list(/datum/reagent/consumable/vanilla_dream = 3) required_reagents = list(/datum/reagent/consumable/vanilla = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/consumable/cream = 1) +/datum/chemical_reaction/drink/thehat + results = list(/datum/reagent/consumable/ethanol/thehat = 1) + required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/water = 1, /datum/reagent/consumable/ethanol/plumwine = 1) + mix_message = "The drink starts to smell perfumy..." 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 69a80bc1062..140a3ce037a 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -243,3 +243,12 @@ ) result = /obj/item/food/cake/fruit subcategory = CAT_CAKE + +/datum/crafting_recipe/food/plumcake + name = "Plum cake" + reqs = list( + /obj/item/food/cake/plain = 1, + /obj/item/food/grown/plum = 2 + ) + result = /obj/item/food/cake/plum + subcategory = CAT_CAKE diff --git a/code/modules/hydroponics/grown/plum.dm b/code/modules/hydroponics/grown/plum.dm new file mode 100644 index 00000000000..f7fe134cb75 --- /dev/null +++ b/code/modules/hydroponics/grown/plum.dm @@ -0,0 +1,48 @@ +// Plum +/obj/item/seeds/plum + name = "pack of plum seeds" + desc = "These seeds grow into plum trees." + icon_state = "seed-plum" + species = "plum" + plantname = "Plum Tree" + product = /obj/item/food/grown/plum + lifespan = 55 + endurance = 35 + yield = 5 + growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "plum-grow" + icon_dead = "plum-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/one_bite) + mutatelist = list(/obj/item/seeds/plum/plumb) + reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1, /datum/reagent/impurity/rosenol = 0.04) + +/obj/item/food/grown/plum + seed = /obj/item/seeds/plum + name = "plum" + desc = "A poet's favorite fruit. Noice." + icon_state = "plum" + foodtypes = FRUIT + juice_results = list(/datum/reagent/consumable/plumjuice = 0) + tastes = list("plum" = 1) + distill_reagent = /datum/reagent/consumable/ethanol/plumwine + +// Plumb +/obj/item/seeds/plum/plumb + name = "pack of plumb seeds" + desc = "These seeds grow into plumb trees." + icon_state = "seed-plumb" + species = "plumb" + plantname = "Plumb Tree" + product = /obj/item/food/grown/plum/plumb + genes = list(/datum/plant_gene/trait/repeated_harvest) + mutatelist = null + reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1, /datum/reagent/lead = 0.04) + rarity = 30 + +/obj/item/food/grown/plum/plumb + seed = /obj/item/seeds/plum/plumb + name = "plumb" + desc = "It feels very heavy." + icon_state = "plumb" + distill_reagent = null + wine_power = 50 diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index cb92785aa68..dd8b2914a70 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -2891,3 +2891,29 @@ All effects don't start immediately, but rather get worse over time; the rate is if(drinker.hallucination < hal_cap && DT_PROB(5, delta_time)) drinker.hallucination += hal_amt ..() + +/datum/reagent/consumable/ethanol/plumwine + name = "Plum wine" + description = "Plums turned into wine." + color = "#8a0421" + nutriment_factor = 1 * REAGENTS_METABOLISM + boozepwr = 20 + taste_description = "a poet's love and undoing" + glass_icon_state = "plumwineglass" + glass_name = "plum wine" + glass_desc = "Looks like an evening of writing fine poetry." + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_STOCK + +/datum/reagent/consumable/ethanol/thehat + name = "The Hat" + description = "A fancy drink, usually served in a man's hat." + color = "#b90a5c" + boozepwr = 80 + quality = DRINK_NICE + taste_description = "something perfumy" + glass_icon_state = "thehatglass" + glass_name = "The Hat" + glass_desc ="A single plum floating in perfume, served in a man's hat." + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_STOCK diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index d3ffb438b57..3350f7e1db4 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -211,6 +211,16 @@ taste_description = "grape soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/consumable/plumjuice + name = "Plum Juice" + description = "Refreshing and slightly acidic beverage." + color = "#b6062c" + taste_description = "plums" + glass_icon_state = "plumjuiceglass" + glass_name = "glass of plum juice" + glass_desc = "Noice." + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + /datum/reagent/consumable/milk name = "Milk" description = "An opaque white liquid produced by the mammary glands of mammals." diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index 95d31ae47ef..292a1ad254e 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -36,6 +36,7 @@ /obj/item/seeds/orange = 3, /obj/item/seeds/peas = 3, /obj/item/seeds/pineapple = 3, + /obj/item/seeds/plum = 3, /obj/item/seeds/potato = 3, /obj/item/seeds/poppy = 3, /obj/item/seeds/pumpkin = 3, diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index fb1ee1d956d..b5d7d8b1e7c 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi index e36ed9d7bc8..03fb3445783 100644 Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index a71acabc2ae..d44416aecb6 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 9041efa5ead..9fdf677db33 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index d2b2e4c76f6..a131eaa4abc 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index b306506e800..110cb746bf6 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 632db543655..01f4712ba0a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1851,6 +1851,7 @@ #include "code\game\objects\structures\tables_racks.dm" #include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\tank_holder.dm" +#include "code\game\objects\structures\toiletbong.dm" #include "code\game\objects\structures\training_machine.dm" #include "code\game\objects\structures\traps.dm" #include "code\game\objects\structures\votingbox.dm" @@ -3050,6 +3051,7 @@ #include "code\modules\hydroponics\grown\onion.dm" #include "code\modules\hydroponics\grown\peas.dm" #include "code\modules\hydroponics\grown\pineapple.dm" +#include "code\modules\hydroponics\grown\plum.dm" #include "code\modules\hydroponics\grown\potato.dm" #include "code\modules\hydroponics\grown\pumpkin.dm" #include "code\modules\hydroponics\grown\rainbow_bunch.dm"