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"