The Toiletbong and other poetical additions (*click* Noice) (#68193)
* Main * Added deconstruction and better rotation * Open flame during usage, emagging * Wording fix, sound fix * Extra-indestructable check * Storage is now a normal datum instead of a component? Noice * Updated harvest.dmi after bell pepper resprite * The new atom storage broke the emag capability, added a small fix
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
. = ..()
|
||||
@@ -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..."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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,
|
||||
|
||||
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 28 KiB |
@@ -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"
|
||||
|
||||