diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm b/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm
index 495d393766..776d91751c 100644
--- a/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm
+++ b/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm
@@ -85,6 +85,7 @@
harvesting = 0
cur_artifact.anchored = 0
cur_artifact.being_used = 0
+ cur_artifact = null
src.visible_message("[name] states, \"Battery is full.\"")
icon_state = "incubator"
@@ -140,27 +141,13 @@
src.visible_message("[src] states, \"Cannot harvest. Source already being harvested.\"")
else
- var/mundane = 0
- for(var/obj/O in get_turf(owned_scanner))
- if(O.invisibility)
- continue
- if(!istype(O, /obj/machinery/artifact) && !istype(O, /obj/machinery/artifact_scanpad))
- mundane++
- break
- for(var/mob/O in get_turf(owned_scanner))
- if(O.invisibility)
- continue
- mundane++
- break
-
- if(articount > 1 || mundane)
- var/message = "[src] states, \"Cannot harvest. Too many artifacts on the pad.\""
- src.visible_message(message)
- else
+ if(articount > 1)
+ state("Cannot harvest. Too many artifacts on the pad.")
+ else if(analysed)
cur_artifact = analysed
//if both effects are active, we can't harvest either
- if(cur_artifact.my_effect.activated && cur_artifact.secondary_effect.activated)
+ if(cur_artifact.my_effect && cur_artifact.my_effect.activated && cur_artifact.secondary_effect.activated)
src.visible_message("[src] states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"")
else if(!cur_artifact.my_effect.activated && !cur_artifact.secondary_effect.activated)
src.visible_message("[src] states, \"Cannot harvest. No energy emitting from source.\"")
@@ -233,6 +220,7 @@
harvesting = 0
cur_artifact.anchored = 0
cur_artifact.being_used = 0
+ cur_artifact = null
src.visible_message("[name] states, \"Energy harvesting interrupted.\"")
icon_state = "incubator"
diff --git a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
index 3886f6fec0..c189273bd5 100644
--- a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
+++ b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
@@ -16,6 +16,9 @@
p = min(p, 100)
icon_state = "anobattery[round(p,25)]"
+/obj/item/weapon/anobattery/proc/use_power(var/amount)
+ stored_charge = max(0, stored_charge - amount)
+
/obj/item/weapon/anodevice
name = "Anomaly power utilizer"
icon = 'icons/obj/xenoarchaeology.dmi'
@@ -78,7 +81,7 @@
/obj/item/weapon/anodevice/process()
if(activated)
- if(inserted_battery && inserted_battery.battery_effect)
+ if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) )
//make sure the effect is active
if(!inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate(1)
@@ -106,20 +109,20 @@
inserted_battery.battery_effect.DoEffectTouch(holder)
//consume power
- inserted_battery.stored_charge -= energy_consumed_on_touch
+ inserted_battery.use_power(energy_consumed_on_touch)
else
//consume power equal to time passed
- inserted_battery.stored_charge -= world.time - last_process
+ inserted_battery.use_power(world.time - last_process)
else if(inserted_battery.battery_effect.effect == EFFECT_PULSE)
inserted_battery.battery_effect.chargelevel = inserted_battery.battery_effect.chargelevelmax
//consume power relative to the time the artifact takes to charge and the effect range
- inserted_battery.stored_charge -= inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.chargelevelmax
+ inserted_battery.use_power(inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.chargelevelmax)
else
//consume power equal to time passed
- inserted_battery.stored_charge -= world.time - last_process
+ inserted_battery.use_power(world.time - last_process)
last_activation = world.time
@@ -159,11 +162,12 @@
//max 10 sec interval
interval = min(max(interval, 0), 100)
if(href_list["startup"])
- activated = 1
- src.visible_message("\blue \icon[src] [src] whirrs.", "\icon[src]\blue You hear something whirr.")
- if(!inserted_battery.battery_effect.activated)
- inserted_battery.battery_effect.ToggleActivate(1)
- time_end = world.time + duration
+ if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) )
+ activated = 1
+ src.visible_message("\blue \icon[src] [src] whirrs.", "\icon[src]\blue You hear something whirr.")
+ if(!inserted_battery.battery_effect.activated)
+ inserted_battery.battery_effect.ToggleActivate(1)
+ time_end = world.time + duration
if(href_list["shutdown"])
activated = 0
if(href_list["ejectbattery"])
@@ -196,7 +200,7 @@
if(activated && inserted_battery.battery_effect.effect == EFFECT_TOUCH && !isnull(inserted_battery))
inserted_battery.battery_effect.DoEffectTouch(M)
- inserted_battery.stored_charge -= energy_consumed_on_touch
+ inserted_battery.use_power(energy_consumed_on_touch)
user.visible_message("\blue [user] taps [M] with [src], and it shudders on contact.")
else
user.visible_message("\blue [user] taps [M] with [src], but nothing happens.")
diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
index 257c7389cc..acc6d56a73 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
@@ -13,22 +13,23 @@
var/last_scan_time = 0
var/scan_delay = 25
-/obj/item/device/ano_scanner/New()
- ..()
- spawn(0)
- scan()
+/obj/item/device/ano_scanner/initialize()
+ scan()
/obj/item/device/ano_scanner/attack_self(var/mob/user as mob)
return src.interact(user)
/obj/item/device/ano_scanner/interact(var/mob/user as mob)
var/message = "Background radiation levels detected."
- if(nearest_artifact_distance >= 0)
- message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m"
- user << "[message]"
if(world.time - last_scan_time >= scan_delay)
spawn(0)
scan()
+ if(nearest_artifact_distance >= 0)
+ message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m"
+ else
+ message = "Scanning array is recharging."
+
+ user << "[message]"
/obj/item/device/ano_scanner/proc/scan()
set background = 1