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 44ace0a1895..f6c2028fec5 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
@@ -18,6 +18,12 @@
var/compactor = FALSE
var/analyzer = FALSE
var/decompiler = FALSE
+ var/delivery = FALSE
+ var/delivery_tag = "Fuel"
+ var/list/deliverylists = list()
+ var/list/deliveryslot_1 = list()
+ var/list/deliveryslot_2 = list()
+ var/list/deliveryslot_3 = list()
var/datum/research/techonly/files //Analyzerbelly var.
var/synced = FALSE
var/startdrain = 500
@@ -49,48 +55,11 @@
return
if(target in hound.module.modules)
return
- if(length(contents) > (max_item_count - 1))
+ if(length(contents) >= max_item_count)
to_chat(user, "Your [src.name] is full. Eject or process contents to continue.")
return
- if(analyzer == TRUE)
- if(istype(target, /obj/item))
- var/obj/target_obj = target
- if(target_obj.w_class > ITEMSIZE_LARGE)
- to_chat(user, "\The [target] is too large to fit into your [src.name]")
- return
- user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...")
- if(do_after(user, 30, target) && length(contents) < max_item_count)
- target.forceMove(src)
- user.visible_message("[hound.name]'s internal analyzer groans lightly as [target.name] slips inside.", "Your internal analyzer groans lightly as [target] slips inside.")
- playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
- if(istype(target,/obj/item))
- var/obj/item/tech_item = target
- for(var/T in tech_item.origin_tech)
- to_chat(user, "\The [tech_item] has level [tech_item.origin_tech[T]] in [CallTechName(T)].")
- update_patient()
- return
-
- else if(ishuman(target))
- var/mob/living/carbon/human/trashman = target
- if(patient)
- to_chat(user, "Your [src.name] is already occupied.")
- return
- if(trashman.buckled)
- to_chat(user, "[trashman] is buckled and can not be put into your [src.name].")
- return
- user.visible_message("[hound.name] is ingesting [trashman] into their [src.name].", "You start ingesting [trashman] into your [src.name]...")
- if(do_after(user, 30, trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
- trashman.forceMove(src)
- trashman.reset_view(src)
- processing_objects |= src
- user.visible_message("[hound.name]'s internal analyzer groans lightly as [trashman] slips inside.", "Your internal analyzer groans lightly as [trashman] slips inside.")
- playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
- update_patient()
- return
- return
-
- if(compactor == TRUE)
+ if(compactor)
if(istype(target, /obj/item) || istype(target, /obj/effect/decal/remains))
var/obj/target_obj = target
if(target_obj.w_class > ITEMSIZE_LARGE)
@@ -99,8 +68,16 @@
user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...")
if(do_after(user, 30, target) && length(contents) < max_item_count)
target.forceMove(src)
- user.visible_message("[hound.name]'s garbage processor groans lightly as [target.name] slips inside.", "Your garbage compactor groans lightly as [target] slips inside.")
+ user.visible_message("[hound.name]'s [src.name] groans lightly as [target.name] slips inside.", "Your [src.name] groans lightly as [target] slips inside.")
playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
+ if(analyzer && istype(target,/obj/item))
+ var/obj/item/tech_item = target
+ for(var/T in tech_item.origin_tech)
+ to_chat(user, "\The [tech_item] has level [tech_item.origin_tech[T]] in [CallTechName(T)].")
+ if(delivery)
+ if(islist(deliverylists[delivery_tag]))
+ deliverylists[delivery_tag] |= target
+ to_chat(user, "\The [target.name] added to cargo compartment slot: [delivery_tag].")
update_patient()
return
@@ -110,8 +87,12 @@
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.")
+ user.visible_message("[hound.name]'s [src.name] groans lightly as [trashmouse] slips inside.", "Your [src.name] groans lightly as [trashmouse] slips inside.")
playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
+ if(delivery)
+ if(islist(deliverylists[delivery_tag]))
+ deliverylists[delivery_tag] |= trashmouse
+ to_chat(user, "\The [trashmouse] added to cargo compartment slot: [delivery_tag].")
update_patient()
return
@@ -128,11 +109,18 @@
trashman.forceMove(src)
trashman.reset_view(src)
processing_objects |= src
- user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.")
+ user.visible_message("[hound.name]'s [src.name] groans lightly as [trashman] slips inside.", "Your [src.name] groans lightly as [trashman] slips inside.")
+ message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])")
playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
+ if(delivery)
+ if(islist(deliverylists[delivery_tag]))
+ deliverylists[delivery_tag] |= trashman
+ to_chat(user, "\The [trashman] added to cargo compartment slot: [delivery_tag].")
+ to_chat(trashman, "[hound.name] has added you to their cargo compartment slot: [delivery_tag].")
update_patient()
return
return
+
else if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.buckled)
@@ -143,48 +131,38 @@
return
user.visible_message("[hound.name] is ingesting [H.name] into their [src.name].", "You start ingesting [H] into your [src]...")
if(!patient && !H.buckled && do_after (user, 50, H))
-
- if(!proximity) return //If they moved away, you can't eat them.
-
- if(patient) return //If you try to eat two people at once, you can only eat one.
-
+ if(!proximity)
+ return //If they moved away, you can't eat them.
+ if(patient)
+ return //If you try to eat two people at once, you can only eat one.
else //If you don't have someone in you, proceed.
H.forceMove(src)
H.reset_view(src)
update_patient()
processing_objects |= src
- user.visible_message("[hound.name]'s medical pod lights up as [H.name] slips inside into their [src.name].", "Your medical pod lights up as [H] slips into your [src]. Life support functions engaged.")
+ user.visible_message("[hound.name]'s [src.name] lights up as [H.name] slips inside.", "Your [src] lights up as [H] slips inside. Life support functions engaged.")
message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])")
playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises)
/obj/item/device/dogborg/sleeper/proc/go_out(var/target)
hound = src.loc
+ items_preserved.Cut()
+ cleaning = 0
+ for(var/list/dlist in deliverylists)
+ dlist.Cut()
if(length(contents) > 0)
hound.visible_message("[hound.name] empties out their contents via their [eject_port] port.", "You empty your contents via your [eject_port] port.")
- if(target)
- if(ishuman(target))
- var/mob/living/carbon/human/person = target
+ for(var/C in contents)
+ if(ishuman(C))
+ var/mob/living/carbon/human/person = C
person.forceMove(get_turf(src))
person.reset_view()
else
- var/obj/T = target
+ var/obj/T = C
T.loc = hound.loc
- else
- for(var/C in contents)
- if(ishuman(C))
- var/mob/living/carbon/human/person = C
- person.forceMove(get_turf(src))
- person.reset_view()
- else
- var/obj/T = C
- T.loc = hound.loc
- items_preserved.Cut()
- cleaning = 0
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
update_patient()
else //You clicked eject with nothing in you, let's just reset stuff to be sure.
- items_preserved.Cut()
- cleaning = 0
update_patient()
/obj/item/device/dogborg/sleeper/proc/drain(var/amt = 3) //Slightly reduced cost (before, it was always injecting inaprov)
@@ -220,15 +198,33 @@
dat += "Self-Clean"
else
dat += "Self-Clean"
+ if(delivery)
+ dat += "