diff --git a/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm b/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm index 9d53cff605..453c2d733d 100644 --- a/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm +++ b/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm @@ -14,4 +14,5 @@ ) result = /obj/structure/disposaloutlet/industrial_feeding_tube tools = list(TOOL_WELDER, TOOL_WRENCH, TOOL_SCREWDRIVER) - category = CAT_MISC + subcategory = CAT_MISCELLANEOUS + category = CAT_MISCELLANEOUS diff --git a/GainStation13/code/machinery/feeding_tube_industrial.dm b/GainStation13/code/machinery/feeding_tube_industrial.dm index ddf73f97f3..65f6d42700 100644 --- a/GainStation13/code/machinery/feeding_tube_industrial.dm +++ b/GainStation13/code/machinery/feeding_tube_industrial.dm @@ -1,6 +1,6 @@ /** * Contains: - * Industrial Feeding Tube + * Industrial Feeding Tube */ /obj/structure/disposaloutlet/industrial_feeding_tube @@ -13,7 +13,7 @@ /// Is it welded down? var/welded = FALSE /// Who the tube is attached to - var/mob/living/attached + var/mob/living/attached /// Where the tube tries to dump it's stuff into var/output_dest /// It's Glogged ! @@ -54,12 +54,12 @@ new /obj/item/stack/sheet/plastic(loc, 5) new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH) new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH) - + if(contents) //Anything still glogged inside... for(var/atom/movable/AM in src) AM.forceMove(loc) qdel(src) - + /obj/structure/disposaloutlet/industrial_feeding_tube/Destroy() if(attached) attached = null @@ -73,7 +73,7 @@ AM.forceMove(loc) continue qdel(AM) - + return ..() /obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target) @@ -89,8 +89,8 @@ attached.visible_message("[attached] is detached from [src].") attached = null update_icon() - return - + return + if(iscarbon(target)) var/mob/living/carbon/feedee = target @@ -113,12 +113,12 @@ face_atom(feedee) return //Either we arn't attaching to vorebelly, or we arnt able to. Let's try to feed them normally! - if(usr != feedee) // + if(usr != feedee) // var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your mouth! Do you want this?", "THE TUBE", "Yes!!", "No!") if(feedeePrefCheck != "Yes!!") to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...") return - + output_dest = feedee //Attach normally attached = feedee @@ -147,7 +147,7 @@ cut_overlays() var/mutable_appearance/tube_overlay = mutable_appearance('GainStation13/icons/obj/feeding_tube_industrial.dmi', "tube_idle") - + if(pumping) tube_overlay.icon_state = "tube-pump" else @@ -155,7 +155,7 @@ tube_overlay.icon_state = "tube-active" else tube_overlay.icon_state = "tube-idle" - + if(welded) //if we're not welded, dont show our light on. add_overlay("light-[clogged ? "r" : "g"]") @@ -166,7 +166,7 @@ // called when the holder exits the outlet /obj/structure/disposaloutlet/industrial_feeding_tube/expel(obj/structure/disposalholder/H) var/clunkVol = LAZYLEN(H.contents) - if(H.hasmob) //Uh oh- + if(H.hasmob) //Uh oh- clunkVol += 25 playsound(src, H.hasmob ? "clang" : "clangsmall", clamp(clunkVol, 5, H.hasmob ? 50 : 25)) H.active = FALSE @@ -180,7 +180,7 @@ if(!pumping) //Lets start a new pump cycle if we arnt pumping. Otherwise, it'll just be added to the queue. pump() qdel(H) - + /obj/structure/disposaloutlet/industrial_feeding_tube/proc/pump(repeat = TRUE, unlimited = FALSE) if(clogged) return @@ -204,7 +204,7 @@ if(LAZYLEN(pump_stuff) && repeat) pump() return - + var/fed_something = FALSE // Feed Normally if(isliving(output_dest)) @@ -251,11 +251,13 @@ if(is_type_in_list(I, item_vore_blacklist)) inedible += I continue + /* if(isliving(AM)) var/mob/living/cutie = AM if(cutie.devourable != TRUE) //Do not eat this QT... inedible += cutie continue + */ fed_something = TRUE AM.forceMove(output_dest) @@ -272,7 +274,7 @@ else pumping = FALSE update_icon() - + /obj/structure/disposaloutlet/industrial_feeding_tube/expel_holder(obj/structure/disposalholder/H, playsound=FALSE) if(playsound) playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) @@ -292,7 +294,7 @@ attached = null output_dest = null update_icon() - return + return /obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params) if(user.a_intent != INTENT_HELP) @@ -330,7 +332,7 @@ if(!found_trunk) to_chat(user, "\The [src] requires a trunk underneath it in order to work!") return - + to_chat(user, "You attach \the [src] to the trunk.") anchored = TRUE @@ -342,7 +344,7 @@ if(!clogged) to_chat(user, "\The [src] doesnt seem to be clogged at the moment...") return TRUE - + user.visible_message("[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...") if(do_after(user, 30, TRUE, src)) user.visible_message("[user] unclogs \the [src]!") @@ -355,7 +357,7 @@ return if(anchored) //var/turf/T = get_turf(src) - if(!welded) + if(!welded) if(!trunk) // If we're attaching it, we need to check for the pipe we're attaching to to_chat(user, "\The [src] needs to be welded to a trunk.") return TRUE @@ -381,8 +383,8 @@ welded = TRUE trunk.linked = src return TRUE - - + + else playsound(src, 'sound/items/welder2.ogg', 100, 1) to_chat(user, "You begin deconstructing \the [src]") @@ -393,7 +395,7 @@ // Someone got stuck inside after it got clogged! // Lets let them force their way out -/obj/structure/disposaloutlet/industrial_feeding_tube/container_resist(mob/living/user) +/obj/structure/disposaloutlet/industrial_feeding_tube/container_resist(mob/living/user) if(user.stat || !clogged) //If it's not clogged, they'll be ejected soon... One way or another. return playsound(src, 'sound/effects/clang.ogg', 50) @@ -407,14 +409,14 @@ if(!(AM in pump_stuff)) pump_stuff += AM AM.forceMove(src) - - + + update_icon() if(loud) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 1) /obj/structure/disposaloutlet/industrial_feeding_tube/proc/unclog() - + spew(pump_stuff) clogged = FALSE @@ -422,7 +424,7 @@ /obj/structure/disposaloutlet/industrial_feeding_tube/proc/spew(var/list/spew_stuff, playsound = FALSE) var/turf/T = get_turf(src) - + if(playsound) playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) for(var/atom/movable/AM in spew_stuff) diff --git a/GainStation13/code/mobs/eat_trash.dm b/GainStation13/code/mobs/eat_trash.dm new file mode 100644 index 0000000000..8fa8fb36c0 --- /dev/null +++ b/GainStation13/code/mobs/eat_trash.dm @@ -0,0 +1,191 @@ +/mob/living + var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans. + +/obj/item + var/trash_eatable = TRUE + +/mob/living/proc/eat_trash() + set name = "Eat Trash" + set category = "Vore" //No Abilities? + set desc = "Consume held garbage." + + if(!vore_selected) + to_chat(src,"You either don't have a belly selected, or don't have a belly!") + return + + var/obj/item/I = get_active_held_item() + if(!I) + to_chat(src, "You are not holding anything.") + return + + if(is_type_in_list(I,item_vore_blacklist) && !adminbus_trash) //If someone has adminbus, they can eat whatever they want. + to_chat(src, "You are not allowed to eat this.") + return + + if(!I.trash_eatable) //OOC pref. This /IS/ respected, even if adminbus_trash is enabled + to_chat(src, "You can't eat that so casually!") + return + + /* + if(istype(I, /obj/item/paicard)) + var/obj/item/paicard/palcard = I + var/mob/living/silicon/pai/pocketpal = palcard.pai + if(pocketpal && (!pocketpal.devourable)) + to_chat(src, "\The [pocketpal] doesn't allow you to eat it.") + return + */ + + if(is_type_in_list(I,edible_trash) | adminbus_trash /*|| is_type_in_list(I,edible_tech) && isSynthetic()*/) + /* + if(I.hidden_uplink) + to_chat(src, "You really should not be eating this.") + message_admins("[key_name(src)] has attempted to ingest an uplink item. ([src ? ADMIN_JMP(src) : "null"])") + return + */ + if(istype(I,/obj/item/pda)) + var/obj/item/pda/P = I + if(P.owner) + var/watching = FALSE + for(var/mob/living/carbon/human/H in view(src)) + if(H.real_name == P.owner && H.client) + watching = TRUE + break + if(!watching) + return + else + visible_message("[src] is threatening to make [P] disappear!") + if(P.id) + var/confirm = alert(src, "The PDA you're holding contains a vulnerable ID card. Will you risk it?", "Confirmation", "Definitely", "Cancel") //No tgui input? + if(confirm != "Definitely") + return + if(!do_after(src, 100, P)) + return + visible_message("[src] successfully makes [P] disappear!") + to_chat(src, "You can taste the sweet flavor of delicious technology.") + dropItemToGround(I) + I.forceMove(vore_selected) + updateVRPanel() + return + /* + if(istype(I,/obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/S = I + if(S.holding) + to_chat(src, "There's something inside!") + return + */ + /* + if(iscapturecrystal(I)) + var/obj/item/capture_crystal/C = I + if(!C.bound_mob.devourable) + to_chat(src, "That doesn't seem like a good idea. (\The [C.bound_mob]'s prefs don't allow it.)") + return + */ + dropItemToGround(I) + I.forceMove(vore_selected) + updateVRPanel() + + log_admin("VORE: [src] used Eat Trash to swallow [I].") + + if(istype(I,/obj/item/flashlight/flare) || istype(I,/obj/item/match) || istype(I,/obj/item/storage/box/matches)) + to_chat(src, "You can taste the flavor of spicy cardboard.") + else if(istype(I,/obj/item/flashlight/glowstick)) //Repath from /obj/item/device/flashlight/glowstick + to_chat(src, "You found out the glowy juice only tastes like regret.") + else if(istype(I,/obj/item/cigbutt)) //Repath from /obj/item/trash/cigbutt + to_chat(src, "You can taste the flavor of bitter ash. Classy.") + else if(istype(I,/obj/item/clothing/mask/cigarette)) //Repath from /obj/item/clothing/mask/smokable + var/obj/item/clothing/mask/cigarette/C = I + if(C.lit) + to_chat(src, "You can taste the flavor of burning ash. Spicy!") + else + to_chat(src, "You can taste the flavor of aromatic rolling paper and funny looks.") + else if(istype(I,/obj/item/paper)) //Repath from /obj/item/weapon/paper + to_chat(src, "You can taste the dry flavor of bureaucracy.") + else if(istype(I,/obj/item/dice)) //Repath from /obj/item/weapon/dice + to_chat(src, "You can taste the bitter flavor of cheating.") + else if(istype(I,/obj/item/lipstick)) //Repath from /obj/item/weapon/lipstick + to_chat(src, "You can taste the flavor of couture and style. Toddler at the make-up bag style.") + else if(istype(I,/obj/item/soap)) //Repath from /obj/item/weapon/soap + to_chat(src, "You can taste the bitter flavor of verbal purification.") + else if(istype(I,/obj/item/stack/spacecash) || istype(I,/obj/item/storage/wallet)) //Repath from /obj/item/weapon/spacecash and /obj/item/weapon/storage/wallet + to_chat(src, "You can taste the flavor of wealth and reckless waste.") + else if(istype(I,/obj/item/broken_bottle) || istype(I,/obj/item/shard)) //Repath from /obj/item/weapon/broken_bottle + to_chat(src, "You can taste the flavor of pain. This can't possibly be healthy for your guts.") + else if(istype(I,/obj/item/light)) //Repath from /obj/item/weapon/light + var/obj/item/light/L = I + if(L.status == LIGHT_BROKEN) + to_chat(src, "You can taste the flavor of pain. This can't possibly be healthy for your guts.") + else + to_chat(src, "You can taste the flavor of really bad ideas.") + /* + else if(istype(I,/obj/item/weapon/bikehorn/tinytether)) //Doenst exist + to_chat(src, "You feel a rush of power swallowing such a large, err, tiny structure.") + */ + else if(istype(I,/obj/item/mmi/posibrain) || istype(I,/obj/item/aicard)) //Repath from /obj/item/device/mmi/digital/posibrain and //Repath from /obj/item/device/aicard + to_chat(src, "You can taste the sweet flavor of digital friendship. Or maybe it is something else.") + else if(istype(I,/obj/item/paicard)) //Repath from /obj/item/device/paicard + to_chat(src, "You can taste the sweet flavor of digital friendship.") + var/obj/item/paicard/ourcard = I + if(ourcard.pai && ourcard.pai.client && isbelly(ourcard.loc)) + var/obj/belly/B = ourcard.loc + to_chat(ourcard.pai, "[B.desc]") + else if(istype(I,/obj/item/reagent_containers/food)) //Repath from /obj/item/weapon/reagent_containers/food + var/obj/item/reagent_containers/food/F = I + if(!F.reagents.total_volume) + to_chat(src, "You can taste the flavor of garbage and leftovers. Delicious?") + else + to_chat(src, "You can taste the flavor of gluttonous waste of food.") + else if (istype(I,/obj/item/clothing/neck/petcollar)) + to_chat(src, "You can taste the submissiveness in the wearer of [I]!") + /* + else if(iscapturecrystal(I)) + var/obj/item/capture_crystal/C = I + if(C.bound_mob && (C.bound_mob in C.contents)) + if(isbelly(C.loc)) + //var/obj/belly/B = C.loc //CHOMPedit + //to_chat(C.bound_mob, "Outside of your crystal, you can see; [B.desc]") //CHOMPedit: moved to modular_chomp capture_crystal.dm + to_chat(src, "You can taste the the power of command.") + */ + // CHOMPedit begin + /* + else if(istype(I,/obj/item/starcaster_news)) + to_chat(src, "You can taste the dry flavor of digital garbage, oh wait its just the news.") + */ + else if(istype(I,/obj/item/newspaper)) + to_chat(src, "You can taste the dry flavor of garbage, oh wait its just the news.") + else if (istype(I,/obj/item/stock_parts/cell)) + visible_message("[src] sates their electric appetite with a [I]!") + to_chat(src, "You can taste the spicy flavor of electrolytes, yum.") + /* + else if (istype(I,/obj/item/walkpod)) + visible_message("[src] sates their musical appetite with a [I]!") + to_chat(src, "You can taste the jazzy flavor of music.") + */ + /* + else if (istype(I,/obj/item/mail/junkmail)) + visible_message("[src] devours the [I]!") + to_chat(src, "You can taste the flavor of the galactic postal service.") + */ + /* + else if (istype(I,/obj/item/weapon/gun/energy/sizegun)) + visible_message("[src] devours the [I]!") + to_chat(src, "You didn't read the warning label, did you?") + */ + /* + else if (istype(I,/obj/item/device/slow_sizegun)) + visible_message("[src] devours the [I]!") + to_chat(src, "You taste the flavor of sunday driver bluespace.") + */ + else if (istype(I,/obj/item/laser_pointer)) + visible_message("[src] devours the [I]!") + to_chat(src, "You taste the flavor of a laser.") + else if (istype(I,/obj/item/canvas)) + visible_message("[src] devours the [I]!") + to_chat(src, "You taste the flavor of priceless artwork.") + //CHOMPedit end + + else + to_chat(src, "You can taste the flavor of garbage. Delicious.") + visible_message("[src] demonstrates their voracious capabilities by swallowing [I] whole!") + return + to_chat(src, "This snack is too powerful to go down that easily.") //CHOMPEdit + return diff --git a/tgstation.dme b/tgstation.dme index 0268f1a157..d7fa134059 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3970,6 +3970,7 @@ #include "GainStation13\code\mechanics\den abductors\purchaseble_goodies.dm" #include "GainStation13\code\mobs\cakegolem.dm" #include "GainStation13\code\mobs\chocoslime.dm" +#include "GainStation13\code\mobs\eat_trash.dm" #include "GainStation13\code\mobs\emote.dm" #include "GainStation13\code\mobs\races\caloritegolem.dm" #include "GainStation13\code\modules\arousal\arousal.dm"