[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?

![image](https://user-images.githubusercontent.com/7501474/228217881-6b510347-d37f-4713-841c-e2280b92f69c.png)

<details>
  <summary>Pictures</summary>

(a bit outdated but not that much)

![image](https://user-images.githubusercontent.com/7501474/226172256-1d29257e-0914-48da-b199-8ecb3d0b8d99.png)

![image](https://user-images.githubusercontent.com/7501474/226172318-f98d7402-0b3e-4797-b788-2085bfc6ac46.png)

![image](https://user-images.githubusercontent.com/7501474/226172341-b70ae4d6-c1e2-4cf7-8667-c64ac99252cf.png)

![image](https://user-images.githubusercontent.com/7501474/226172364-c7b4c78f-4ddd-4ded-8ca2-92cb74e05d86.png)

![image](https://user-images.githubusercontent.com/7501474/226172378-8cf579b3-c081-436b-8121-ac6e080d7af0.png)

![image](https://user-images.githubusercontent.com/7501474/226172387-ef67e32f-adb1-4d68-8e6a-a0beb7f0435d.png)

![image](https://user-images.githubusercontent.com/7501474/226172406-d735ce68-2bd6-4218-acc3-7efa0acdca06.png)

![image](https://user-images.githubusercontent.com/7501474/226172413-03c9bff7-2d96-4f51-be3a-ea738f92c04f.png)

![image](https://user-images.githubusercontent.com/7501474/226172448-ea19ced1-6f34-4cc4-ac98-6dbfd1481847.png)

![image](https://user-images.githubusercontent.com/7501474/226172454-a8df6a4d-7a14-4942-ab71-9baa03a948fd.png)
</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:
SkyratBot
2023-04-02 03:32:28 +01:00
committed by GitHub
co-authored by Sealed101 Time-Green
parent c267799416
commit 22bb74575f
15 changed files with 4161 additions and 12 deletions
File diff suppressed because it is too large Load Diff
+6
View File
@@ -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)
+1
View File
@@ -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

+2
View File
@@ -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"