diff --git a/modular_chomp/code/game/objects/items/devices/vacpack.dm b/modular_chomp/code/game/objects/items/devices/vacpack.dm
index d519332b91..a7d105c38b 100644
--- a/modular_chomp/code/game/objects/items/devices/vacpack.dm
+++ b/modular_chomp/code/game/objects/items/devices/vacpack.dm
@@ -19,6 +19,7 @@
"auto-level" = 7,
"output destination" = 8
)
+ var/vac_owner = null
/obj/item/device/vac_attachment/New()
..()
@@ -32,6 +33,9 @@
set_input = tgui_input_list(user, "Set your vacuum attachment's power level or output mode.", "Vac Settings", vac_settings)
if(set_input)
if(set_input == "output destination")
+ if(vac_owner && user != vac_owner)
+ to_chat(user, "Only designated owner can change this setting.")
+ return
var/set_output = tgui_input_list(user, "Set your vacuum attachment's connection port", "Vac Settings", list("Vore Belly", "Borg Belly", "Trash Bag"))
if(set_output)
if(set_output == "Borg Belly")
@@ -92,8 +96,10 @@
to_chat(user, "Ore storage full. Deposit ore contents to a box continue.")
return
if(isbelly(output_dest))
- var/obj/belly/B = output_dest
- if(B.loc != user && !B.loc.Adjacent(user)) //Can still be used as a feeding tube by another adjacent player.
+ var/turf/T = get_turf(output_dest)
+ if(!T.Adjacent(user)) //Can still be used as a feeding tube by another adjacent player.
+ if(vac_owner && user != vac_owner)
+ return
vac_power = 0
icon_state = "sucker-0"
output_dest = null
@@ -250,6 +256,10 @@
.=..()
icon_state = "sucker-[vac_power]"
+/obj/item/device/vac_attachment/equipped()
+ .=..()
+ icon_state = "sucker-[vac_power]"
+
/obj/item/device/vac_attachment/dropped(mob/user as mob)
.=..()
icon_state = "sucker_drop"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm
index 4c0d701060..a4ca86672b 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm
@@ -35,6 +35,9 @@
if(istype(Vac))
Vac.output_dest = vore_selected
Vac.vac_power = 3
+ Vac.item_state = null
+ Vac.vac_owner = src
+ Vac.icon = 'modular_chomp/icons/mob/vacpack_swoop.dmi'
/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie/IIsAlly(mob/living/L)
. = ..()
@@ -140,7 +143,19 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie/Life()
. =..()
var/turf/T = get_turf(src)
- if(istype(T) && istype(Vac) && has_AI())
+ if(istype(Vac))
+ if(Vac.loc != src)
+ var/turf/VT = get_turf(Vac)
+ if(!T.Adjacent(VT) || isturf(Vac.loc))
+ if(isliving(Vac.loc))
+ var/mob/living/L = Vac.loc
+ L.remove_from_mob(Vac, src)
+ else
+ Vac.forceMove(src)
+ if(!Vac.output_dest)
+ if(isbelly(vore_selected))
+ Vac.output_dest = vore_selected
+ if(istype(T) && istype(Vac) && has_AI() && Vac.loc == src)
if(istype(T, /turf/simulated))
var/turf/simulated/S = T
if(S.dirt > 10)
@@ -182,4 +197,24 @@
if(L.a_intent == I_DISARM && Vac)
Vac.attack_self(L)
return
+ if(L.a_intent == I_GRAB && Vac && Vac.loc == src)
+ if(L.zone_sel.selecting == BP_HEAD)
+ if(L.put_in_active_hand(Vac))
+ L.visible_message("[L] grabs [src] by the neck, brandishing the thing like a regular vacuum cleaner!")
+ L.start_pulling(src)
+ return
. = ..()
+
+/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie/verb/borrow_vac()
+ set name = "Borrow Vac-Pack"
+ set desc = "Allows adjacent user to borrow Swoopie's Vac-Pack"
+ set category = "Object"
+ set src in oview(1)
+ if(istype(Vac))
+ if(usr != src)
+ usr.put_in_active_hand(Vac)
+ else
+ var/mob/living/L = input("Borrow Vac-Pack for") as null| mob in view(1,usr.loc)
+ if(!L || L == usr)
+ return
+ L.put_in_active_hand(Vac)
\ No newline at end of file
diff --git a/modular_chomp/icons/mob/vacpack_swoop.dmi b/modular_chomp/icons/mob/vacpack_swoop.dmi
new file mode 100644
index 0000000000..b5c5979cee
Binary files /dev/null and b/modular_chomp/icons/mob/vacpack_swoop.dmi differ