//Xenobio control console /mob/camera/aiEye/remote/xenobio visible_icon = TRUE icon = 'icons/mob/cameramob.dmi' icon_state = "generic_camera" var/allowed_area = null /mob/camera/aiEye/remote/xenobio/Initialize() var/area/A = get_area(loc) allowed_area = A.name . = ..() /mob/camera/aiEye/remote/xenobio/setLoc(var/t) var/area/new_area = get_area(t) if(new_area && new_area.name == allowed_area || new_area && new_area.xenobiology_compatible) return ..() else return /obj/machinery/computer/camera_advanced/xenobio name = "Slime management console" desc = "A computer used for remotely handling slimes." networks = list("ss13") circuit = /obj/item/circuitboard/computer/xenobiology var/datum/action/innate/slime_place/slime_place_action var/datum/action/innate/slime_pick_up/slime_up_action var/datum/action/innate/feed_slime/feed_slime_action var/datum/action/innate/monkey_recycle/monkey_recycle_action var/datum/action/innate/slime_scan/scan_action var/datum/action/innate/feed_potion/potion_action var/list/stored_slimes var/obj/item/slimepotion/slime/current_potion var/max_slimes = 1 var/monkeys = 0 var/upgradetier = 0 icon_screen = "slime_comp" icon_keyboard = "rd_key" light_color = LIGHT_COLOR_PINK /obj/machinery/computer/camera_advanced/xenobio/Initialize() . = ..() slime_place_action = new slime_up_action = new feed_slime_action = new monkey_recycle_action = new scan_action = new potion_action = new stored_slimes = list() RegisterSignal(src, COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del) /obj/machinery/computer/camera_advanced/xenobio/Destroy() stored_slimes = null QDEL_NULL(current_potion) 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/CreateEye() eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src)) eyeobj.origin = src eyeobj.visible_icon = TRUE eyeobj.icon = 'icons/mob/cameramob.dmi' eyeobj.icon_state = "generic_camera" /obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user) ..() if(slime_up_action && (upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC slime_up_action.target = src slime_up_action.Grant(user) actions += slime_up_action if(slime_place_action && (upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC slime_place_action.target = src slime_place_action.Grant(user) actions += slime_place_action if(feed_slime_action && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS feed_slime_action.target = src feed_slime_action.Grant(user) actions += feed_slime_action if(monkey_recycle_action && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS monkey_recycle_action.target = src monkey_recycle_action.Grant(user) actions += monkey_recycle_action if(scan_action) scan_action.target = src scan_action.Grant(user) actions += scan_action if(potion_action && (upgradetier & XENOBIO_UPGRADE_SLIMEADV)) // CIT CHANGE - makes giving slimes potions via console require XENOBIO_UPGRADE_SLIMEADV potion_action.target = src potion_action.Grant(user) actions += potion_action /obj/machinery/computer/camera_advanced/xenobio/proc/on_contents_del(atom/deleted) if(current_potion == deleted) current_potion = null if(deleted in stored_slimes) stored_slimes -= deleted /obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/disk/xenobio_console_upgrade)) var/obj/item/disk/xenobio_console_upgrade/diskthing = O var/successfulupgrade = FALSE for(var/I in diskthing.upgradetypes) if(upgradetier & I) continue else upgradetier |= I successfulupgrade = TRUE if(I == XENOBIO_UPGRADE_SLIMEADV) max_slimes = 10 if(successfulupgrade) to_chat(user, "You have successfully upgraded [src] with [O].") else to_chat(user, "[src] already has the contents of [O] installed!") return if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") qdel(O) return else if(istype(O, /obj/item/storage/bag) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS var/obj/item/storage/P = O var/loaded = FALSE for(var/obj/G in P.contents) if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) loaded = TRUE monkeys++ qdel(G) 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/slimepotion/slime) && (upgradetier & XENOBIO_UPGRADE_SLIMEADV)) // CIT CHANGE - makes giving slimes potions via console require XENOBIO_UPGRADE_SLIMEADV var/replaced = FALSE if(user && !user.transferItemToLoc(O, src)) return if(!QDELETED(current_potion)) current_potion.forceMove(drop_location()) replaced = TRUE current_potion = O to_chat(user, "You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") return ..() /datum/action/innate/slime_place name = "Place Slimes" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_down" /datum/action/innate/slime_place/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in X.stored_slimes) S.forceMove(remote_eye.loc) S.visible_message("[S] warps in!") X.stored_slimes -= S else to_chat(owner, "Target is not near a camera. Cannot proceed.") /datum/action/innate/slime_pick_up name = "Pick up Slime" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_up" /datum/action/innate/slime_pick_up/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in remote_eye.loc) if(X.stored_slimes.len >= X.max_slimes) break if(!S.ckey) if(S.buckled) S.Feedstop(silent = TRUE) S.visible_message("[S] vanishes in a flash of light!") S.forceMove(X) X.stored_slimes += S else to_chat(owner, "Target is not near a camera. Cannot proceed.") /datum/action/innate/feed_slime name = "Feed Slimes" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_down" /datum/action/innate/feed_slime/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) if(X.monkeys >= 1) var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc, TRUE, owner) if (!QDELETED(food)) food.LAssailant = C X.monkeys -- to_chat(owner, "[X] now has [X.monkeys] monkeys left.") else to_chat(owner, "Target is not near a camera. Cannot proceed.") /datum/action/innate/monkey_recycle name = "Recycle Monkeys" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "monkey_up" /datum/action/innate/monkey_recycle/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/carbon/monkey/M in remote_eye.loc) if(M.stat) M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!") X.monkeys = round(X.monkeys + 0.2,0.1) qdel(M) else to_chat(owner, "Target is not near a camera. Cannot proceed.") /datum/action/innate/slime_scan name = "Scan Slime" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_scan" /datum/action/innate/slime_scan/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in remote_eye.loc) slime_scan(S, C) else to_chat(owner, "Target is not near a camera. Cannot proceed.") /datum/action/innate/feed_potion name = "Apply Potion" icon_icon = 'icons/mob/actions/actions_silicon.dmi' button_icon_state = "slime_potion" /datum/action/innate/feed_potion/Activate() if(!target || !isliving(owner)) return var/mob/living/C = owner var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target if(QDELETED(X.current_potion)) to_chat(owner, "No potion loaded.") return if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in remote_eye.loc) X.current_potion.attack(S, C) break else to_chat(owner, "Target is not near a camera. Cannot proceed.") /obj/item/disk/xenobio_console_upgrade name = "Xenobiology console upgrade disk" desc = "Allan please add detail." icon_state = "datadisk5" var/list/upgradetypes = list() /obj/item/disk/xenobio_console_upgrade/admin name = "Xenobio all access thing" desc = "'the consoles are literally useless!!!!!!!!!!!!!!!'" upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV, XENOBIO_UPGRADE_MONKEYS) /obj/item/disk/xenobio_console_upgrade/monkey name = "Xenobiology console monkey upgrade disk" desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console." upgradetypes = list(XENOBIO_UPGRADE_MONKEYS) /obj/item/disk/xenobio_console_upgrade/slimebasic name = "Xenobiology console basic slime upgrade disk" desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console." upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC) /obj/item/disk/xenobio_console_upgrade/slimeadv name = "Xenobiology console advanced slime upgrade disk" desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk." upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV)