diff --git a/code/modules/xenoarcheaology/effects/cellcharge.dm b/code/modules/xenoarcheaology/effects/cellcharge.dm index a57485c06b..08879c6760 100644 --- a/code/modules/xenoarcheaology/effects/cellcharge.dm +++ b/code/modules/xenoarcheaology/effects/cellcharge.dm @@ -4,56 +4,41 @@ effect_color = "#ffee06" var/last_message - -/datum/artifact_effect/uncommon/cellcharge/DoEffectTouch(mob/living/user) - if (user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge += rand() * 100 + 50 - to_chat(R, "SYSTEM ALERT: Large energy boost detected!") - - -/datum/artifact_effect/uncommon/cellcharge/DoEffectAura() +/datum/artifact_effect/uncommon/cellcharge/proc/charge_cells(var/amount = 25) var/atom/holder = get_master_holder() if (!holder) return var/turf/turf = get_turf(holder) if (!turf) return - for (var/obj/machinery/power/apc/apc as anything in GLOB.apcs) - if (get_dist(turf, apc) <= 200) - for (var/obj/item/cell/cell in apc.contents) - cell.charge += 25 - for (var/obj/machinery/power/smes/smes as anything in GLOB.smeses) - if (get_dist(turf, smes) <= effectrange) - smes.charge += 25 - var/charged_robots - for (var/mob/living/silicon/robot/robot as anything in global.silicon_mob_list) - if (get_dist(turf, robot) < 50) - var/charged_cells - for (var/obj/item/cell/cell in robot.contents) - cell.charge += 25 - charged_cells = TRUE - if (charged_cells) - to_chat(robot, "SYSTEM ALERT: Energy boost detected!") - charged_robots = TRUE - if (charged_robots) + + var/messaged_robots + for(var/atom/movable/AM in range(effectrange, turf)) + if(isliving(AM)) + var/mob/living/L = AM + var/obj/item/cell/C = L.get_cell() + + if(C) + if(issilicon(L) && ((last_message + (1 MINUTE)) < world.time)) + messaged_robots = TRUE + to_chat(L, SPAN_NOTICE("SYSTEM ALERT: Energy boost detected!")) + C.charge = min(C.maxcharge, C.charge + amount) + continue + + var/obj/item/cell/C = AM.get_cell() + if(C) + C.charge = min(C.maxcharge, C.charge + amount) + + if(messaged_robots) last_message = world.time +/datum/artifact_effect/uncommon/cellcharge/DoEffectTouch(mob/living/user) + if(!user) + return + charge_cells(100) + +/datum/artifact_effect/uncommon/cellcharge/DoEffectAura() + charge_cells() /datum/artifact_effect/uncommon/cellcharge/DoEffectPulse() - var/atom/holder = get_master_holder() - if (holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge += rand() * 100 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge += 250 - for (var/mob/living/silicon/robot/M in range(100, T)) - for (var/obj/item/cell/D in M.contents) - D.charge += rand() * 100 - if (world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy boost detected!") - last_message = world.time + charge_cells(50) diff --git a/code/modules/xenoarcheaology/effects/celldrain.dm b/code/modules/xenoarcheaology/effects/celldrain.dm index 0af99f1c84..64362222fc 100644 --- a/code/modules/xenoarcheaology/effects/celldrain.dm +++ b/code/modules/xenoarcheaology/effects/celldrain.dm @@ -5,45 +5,41 @@ effect_color = "#fbff02" var/last_message +/datum/artifact_effect/uncommon/celldrain/proc/drain_cells(var/amount = 25) + var/atom/holder = get_master_holder() + if (!holder) + return + var/turf/turf = get_turf(holder) + if (!turf) + return + + var/messaged_robots + for(var/atom/movable/AM in range(effectrange, turf)) + if(isliving(AM)) + var/mob/living/L = AM + var/obj/item/cell/C = L.get_cell() + + if(C) + if(issilicon(L) && ((last_message + (1 MINUTE)) < world.time)) + messaged_robots = TRUE + to_chat(L, SPAN_WARNING("SYSTEM ALERT: Energy drain detected!")) + C.charge = min(C.maxcharge, C.charge - amount) + continue + + var/obj/item/cell/C = AM.get_cell() + if(C) + C.charge = min(C.maxcharge, C.charge - amount) + + if(messaged_robots) + last_message = world.time /datum/artifact_effect/uncommon/celldrain/DoEffectTouch(mob/living/user) - if (user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge = max(D.charge - rand() * 100, 0) - to_chat(R, "SYSTEM ALERT: Energy drain detected!") - + if(!user) + return + drain_cells(100) /datum/artifact_effect/uncommon/celldrain/DoEffectAura() - var/atom/holder = get_master_holder() - if (holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge = max(B.charge - 50,0) - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge = max(S.charge - 100,0) - for (var/mob/living/silicon/robot/M in range(50, T)) - for (var/obj/item/cell/D in M.contents) - D.charge = max(D.charge - 50,0) - if (world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy drain detected!") - last_message = world.time - + drain_cells() /datum/artifact_effect/uncommon/celldrain/DoEffectPulse() - var/atom/holder = get_master_holder() - if (holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/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)) - S.charge = max(S.charge - 250,0) - for (var/mob/living/silicon/robot/M in range(100, T)) - for (var/obj/item/cell/D in M.contents) - D.charge = max(D.charge - rand() * 150,0) - if (world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy drain detected!") - last_message = world.time + drain_cells(50) diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm index 5f9f422563..04bbbe8a57 100644 --- a/code/modules/xenoarcheaology/effects/robohurt.dm +++ b/code/modules/xenoarcheaology/effects/robohurt.dm @@ -9,7 +9,7 @@ effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) -/datum/artifact_effect/robohurt/DoEffectTouch(mob/living/user) +/datum/artifact_effect/uncommon/robohurt/DoEffectTouch(mob/living/user) if (user) if (istype(user, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = user diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm index 0c9dac7295..596a8047aa 100644 --- a/code/modules/xenoarcheaology/effects/sleepy.dm +++ b/code/modules/xenoarcheaology/effects/sleepy.dm @@ -4,7 +4,7 @@ effect_color = "#a36fa1" -/datum/artifact_effect/sleepy/New() +/datum/artifact_effect/uncommon/sleepy/New() ..() effect_type = pick(EFFECT_PSIONIC, EFFECT_ORGANIC) diff --git a/code/modules/xenoarcheaology/effects/sweating_reagents.dm b/code/modules/xenoarcheaology/effects/sweating_reagents.dm index 6b85d4ce0b..a87afb0d30 100644 --- a/code/modules/xenoarcheaology/effects/sweating_reagents.dm +++ b/code/modules/xenoarcheaology/effects/sweating_reagents.dm @@ -38,7 +38,7 @@ if(!istype(blood)) blood = new(T) for(var/list/chem in reagents) - blood.reagents.add_reagent(chem[0], chem[1] * chargelevel, LAZYLEN(chem) > 2 ? chem[2] : null) + blood.reagents.add_reagent(chem[1], chem[2] * chargelevel, LAZYLEN(chem) > 2 ? chem[3] : null) blood.update_icon() chargelevel = round(0.8 * chargelevel)