diff --git a/code/game/objects/items/weapons/storage/backpack_vr.dm b/code/game/objects/items/weapons/storage/backpack_vr.dm
index 29e4403c2c7..2b13fbbe077 100644
--- a/code/game/objects/items/weapons/storage/backpack_vr.dm
+++ b/code/game/objects/items/weapons/storage/backpack_vr.dm
@@ -29,3 +29,44 @@
icon_state = "saddlebag_drider"
var/taurtype = /datum/sprite_accessory/tail/taur/spider
*/
+
+/obj/item/weapon/storage/backpack/saddlebag_common //Shared bag for other taurs with sturdy backs
+ name = "Taur Saddlebags"
+ desc = "A saddle that holds items. Seems slightly bulky."
+ icon = 'icons/obj/storage_vr.dmi'
+ icon_override = 'icons/mob/back_vr.dmi'
+ item_state = "saddlebag"
+ icon_state = "saddlebag"
+ var/icon_base = "saddlebag"
+ max_storage_space = INVENTORY_DUFFLEBAG_SPACE //Saddlebags can hold more, like dufflebags
+ slowdown = 1 //And are slower, too...Unless you're a macro, that is.
+ var/list/taurtype = list(
+ /datum/sprite_accessory/tail/taur/horse,
+ /datum/sprite_accessory/tail/taur/wolf,
+ /datum/sprite_accessory/tail/taur/cow,
+ /datum/sprite_accessory/tail/taur/lizard,
+ /datum/sprite_accessory/tail/taur/feline)
+ var/no_message = "You aren't the appropriate taur type to wear this!"
+
+ mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
+ if(..())
+ var/datum/sprite_accessory/tail/taur/TT = H.tail_style
+ if(istype(H) && is_type_in_list(TT, taurtype))
+ item_state = "[icon_base]_[TT]"
+ if(H.size_multiplier >= RESIZE_BIG) //Are they a macro?
+ slowdown = 0
+ else
+ slowdown = initial(slowdown)
+ return 1
+ else
+ H << "[no_message]"
+ return 0
+
+/obj/item/weapon/storage/backpack/saddlebag_common/robust //Shared bag for other taurs with sturdy backs
+ name = "Robust Saddlebags"
+ desc = "A saddle that holds items. Seems robust."
+ icon = 'icons/obj/storage_vr.dmi'
+ icon_override = 'icons/mob/back_vr.dmi'
+ item_state = "robustsaddle"
+ icon_state = "robustsaddle"
+ icon_base = "robustsaddle"
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
index b88d846c16f..2fd208cfd7c 100644
--- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
@@ -33,10 +33,20 @@
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist")
/datum/gear/accessory/saddlebag
- display_name = "Saddle Bag"
+ display_name = "Saddle Bag, Horse"
path = /obj/item/weapon/storage/backpack/saddlebag
slot = slot_back
+/datum/gear/accessory/saddlebag_common
+ display_name = "Saddle Bag, Common"
+ path = /obj/item/weapon/storage/backpack/saddlebag_common
+ slot = slot_back
+
+/datum/gear/accessory/saddlebag_common/robust
+ display_name = "Saddle Bag, Robust"
+ path = /obj/item/weapon/storage/backpack/saddlebag_common/robust
+ slot = slot_back
+
/datum/gear/accessory/khcrystal
display_name = "KH Life Crystal"
path = /obj/item/weapon/storage/box/khcrystal
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 3702b778aa5..2b535c450d9 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
@@ -119,6 +119,10 @@
dat += "
"
+ if(istype(src, /obj/item/device/dogborg/sleeper/compactor))//garbage counter for trashpup
+ if(length(contents) > 0)
+ dat += "Current load [length(contents)] / 25.
"
+
//Cleaning and there are still un-preserved items
if(cleaning && length(contents - items_preserved))
dat += "Self-cleaning mode. [length(contents - items_preserved)] object(s) remaining.
"
@@ -446,7 +450,7 @@
inject_amount = 10
min_health = -100
injection_chems = null //So they don't have all the same chems as the medihound!
- var/max_item_count = 32
+ var/max_item_count = 25
/obj/item/device/dogborg/sleeper/compactor/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)//GARBO NOMS
hound = loc
@@ -476,6 +480,19 @@
hound.updateicon()
return
+ if(istype(target, /mob/living/simple_animal/mouse)) //Edible mice, dead or alive whatever. Mostly for carcass picking you cruel bastard :v
+ var/mob/living/simple_animal/trashmouse = target
+ user.visible_message("[hound.name] is ingesting [trashmouse] into their [src.name].", "You start ingesting [trashmouse] into your [src.name]...")
+ if(do_after(user, 30, trashmouse) && length(contents) < max_item_count)
+ trashmouse.forceMove(src)
+ trashmouse.reset_view(src)
+ user.visible_message("[hound.name]'s garbage processor groans lightly as [trashmouse] slips inside.", "Your garbage compactor groans lightly as [trashmouse] slips inside.")
+ playsound(hound, 'sound/vore/gulp.ogg', 50, 1)
+ if(length(contents) > 11) //grow that tum after a certain junk amount
+ hound.sleeper_r = 1
+ hound.updateicon()
+ return
+
else if(ishuman(target))
var/mob/living/carbon/human/trashman = target
if(patient)
@@ -496,4 +513,12 @@
hound.updateicon()
return
return
-//Marking shit changed again because the random travis bug is having its shenanigans again \o/
\ No newline at end of file
+
+/mob/living/silicon/robot/attackby(obj/item/target as obj, mob/user as mob)
+ if(module_active && istype(module_active,/obj/item/device/dogborg/sleeper/compactor)) //Feeding?
+ if(user.a_intent == I_HELP)
+ var/obj/item/device/dogborg/sleeper/compactor = src.module_active
+ compactor.afterattack(target)
+ return
+ return
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm
index 71a7fd5b33b..2aac1d60804 100644
--- a/code/modules/mob/living/simple_animal/vore/otie.dm
+++ b/code/modules/mob/living/simple_animal/vore/otie.dm
@@ -26,15 +26,15 @@
emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns")
emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns")
say_maybe_target = list("Ruh?", "Waf?")
- say_got_target = list("Rurrr!", "ROAR!", "MINE!", "RAHH!", "Slurp.. RAH!")
+ say_got_target = list("Rurrr!", "ROAR!", "RERR!", "NOM!", "MINE!", "RAHH!", "RAH!", "WARF!")
melee_damage_lower = 5
melee_damage_upper = 20
response_help = "pets the"
response_disarm = "bops the"
response_harm = "hits the"
attacktext = "mauled"
- friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops")
- meat_amount = 5
+ friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
+ meat_amount = 6
old_x = -16
old_y = 0
pixel_x = -16
diff --git a/icons/mob/back_vr.dmi b/icons/mob/back_vr.dmi
index cbbe9afd59c..e86bd0c21b8 100644
Binary files a/icons/mob/back_vr.dmi and b/icons/mob/back_vr.dmi differ
diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi
index 805a2c37523..c18bfcd5634 100644
Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ
diff --git a/icons/mob/vore64x32.dmi b/icons/mob/vore64x32.dmi
index 05e81137665..a0d2035f514 100644
Binary files a/icons/mob/vore64x32.dmi and b/icons/mob/vore64x32.dmi differ
diff --git a/icons/obj/storage_vr.dmi b/icons/obj/storage_vr.dmi
index f337551005e..161d35f236a 100644
Binary files a/icons/obj/storage_vr.dmi and b/icons/obj/storage_vr.dmi differ