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