From 18d5053e5b03b6f661981eaa4c772bead23d54e7 Mon Sep 17 00:00:00 2001 From: Cael Aislinn Date: Thu, 19 Jun 2014 13:52:21 +1000 Subject: [PATCH] miscellaneous fixes to various anomaly utiliser effects involving location/holder issues, fixed anomaly harvester runtime, reworks anomaly utiliser to be a lot easier/nicer to use, balance tweaks: - caps stun effect values for pulsing - sets max utiliser battery charge to 300 (30 sec) - changes energy consumption for utiliser pulse effects to "effect max charge level" * "effect range" ^ 2 - changes energy consumption for utiliser touch effects to 100 (10 sec worth of consumption) Signed-off-by: Cael Aislinn --- .../artifact/effects/unknown_affect_cold.dm | 1 + .../effects/unknown_effect_badfeeling.dm | 6 +- .../effects/unknown_effect_cellcharge.dm | 6 +- .../effects/unknown_effect_celldrain.dm | 6 +- .../effects/unknown_effect_dnaswitch.dm | 6 +- .../artifact/effects/unknown_effect_emp.dm | 3 +- .../effects/unknown_effect_goodfeeling.dm | 6 +- .../artifact/effects/unknown_effect_heal.dm | 6 +- .../artifact/effects/unknown_effect_heat.dm | 1 + .../artifact/effects/unknown_effect_hurt.dm | 6 +- .../effects/unknown_effect_radiate.dm | 6 +- .../effects/unknown_effect_roboheal.dm | 6 +- .../effects/unknown_effect_robohurt.dm | 6 +- .../artifact/effects/unknown_effect_sleepy.dm | 6 +- .../artifact/effects/unknown_effect_stun.dm | 34 ++-- .../effects/unknown_effect_teleport.dm | 81 ++++---- .../machinery/artifact_harvester.dm | 9 +- .../tools/ano_device_battery.dm | 185 ++++++++++-------- 18 files changed, 209 insertions(+), 171 deletions(-) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm index fcdb163ac79..f8dad2c4d36 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm @@ -12,6 +12,7 @@ /datum/artifact_effect/cold/DoEffectTouch(var/mob/user) if(holder) + user << "\blue A chill passes up your spine!" var/datum/gas_mixture/env = holder.loc.return_air() if(env) env.temperature = max(env.temperature - rand(5,50), 0) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm index 2e57907b507..1244f802cc6 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm @@ -41,7 +41,8 @@ /datum/artifact_effect/badfeeling/DoEffectAura() if(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/human/H in range(src.effectrange,T)) if(prob(5)) if(prob(75)) H << "[pick(messages)]" @@ -54,7 +55,8 @@ /datum/artifact_effect/badfeeling/DoEffectPulse() if(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/human/H in range(src.effectrange,T)) if(prob(50)) if(prob(95)) H << "[pick(drastic_messages)]" diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm index 5105628cfe3..d7ff967c2d0 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm @@ -15,7 +15,8 @@ /datum/artifact_effect/cellcharge/DoEffectAura() if(holder) - for (var/obj/machinery/power/apc/C in range(200, holder)) + var/turf/T = get_turf(holder) + for (var/obj/machinery/power/apc/C in range(200, T)) for (var/obj/item/weapon/cell/B in C.contents) B.charge += 25 for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) @@ -28,7 +29,8 @@ /datum/artifact_effect/cellcharge/DoEffectPulse() if(holder) - for (var/obj/machinery/power/apc/C in range(200, holder)) + var/turf/T = get_turf(holder) + for (var/obj/machinery/power/apc/C in range(200, T)) for (var/obj/item/weapon/cell/B in C.contents) B.charge += rand() * 100 for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm index 550b49b0686..8af61035d49 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm @@ -17,7 +17,8 @@ /datum/artifact_effect/celldrain/DoEffectAura() if(holder) - for (var/obj/machinery/power/apc/C in range(200, holder)) + var/turf/T = get_turf(holder) + for (var/obj/machinery/power/apc/C in range(200, T)) for (var/obj/item/weapon/cell/B in C.contents) B.charge = max(B.charge - 50,0) for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) @@ -30,7 +31,8 @@ /datum/artifact_effect/celldrain/DoEffectPulse() if(holder) - for (var/obj/machinery/power/apc/C in range(200, holder)) + var/turf/T = get_turf(holder) + for (var/obj/machinery/power/apc/C in range(200, T)) for (var/obj/item/weapon/cell/B in C.contents) B.charge = max(B.charge - rand() * 150,0) for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_dnaswitch.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_dnaswitch.dm index cff708b0c3d..b74ab88a9a1 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_dnaswitch.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_dnaswitch.dm @@ -30,7 +30,8 @@ /datum/artifact_effect/dnaswitch/DoEffectAura() if(holder) - for(var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) if(prob(30)) @@ -48,7 +49,8 @@ /datum/artifact_effect/dnaswitch/DoEffectPulse() if(holder) - for(var/mob/living/carbon/human/H in range(200, holder)) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(200, T)) var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) if(prob(75)) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm index aeafa6387df..18165cf0d41 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm @@ -9,5 +9,6 @@ /datum/artifact_effect/emp/DoEffectPulse() if(holder) - empulse(get_turf(holder), effectrange/2, effectrange) + var/turf/T = get_turf(holder) + empulse(T, effectrange/2, effectrange) return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm index 752aa61ce06..bc45260b2cc 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm @@ -39,7 +39,8 @@ /datum/artifact_effect/goodfeeling/DoEffectAura() if(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/human/H in range(src.effectrange,T)) if(prob(5)) if(prob(75)) H << "[pick(messages)]" @@ -52,7 +53,8 @@ /datum/artifact_effect/goodfeeling/DoEffectPulse() if(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/human/H in range(src.effectrange,T)) if(prob(50)) if(prob(95)) H << "[pick(drastic_messages)]" diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm index 8b927844244..d1d3937c972 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm @@ -36,7 +36,8 @@ /datum/artifact_effect/heal/DoEffectAura() //todo: check over this properly if(holder) - for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(C) if(prob(weakness * 100)) if(prob(10)) @@ -51,7 +52,8 @@ /datum/artifact_effect/heal/DoEffectPulse() //todo: check over this properly if(holder) - for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(C) if(prob(weakness * 100)) C << "\blue A wave of energy invigorates you." diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm index da59078a1b9..21304df4082 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm @@ -15,6 +15,7 @@ /datum/artifact_effect/heat/DoEffectTouch(var/mob/user) if(holder) + user << "\red You feel a wave of heat travel up your spine!" var/datum/gas_mixture/env = holder.loc.return_air() if(env) env.temperature += rand(5,50) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm index 466c9565da8..b1a22b6bd11 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm @@ -21,7 +21,8 @@ /datum/artifact_effect/hurt/DoEffectAura() if(holder) - for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(C) if(prob(weakness * 100)) if(prob(10)) @@ -35,7 +36,8 @@ /datum/artifact_effect/hurt/DoEffectPulse() if(holder) - for (var/mob/living/carbon/C in range(effectrange, holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(effectrange, T)) var/weakness = GetAnomalySusceptibility(C) if(prob(weakness * 100)) C << "\red A wave of painful energy strikes you!" diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm index e6c49c96ce1..4310ffb2e71 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm @@ -16,14 +16,16 @@ /datum/artifact_effect/radiate/DoEffectAura() if(holder) - for (var/mob/living/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange,T)) M.apply_effect(radiation_amount,IRRADIATE,0) M.updatehealth() return 1 /datum/artifact_effect/radiate/DoEffectPulse() if(holder) - for (var/mob/living/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange,T)) M.apply_effect(radiation_amount * 25,IRRADIATE,0) M.updatehealth() return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm index 8e154f0b66d..a1a89e42cf2 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm @@ -17,7 +17,8 @@ /datum/artifact_effect/roboheal/DoEffectAura() if(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) if(prob(10)) M << "\blue SYSTEM ALERT: Beneficial energy field detected!" M.adjustBruteLoss(-1) @@ -27,7 +28,8 @@ /datum/artifact_effect/roboheal/DoEffectPulse() if(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) M << "\blue SYSTEM ALERT: Structural damage has been repaired by energy pulse!" M.adjustBruteLoss(-10) M.adjustFireLoss(-10) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm index b230efa33ec..bc55a76cef7 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm @@ -17,7 +17,8 @@ /datum/artifact_effect/robohurt/DoEffectAura() if(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) if(prob(10)) M << "\red SYSTEM ALERT: Harmful energy field detected!" M.adjustBruteLoss(1) M.adjustFireLoss(1) @@ -26,7 +27,8 @@ /datum/artifact_effect/robohurt/DoEffectPulse() if(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) M << "\red SYSTEM ALERT: Structural damage inflicted by energy pulse!" M.adjustBruteLoss(10) M.adjustFireLoss(10) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm index 1da02ceaa92..61979c5f69d 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm @@ -22,7 +22,8 @@ /datum/artifact_effect/sleepy/DoEffectAura() if(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/human/H in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) if(prob(10)) @@ -35,7 +36,8 @@ /datum/artifact_effect/sleepy/DoEffectPulse() if(holder) - for(var/mob/living/carbon/human/H in range(src.effectrange, holder)) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(src.effectrange, T)) var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) H << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm index b37862eb0c7..b7b2864de41 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm @@ -9,33 +9,35 @@ /datum/artifact_effect/stun/DoEffectTouch(var/mob/toucher) if(toucher && iscarbon(toucher)) var/mob/living/carbon/C = toucher - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(susceptibility * 100)) C << "\red A powerful force overwhelms your consciousness." - C.weakened += 45 * weakness - C.stuttering += 45 * weakness - C.stunned += rand(1,10) * weakness + C.Weaken(rand(1,10) * susceptibility) + C.stuttering += 30 * susceptibility + C.Stun(rand(1,10) * susceptibility) /datum/artifact_effect/stun/DoEffectAura() if(holder) - for (var/mob/living/carbon/C in range(src.effectrange,holder)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(10 * weakness)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(src.effectrange,T)) + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(10 * susceptibility)) C << "\red Your body goes numb for a moment." - C.weakened += 2 + C.Weaken(2) C.stuttering += 2 if(prob(10)) - C.stunned += 1 + C.Stun(1) else if(prob(10)) C << "\red You feel numb." /datum/artifact_effect/stun/DoEffectPulse() if(holder) - for (var/mob/living/carbon/C in range(src.effectrange,holder)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(100 * weakness)) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(src.effectrange,T)) + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(100 * susceptibility)) C << "\red A wave of energy overwhelms your senses!" - C.weakened += 4 * weakness - C.stuttering += 4 * weakness + C.SetWeakened(4 * susceptibility) + C.stuttering = 4 * susceptibility if(prob(10)) - C.stunned += 1 * weakness + C.SetStunned(1 * susceptibility) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm index e1580e20738..254be3f3d09 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm @@ -6,60 +6,53 @@ /datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) var/weakness = GetAnomalySusceptibility(user) if(prob(100 * weakness)) - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(user, 50)) - randomturfs.Add(T) - if(randomturfs.len > 0) - user << "\red You are suddenly zapped away elsewhere!" - if (user.buckled) - user.buckled.unbuckle() + user << "\red You are suddenly zapped away elsewhere!" + if (user.buckled) + user.buckled.unbuckle() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(user)) - sparks.start() - user.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(user)) - sparks.start() + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(user)) + sparks.start() + // + user.loc = pick(orange(get_turf(holder), 50)) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(user)) + sparks.start() /datum/artifact_effect/teleport/DoEffectAura() if(holder) - for (var/mob/living/M in range(src.effectrange,holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange,T)) var/weakness = GetAnomalySusceptibility(M) if(prob(100 * weakness)) - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(M, 30)) - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" - if(M.buckled) - M.buckled.unbuckle() + M << "\red You are displaced by a strange force!" + if(M.buckled) + M.buckled.unbuckle() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - M.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() + // + M.loc = pick(orange(get_turf(T), 50)) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() /datum/artifact_effect/teleport/DoEffectPulse() if(holder) - for (var/mob/living/M in range(src.effectrange, holder)) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange, T)) var/weakness = GetAnomalySusceptibility(M) if(prob(100 * weakness)) - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(M, 15)) - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" + M << "\red You are displaced by a strange force!" + if(M.buckled) + M.buckled.unbuckle() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - if(M.buckled) - M.buckled.unbuckle() - M.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() + // + M.loc = pick(orange(get_turf(T), 50)) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm b/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm index 117be557daf..501fabaa402 100644 --- a/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm +++ b/code/modules/research/xenoarchaeology/machinery/artifact_harvester.dm @@ -12,6 +12,7 @@ var/obj/item/weapon/anobattery/inserted_battery var/obj/machinery/artifact/cur_artifact var/obj/machinery/artifact_scanpad/owned_scanner = null + var/last_process = 0 /obj/machinery/artifact_harvester/New() ..() @@ -74,8 +75,9 @@ return if(harvesting > 0) - //gain a bit of charge - inserted_battery.stored_charge += 0.5 + //charge at 33% consumption rate + inserted_battery.stored_charge += (last_process - last_process) / 3 + last_process = world.time //check if we've finished if(inserted_battery.stored_charge >= inserted_battery.capacity) @@ -135,7 +137,7 @@ mundane++ break - if(analysed.being_used) + if(analysed && analysed.being_used) var/message = "[src] states, \"Cannot harvest. Too much interference.\"" src.visible_message(message) else if(articount == 1 && !mundane) @@ -162,6 +164,7 @@ icon_state = "incubator_on" var/message = "[src] states, \"Beginning artifact energy harvesting.\"" src.visible_message(message) + last_process = world.time //duplicate the artifact's effect datum if(!inserted_battery.battery_effect) diff --git a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm index 893f4efc60b..9bbd3420640 100644 --- a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm +++ b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "anobattery0" var/datum/artifact_effect/battery_effect - var/capacity = 200 + var/capacity = 300 var/stored_charge = 0 var/effect_id = "" @@ -20,13 +20,15 @@ name = "Anomaly power utilizer" icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "anodev" - var/cooldown = 0 var/activated = 0 - var/timing = 0 - var/time = 50 - var/archived_time = 50 + var/duration = 0 + var/interval = 0 + var/time_end = 0 + var/last_activation = 0 + var/last_process = 0 var/obj/item/weapon/anobattery/inserted_battery var/turf/archived_loc + var/energy_consumed_on_touch = 100 /obj/item/weapon/anodevice/New() ..() @@ -47,54 +49,35 @@ return src.interact(user) /obj/item/weapon/anodevice/interact(var/mob/user) - user.set_machine(src) var/dat = "Anomalous Materials Energy Utiliser
" if(inserted_battery) - if(cooldown) - dat += "Cooldown in progress, please wait.
" - else if(activated) - if(timing) - dat += "Device active.
" - else - dat += "Device active in timed mode.
" + if(activated) + dat += "Device active.
" dat += "[inserted_battery] inserted, anomaly ID: [inserted_battery.battery_effect.artifact_id ? inserted_battery.battery_effect.artifact_id : "NA"]
" - dat += "Total Power: [inserted_battery.stored_charge]/[inserted_battery.capacity]

" - dat += "Timed activation: -- - [time >= 1000 ? "[time/10]" : time >= 100 ? " [time/10]" : " [time/10]" ] + ++
" - if(cooldown) - dat += "Cooldown in progress.
" - dat += "
" - else if(!activated) - dat += "Start
" - dat += "Start in timed mode
" + dat += "Charge: [inserted_battery.stored_charge] / [inserted_battery.capacity]
" + dat += "Time left activated: [round(max((time_end - last_process) / 10, 0))]
" + if(activated) + dat += "Shutdown
" else - dat += "Shutdown emission
" - dat += "
" + dat += "Start
" + dat += "
" + + dat += "Activate duration (sec): -- - [duration/10] + ++
" + dat += "Activate interval (sec): -- - [interval/10] + ++
" + dat += "
" dat += "Eject battery
" else dat += "Please insert battery
" - dat += "
" - dat += "
" - dat += "
" - - dat += "
" - dat += "
" - dat += "
" - dat += "
" - dat += "Refresh Close" + dat += "Refresh Close" user << browse(dat, "window=anodevice;size=400x500") onclose(user, "anodevice") /obj/item/weapon/anodevice/process() - if(cooldown > 0) - cooldown -= 1 - if(cooldown <= 0) - cooldown = 0 - src.visible_message("\blue \icon[src] [src] chimes.", "\blue \icon[src] You hear something chime.") - else if(activated) + if(activated) if(inserted_battery && inserted_battery.battery_effect) //make sure the effect is active if(!inserted_battery.battery_effect.activated) @@ -106,71 +89,83 @@ archived_loc = T inserted_battery.battery_effect.UpdateMove() - //process the effect - inserted_battery.battery_effect.process() //if someone is holding the device, do the effect on them - if(inserted_battery.battery_effect.effect == 0 && ismob(src.loc)) - inserted_battery.battery_effect.DoEffectTouch(src.loc) + var/mob/holder + if(ismob(src.loc)) + holder = src.loc //handle charge - inserted_battery.stored_charge -= 1 - if(inserted_battery.stored_charge <= 0) - shutdown_emission() + if(world.time - last_activation > interval) + if(inserted_battery.battery_effect.effect == EFFECT_TOUCH) + if(interval > 0) + //apply the touch effect to the holder + if(holder) + holder << "the \icon[src] [src] held by [holder] shudders in your grasp." + else + src.loc.visible_message("the \icon[src] [src] shudders.") + inserted_battery.battery_effect.DoEffectTouch(holder) - //handle timed mode - if(timing) - time -= 1 - if(time <= 0) - shutdown_emission() + //consume power + inserted_battery.stored_charge -= energy_consumed_on_touch + else + //consume power equal to time passed + inserted_battery.stored_charge -= 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 + + else + //consume power equal to time passed + inserted_battery.stored_charge -= world.time - last_process + + last_activation = world.time + + //process the effect + inserted_battery.battery_effect.process() + + //work out if we need to shutdown + if(inserted_battery.stored_charge <= 0) + src.loc.visible_message("\blue \icon[src] [src] buzzes.", "\blue \icon[src] You hear something buzz.") + shutdown_emission() + else if(world.time > time_end) + src.loc.visible_message("\blue \icon[src] [src] chimes.", "\blue \icon[src] You hear something chime.") + shutdown_emission() else - shutdown() + src.visible_message("\blue \icon[src] [src] buzzes.", "\blue \icon[src] You hear something buzz.") + shutdown_emission() + last_process = world.time /obj/item/weapon/anodevice/proc/shutdown_emission() if(activated) activated = 0 - timing = 0 - src.visible_message("\blue \icon[src] [src] buzzes.", "\icon[src]\blue You hear something buzz.") - - cooldown = archived_time / 2 - if(inserted_battery.battery_effect.activated) inserted_battery.battery_effect.ToggleActivate(1) /obj/item/weapon/anodevice/Topic(href, href_list) - if(href_list["neg_changetime_max"]) - time += -100 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - if(href_list["neg_changetime"]) - time += -10 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 if(href_list["changetime"]) - time += 10 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 - if(href_list["changetime_max"]) - time += 100 - if(time > inserted_battery.capacity) - time = inserted_battery.capacity - else if (time < 0) - time = 0 + var/timedif = text2num(href_list["changetime"]) + if(href_list["duration"]) + duration += timedif + //max 30 sec duration + duration = min(max(duration, 0), 300) + if(activated) + time_end += timedif + else if(href_list["interval"]) + interval += timedif + //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(href_list["shutdown"]) activated = 0 - if(href_list["starttimer"]) - timing = 1 - archived_time = time if(href_list["ejectbattery"]) shutdown_emission() inserted_battery.loc = get_turf(src) @@ -178,10 +173,10 @@ UpdateSprite() if(href_list["close"]) usr << browse(null, "window=anodevice") - usr.unset_machine(src) - + else if(ismob(src.loc)) + var/mob/M = src.loc + src.interact(M) ..() - updateDialog() /obj/item/weapon/anodevice/proc/UpdateSprite() if(!inserted_battery) @@ -194,3 +189,23 @@ /obj/item/weapon/anodevice/Destroy() processing_objects.Remove(src) ..() + +/obj/item/weapon/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone) + if (!istype(M)) + return + + 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 + 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.") + + //admin logging + user.lastattacked = M + M.lastattacker = user + + if(inserted_battery.battery_effect) + user.attack_log += "\[[time_stamp()]\] Tapped [M.name] ([M.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])" + M.attack_log += "\[[time_stamp()]\] Tapped by [user.name] ([user.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])" + msg_admin_attack("[key_name(user)] tapped [key_name(M)] with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])" )