mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 23:58:07 +01:00
[MIRROR] March Into Mapness: Anomaly Research Ruin [MDB IGNORE] (#20261)
* March Into Mapness: Anomaly Research Ruin (#74110) ## About The Pull Request Adds a new ruin: Anomaly Research Center! Researcher Anna Molly disappeared along with 20 anomaly cores, where could she have gone?  <details> <summary>Pictures</summary> (a bit outdated but not that much)           </details> <details> <summary>Loot and hazards</summary> **Loot** - (1) Raw anomaly core - NO ANOMALY CORES - Empty anomaly armor, empty bag of holding - Bunch of anomaly neutralizers - 5u of wittel (guarded by anomaly) - (5) New anomaly releaser, use on an anomaly core to release and stabilize the anomaly, removing the decay timer **Hazards** Area is guarded with "hollow" anomalies, stable and coreless (flux, bluespace, hallucination, delimber) They cannot be signalled, but the anomaly neutralizes will make them go away BEEEG ANOMALIE: Spawns with a contained supermassive anomaly. There's four possible big anomalies that can spawn: - Mega Bluespace: Has a longer reach and can teleport further. On touch, teleports you all over space for 10 seconds - Mega gravity: Distorts the area around it, as strong as the rare gravity anomaly, but with extreme moveforce - Mega Pyro: Creates more plasma, turns the tile it's on into lava, dusts on touch - Mega Flux: Extra damage, dusts on touch, shoots lightning </details> ### Mapping March Ckey to receive rewards: timegreen ## Why It's Good For The Game I think we're overdue for an anomaly ruin. The ruin has some unique loot that could be really fun, but not devastating, to play around with on the station. The mega-anomaly is also pretty cool. ## Changelog 🆑 add: Researcher Anna Nomally has disappeared into space, carrying 20 anomaly cores. What could she be up to? /🆑 --------- Co-authored-by: Sealed101 <75863639+Sealed101@ users.noreply.github.com> * March Into Mapness: Anomaly Research Ruin --------- Co-authored-by: Time-Green <timkoster1@hotmail.com> Co-authored-by: Sealed101 <75863639+Sealed101@ users.noreply.github.com>
This commit is contained in:
co-authored by
Sealed101
Time-Green
parent
c267799416
commit
22bb74575f
File diff suppressed because it is too large
Load Diff
@@ -365,6 +365,12 @@ suffix = "whiteshipruin_box.dmm"*/
|
||||
name = "Alternate Sciences Research Center"
|
||||
description = "When you're messing with the occult, who knows what you're going to get?"
|
||||
|
||||
/datum/map_template/ruin/space/anomaly_research
|
||||
id = "anomaly_research"
|
||||
suffix = "anomaly_research.dmm"
|
||||
name = "Anomaly Research"
|
||||
description = "A secret research lab embedded in arctic rock, belonging to a Dr Anna Molly. What could she have been researching?"
|
||||
|
||||
/datum/map_template/ruin/space/meateor
|
||||
id = "meateor"
|
||||
suffix = "meateor.dmm"
|
||||
|
||||
@@ -912,3 +912,13 @@
|
||||
/datum/status_effect/discoordinated/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_DISCOORDINATED_TOOL_USER, "[type]")
|
||||
return ..()
|
||||
|
||||
///Maddly teleports the victim around all of space for 10 seconds
|
||||
/datum/status_effect/teleport_madness
|
||||
id = "teleport_madness"
|
||||
duration = 10 SECONDS
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
tick_interval = 0.1 SECONDS
|
||||
|
||||
/datum/status_effect/teleport_madness/tick()
|
||||
dump_in_space(owner)
|
||||
|
||||
@@ -36,15 +36,15 @@
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
src.drops_core = drops_core
|
||||
if(aSignal)
|
||||
aSignal = new aSignal(src)
|
||||
aSignal.code = rand(1,100)
|
||||
aSignal.anomaly_type = type
|
||||
|
||||
aSignal = new aSignal(src)
|
||||
aSignal.code = rand(1,100)
|
||||
aSignal.anomaly_type = type
|
||||
|
||||
var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ)
|
||||
if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven!
|
||||
frequency++
|
||||
aSignal.set_frequency(frequency)
|
||||
var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ)
|
||||
if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven!
|
||||
frequency++
|
||||
aSignal.set_frequency(frequency)
|
||||
|
||||
if(new_lifespan)
|
||||
lifespan = new_lifespan
|
||||
@@ -100,8 +100,16 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params)
|
||||
if(weapon.tool_behaviour == TOOL_ANALYZER)
|
||||
if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal)
|
||||
to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code]."))
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
///Stabilize an anomaly, letting it stay around forever or untill destabilizes by a player. An anomaly without a core can't be signalled, but can be destabilized
|
||||
/obj/effect/anomaly/proc/stabilize(anchor = FALSE, has_core = TRUE)
|
||||
immortal = TRUE
|
||||
name = has_core ? "stable " : "hollow " + name
|
||||
aSignal = has_core ? aSignal : null
|
||||
immobile = anchor
|
||||
|
||||
|
||||
@@ -5,11 +5,15 @@
|
||||
icon_state = "bluespace"
|
||||
density = TRUE
|
||||
aSignal = /obj/item/assembly/signaler/anomaly/bluespace
|
||||
///range from which we can teleport someone
|
||||
var/teleport_range = 1
|
||||
///Distance we can teleport someone passively
|
||||
var/teleport_distance = 4
|
||||
|
||||
/obj/effect/anomaly/bluespace/anomalyEffect()
|
||||
..()
|
||||
for(var/mob/living/M in range(1,src))
|
||||
do_teleport(M, locate(M.x, M.y, M.z), 4, channel = TELEPORT_CHANNEL_BLUESPACE)
|
||||
for(var/mob/living/M in range(teleport_range,src))
|
||||
do_teleport(M, locate(M.x, M.y, M.z), teleport_distance, channel = TELEPORT_CHANNEL_BLUESPACE)
|
||||
|
||||
/obj/effect/anomaly/bluespace/Bumped(atom/movable/AM)
|
||||
if(isliving(AM))
|
||||
@@ -66,3 +70,27 @@
|
||||
/obj/effect/anomaly/bluespace/proc/blue_effect(mob/make_sparkle)
|
||||
make_sparkle.overlay_fullscreen("bluespace_flash", /atom/movable/screen/fullscreen/bluespace_sparkle, 1)
|
||||
addtimer(CALLBACK(make_sparkle, TYPE_PROC_REF(/mob/, clear_fullscreen), "bluespace_flash"), 2 SECONDS)
|
||||
|
||||
///Bigger, meaner, immortal bluespace anomaly
|
||||
/obj/effect/anomaly/bluespace/big
|
||||
immortal = TRUE
|
||||
teleport_range = 2
|
||||
teleport_distance = 12
|
||||
aSignal = null
|
||||
|
||||
/obj/effect/anomaly/bluespace/big/Initialize(mapload, new_lifespan, drops_core)
|
||||
. = ..()
|
||||
|
||||
transform *= 3
|
||||
|
||||
/obj/effect/anomaly/bluespace/big/Bumped(atom/movable/bumpee)
|
||||
if(iscarbon(bumpee))
|
||||
var/mob/living/carbon/carbon = bumpee
|
||||
carbon.reagents?.add_reagent(/datum/reagent/bluespace, 20)
|
||||
|
||||
if(!isliving(bumpee))
|
||||
return ..()
|
||||
|
||||
var/mob/living/living = bumpee
|
||||
living.apply_status_effect(/datum/status_effect/teleport_madness)
|
||||
|
||||
|
||||
@@ -56,3 +56,33 @@
|
||||
// We need to override the default arguments here to achieve the desired effect
|
||||
/obj/effect/anomaly/flux/minor/Initialize(mapload, new_lifespan, drops_core = FALSE, explosive = FLUX_NO_EXPLOSION)
|
||||
return ..()
|
||||
|
||||
///Bigger, meaner, immortal flux anomaly
|
||||
/obj/effect/anomaly/flux/big
|
||||
immortal = TRUE
|
||||
aSignal = null
|
||||
shockdamage = 30
|
||||
|
||||
///range in whuich we zap
|
||||
var/zap_range = 1
|
||||
///strength of the zappy
|
||||
var/zap_power = 2500
|
||||
///the zappy flags
|
||||
var/zap_flags = ZAP_GENERATES_POWER | ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
|
||||
|
||||
/obj/effect/anomaly/flux/big/Initialize(mapload, new_lifespan, drops_core)
|
||||
. = ..()
|
||||
|
||||
transform *= 3
|
||||
|
||||
/obj/effect/anomaly/flux/big/anomalyEffect()
|
||||
. = ..()
|
||||
|
||||
tesla_zap(src, zap_range, zap_power, zap_flags)
|
||||
|
||||
/obj/effect/anomaly/flux/big/Bumped(atom/movable/bumpee)
|
||||
. = ..()
|
||||
|
||||
if(isliving(bumpee))
|
||||
var/mob/living/living = bumpee
|
||||
living.dust()
|
||||
|
||||
@@ -99,3 +99,14 @@
|
||||
/obj/effect/anomaly/grav/high/Destroy()
|
||||
QDEL_NULL(grav_field)
|
||||
. = ..()
|
||||
|
||||
///Bigger, meaner, immortal gravity anomaly. although this is just the super grav anomaly but bigger and shattering move force
|
||||
/obj/effect/anomaly/grav/high/big
|
||||
immortal = TRUE
|
||||
aSignal = null
|
||||
move_force = MOVE_FORCE_OVERPOWERING
|
||||
|
||||
/obj/effect/anomaly/grav/high/big/Initialize(mapload, new_lifespan, drops_core)
|
||||
. = ..()
|
||||
|
||||
transform *= 3
|
||||
|
||||
@@ -11,12 +11,13 @@
|
||||
..()
|
||||
ticks += delta_time
|
||||
if(ticks < releasedelay)
|
||||
return
|
||||
return FALSE
|
||||
else
|
||||
ticks -= releasedelay
|
||||
var/turf/open/tile = get_turf(src)
|
||||
if(istype(tile))
|
||||
tile.atmos_spawn_air("o2=5;plasma=5;TEMP=1000")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/anomaly/pyro/detonate()
|
||||
INVOKE_ASYNC(src, PROC_REF(makepyroslime))
|
||||
@@ -43,3 +44,32 @@
|
||||
pyro.mind.special_role = ROLE_PYROCLASTIC_SLIME
|
||||
pyro.mind.add_antag_datum(/datum/antagonist/pyro_slime)
|
||||
pyro.log_message("was made into a slime by pyroclastic anomaly", LOG_GAME)
|
||||
|
||||
///Bigger, meaner, immortal pyro anomaly
|
||||
/obj/effect/anomaly/pyro/big
|
||||
immortal = TRUE
|
||||
aSignal = null
|
||||
releasedelay = 2
|
||||
move_force = MOVE_FORCE_OVERPOWERING
|
||||
|
||||
/obj/effect/anomaly/pyro/big/Initialize(mapload, new_lifespan, drops_core)
|
||||
. = ..()
|
||||
|
||||
transform *= 3
|
||||
|
||||
/obj/effect/anomaly/pyro/big/Bumped(atom/movable/bumpee)
|
||||
. = ..()
|
||||
|
||||
if(isliving(bumpee))
|
||||
var/mob/living/living = bumpee
|
||||
living.dust()
|
||||
|
||||
/obj/effect/anomaly/pyro/big/anomalyEffect(delta_time)
|
||||
. = ..()
|
||||
|
||||
if(!.)
|
||||
return
|
||||
|
||||
var/turf/turf = get_turf(src)
|
||||
if(!isgroundlessturf(turf))
|
||||
turf.TerraformTurf(/turf/open/lava/smooth/weak, flags = CHANGETURF_INHERIT_AIR)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
///Use on an anomaly core to "awake" the anomaly and stabilize it
|
||||
/obj/item/anomaly_releaser
|
||||
name = "anomaly releaser"
|
||||
desc = "Single-use injector that releases and stabilizes anomalies by injecting an unknown substance."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "anomaly_releaser"
|
||||
inhand_icon_state = "stimpen"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
|
||||
///icon state after being used up
|
||||
var/used_icon_state = "anomaly_releaser_used"
|
||||
///are we used? if used we can't be used again
|
||||
var/used = FALSE
|
||||
///Can we be used infinitely?
|
||||
var/infinite = FALSE
|
||||
|
||||
/obj/item/anomaly_releaser/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
|
||||
if(used || !proximity_flag || !istype(target, /obj/item/assembly/signaler/anomaly))
|
||||
return
|
||||
|
||||
if(!do_after(user, 3 SECONDS, target))
|
||||
return
|
||||
|
||||
var/obj/item/assembly/signaler/anomaly/core = target
|
||||
|
||||
if(!core.anomaly_type)
|
||||
return
|
||||
|
||||
var/obj/effect/anomaly/anomaly = new core.anomaly_type(get_turf(core))
|
||||
anomaly.stabilize()
|
||||
|
||||
if(infinite)
|
||||
return
|
||||
|
||||
icon_state = used_icon_state
|
||||
used = TRUE
|
||||
name = "used " + name
|
||||
|
||||
qdel(core)
|
||||
@@ -0,0 +1,75 @@
|
||||
///Spawns a big, amped up fat anomaly
|
||||
/obj/effect/spawner/random/big_anomaly
|
||||
name = "big anomaly spawner"
|
||||
icon_state = "big_anomaly"
|
||||
loot = list(
|
||||
/obj/effect/anomaly/pyro/big,
|
||||
/obj/effect/anomaly/flux/big,
|
||||
/obj/effect/anomaly/bluespace/big,
|
||||
/obj/effect/anomaly/grav/high/big
|
||||
)
|
||||
|
||||
///Spawns a stable anomally that doesnt drop cores and doesn't destroy or alter the environment
|
||||
/obj/effect/spawner/random/environmentally_safe_anomaly
|
||||
name = "safe anomaly spawner"
|
||||
icon_state = "anomaly"
|
||||
loot = list(
|
||||
/obj/effect/anomaly/flux,
|
||||
/obj/effect/anomaly/bluespace,
|
||||
/obj/effect/anomaly/hallucination,
|
||||
/obj/effect/anomaly/bioscrambler
|
||||
)
|
||||
|
||||
///Do we anchor the anomaly? Set to true if you don't want anomalies drifting away (like if theyre in space or something)
|
||||
var/anchor_anomaly = FALSE
|
||||
|
||||
/obj/effect/spawner/random/environmentally_safe_anomaly/make_item(spawn_loc, type_path_to_make)
|
||||
. = ..()
|
||||
|
||||
var/obj/effect/anomaly/anomaly = .
|
||||
anomaly.stabilize(anchor = anchor_anomaly, has_core = FALSE)
|
||||
|
||||
/obj/effect/spawner/random/environmentally_safe_anomaly/immobile
|
||||
name = "stationary safe anomaly spawner"
|
||||
icon_state = "anomaly_stationary"
|
||||
anchor_anomaly = TRUE
|
||||
|
||||
/obj/item/paper/fluff/ruins/anomaly_research/intro
|
||||
name = "revelation"
|
||||
default_raw_text = {"ANOMALIES?!??!?!? They're all too busy making armor, weapons and pointless toys with anomalies,
|
||||
<br> NONE OF THEM ARE TRYING TO FIGURE OUT THEIR TRUE NATURE! No one wonders why anomalies respond to radio signals and drop perfectly neat wrapped anomaly packages?
|
||||
<br> Some anomalies represent fundamental aspects of our universe: bluespace, gravity, flux, pyro, but what the fuck is a delimber anomaly supposed to be?
|
||||
<br> A fucking hallucination anomaly? Ghost anomaly??? Some of these don't make any sense at all. What are they hiding from us???????
|
||||
<br>
|
||||
<br> I took 20 of their anomaly cores, they weren't going to use them anyway. I law 2'd a cyborg to make me a space lab, my perfect empire. The poor borg.
|
||||
<br> I, DR ANNA MOLLY, WILL REVEAL THE TRUTH!!
|
||||
"}
|
||||
|
||||
/obj/item/paper/fluff/ruins/anomaly_research/stabilizer
|
||||
name = "stabilizer"
|
||||
default_raw_text = {"It's so sad anomalies aren't around much, usually leaving in a few minutes (barring some).
|
||||
<br> But it makes sense, if the anomalies are from different layers of reality,
|
||||
<br> and they're simply rubberbanding around, eventually being pulled back to where they belong. Unless they're cored.
|
||||
<br> BUT I DID IT!!! It was extremely difficult to obtain, but the null-fluid was the last component of the stabilizer.
|
||||
<br> Now that I can perform long-term studies of active anomalies, there's no limit to what I can achieve!!
|
||||
"}
|
||||
|
||||
/obj/item/paper/fluff/ruins/anomaly_research/mega_anomally
|
||||
name = "mega anomally"
|
||||
default_raw_text = {"It only took every single one of my anomalies and nearly my entire supply of stabilizers, but I did it.
|
||||
<br> I CREATED THE ULTIMATE SUPER ANOMALY!! I modified a modsuit with the nullfluid, which should allow me to enter it!
|
||||
<br> I dropped off Moffie at my mom's, in case I can't get back. If you're reading this, SUCK IT I'M IN THE ANOMALY UNIVERSE (or dead) HAHAHAHHA!!
|
||||
<br> Dr Anna Molly, signing out.
|
||||
"}
|
||||
|
||||
/area/misc/anomaly_research
|
||||
name = "Anomaly Research Facility"
|
||||
icon = 'icons/area/areas_ruins.dmi'
|
||||
icon_state = "anomaly_research"
|
||||
requires_power = FALSE
|
||||
area_flags = HIDDEN_AREA | UNIQUE_AREA
|
||||
has_gravity = TRUE
|
||||
|
||||
/obj/item/reagent_containers/cup/bottle/wittel
|
||||
name = "wittel bottle"
|
||||
list_reagents = list(/datum/reagent/wittel = 5)
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm
|
||||
#_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm
|
||||
#_maps/RandomRuins/SpaceRuins/anomaly_research.dmm
|
||||
#_maps/RandomRuins/SpaceRuins/asteroid1.dmm
|
||||
#_maps/RandomRuins/SpaceRuins/asteroid2.dmm
|
||||
#_maps/RandomRuins/SpaceRuins/asteroid3.dmm
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 82 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 68 KiB |
@@ -1951,6 +1951,7 @@
|
||||
#include "code\game\objects\items\circuitboards\machines\machine_circuitboards.dm"
|
||||
#include "code\game\objects\items\devices\aicard.dm"
|
||||
#include "code\game\objects\items\devices\anomaly_neutralizer.dm"
|
||||
#include "code\game\objects\items\devices\anomaly_releaser.dm"
|
||||
#include "code\game\objects\items\devices\beacon.dm"
|
||||
#include "code\game\objects\items\devices\camera_bug.dm"
|
||||
#include "code\game\objects\items\devices\chameleonproj.dm"
|
||||
@@ -3758,6 +3759,7 @@
|
||||
#include "code\modules\mapfluff\ruins\objects_and_mobs\ash_walker_den.dm"
|
||||
#include "code\modules\mapfluff\ruins\objects_and_mobs\necropolis_gate.dm"
|
||||
#include "code\modules\mapfluff\ruins\objects_and_mobs\sin_ruins.dm"
|
||||
#include "code\modules\mapfluff\ruins\spaceruin_code\anomalyresearch.dm"
|
||||
#include "code\modules\mapfluff\ruins\spaceruin_code\asteroid4.dm"
|
||||
#include "code\modules\mapfluff\ruins\spaceruin_code\atmos_asteroid.dm"
|
||||
#include "code\modules\mapfluff\ruins\spaceruin_code\bigderelict1.dm"
|
||||
|
||||
Reference in New Issue
Block a user