diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index 9ae6d47c7e0..f1ec9da9d14 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -164,7 +164,39 @@
message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])")
playsound(src, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
-/obj/item/device/dogborg/sleeper/proc/go_out(var/target)
+/obj/item/device/dogborg/sleeper/proc/ingest_atom(var/atom/ingesting)
+ if (!ingesting || ingesting == hound)
+ return
+ var/obj/belly/belly = hound.vore_selected
+ if (!istype(hound) || !istype(belly) || !(belly in hound.vore_organs))
+ return
+ if (isliving(ingesting))
+ ingest_living(ingesting, belly)
+ else if (istype(ingesting, /obj/item))
+ var/obj/item/to_eat = ingesting
+ if (is_type_in_list(to_eat, item_vore_blacklist))
+ return
+ if (istype(to_eat, /obj/item/weapon/holder)) //just in case
+ var/obj/item/weapon/holder/micro = ingesting
+ var/delete_holder = TRUE
+ for (var/mob/living/M in micro.contents)
+ if (!ingest_living(M, belly) || M.loc == micro)
+ delete_holder = FALSE
+ if (delete_holder)
+ micro.held_mob = null
+ qdel(micro)
+ return
+ to_eat.forceMove(belly)
+ log_admin("VORE: [hound] used their [src] to swallow [to_eat].")
+
+/obj/item/device/dogborg/sleeper/proc/ingest_living(var/mob/living/victim, var/obj/belly/belly)
+ if (victim.devourable && is_vore_predator(hound))
+ belly.nom_mob(victim, hound)
+ add_attack_logs(hound, victim, "Eaten via [belly.name]")
+ return TRUE
+ return FALSE
+
+/obj/item/device/dogborg/sleeper/proc/go_out()
hound = src.loc
items_preserved.Cut()
cleaning = 0
@@ -181,9 +213,20 @@
var/obj/T = C
T.loc = hound.loc
playsound(src, 'sound/effects/splat.ogg', 50, 1)
- update_patient()
- else //You clicked eject with nothing in you, let's just reset stuff to be sure.
- update_patient()
+ update_patient()
+
+/obj/item/device/dogborg/sleeper/proc/vore_ingest_all()
+ hound = src.loc
+ if (!istype(hound) || length(contents) <= 0)
+ return
+ if (!hound.vore_selected)
+ to_chat(hound, "You don't have a belly selected to empty the contents into!")
+ return
+ for (var/C in contents)
+ if (isliving(C) || isitem(C))
+ ingest_atom(C)
+ hound.updateVRPanel()
+ update_patient()
/obj/item/device/dogborg/sleeper/proc/drain(var/amt = 3) //Slightly reduced cost (before, it was always injecting inaprov)
hound = src.loc
@@ -213,21 +256,23 @@
dat += "Inject [C.name]
"
dat += "