diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 8fe5d2cf4d8..13da698baa1 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -14,6 +14,7 @@
var/cube_production = 1
var/cycle_through = 0
var/obj/item/reagent_containers/food/snacks/monkeycube/cube_type = /obj/item/reagent_containers/food/snacks/monkeycube
+ var/list/connected = list()
/obj/machinery/monkey_recycler/New()
..()
@@ -22,6 +23,11 @@
component_parts += new /obj/item/stock_parts/manipulator(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
RefreshParts()
+
+/obj/machinery/monkey_recycler/Destroy()
+ for(var/obj/machinery/computer/camera_advanced/xenobio/console in connected)
+ console.connected_recycler = null
+ return ..()
/obj/machinery/monkey_recycler/RefreshParts()
var/req_grind = 5
@@ -47,21 +53,25 @@
default_deconstruction_crowbar(O)
if(istype(O, /obj/item/multitool))
- cycle_through++
- switch(cycle_through)
- if(1)
- cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube
- if(2)
- cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube
- if(3)
- cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube
- if(4)
- cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube
- if(5)
- cube_type = /obj/item/reagent_containers/food/snacks/monkeycube
- cycle_through = 0
- to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].")
-
+ if(!panel_open)
+ cycle_through++
+ switch(cycle_through)
+ if(1)
+ cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube
+ if(2)
+ cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube
+ if(3)
+ cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube
+ if(4)
+ cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube
+ if(5)
+ cube_type = /obj/item/reagent_containers/food/snacks/monkeycube
+ cycle_through = 0
+ to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].")
+ else
+ var/obj/item/multitool/M = O
+ M.buffer = src
+ to_chat(user, "You save the data in the [O.name]'s buffer.")
if(stat != 0) //NOPOWER etc
return
if(istype(O, /obj/item/grab))
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index c11ae3f4d4c..6311e64ae4f 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -35,6 +35,7 @@
var/monkeys = 0
var/obj/item/slimepotion/slime/current_potion
var/obj/item/slime_scanner/scanner = new /obj/item/slime_scanner
+ var/obj/machinery/monkey_recycler/connected_recycler
icon_screen = "slime_comp"
icon_keyboard = "rd_key"
@@ -46,6 +47,16 @@
eyeobj.icon = 'icons/obj/abductor.dmi'
eyeobj.icon_state = "camera_target"
+/obj/machinery/computer/camera_advanced/xenobio/Destroy()
+ stored_slimes = null
+ qdel(current_potion)
+ qdel(scanner)
+ for(var/i in contents)
+ var/mob/living/simple_animal/slime/S = i
+ if(istype(S))
+ S.forceMove(drop_location())
+ return ..()
+
/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/carbon/user)
..()
if(slime_up_action)
@@ -114,7 +125,7 @@
else if (istype(O, /obj/item/slimepotion/slime))
var/replaced = FALSE
if(user.drop_item())
- if(!QDELETED(current_potion))
+ if(current_potion)
current_potion.forceMove(drop_location())
replaced = TRUE
current_potion = O
@@ -131,6 +142,13 @@
if(loaded)
to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.")
return
+ else if (istype(O, /obj/item/multitool))
+ var/obj/item/multitool/I = O
+ if (istype(I.buffer, /obj/machinery/monkey_recycler))
+ to_chat(user, "You link [src] with [I.buffer] in [I] buffer.")
+ connected_recycler = I.buffer
+ connected_recycler.connected += src
+ return
..()
/datum/action/innate/slime_place
@@ -207,12 +225,17 @@
var/mob/living/carbon/human/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = target
-
+ var/obj/machinery/monkey_recycler/recycler = X.connected_recycler
+
+ if(!recycler)
+ to_chat(owner, "There is no connected monkey recycler. Use a multitool to link one.")
+ return
if(cameranet.checkTurfVis(remote_eye.loc))
for(var/mob/living/carbon/human/M in remote_eye.loc)
if(issmall(M) && M.stat)
M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!")
- X.monkeys = round(X.monkeys + 0.2,0.1)
+ recycler.use_power(500)
+ X.monkeys = round(X.monkeys + recycler.cube_production/recycler.required_grind, 0.1)
qdel(M)
else
to_chat(owner, "Target is not near a camera. Cannot proceed.")
@@ -391,9 +414,13 @@
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/mobarea = get_area(M.loc)
-
+ var/obj/machinery/monkey_recycler/recycler = X.connected_recycler
+ if(!recycler)
+ to_chat(C, "There is no connected monkey recycler. Use a multitool to link one.")
+ return
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
if(issmall(M) && M.stat)
M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!")
- X.monkeys = round(X.monkeys + 0.2,0.1)
+ recycler.use_power(500)
+ X.monkeys = round(X.monkeys + recycler.cube_production/recycler.required_grind, 0.1)
qdel(M)