This commit is contained in:
SandPoot
2024-08-24 21:28:55 -03:00
parent 9604090014
commit c07e94be66
218 changed files with 1001 additions and 979 deletions
@@ -51,9 +51,9 @@
SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id)
/obj/machinery/nanite_chamber/proc/inject_nanites()
if(stat & (NOPOWER|BROKEN))
if(machine_stat & (NOPOWER|BROKEN))
return
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
return
if(!occupant || busy)
return
@@ -78,9 +78,9 @@
occupant.AddComponent(/datum/component/nanites, 100)
/obj/machinery/nanite_chamber/proc/remove_nanites(datum/nanite_program/NP)
if(stat & (NOPOWER|BROKEN))
if(machine_stat & (NOPOWER|BROKEN))
return
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
return
if(!occupant || busy || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK))
return
@@ -118,10 +118,10 @@
/obj/machinery/nanite_chamber/update_overlays()
. = ..()
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
. += "maint"
else if(!(stat & (NOPOWER|BROKEN)))
else if(!(machine_stat & (NOPOWER|BROKEN)))
if(busy || locked)
. += "red"
if(locked)
@@ -28,7 +28,7 @@
/obj/machinery/nanite_program_hub/update_overlays()
. = ..()
if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
if((machine_stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
return
. += mutable_appearance(icon, "nanite_program_hub_on")
. += emissive_appearance(icon, "nanite_program_hub_on")
@@ -13,7 +13,7 @@
/obj/machinery/nanite_programmer/update_overlays()
. = ..()
if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
if((machine_stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
return
. += mutable_appearance(icon, "nanite_programmer_on")
. += emissive_appearance(icon, "nanite_programmer_on")
@@ -33,9 +33,9 @@
update_icon()
/obj/machinery/public_nanite_chamber/proc/inject_nanites(mob/living/attacker)
if(stat & (NOPOWER|BROKEN))
if(machine_stat & (NOPOWER|BROKEN))
return
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
return
if(!occupant || busy)
return
@@ -61,9 +61,9 @@
occupant.AddComponent(/datum/component/nanites, 75, cloud_id)
/obj/machinery/public_nanite_chamber/proc/change_cloud(mob/living/attacker)
if(stat & (NOPOWER|BROKEN))
if(machine_stat & (NOPOWER|BROKEN))
return
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
return
if(!occupant || busy)
return
@@ -98,10 +98,10 @@
/obj/machinery/public_nanite_chamber/update_overlays()
. = ..()
if((stat & MAINT) || panel_open)
if((machine_stat & MAINT) || panel_open)
. += "maint"
else if(!(stat & (NOPOWER|BROKEN)))
else if(!(machine_stat & (NOPOWER|BROKEN)))
if(busy || locked)
. += "red"
if(locked)
+3 -3
View File
@@ -27,7 +27,7 @@
return ..()
/obj/machinery/rnd/proc/shock(mob/user, prb)
if(stat & (BROKEN|NOPOWER)) // unpowered, no shock
if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock
return FALSE
if(!prob(prb))
return FALSE
@@ -76,10 +76,10 @@
if(busy)
to_chat(user, "<span class='warning'>[src] is busy right now.</span>")
return FALSE
if(stat & BROKEN)
if(machine_stat & BROKEN)
to_chat(user, "<span class='warning'>[src] is broken.</span>")
return FALSE
if(stat & NOPOWER)
if(machine_stat & NOPOWER)
to_chat(user, "<span class='warning'>[src] has no power.</span>")
return FALSE
if(loaded_item)
+4 -4
View File
@@ -34,7 +34,7 @@
heat_gen = initial(src.heat_gen) / max(1, tot_rating)
/obj/machinery/rnd/server/proc/refresh_working()
if(stat & EMPED)
if(machine_stat & EMPED)
working = FALSE
else
working = TRUE
@@ -43,12 +43,12 @@
. = ..()
if(. & EMP_PROTECT_SELF)
return
stat |= EMPED
machine_stat |= EMPED
addtimer(CALLBACK(src, PROC_REF(unemp)), severity*9)
refresh_working()
/obj/machinery/rnd/server/proc/unemp()
stat &= ~EMPED
machine_stat &= ~EMPED
refresh_working()
/obj/machinery/rnd/server/proc/mine()
@@ -62,7 +62,7 @@
return environment.return_temperature()
/obj/machinery/rnd/server/proc/produce_heat(perc)
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
if(!(machine_stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
var/turf/L = loc
if(istype(L))
var/datum/gas_mixture/env = L.return_air()
@@ -10,8 +10,8 @@
allowed_area = A.name
. = ..()
/mob/camera/aiEye/remote/xenobio/setLoc(var/t)
var/area/new_area = get_area(t)
/mob/camera/aiEye/remote/xenobio/setLoc(turf/destination)
var/area/new_area = get_area(destination)
if(new_area && new_area.name == allowed_area || new_area && new_area.xenobiology_compatible)
return ..()
else
@@ -62,6 +62,16 @@
S.forceMove(drop_location())
return ..()
/obj/machinery/computer/camera_advanced/xenobio/examine(mob/user)
. = ..()
if(monkeys)
. += span_notice("There [monkeys == 1 ? "is" : "are"] [monkeys] monkey\s stored.")
var/slime_amount = length(stored_slimes)
if(slime_amount)
. += span_notice("There [slime_amount == 1 ? "is" : "are"] [slime_amount] slime\s stored.")
if(current_potion)
. += span_notice("[current_potion] is currently loaded, press <b>Alt-click</b> to eject.")
/obj/machinery/computer/camera_advanced/xenobio/CreateEye()
eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src))
eyeobj.origin = src
@@ -114,17 +124,17 @@
actions += new feed_slime_action(src)
actions += new monkey_recycle_action(src)
if(successfulupgrade)
to_chat(user, "<span class='notice'>You have successfully upgraded [src] with [O].</span>")
to_chat(user, span_notice("You have successfully upgraded [src] with [O]."))
for(var/datum/action/actions_removed as anything in actions)
actions_removed.Remove(current_user)
GrantActions(current_user)
else
to_chat(user, "<span class='warning'>[src] already has the contents of [O] installed!</span>")
to_chat(user, span_warning("[src] already has the contents of [O] installed!"))
return
if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
monkeys++
to_chat(user, "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>")
to_chat(user, span_notice("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
@@ -136,7 +146,7 @@
monkeys++
qdel(G)
if(loaded)
to_chat(user, "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>")
to_chat(user, span_notice("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
@@ -146,7 +156,7 @@
current_potion.forceMove(drop_location())
replaced = TRUE
current_potion = O
to_chat(user, "<span class='notice'>You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].</span>")
to_chat(user, span_notice("You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""]."))
return
..()
@@ -156,10 +166,9 @@
button_icon_state = "slime_down"
/datum/action/innate/slime_place/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = target
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
@@ -168,7 +177,7 @@
S.visible_message("[S] warps in!")
X.stored_slimes -= S
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
/datum/action/innate/slime_pick_up
name = "Pick up Slime"
@@ -176,10 +185,9 @@
button_icon_state = "slime_up"
/datum/action/innate/slime_pick_up/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = target
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
@@ -193,7 +201,7 @@
S.forceMove(X)
X.stored_slimes += S
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
/datum/action/innate/feed_slime
@@ -202,23 +210,22 @@
button_icon_state = "monkey_down"
/datum/action/innate/feed_slime/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.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 = WEAKREF(C)
X.monkeys --
to_chat(owner, "<span class='notice'>[X] now has [X.monkeys] monkey(s) left.</span>")
food.LAssailant = WEAKREF(owner)
X.monkeys--
to_chat(owner, span_notice("[X] now has [X.monkeys] monkey(s) left."))
else
to_chat(owner, "<span class='warning'>[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.</span>")
to_chat(owner, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored."))
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
/datum/action/innate/monkey_recycle
@@ -227,10 +234,9 @@
button_icon_state = "monkey_up"
/datum/action/innate/monkey_recycle/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = target
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
@@ -240,7 +246,7 @@
X.monkeys = round(X.monkeys + 0.2,0.1)
qdel(M)
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
/datum/action/innate/slime_scan
name = "Scan Slime"
@@ -248,16 +254,15 @@
button_icon_state = "slime_scan"
/datum/action/innate/slime_scan/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.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)
slime_scan(S, owner)
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
/datum/action/innate/feed_potion
name = "Apply Potion"
@@ -265,23 +270,22 @@
button_icon_state = "slime_potion"
/datum/action/innate/feed_potion/Activate()
if(!target || !isliving(owner))
if(QDELETED(owner) || !isliving(owner))
return
var/mob/living/C = owner
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = target
if(QDELETED(X.current_potion))
to_chat(owner, "<span class='notice'>No potion loaded.</span>")
to_chat(owner, span_notice("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)
X.current_potion.attack(S, owner)
break
else
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
//Demodularized Code
@@ -323,11 +327,14 @@
/datum/action/innate/hotkey_help/Activate()
if(!target || !isliving(owner))
return
to_chat(owner, "<b>Click shortcuts:</b>")
to_chat(owner, "Shift-click a slime to pick it up, or the floor to drop all held slimes. (Requires Basic Slime Console upgrade)")
to_chat(owner, "Ctrl-click a slime to scan it.")
to_chat(owner, "Alt-click a slime to feed it a potion. (Requires Advanced Slime Console upgrade)")
to_chat(owner, "Ctrl-click on a dead monkey to recycle it, or the floor to place a new monkey. (Requires Monkey Console upgrade)")
var/static/list/help = list(
"<b>Click shortcuts:</b>",
"Shift-click a slime to pick it up, or the floor to drop all held slimes. (Requires Basic Slime Console upgrade)",
"Ctrl-click a slime to scan it.",
"Alt-click a slime to feed it a potion. (Requires Advanced Slime Console upgrade)",
"Ctrl-click on a dead monkey to recycle it, or the floor to place a new monkey. (Requires Monkey Console upgrade)",
)
to_chat(owner, "<blockquote class='info'>[help.Join("\n")]</blockquote>")
//
// Alternate clicks for slime, monkey and open turf if using a xenobio console
@@ -365,67 +372,67 @@
// Scans slime
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/S)
if(!GLOB.cameranet.checkTurfVis(S.loc))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/area/mobarea = get_area(S.loc)
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
slime_scan(S, C)
slime_scan(S, user)
//Feeds a potion to slime
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/S)
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEADV)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEADV
to_chat(user, "<span class='warning'>This console does not have the advanced slime upgrade.</span>")
to_chat(user, span_warning("This console does not have the advanced slime upgrade."))
return
if(!GLOB.cameranet.checkTurfVis(S.loc))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/turf/slime_location = S.loc
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/mobarea = get_area(S.loc)
var/area/mobarea = get_area(slime_location)
if(QDELETED(X.current_potion))
to_chat(C, "<span class='warning'>No potion loaded.</span>")
to_chat(user, span_warning("No potion loaded."))
return
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
X.current_potion.attack(S, C)
slime_location.balloon_alert(user, "applying [current_potion]")
X.current_potion.attack(S, user)
//Picks up slime
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/S)
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC
to_chat(user, "<span class='warning'>This console does not have the basic slime upgrade.</span>")
to_chat(user, span_warning("This console does not have the basic slime upgrade."))
return
if(!GLOB.cameranet.checkTurfVis(S.loc))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/turf/slime_location = S.loc
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/mobarea = get_area(S.loc)
var/area/mobarea = get_area(slime_location)
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
if(X.stored_slimes.len >= X.max_slimes)
to_chat(C, "<span class='warning'>Slime storage is full.</span>")
to_chat(user, span_warning("Slime storage is full."))
return
if(S.ckey)
to_chat(C, "<span class='warning'>The slime wiggled free!</span>")
to_chat(user, span_warning("The slime wiggled free!"))
return
if(S.buckled)
S.Feedstop(silent = TRUE)
S.visible_message("[S] vanishes in a flash of light!")
S.forceMove(X)
X.stored_slimes += S
slime_location.balloon_alert(user, "[length(X.stored_slimes)]/[max_slimes] in storage")
//Place slimes
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/T)
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC
to_chat(user, "<span class='warning'>This console does not have the basic slime upgrade.</span>")
to_chat(user, span_warning("This console does not have the basic slime upgrade."))
return
if(!GLOB.cameranet.checkTurfVis(T))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/turfarea = get_area(T)
if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible)
@@ -437,38 +444,39 @@
//Place monkey
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/T)
if(!(upgradetier & XENOBIO_UPGRADE_MONKEYS)) // CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
to_chat(user, "<span class='warning'>This console does not have the monkey upgrade.</span>")
to_chat(user, span_warning("This console does not have the monkey upgrade."))
return
if(!GLOB.cameranet.checkTurfVis(T))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/turfarea = get_area(T)
if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible)
if(X.monkeys >= 1)
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, C)
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, user)
if (!QDELETED(food))
food.LAssailant = WEAKREF(C)
food.LAssailant = WEAKREF(user)
X.monkeys--
X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors
to_chat(C, "<span class='notice'>[X] now has [X.monkeys] monkey(s) stored.</span>")
to_chat(user, span_notice("[X] now has [X.monkeys] monkey(s) stored."))
T.balloon_alert(user, "[X.monkeys] left")
else
to_chat(C, "<span class='warning'>[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.</span>")
to_chat(user, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored."))
T.balloon_alert(user, "no monkeys available")
//Pick up monkey
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/monkey/M)
if(!(upgradetier & XENOBIO_UPGRADE_MONKEYS)) // CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
to_chat(user, "<span class='warning'>This console does not have the monkey upgrade.</span>")
to_chat(user, span_warning("This console does not have the monkey upgrade."))
return
if(!isturf(M.loc) || !GLOB.cameranet.checkTurfVis(M.loc))
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
return
var/mob/living/C = user
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
var/turf/monkey_location = M.loc
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
var/area/mobarea = get_area(M.loc)
var/area/mobarea = get_area(monkey_location)
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
if(!M.stat)
return
@@ -476,4 +484,13 @@
X.monkeys = round(X.monkeys + 0.2,0.1)
qdel(M)
if (X.monkeys == (round(X.monkeys,1)))
to_chat(C, "<span class='notice'>[X] now has [X.monkeys] monkey(s) available.</span>")
to_chat(user, span_notice("[X] now has [X.monkeys] monkey(s) available."))
monkey_location.balloon_alert(user, "[X.monkeys] available")
/obj/machinery/computer/camera_advanced/xenobio/AltClick(mob/user)
. = ..()
if(!QDELETED(current_potion) && user.canUseTopic(src, BE_CLOSE, no_tk = NO_TK))
to_chat(user, span_notice("You eject [current_potion] from [src]."))
if(!user.put_in_hands(current_potion))
current_potion.forceMove(drop_location())
current_potion = null