diff --git a/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm b/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm
deleted file mode 100644
index 9d53cff6..00000000
--- a/GainStation13/code/datums/components/crafting/recipes/recipes_misc_gs.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-// GS miscellaneous recipes
-
-/datum/crafting_recipe/industrial_feeding_tube
- name = "Industrial Feeding Tube"
- reqs = list(
- // /obj/machinery/iv_drip/feeding_tube = 1, //Removing this. Seems to be buggy with not-items used to craft
- /obj/item/stack/sheet/metal = 5,
- /obj/item/stack/sheet/plastic = 5,
- /obj/item/pipe = 2,
- /obj/item/stock_parts/matter_bin = 2
- )
- parts = list(
- /obj/item/stock_parts/matter_bin = 2
- )
- result = /obj/structure/disposaloutlet/industrial_feeding_tube
- tools = list(TOOL_WELDER, TOOL_WRENCH, TOOL_SCREWDRIVER)
- category = CAT_MISC
diff --git a/GainStation13/code/machinery/feeding_tube_industrial.dm b/GainStation13/code/machinery/feeding_tube_industrial.dm
deleted file mode 100644
index ddf73f97..00000000
--- a/GainStation13/code/machinery/feeding_tube_industrial.dm
+++ /dev/null
@@ -1,462 +0,0 @@
-/**
- * Contains:
- * Industrial Feeding Tube
- */
-
-/obj/structure/disposaloutlet/industrial_feeding_tube
- name = "\improper industrial feeding tube"
- desc = "An imposing machine designed to pump an absurd amount of \"food\" down something's throat. It seems to connect to disposal pipes."
- icon = 'GainStation13/icons/obj/feeding_tube_industrial.dmi'
- icon_state = "base"
- max_integrity = 500 //Durable...
- anchored = FALSE
- /// Is it welded down?
- var/welded = FALSE
- /// Who the tube is attached to
- var/mob/living/attached
- /// Where the tube tries to dump it's stuff into
- var/output_dest
- /// It's Glogged !
- var/clogged = FALSE
- /// Are we currently pumping?
- var/pumping = FALSE
- /// Stuff we're currently trying to pump out
- var/list/pump_stuff = list()
- /// How many items we can push per-pump.
- var/pump_limit = 5
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/Initialize(mapload)
- . = ..()
-
- update_icon()
-
- if(anchored) // So it can be mapped in, attached to something.
- trunk = locate() in loc
- if(!trunk)
- return
- trunk.linked = src // link the pipe trunk to self
- anchored = TRUE
- welded = TRUE //Make it functional
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/CheckParts(list/parts_list)
- ..()
- pump_limit = 0
- for(var/obj/item/stock_parts/matter_bin/mb in contents)
- if(mb in pump_stuff) //stuff we're going to pump are not being used to build us.
- continue
- pump_limit += mb.rating * 2.5 // ~20 items per pump with 2 bluespace bins
-
- pump_limit = ceil(pump_limit) //Only whole numbers
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/deconstruct(disassembled)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal(loc, 5)
- 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
- if(output_dest)
- output_dest = null
-
- if(LAZYLEN(contents)) // Just to be safe, lets dump everything out before it's deleted.
- for(var/atom/movable/AM in contents)
- if(istype(AM, /obj/item/stock_parts/matter_bin))
- if(AM in pump_stuff) // Unless it's one of our component parts..
- AM.forceMove(loc)
- continue
- qdel(AM)
-
- return ..()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target)
- . = ..()
- if(!usr.canUseTopic(src, BE_CLOSE)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
- return
- if(!welded)
- to_chat(usr, "You need to weld down \the [src] before you can use it.")
- return
- if(!isliving(target))
- return
- if(attached)
- attached.visible_message("[attached] is detached from [src].")
- attached = null
- update_icon()
- return
-
- if(iscarbon(target))
- var/mob/living/carbon/feedee = target
-
- if(HAS_TRAIT(feedee, TRAIT_TRASHCAN))
- var/food_dump = input(usr, "Where do you shove the tube? (cancel for to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
- if(food_dump && isbelly(food_dump))
- // Best to be safe with this thing. Since you can eat pretty much anythign with it...
- // Including People, Intentionally or otherwise.
- if(usr != feedee) // If someone is feeding themself, skip the prefcheck.
- var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your [food_dump]! 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 = food_dump //Attach to vorebelly
- attached = feedee
-
- update_icon()
- START_PROCESSING(SSobj, src)
- 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) //
- 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
-
- update_icon()
- START_PROCESSING(SSobj, src)
- face_atom(feedee)
- return
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/process()
- if(!attached)
- return PROCESS_KILL
-
- if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
- to_chat(attached, "The feeding hose is yanked out of you!")
- attached = null
- output_dest = null
- update_icon()
- return PROCESS_KILL
-
- face_atom(attached)
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/update_overlays()
- // A lot of this is temp. More likely than not you shouldnt see this comment as it'll be properly updated when reo PRs this.
- // Or it wont because epic fail :333
- . = ..()
- 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
- if(attached)
- 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"]")
-
- add_overlay(tube_overlay)
-
-
-// expel the contents of the holder object, then delete it
-// 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-
- clunkVol += 25
- playsound(src, H.hasmob ? "clang" : "clangsmall", clamp(clunkVol, 5, H.hasmob ? 50 : 25))
- H.active = FALSE
- H.vent_gas(get_turf(src))
- if(clogged)
- clog(H.contents)
- else
- for(var/atom/movable/AM in H.contents)
- pump_stuff += AM // Get ready to pump!
- AM.forceMove(src)
- 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
- var/list/this_pump = list() //What we're going to pump this cycle
- var/item_count = 0
- for(var/atom/movable/AM in pump_stuff)
- this_pump += AM // Add to the stuff we're currently pumping
- item_count++
- if(item_count > pump_limit && !unlimited) //We're pumping as much as our parts allow!
- break
- if(!pumping)
- pumping = TRUE
- update_icon()
- spawn(8)
- pumping = FALSE
- update_icon()
- spawn(9) //Wait for the animation to finish
-
- if(!output_dest || !attached) //We either arnt, or got disconnected by time stuff was about to splort out!
- spew(this_pump, TRUE)
- if(LAZYLEN(pump_stuff) && repeat)
- pump()
- return
-
- var/fed_something = FALSE
- // Feed Normally
- if(isliving(output_dest))
- var/list/not_food = list()
- for(var/atom/movable/AM in this_pump)
- if(istype(AM, /obj/item/reagent_containers/food/snacks))
- var/obj/item/reagent_containers/food/snacks/food = AM
- var/datum/reagents/food_reagents = food.reagents
- if(food_reagents.total_volume)
- var/food_size = food_reagents.total_volume //We're cramming the Whole Thing down your throat~
-
- SEND_SIGNAL(food, COMSIG_FOOD_EATEN, attached)
-
- food_reagents.reaction(attached, INGEST, food_size)
- food_reagents.trans_to(attached, food_size)
-
- food.checkLiked(food_size, attached) //...Hopefully you like the taste.
-
-
- if(food.trash) //Lets make the trash the food's supposed to make, if it has any
- var/obj/item/trash = food.generate_trash(src)
- if(not_food)
- not_food += trash // If it's already going to get clogged, clog it more with the trash
- else
- trash.forceMove(get_turf(src)) // Otherwise move it to the tile. For convinience
-
- fed_something = TRUE
- pump_stuff -= food
- qdel(food) //Gulp...
- continue
- else
- not_food += AM // That's not (traditionally) edible!
-
- if(LAZYLEN(not_food))
- clog(not_food) // Now you've gone and clogged us...
-
- // Feed Voraciously
- if(isbelly(output_dest))
- var/list/inedible //Some things shouldnt be eaten...
- for(var/atom/movable/AM in this_pump)
- pump_stuff -= AM // We're putting this in. Remove it from the list.
- if(isitem(AM))
- var/obj/item/I = AM
- 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)
- if(inedible)
- clog(inedible)
-
- // After everything, if we've pushed something, play the "rubber tube noise"
- // It's technically an evil digestion sound from a snowflake shadekin, but it makes for a good tube sound. Thanks Verkie!
- if(fed_something)
- playsound(attached.loc, 'v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg', rand(10,50), 1)
-
- if(LAZYLEN(pump_stuff) && repeat)
- pump()
- 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)
-
- if(!H)
- return
-
- spew(H.contents)
-
- H.vent_gas(get_turf(src))
- qdel(H)
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/attack_hand(mob/user)
- . = ..()
- if(attached)
- attached.visible_message("[attached] is detached from [src].")
- attached = null
- output_dest = null
- update_icon()
- return
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params)
- if(user.a_intent != INTENT_HELP)
- return ..()
- switch(I.tool_behaviour)
- if(TOOL_WRENCH)
- if(welded)
- to_chat(user, "\The [src] is firmly welded to the floor. Cut the floorwelds before trying to unwrench it!")
- return TRUE
- var/turf/T = get_turf(src)
- if(T.intact && isfloorturf(T))
- to_chat(user, "You need to remove the floor tiles before [anchored ? "detaching" : "attaching"] \the [src]!")
- return TRUE
- if(anchored)
- I.play_tool_sound(src, 100)
-
- anchored = FALSE
- trunk.linked = null
- trunk = null
- attached = null
- output_dest = null
-
- user.visible_message("[user] detaches \the [src] from the floor!")
- return TRUE
- else
- var/found_trunk = FALSE
- for(var/obj/structure/disposalpipe/P in T)
- if(istype(P, /obj/structure/disposalpipe/trunk))
- var/obj/structure/disposalpipe/trunk/newtrunk = P
- if(newtrunk.linked) //Trunk is already linked to something
- continue
- found_trunk = TRUE
- trunk = newtrunk
- break
- 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
-
- I.play_tool_sound(src, 100)
- update_icon()
- return
-
- if(TOOL_CROWBAR)
- 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]!")
- unclog()
- return
- . = ..()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/welder_act(mob/living/user, obj/item/I)
- if(!I.tool_start_check(user, amount=0))
- return
- if(anchored)
- //var/turf/T = get_turf(src)
- 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
- to_chat(user, "You start welding \the [src] in place...")
- else
- if(clogged) // There's junk inside!
- to_chat(user, "There's junk inside \the [src]! Clean it out before trying to remove it!")
- return TRUE
- //Already welded, lets cut it free
- to_chat(user, "You start slicing the floorweld off \the [src]...")
-
- playsound(src, 'sound/items/welder2.ogg', 100, 1)
- if(I.use_tool(src, user, 20))
- update_icon()
- playsound(src, 'sound/items/welder.ogg', 100, 1)
- if(welded)
- to_chat(user, "You slice the floorweld off [src].")
- welded = FALSE
- trunk.linked = null
- return TRUE
- else
- to_chat(user, "You weld \the [src] to the floor.")
- welded = TRUE
- trunk.linked = src
- return TRUE
-
-
- else
- playsound(src, 'sound/items/welder2.ogg', 100, 1)
- to_chat(user, "You begin deconstructing \the [src]")
- if(I.use_tool(src, user, 30))
- playsound(src, 'sound/items/welder.ogg', 100, 1)
- deconstruct(TRUE)
- return TRUE
-
-// 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)
- 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)
- visible_message("\The [src] loudly clongs as something inside tries to break free!")
- if(do_after(user, 100))
- unclog()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/clog(list/clog_junk, loud = TRUE)
- clogged = TRUE
- for(var/atom/movable/AM in clog_junk)
- 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
- update_icon()
-
-/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)
- if(AM in pump_stuff)
- pump_stuff -= AM
- target = get_offset_target_turf(loc, rand(2)-rand(2), rand(2)-rand(2))
-
- AM.forceMove(T)
- AM.pipe_eject(dir)
- AM.throw_at(target, eject_range, 1)
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/face_atom(atom/A) //Literally stolen from /mob. Sue me.
- if(!A || !x || !y || !A.x || !A.y )
- return
- var/dx = A.x - x
- var/dy = A.y - y
- if(!dx && !dy) // Wall items are graphically shifted but on the floor
- if(A.pixel_y > 16)
- setDir(NORTH)
- else if(A.pixel_y < -16)
- setDir(SOUTH)
- else if(A.pixel_x > 16)
- setDir(EAST)
- else if(A.pixel_x < -16)
- setDir(WEST)
- return
-
- if(abs(dx) < abs(dy))
- if(dy > 0)
- setDir(NORTH)
- else
- setDir(SOUTH)
- else
- if(dx > 0)
- setDir(EAST)
- else
- setDir(WEST)
diff --git a/GainStation13/icons/obj/feeding_tube_industrial.dmi b/GainStation13/icons/obj/feeding_tube_industrial.dmi
deleted file mode 100644
index 058e5f47..00000000
Binary files a/GainStation13/icons/obj/feeding_tube_industrial.dmi and /dev/null differ
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 77b03dd8..3c1f24e6 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -191,10 +191,10 @@
medical_record_text = "Patient has been observed eating inedible garbage."
/datum/quirk/trashcan/add()
- add_verb(quirk_holder, /mob/living/proc/eat_trash)
+ quirk_holder.verbs += /mob/living/proc/eat_trash
/datum/quirk/trashcan/remove()
- remove_verb(quirk_holder, /mob/living/proc/eat_trash)
+ quirk_holder.verbs -= /mob/living/proc/eat_trash
/datum/quirk/universal_diet
name = "Universal diet"
diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm
index 54d6b16f..cca78f84 100644
--- a/code/modules/recycling/disposal/outlet.dm
+++ b/code/modules/recycling/disposal/outlet.dm
@@ -16,10 +16,6 @@
/obj/structure/disposaloutlet/Initialize(mapload, obj/structure/disposalconstruct/make_from)
. = ..()
- //GS Add: Hacky Solution, but it works.
- if(type == /obj/structure/disposaloutlet/industrial_feeding_tube)
- return
- //GS Add End.
if(make_from)
setDir(make_from.dir)
make_from.forceMove(src)
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index 57d0b47a..aed2310a 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -264,9 +264,6 @@
var/obj/structure/disposaloutlet/O = locate() in T
if(O)
- //GS add: Fixes a minor issue where the trunk gets linked to feeding tube improperly
- if(O.type = /obj/structure/disposaloutlet/industrial_feeding_tube)
- return
linked = O
diff --git a/tgstation.dme b/tgstation.dme
index 8c5d1233..f1e1a7c2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3080,7 +3080,6 @@
#include "GainStation13\code\clothing\head.dm"
#include "GainStation13\code\clothing\suits.dm"
#include "GainStation13\code\datums\components\fattening_door.dm"
-#include "GainStation13\code\datums\components\crafting\recipes\recipes_misc_gs.dm"
#include "GainStation13\code\datums\diseases\advance\symptoms\berry.dm"
#include "GainStation13\code\datums\mutations\fatfang.dm"
#include "GainStation13\code\datums\mutations\radfat.dm"
@@ -3099,7 +3098,6 @@
#include "GainStation13\code\machinery\adipoelectric_transformer.dm"
#include "GainStation13\code\machinery\fattening_turret.dm"
#include "GainStation13\code\machinery\feeding_tube.dm"
-#include "GainStation13\code\machinery\feeding_tube_industrial.dm"
#include "GainStation13\code\machinery\supply_teleporter.dm"
#include "GainStation13\code\mechanics\fatness.dm"
#include "GainStation13\code\mechanics\fatrousal.dm"
diff --git a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg b/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg
deleted file mode 100644
index cef4bf5c..00000000
Binary files a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg and /dev/null differ