From 51c5a707903c42a1fb7a8114dfca03b975391fae Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Bjarl@users.noreply.github.com> Date: Mon, 14 Oct 2024 01:56:48 -0400 Subject: [PATCH] Anomaly Edits / Improvements (#3365) ## About The Pull Request Reformats anomaly code to be mildly less 2023. Anomalies now only have one core instead of aCore and bCore (what was i smoking). This core can receive multiple codes on the *same* frequency. Some anomaly cores now have unique detonation effects for when they are activated outside of an anomaly. A few samples of this include: setting things on fire, radiation poisoning, disappearing. Includes a new anomaly to try and balance out positive vs negative. The new anomaly is called the Transfusion. It steals blood until it is no longer hungry, at which point it will give blood to those lacking in it. ## Why It's Good For The Game More sandboxy nature + decision making in conflict around anomalies. ## Changelog :cl: Erika Fox add: Transfusion anomaly; yum! Blood! add: Anomaly cores now have an effect when detonated out of the anomaly add: new anomaly description fluff /:cl: --------- Signed-off-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> Co-authored-by: Theos --- .../objects/effects/anomalies/_anomalies.dm | 46 ++-- .../effects/anomalies/anomalies_bluespace.dm | 4 +- .../effects/anomalies/anomalies_flux.dm | 11 +- .../effects/anomalies/anomalies_gravity.dm | 5 +- .../anomalies/anomalies_hallucination.dm | 5 +- .../effects/anomalies/anomalies_heartbeat.dm | 4 +- .../effects/anomalies/anomalies_melter.dm | 6 +- .../effects/anomalies/anomalies_phantom.dm | 4 +- .../effects/anomalies/anomalies_plasmasoul.dm | 4 +- .../effects/anomalies/anomalies_pulsar.dm | 4 +- .../anomalies/anomalies_pyroclastic.dm | 10 +- .../effects/anomalies/anomalies_sparkler.dm | 4 +- .../effects/anomalies/anomalies_static.dm | 56 ++-- .../anomalies/anomalies_transfusion.dm | 69 +++++ .../effects/anomalies/anomalies_veins.dm | 4 +- .../effects/anomalies/anomalies_vortex.dm | 5 +- .../game/objects/effects/spawners/lootdrop.dm | 6 +- code/modules/assembly/anomalies.dm | 248 ++++++++++++++++++ code/modules/assembly/signaler.dm | 120 --------- icons/effects/anomalies.dmi | Bin 139228 -> 153916 bytes shiptest.dme | 2 + 21 files changed, 400 insertions(+), 217 deletions(-) create mode 100644 code/game/objects/effects/anomalies/anomalies_transfusion.dm create mode 100644 code/modules/assembly/anomalies.dm diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 4a85f9321154..6477446a2b72 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -8,9 +8,7 @@ anchored = TRUE light_range = 3 - //aSignal drops as the core, bSignal allows people to signal to detonate - var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly - var/obj/item/assembly/signaler/anomaly/bSignal = /obj/item/assembly/signaler/anomaly/det_signal + var/obj/item/assembly/signaler/anomaly/core = /obj/item/assembly/signaler/anomaly var/area/impact_area var/lifespan = 990 @@ -46,27 +44,17 @@ pulse_delay = rand(pulse_delay*0.5, pulse_delay*1.5) src.drops_core = drops_core - if(aSignal) - aSignal = new aSignal(src) - aSignal.code = rand(1,100) - aSignal.anomaly_type = type - aSignal.research = research_value + if(core) + core = new core(src) + core.code = rand(1,100) + core.code_b = rand(1,100) + core.anomaly_type = type + core.research = research_value var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! frequency++ - aSignal.set_frequency(frequency) - - if(bSignal) - bSignal = new bSignal(src) - bSignal.code = rand(1,100) - bSignal.anomaly_type = type - var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) - if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! - frequency++ - bSignal.set_frequency(frequency) - - + core.set_frequency(frequency) if(lifespan) if(new_lifespan) @@ -97,7 +85,7 @@ /obj/effect/anomaly/Destroy() STOP_PROCESSING(SSobj, src) QDEL_NULL(countdown) - QDEL_NULL(aSignal) + QDEL_NULL(core) return ..() /obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) @@ -118,30 +106,26 @@ /obj/effect/anomaly/proc/anomalyNeutralize() new /obj/effect/particle_effect/smoke/bad(loc) - if(drops_core) - if(isnull(aSignal)) + if(isnull(core)) stack_trace("An anomaly ([src]) exists that drops a core, yet has no core!") else - aSignal.forceMove(drop_location()) - aSignal = null + core.forceMove(drop_location()) + core = null // else, anomaly core gets deleted by qdel(src). qdel(src) /obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal) + if(weapon.tool_behaviour == TOOL_ANALYZER && core) to_chat(user, span_notice("You start analyzing [src].")) if(do_after(user, 20, src, hidden = TRUE)) - to_chat(user, span_notice("[src]'s primary field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) - if(bSignal) - to_chat(user, span_notice("A second field is fluctuating along [format_frequency(bSignal.frequency)], code [bSignal.code]. It is highly unstable." )) - return TRUE + to_chat(user, span_notice("[src]'s primary field is fluctuating along frequency [format_frequency(core.frequency)], code [core.code].")) + return TRUE return ..() - /obj/effect/anomaly/examine(mob/user) . = ..() if(user.research_scanner == TRUE) diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index f7012e532944..d5825181295c 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -2,9 +2,9 @@ /obj/effect/anomaly/bluespace name = "jumper" icon_state = "bluespace" - desc = "A mysterious anomaly that causes teleportation around it." + desc = "A hole in the fabric of bluespace, perforating reality around it." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/bluespace + core = /obj/item/assembly/signaler/anomaly/bluespace ///range from which we can teleport someone effectrange = 3 var/reagent_amount = 3 diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index b1318953f4a6..4eaddefdcae0 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -1,9 +1,10 @@ /obj/effect/anomaly/flux name = "tesla" - icon_state = "flux" - desc = "A mysterious anomaly that sends out a near constant stream of electrical arcs." + icon_state = "tesla" + //double-check that these only happen in atmosphere now + desc = "A break in the atmosphere, small yet potent lightning arcs flashing off it." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/flux + core = /obj/item/assembly/signaler/anomaly/flux pulse_delay = 2 SECONDS effectrange = 0 var/canshock = FALSE @@ -99,3 +100,7 @@ /obj/effect/anomaly/flux/big/planetary immortal = TRUE immobile = TRUE + +/obj/effect/anomaly/flux/storm + drops_core = FALSE + explosive = FLUX_LOW_EXPLOSIVE diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index 1dea7049fc97..20cc30dcc74d 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -9,10 +9,9 @@ /obj/effect/anomaly/grav name = "throngler" icon_state = "gravity" - desc = "A mysterious anomaly that sucks things towards it with a gravitational field, ending in what has been termed a 'throngling'." + desc = "A miniature gravity well, constantly pulling the world around it into a 'throngling'." density = FALSE - aSignal = /obj/item/assembly/signaler/anomaly/grav - bSignal = null + core = /obj/item/assembly/signaler/anomaly/grav effectrange = 4 var/boing = 0 ///Warp effect holder for displacement filter to "pulse" the anomaly diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index ab859a3b3215..e48a1879f257 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -2,7 +2,8 @@ /obj/effect/anomaly/hallucination name = "hallucination anomaly" icon_state = "hallucination" - aSignal = /obj/item/assembly/signaler/anomaly/hallucination + desc = "A shimmering mirage suspended above the ground, never in the same place as it was a second ago." + core = /obj/item/assembly/signaler/anomaly/hallucination /// Time passed since the last effect, increased by delta_time of the SSobj var/ticks = 0 /// How many seconds between each small hallucination pulses @@ -18,6 +19,8 @@ var/turf/open/our_turf = get_turf(src) if(istype(our_turf)) hallucination_pulse(our_turf, 5) + pixel_x = pixel_x + clamp(rand(-5, 5), -16, 16) + pixel_y = pixel_y + clamp(rand(-5, 5), -16, 16) /obj/effect/anomaly/hallucination/detonate() var/turf/open/our_turf = get_turf(src) diff --git a/code/game/objects/effects/anomalies/anomalies_heartbeat.dm b/code/game/objects/effects/anomalies/anomalies_heartbeat.dm index 1b691d898436..ff111fe4882c 100644 --- a/code/game/objects/effects/anomalies/anomalies_heartbeat.dm +++ b/code/game/objects/effects/anomalies/anomalies_heartbeat.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/heartbeat name = "heartbeat" icon_state = "heartbeat" - desc = "A mysterious anomaly, it ionizes the world around it." + desc = "A throbbing vertex, spreading a cancer to the world around itself." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/heartbeat + core = /obj/item/assembly/signaler/anomaly/heartbeat effectrange = 3 pulse_delay = 6 SECONDS var/reagent_amount = 5 diff --git a/code/game/objects/effects/anomalies/anomalies_melter.dm b/code/game/objects/effects/anomalies/anomalies_melter.dm index d906d4f4bad2..3c99fd7eab5a 100644 --- a/code/game/objects/effects/anomalies/anomalies_melter.dm +++ b/code/game/objects/effects/anomalies/anomalies_melter.dm @@ -1,10 +1,10 @@ /obj/effect/anomaly/melter name = "melter" icon_state = "melter" - desc = "A mysterious anomaly. Everburning green flames with a horrid sizzle, melting what's near" + desc = "Everburning green flames, eager to lash out at anything that intrudes near." effectrange = 2 pulse_delay = 10 SECONDS - aSignal = /obj/item/assembly/signaler/anomaly/melter + core = /obj/item/assembly/signaler/anomaly/melter /obj/effect/anomaly/melter/anomalyEffect(seconds_per_tick) ..() @@ -20,7 +20,7 @@ I.acid_act(20, 20) I.update_appearance() for (var/obj/item/melt in range(effectrange, src)) - + //don't melt yourself if(istype(melt, /obj/item/assembly/signaler/anomaly)) return else diff --git a/code/game/objects/effects/anomalies/anomalies_phantom.dm b/code/game/objects/effects/anomalies/anomalies_phantom.dm index 9407bbcbf920..e2225c4c843e 100644 --- a/code/game/objects/effects/anomalies/anomalies_phantom.dm +++ b/code/game/objects/effects/anomalies/anomalies_phantom.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/phantom name = "phantom" icon_state = "phantom" - desc = "A mysterious anomaly, the outline of a humanoid, endlessly screaming in agony." + desc = "A familiar outline, it calls out for companionship. It screams for you." density = FALSE - aSignal = /obj/item/assembly/signaler/anomaly/phantom + core = /obj/item/assembly/signaler/anomaly/phantom effectrange = 3 pulse_delay = 2 SECONDS diff --git a/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm b/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm index 006d42ac28d3..f2d9bf6308a5 100644 --- a/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm +++ b/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/plasmasoul name = "plasma soul" icon_state = "plasmasoul" - desc = "A mysterious anomaly, it slowly leaks plasma into the world around it." + desc = "A plasmatic pool, small crystals growing around it, spreading into the ground." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/plasmasoul + core = /obj/item/assembly/signaler/anomaly/plasmasoul effectrange = 3 pulse_delay = 6 SECONDS var/reagent_amount = 5 diff --git a/code/game/objects/effects/anomalies/anomalies_pulsar.dm b/code/game/objects/effects/anomalies/anomalies_pulsar.dm index 1f75acee56b8..360e004b2adf 100644 --- a/code/game/objects/effects/anomalies/anomalies_pulsar.dm +++ b/code/game/objects/effects/anomalies/anomalies_pulsar.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/pulsar name = "pulsar" icon_state = "pulsar" - desc = "A mysterious anomaly, endless electromagnetic disturbances roll out from it" + desc = "A near transparent shell hovering, containing a near constant electromagnetic turmoil." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/pulsar + core = /obj/item/assembly/signaler/anomaly/pulsar effectrange = 4 pulse_delay = 15 SECONDS diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index b4c93868e670..fef1c8b38a0b 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -2,17 +2,16 @@ /obj/effect/anomaly/pyro name = "plasmaball" icon_state = "pyroclastic" - desc = "A mysterious anomaly, made of an everburning gas. Those who approach it tend to absorb it's heat, or even ignite." + desc = "A floating orb of everburning gas, not unlike a sun. It radiates a dangerous amount of heat." effectrange = 4 pulse_delay = 10 SECONDS - aSignal = /obj/item/assembly/signaler/anomaly/pyro + core = /obj/item/assembly/signaler/anomaly/pyro /obj/effect/anomaly/pyro/anomalyEffect(seconds_per_tick) ..() for(var/mob/living/carbon/nearby in range(effectrange, src)) nearby.adjust_bodytemperature(20) - visible_message("[src] pulses!") if(!COOLDOWN_FINISHED(src, pulse_cooldown)) return @@ -21,7 +20,7 @@ for(var/mob/living/carbon/nearby in range(effectrange/2, src)) nearby.fire_stacks += 3 nearby.IgniteMob() - visible_message("[src] ignites [nearby]!") + visible_message("[src] lets out a flare, igniting [nearby]!") /obj/effect/anomaly/pyro/Bumped(atom/movable/AM) @@ -84,3 +83,6 @@ /obj/effect/anomaly/pyro/big/planetary immortal = TRUE immobile = TRUE + +/obj/effect/anomaly/pyro/storm + drops_core = FALSE diff --git a/code/game/objects/effects/anomalies/anomalies_sparkler.dm b/code/game/objects/effects/anomalies/anomalies_sparkler.dm index 0b26e6fd6a1c..79dd55cf21a7 100644 --- a/code/game/objects/effects/anomalies/anomalies_sparkler.dm +++ b/code/game/objects/effects/anomalies/anomalies_sparkler.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/sparkler name = "sparkler" icon_state = "sparkler" - desc = "A mysterious anomaly, constantly throwing sparks into its vicinity." + desc = "A series of shimmering sparks flying to and fro. They try to spread, yet fail." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/sparkler + core = /obj/item/assembly/signaler/anomaly/sparkler effectrange = 4 pulse_delay = 1 SECONDS diff --git a/code/game/objects/effects/anomalies/anomalies_static.dm b/code/game/objects/effects/anomalies/anomalies_static.dm index ab574ee475dd..5b5bb76badf2 100644 --- a/code/game/objects/effects/anomalies/anomalies_static.dm +++ b/code/game/objects/effects/anomalies/anomalies_static.dm @@ -1,9 +1,25 @@ +GLOBAL_LIST_INIT(tvstatic_sayings, list( + "... Help me...", + "... I need to get out ...", + "...No hope....", + "...Let me loose...", + "...stay with me...", + "...Not like this...", + "...please don't go...", + "...don't forget me...", + "...Are you there...?", + "...it hurts...", + "...the eyes...", + "...need to run...", + "...is anyone there..." +)) + /obj/effect/anomaly/tvstatic name = "static" icon_state = "static" - desc = "A mysterious anomaly. A hole in the world, endless buzzing emitting from it." + desc = "A hole in the world emitting an endless buzzing. It hides something precious." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/tvstatic + core = /obj/item/assembly/signaler/anomaly/tvstatic effectrange = 4 pulse_delay = 4 SECONDS verb_say = "pleads" @@ -48,7 +64,7 @@ var/mob/living/carbon/victim = looking var/obj/effect/anomaly/tvstatic/planetary/expansion expansion = new(get_turf(victim)) - visible_message(span_warning("The static overtakes [victim], [expansion] taking their place!")) + visible_message(span_warning("[src] overtakes [victim], [expansion] taking their place!")) victim.death() expansion.stored_mob = victim victim.forceMove(expansion) @@ -58,44 +74,18 @@ anomalyEffect() /obj/effect/anomaly/tvstatic/proc/say_fucky_things() - switch(rand(1, 13)) - if(1) - say("... Help me...") - if(2) - say("... I need to get out ...") - if(3) - say("...No hope....") - if(4) - say("....Let me loose...") - if(5) - say("...stay with me...") - if(6) - say("...I hope I live...") - if(7) - say("...please don't go...") - if(8) - say("...don't forget me...") - if(9) - say("...Are you there...?") - if(10) - say("...it hurts...") - if(11) - say("...the eyes...") - if(12) - say("...need to run...") - if(13) - say("...don't become like me...") + say(pick(GLOB.tvstatic_sayings)) return /obj/effect/anomaly/tvstatic/detonate() for(var/mob/living/carbon/human/looking in range(effectrange, src)) - visible_message(span_boldwarning(" The static lashes out, agony filling your mind as its tendrils scrape your thoughts!")) + visible_message(span_boldwarning("[src] lashes out, agony filling your mind as its tendrils scrape your thoughts!")) if (!HAS_TRAIT(looking, TRAIT_MINDSHIELD) && looking.stat != DEAD) looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100, 200) playsound(src, 'sound/effects/stall.ogg', 100) if(stored_mob) mangle_corpse() - visible_message(span_warning("The static sputters out [stored_mob], their body coming out in a burst of blood and gore!")) + visible_message(span_warning("[src] sputters out [stored_mob], their body coming out in a burst of blood and gore!")) new /obj/effect/gibspawner/human(loc) stored_mob.forceMove(get_turf(src)) stored_mob = null @@ -111,7 +101,7 @@ var/turf/T = get_turf(src) if(T) if(stored_mob) - visible_message(span_warning("The static spits out [stored_mob], their body coming out in a burst!")) + visible_message(span_warning("[src] spits out [stored_mob], their body coming out in a burst!")) stored_mob.forceMove(get_turf(src)) stored_mob = null . = ..() diff --git a/code/game/objects/effects/anomalies/anomalies_transfusion.dm b/code/game/objects/effects/anomalies/anomalies_transfusion.dm new file mode 100644 index 000000000000..f233f9c0a3c4 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_transfusion.dm @@ -0,0 +1,69 @@ +/obj/effect/anomaly/transfusion + name = "transfusion" + icon_state = "transfusion" + desc = "A throbbing field floating mid-air, crimson particulate hovering within it." + density = TRUE + core = /obj/item/assembly/signaler/anomaly/transfusion + effectrange = 3 + pulse_delay = 5 SECONDS + +/obj/effect/anomaly/transfusion/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + blood_music() + return + +/obj/effect/anomaly/transfusion/proc/blood_music() //by greg bear + //this is hacky *because* in an ideal world - it would involve making the core have a reagent container for the blood + //however - I am a lazy bitch + for(var/mob/living/carbon/victim in range(effectrange, src)) + //if we're not hungry, we're not hungry. + if (core?:get_blood_max() < core?:get_blood_stored()) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(src.loc, rand(1, 8)) + visible_message(span_boldwarning("[src] vomits up blood, seemingly satiated!")) + core?:set_blood_stored(core?:get_blood_max()) + return + //if there's blood to take, take it + if (victim.blood_volume > BLOOD_VOLUME_SAFE) + var/bleeder + bleeder = rand(10,30) + victim.bleed(bleeder) + victim.spray_blood(get_dir(victim, src), splatter_strength = 1) //slurp + visible_message(span_boldwarning("Ichor flows out of [victim], and into [src]!")) + core?:set_blood_stored(bleeder) + break + //but if there's blood to give, share. + if(victim.blood_volume < BLOOD_VOLUME_SAFE && core?:get_blood_stored() > (core?:get_blood_max() / 2)) + var/present_time + present_time = rand((core?:get_blood_stored() / 10), (core?:get_blood_stored() / 2)) + visible_message(span_boldwarning("Globules of ichor fly away from [src], and into [victim]!")) + core?:set_blood_stored(-present_time) + victim.blood_volume += present_time + break + return + +/obj/effect/anomaly/transfusion/Bumped(atom/movable/AM) + if(!COOLDOWN_FINISHED(src, pulse_secondary_cooldown)) + return + COOLDOWN_START(src, pulse_secondary_cooldown, 10) + if(istype(AM, /mob/living/carbon)) + var/mob/living/carbon/victim = AM + visible_message(span_boldwarning("[victim] touches [src], and as they pull away their blood flows away from them!")) + var/amount = rand(50, 200) + victim.bleed(amount) + core?:set_blood_stored(amount) + +/obj/effect/anomaly/transfusion/detonate() + for(var/mob/living/carbon/victim in range(effectrange, src)) + victim.bleed(rand(100, 250)) + victim.spray_blood(get_dir(src, victim), splatter_strength = 3) //slurp + visible_message(span_boldwarning("[src] screams as it tries to pull all the blood around into itself!")) + . = ..() + +/obj/effect/anomaly/transfusion/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_veins.dm b/code/game/objects/effects/anomalies/anomalies_veins.dm index 416e325ccdbd..b148f2d01666 100644 --- a/code/game/objects/effects/anomalies/anomalies_veins.dm +++ b/code/game/objects/effects/anomalies/anomalies_veins.dm @@ -1,9 +1,9 @@ /obj/effect/anomaly/veins name = "veins" icon_state = "veins" - desc = "A mysterious anomaly, throbbing purple veins, suspended midair." + desc = "Throbbing purple veins, an exposed artery of the world. It thirsts." density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/veins + core = /obj/item/assembly/signaler/anomaly/veins effectrange = 3 pulse_delay = 4 SECONDS diff --git a/code/game/objects/effects/anomalies/anomalies_vortex.dm b/code/game/objects/effects/anomalies/anomalies_vortex.dm index 16a30cbaa9c6..5e5875077660 100644 --- a/code/game/objects/effects/anomalies/anomalies_vortex.dm +++ b/code/game/objects/effects/anomalies/anomalies_vortex.dm @@ -2,9 +2,8 @@ /obj/effect/anomaly/vortex name = "vortex" icon_state = "vortex" - desc = "A mysterious anomaly, this one destroys everything around it." - aSignal = /obj/item/assembly/signaler/anomaly/vortex - bSignal = null + desc = "An incredibly compact black orb, its hunger unquenchable." + core = /obj/item/assembly/signaler/anomaly/vortex /obj/effect/anomaly/vortex/anomalyEffect() ..() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 364ddeb72298..1163a5520631 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -805,6 +805,7 @@ /obj/effect/anomaly/plasmasoul/planetary, /obj/effect/anomaly/phantom/planetary, /obj/effect/anomaly/melter/planetary, + /obj/effect/anomaly/transfusion/planetary, ) /obj/effect/spawner/lootdrop/anomaly/safe @@ -815,6 +816,7 @@ /obj/effect/anomaly/sparkler/planetary, /obj/effect/anomaly/veins/planetary, /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/transfusion/planetary, ) /obj/effect/spawner/lootdrop/anomaly/dangerous @@ -999,8 +1001,8 @@ /obj/effect/spawner/lootdrop/anomaly/storm loot = list( - /obj/effect/anomaly/flux, - /obj/effect/anomaly/pyro, + /obj/effect/anomaly/flux/storm, + /obj/effect/anomaly/pyro/storm, /obj/effect/anomaly/sparkler, /obj/effect/anomaly/veins, /obj/effect/anomaly/phantom, diff --git a/code/modules/assembly/anomalies.dm b/code/modules/assembly/anomalies.dm new file mode 100644 index 000000000000..0b390b39e8b4 --- /dev/null +++ b/code/modules/assembly/anomalies.dm @@ -0,0 +1,248 @@ +///Base anomaly signaller +// Embedded signaller used in anomalies. +/obj/item/assembly/signaler/anomaly + name = "anomaly core" + desc = "The stabilized core of an anomaly. It'd probably be valuable for research." + icon_state = "anomaly core" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + resistance_flags = FIRE_PROOF + //allows anomaly cores to recieve multiple signals + var/code_b = DEFAULT_SIGNALER_CODE + var/anomaly_type = /obj/effect/anomaly + var/research + +/obj/item/assembly/signaler/anomaly/Initialize() + . = ..() + set_frequency(frequency) + +/obj/item/assembly/signaler/anomaly/attack_self() + return + +/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal) + if(!signal) + return FALSE + if(signal.data["code"] == code) + for(var/obj/effect/anomaly/Anomaly in get_turf(src)) + Anomaly.anomalyNeutralize() + return TRUE + if(signal.data["code"] == code_b ) + for(var/obj/effect/anomaly/Anomaly in get_turf(src)) + Anomaly.detonate() + anomaly_core_detonation() + return TRUE + return FALSE + +//extend this on a per anomaly basis. +/obj/item/assembly/signaler/anomaly/proc/anomaly_core_detonation() + new /obj/effect/particle_effect/smoke/bad(loc) + qdel(src) + +/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_ANALYZER) + to_chat(user, "Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code]. An unstable frequency is present at code [code_b].") + ..() + +///Bluespace Anomaly +/obj/item/assembly/signaler/anomaly/bluespace + name = "\improper bluespace anomaly core" + desc = "The stabilized core of a bluespace anomaly. It keeps phasing in and out of view." + icon_state = "anomaly core" + +/obj/item/assembly/signaler/anomaly/bluespace/anomaly_core_detonation() + //just teleports people + visible_message(span_warning("[src] creates a bluespace fracture around itself!")) + for(var/mob/living/Mob in range(1,src)) + do_teleport(Mob, locate(Mob.x, Mob.y, Mob.z), 8, channel = TELEPORT_CHANNEL_BLUESPACE) + ..() + +//Flux Anomaly +/obj/item/assembly/signaler/anomaly/flux + name = "\improper flux anomaly core" + desc = "The stabilized core of a flux anomaly. Touching it makes your skin tingle." + icon_state = "flux core" + +/obj/item/assembly/signaler/anomaly/flux/anomaly_core_detonation() + //zap + visible_message(span_warning("Electrical arcs flash off of [src] as it fizzles out!")) + tesla_zap(src, 3, 1000, ZAP_FUSION_FLAGS) + ..() + +///Gravity Anomaly +/obj/item/assembly/signaler/anomaly/grav + name = "\improper gravitational anomaly core" + desc = "The stabilized core of a gravitational anomaly. It feels much heavier than it looks." + icon_state = "grav core" + +/obj/item/assembly/signaler/anomaly/grav/anomaly_core_detonation() + //throngles u cutely + visible_message(span_warning("[src] implodes into itself, light itself bending for a split second!")) + for(var/mob/living/carbon/carbon in range(1,src)) + if(carbon.run_armor_check(attack_flag = "melee") >= 20) + carbon.break_random_bone() + else if(carbon.run_armor_check(attack_flag = "melee") >= 40) + carbon.break_all_bones() //crunch + carbon.apply_damage(20, BRUTE) + +///Hallucination Anomaly +/obj/item/assembly/signaler/anomaly/hallucination + name = "\improper hallucination anomaly core" + desc = "The stabilized core of a hallucination anomaly. It's never entirely there." + icon_state = "hallucination_core" + +///Heartbeat Anomaly +/obj/item/assembly/signaler/anomaly/heartbeat + name = "\improper heartbeat anomaly core" + desc = "The stabilized core of a heartbeat anomaly. Pulses of heat run across its shell." + +/obj/item/assembly/signaler/anomaly/heartbeat/anomaly_core_detonation() + visible_message(span_warning("[src] expands and throbs, before shattering into dozens of fragments!")) + radiation_pulse(src, 500, 2) + new /obj/effect/decal/cleanable/glass/strange(src) + ..() + +///Melter Anomaly +/obj/item/assembly/signaler/anomaly/melter + name = "\improper melter anomaly core" + desc = "The stabilized core of a melter anomaly. It sizzles and crackles." + icon_state = "pyro core" + +/obj/item/assembly/signaler/anomaly/melter/anomaly_core_detonation() + visible_message(span_warning("[src] melts into a glowing residue!")) + new /obj/effect/decal/cleanable/greenglow(src.loc) + ..() + +///Phantom Anomaly +/obj/item/assembly/signaler/anomaly/phantom + name = "\improper phantom anomaly core" + desc = "The stabilized core of a phantom anomaly. It quietly screams." + +/obj/item/assembly/signaler/anomaly/phantom/anomaly_core_detonation() + playsound(src,'sound/hallucinations/far_noise.ogg', 100, 0, 50, TRUE, TRUE) + visible_message(span_warning("[src] screams as it disappates!")) + ..() + +///Plasmasoul Anomaly +/obj/item/assembly/signaler/anomaly/plasmasoul + name = "\improper plasmasoul anomaly core" + desc = "The stabilized core of a plasmasoul anomaly. The air around it hisses." + +/obj/item/assembly/signaler/anomaly/plasmasoul/anomaly_core_detonation() + visible_message(span_warning("[src] rapidly delaminates, leaving behind trace vapors!")) + ..() + +///Pulsar Anomaly +/obj/item/assembly/signaler/anomaly/pulsar + name = "\improper pulsar anomaly core" + desc = "The stabilized core of a pulsar anomaly. Electromagnetic crackles come off it." + +/obj/item/assembly/signaler/anomaly/pulsar/anomaly_core_detonation() + visible_message(span_warning("[src] gives off one last pulse as it melts!")) + empulse(loc, 3, 1) + ..() + +///Pyroclastic Anomaly +/obj/item/assembly/signaler/anomaly/pyro + name = "\improper pyroclastic anomaly core" + desc = "The stabilized core of a pyroclastic anomaly. It almost burns to touch." + icon_state = "pyro core" + +//glorified molotov +/obj/item/assembly/signaler/anomaly/pyro/anomaly_core_detonation() + //this is tg's ash heretic ash heretic ascenscion power tuned down a bit. + visible_message(span_warning("[src] loses coherence, bursting into brilliant flames!")) + for(var/i in 0 to 3) + for(var/turf/nearby_turf as anything in spiral_range_turfs(i + 1, src.loc)) + var/obj/effect/hotspot/flame_tile = locate(nearby_turf) || new(nearby_turf) + flame_tile.alpha = 125 + nearby_turf.hotspot_expose(750, 25, 1) + qdel(src) + +///Sparkler Anomaly +/obj/item/assembly/signaler/anomaly/sparkler + name = "\improper sparkler anomaly core" + desc = "The stabilized core of a sparkler anomaly. Tiny electrical sparks arc off it." + +/obj/item/assembly/signaler/anomaly/sparkler/anomaly_core_detonation() + visible_message(span_warning("[src] shoots out one last assortment of sparks!")) + tesla_zap(src, 2, 5000, ZAP_FUSION_FLAGS) + ..() + +///Static Anomaly +/obj/item/assembly/signaler/anomaly/tvstatic + name = "\improper static anomaly core" + desc = "The stabilized core of a static anomaly. Your head hurts just staring at it" + +/obj/item/assembly/signaler/anomaly/tvstatic/anomaly_core_detonation() + visible_message(span_warning("[src] withdraws into itself, one last message escaping it!")) + say(pick(GLOB.tvstatic_sayings)) + for(var/mob/living/carbon/human/looking in range(4, src)) + if (!HAS_TRAIT(looking, TRAIT_MINDSHIELD) && looking.stat != DEAD) + looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 40) + playsound(src, 'sound/effects/stall.ogg', 100) + ..() + +///Transfusion Anomaly +/obj/item/assembly/signaler/anomaly/transfusion + name = "\improper transfusion anomaly core" + desc = "The stabilized core of a tranfusion anomaly. Crimson slowly seeps out of the containment unit." + icon_state = "pyro core" + var/blood_stored + var/blood_max + +/obj/item/assembly/signaler/anomaly/transfusion/Initialize() + . = ..() + blood_max = rand(400, 1200) + +/obj/item/assembly/signaler/anomaly/transfusion/proc/set_blood_stored(int) + blood_stored += int + +/obj/item/assembly/signaler/anomaly/transfusion/proc/set_blood_max(int) + blood_max = int + +/obj/item/assembly/signaler/anomaly/transfusion/proc/get_blood_stored() + return blood_stored + +/obj/item/assembly/signaler/anomaly/transfusion/proc/get_blood_max() + return blood_max + +/obj/item/assembly/signaler/anomaly/transfusion/anomaly_core_detonation() + visible_message(span_warning("Ichor flies out of [src], trying to force itself into everything around!")) + while(blood_stored > 0) + for(var/mob/living/carbon/victim in range(2, src)) + var/present_time + present_time = rand((blood_stored / 10), (blood_stored / 2)) + visible_message(span_boldwarning("[victim] finds themselves transfused with the crimson ichor!")) + victim.blood_volume += present_time + blood_stored += -present_time + ..() + +///Veins Anomaly +/obj/item/assembly/signaler/anomaly/veins + name = "\improper fountain anomaly core" + desc = "The stabilized core of a fountain anomaly. It's slippery, like an intestine." + +/obj/item/assembly/signaler/anomaly/veins/anomaly_core_detonation() + //goreshit + var/obj/effect/gibspawner/mess = pick(list( + /obj/effect/gibspawner/human, + /obj/effect/gibspawner/xeno, + /obj/effect/gibspawner/generic/animal + )) + visible_message(span_warning("[src] erupts into a fountain of gore and viserca!")) + new mess(src.loc) + ..() + +///Vortex Anomaly +/obj/item/assembly/signaler/anomaly/vortex + name = "\improper vortex anomaly core" + desc = "The stabilized core of a vortex anomaly. It won't sit still, as if some invisible force is acting on it." + icon_state = "vortex core" + +/obj/item/assembly/signaler/anomaly/vortex/anomaly_core_detonation() + //disappears bigly + playsound(src,'sound/effects/phasein.ogg', 100, 0, 50, TRUE, TRUE) + new /obj/effect/particle_effect/sparks/quantum(loc) + visible_message(span_warning("[src] shakes violently and - hey, where'd it go?")) + ..() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 0bfac86ee0df..b1203d358e7f 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -144,126 +144,6 @@ return return ..(signal) -// Embedded signaller used in anomalies. -/obj/item/assembly/signaler/anomaly - name = "anomaly core" - desc = "The neutralized core of an anomaly. It'd probably be valuable for research." - icon_state = "anomaly core" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - resistance_flags = FIRE_PROOF - var/anomaly_type = /obj/effect/anomaly - var/research - -/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal) - if(!signal) - return FALSE - if(signal.data["code"] != code) - return FALSE - for(var/obj/effect/anomaly/Anomaly in get_turf(src)) - Anomaly.anomalyNeutralize() - return TRUE - -/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - to_chat(user, "Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].") - ..() - -/obj/item/assembly/signaler/anomaly/det_signal - name = "anomaly field" - research = null - anomaly_type = null - -/obj/item/assembly/signaler/anomaly/det_signal/receive_signal(datum/signal/signal) - if(!signal) - return FALSE - if(signal.data["code"] != code) - return FALSE - for(var/obj/effect/anomaly/Anomaly in get_turf(src)) - Anomaly.detonate() - return TRUE - - -//Anomaly cores - -/obj/item/assembly/signaler/anomaly/pyro - name = "\improper pyroclastic anomaly core" - desc = "The neutralized core of a pyroclastic anomaly. It feels warm to the touch. It'd probably be valuable for research." - icon_state = "pyro core" - anomaly_type = /obj/effect/anomaly/pyro - -/obj/item/assembly/signaler/anomaly/grav - name = "\improper gravitational anomaly core" - desc = "The neutralized core of a gravitational anomaly. It feels much heavier than it looks. It'd probably be valuable for research." - icon_state = "grav core" - anomaly_type = /obj/effect/anomaly/grav - -/obj/item/assembly/signaler/anomaly/flux - name = "\improper flux anomaly core" - desc = "The neutralized core of a flux anomaly. Touching it makes your skin tingle. It'd probably be valuable for research." - icon_state = "flux core" - anomaly_type = /obj/effect/anomaly/flux - -/obj/item/assembly/signaler/anomaly/bluespace - name = "\improper bluespace anomaly core" - desc = "The neutralized core of a bluespace anomaly. It keeps phasing in and out of view. It'd probably be valuable for research." - icon_state = "anomaly core" - anomaly_type = /obj/effect/anomaly/bluespace - -/obj/item/assembly/signaler/anomaly/vortex - name = "\improper vortex anomaly core" - desc = "The neutralized core of a vortex anomaly. It won't sit still, as if some invisible force is acting on it. It'd probably be valuable for research." - icon_state = "vortex core" - anomaly_type = /obj/effect/anomaly/vortex - -/obj/item/assembly/signaler/anomaly/hallucination - name = "\improper hallucination anomaly core" - desc = "The neutralized core of a hallucination anomaly. It seems to be moving, but it's probably your imagination. It'd probably be valuable for research." - icon_state = "hallucination_core" - anomaly_type = /obj/effect/anomaly/hallucination - -/obj/item/assembly/signaler/anomaly/sparkler - name = "\improper sparkler anomaly core" - desc = "The neutralized core of a sparkler anomaly. Tiny electrical sparks arc off it." - anomaly_type = /obj/effect/anomaly/sparkler - -/obj/item/assembly/signaler/anomaly/veins - name = "\improper fountain anomaly core" - desc = "The neutralized core of a fountain anomaly. Blood drips off of it." - anomaly_type = /obj/effect/anomaly/sparkler - -/obj/item/assembly/signaler/anomaly/phantom - name = "\improper phantom anomaly core" - desc = "The neutralized core of a phantom anomaly. It quietly screams." - anomaly_type = /obj/effect/anomaly/phantom - -/obj/item/assembly/signaler/anomaly/pulsar - name = "\improper pulsar anomaly core" - desc = "The neutralized core of a pulsar anomaly. Electromagnetic crackles come off it." - -/obj/item/assembly/signaler/anomaly/plasmasoul - name = "\improper plasmasoul anomaly core" - desc = "The neutralized core of a plasmasoul anomaly. The air around it hisses." - -/obj/item/assembly/signaler/anomaly/heartbeat - name = "\improper heartbeat anomaly core" - desc = "The neutralized core of a heartbeat anomaly. It's concerningly warm to the touch." - -/obj/item/assembly/signaler/anomaly/tvstatic - name = "\improper static anomaly core" - desc = "The neutralized core of a static anomaly. Your head hurts just staring at it" - -/obj/item/assembly/signaler/anomaly/melter - name = "\improper melter anomaly core" - desc = "The neutralized core of a melter anomaly. It sizzles and crackles. It'd probably be valuable for research." - icon_state = "pyro core" - - - -/obj/item/assembly/signaler/anomaly/attack_self() - return - /obj/item/assembly/signaler/cyborg /obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params) diff --git a/icons/effects/anomalies.dmi b/icons/effects/anomalies.dmi index e1671b816ec558ca3bc0723dead6cc12c26a4d36..c716fc7990975ab067f798cae77b4d1297d497de 100644 GIT binary patch delta 30807 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

YWQ@7U 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