From 44087be324494f87e65ab68ce4f1ba86effe405e Mon Sep 17 00:00:00 2001 From: Mechoid Date: Sat, 4 Mar 2023 11:27:34 -0800 Subject: [PATCH] Fix various anomaly bugs and oversights. --- .../xenoarcheaology/effects/cellcharge.dm | 38 ++++++++++ .../xenoarcheaology/effects/celldrain.dm | 41 +++++++++++ .../xenoarcheaology/effects/robohurt.dm | 6 ++ .../modules/xenoarcheaology/effects/sleepy.dm | 5 ++ .../effects/sweating_reagents.dm | 72 +++++++++++++++++++ 5 files changed, 162 insertions(+) create mode 100644 code/modules/xenoarcheaology/effects/sweating_reagents.dm diff --git a/code/modules/xenoarcheaology/effects/cellcharge.dm b/code/modules/xenoarcheaology/effects/cellcharge.dm index d543ac2411a..a7561478a4e 100644 --- a/code/modules/xenoarcheaology/effects/cellcharge.dm +++ b/code/modules/xenoarcheaology/effects/cellcharge.dm @@ -4,6 +4,7 @@ effect_color = "#ffee06" var/last_message +<<<<<<< HEAD /datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/living/user) if(user) @@ -15,12 +16,16 @@ /datum/artifact_effect/cellcharge/DoEffectAura() +======= +/datum/artifact_effect/uncommon/cellcharge/proc/charge_cells(var/amount = 25) +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) var/atom/holder = get_master_holder() if(!holder) return var/turf/turf = get_turf(holder) if(!turf) return +<<<<<<< HEAD for (var/obj/machinery/power/apc/apc as anything in GLOB.apcs) if(get_dist(turf, apc) <= 200) for (var/obj/item/weapon/cell/cell in apc.contents) @@ -39,9 +44,38 @@ 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) +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) 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() + +<<<<<<< HEAD /datum/artifact_effect/cellcharge/DoEffectPulse() var/atom/holder = get_master_holder() if(holder) @@ -57,3 +91,7 @@ if(world.time - last_message > 200) to_chat(M, "SYSTEM ALERT: Energy boost detected!") last_message = world.time +======= +/datum/artifact_effect/uncommon/cellcharge/DoEffectPulse() + charge_cells(50) +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) diff --git a/code/modules/xenoarcheaology/effects/celldrain.dm b/code/modules/xenoarcheaology/effects/celldrain.dm index c8a270c0595..b57b7f3b17b 100644 --- a/code/modules/xenoarcheaology/effects/celldrain.dm +++ b/code/modules/xenoarcheaology/effects/celldrain.dm @@ -4,6 +4,7 @@ effect_type = EFFECT_ELECTRO var/last_message +<<<<<<< HEAD effect_state = "pulsing" effect_color = "#fbff02" @@ -75,3 +76,43 @@ to_chat(M, "SYSTEM ALERT: Energy drain detected!") last_message = world.time return 1 +======= +/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) + return + drain_cells(100) + +/datum/artifact_effect/uncommon/celldrain/DoEffectAura() + drain_cells() + +/datum/artifact_effect/uncommon/celldrain/DoEffectPulse() + drain_cells(50) +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm index 8b93e04ead4..6f7c6ab811a 100644 --- a/code/modules/xenoarcheaology/effects/robohurt.dm +++ b/code/modules/xenoarcheaology/effects/robohurt.dm @@ -8,8 +8,14 @@ ..() effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) +<<<<<<< HEAD /datum/artifact_effect/robohurt/DoEffectTouch(var/mob/user) if(user) +======= + +/datum/artifact_effect/uncommon/robohurt/DoEffectTouch(mob/living/user) + if (user) +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) if (istype(user, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = user to_chat(R, "Your systems report severe damage has been inflicted!") diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm index 244814a1da7..6426296057a 100644 --- a/code/modules/xenoarcheaology/effects/sleepy.dm +++ b/code/modules/xenoarcheaology/effects/sleepy.dm @@ -3,7 +3,12 @@ name = "sleepy" effect_color = "#a36fa1" +<<<<<<< HEAD /datum/artifact_effect/sleepy/New() +======= + +/datum/artifact_effect/uncommon/sleepy/New() +>>>>>>> 318bc4daa5b... Fix various anomaly bugs and oversights. (#8941) ..() 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 new file mode 100644 index 00000000000..a87afb0d30b --- /dev/null +++ b/code/modules/xenoarcheaology/effects/sweating_reagents.dm @@ -0,0 +1,72 @@ +/datum/artifact_effect/common/sweating + name = "sweating" + var/list/reagents = list() + effect_type = EFFECT_ORGANIC + effect_state = "oozes" + + +/datum/artifact_effect/common/sweating/New(datum/component/artifact_master/newmaster) + reagents += list(list(pick(SSchemistry.chemical_reagents), 0.4, list())) + if(prob(33)) + reagents += list(list("blood", + 0.6, + list("blood_colour" = rgb(rand(1,255),rand(1,255),rand(1,255))))) + + // Sample the color of the combined reagents + var/datum/reagents/R = new(120) + for(var/list/chem in reagents) + R.add_reagent(chem[1], chem[2], chem[3]) + effect_color = R.get_color() + qdel(R) + + ..() + effect = EFFECT_TOUCH + + +/datum/artifact_effect/common/sweating/proc/disgorge(var/turf/T, var/min_chargelevel = 0.25) + if(chargelevel < chargelevelmax * min_chargelevel) + return + spawn() + var/obj/effect/vfx/water/splash = new(T) + splash.create_reagents(15) + splash.reagents.add_reagent("blood", 10, list("blood_colour" = effect_color)) + splash.set_color() + + splash.set_up(T, 2, 3) + + var/obj/effect/decal/cleanable/chemcoating/blood = locate() in T + if(!istype(blood)) + blood = new(T) + for(var/list/chem in reagents) + blood.reagents.add_reagent(chem[1], chem[2] * chargelevel, LAZYLEN(chem) > 2 ? chem[3] : null) + blood.update_icon() + chargelevel = round(0.8 * chargelevel) + + +// Leave a trail of "disgusting ooze" +/datum/artifact_effect/common/sweating/UpdateMove(var/turf/old_loc) + disgorge(old_loc) + + +/datum/artifact_effect/common/sweating/DoEffectTouch(mob/living/carbon/human/user) + if(ishuman(user)) + user.bloody_hands() + if(chargelevel >= 40 && prob(20)) + user.visible_message( + "\The [get_master_holder()] shudders at \the [user]'s touch, before spraying a disgusting ooze everywhere.", + "\The [get_master_holder()] shudders at your touch, before spraying a disgusting ooze all over you!", + "A spray of liquid is followed by a fleshy slop hitting the ground.") + if(ishuman(user)) + user.bloody_body() + disgorge(get_turf(user), 0) + + +/datum/artifact_effect/common/sweating/attackby(mob/living/user, obj/item/I) + if(I.is_open_container()) + to_chat(user, "You hold \the [I] against \the [get_master_holder()], and a disgusting pus dribbles into \the [I].") + for(var/list/chem in reagents) + I.reagents.add_reagent(chem[0], chem[1] * chargelevel, LAZYLEN(chem) > 2 ? chem[2] : null) + return TRUE + else + I.add_blood(src) + return FALSE