mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 22:19:30 +01:00
## About The Pull Request Flux anomalies, when they detonate, do a minor explosion and emit a wide EMP pulse. This can cause a lot of damage in its own right, but it won't syndicate bomb a random section of the station anymore. Gravity anomalies A) No longer have the click catching giant image floating above it anymore. B) No longer chain hardstuns you if you get too close every time it ticks. Instead, it knocks you down. You can also avoid this effect by wearing magboots. C) Also doesn't throw literally every object in an area around it straight into you every time it ticks. Instead, it does so only 20% of the time. Long range gas analyzers can now scan anomalies. ## Why It's Good For The Game > Flux A really annoying anomaly and one that I think has caused several shuttle calls in its time. If you don't catch it, it blows up a segment of the station entirely at random. This thing can almost be as bad as a vortex in some contexts. A giant EMP can still be pretty destructive, but it isn't quite at the same level as a giant explosion and I suspect not shuttle call worthy. The minor explosion will at most trash a room. > Gravity I literally do not understand how anyone was supposed to disable these. I literally gave up years ago even trying to catch them. They're practically designed to kill you for trying. The click catching warp effect not only looked kind of lame, but it just straight up stopped you being able to disable them (mouse opacity doesn't work here and I tried, it redirects clicks to other tiles for some godawful reason, probably byond weirdness). You had to spam click a LOT to even try. On top of that, it just stuns you? It literally just stuns you if you approach it? And magboots can't help you to avoid that? What the fuck are you _supposed_ to do to avoid that? Also it can just instantly kill you if you approach it and it gathered enough stuff because it will just keep slapping you with every loose object within a radius around itself? At speed 5 so things that don't normally embed will embed? So it mulches you for approaching it, chain hardstuns you for approaching it, and it deliberately intercepts clicks in a completely unintuitive fashion even if you do manage to click it. You need to approach it to stop it. A recipe for disaster. Fuck that. > Analyzer It was annoying this wasn't able to do this already! ## Changelog 🆑 balance: Gravity anomalies can be properly clicked. Rather than chain stunning you, the anomaly will knock you down. You can avoid the negatives of gravity anomalies by wearing magboots. (Yes, it did not really protect you until now) balance: Flux anomalies detonate in a much smaller explosion, but release a wide EMP as well. balance: Long range gas analyzers can now scan anomalies. /🆑
92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
|
|
/obj/effect/anomaly/grav
|
|
name = "gravitational anomaly"
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "shield2"
|
|
density = FALSE
|
|
anomaly_core = /obj/item/assembly/signaler/anomaly/grav
|
|
var/boing = 0
|
|
var/object_launch_prob = 20
|
|
|
|
/obj/effect/anomaly/grav/Initialize(mapload, new_lifespan)
|
|
. = ..()
|
|
var/static/list/loc_connections = list(
|
|
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
|
|
)
|
|
AddElement(/datum/element/connect_loc, loc_connections)
|
|
apply_wibbly_filters(src)
|
|
|
|
/obj/effect/anomaly/grav/anomalyEffect(seconds_per_tick)
|
|
..()
|
|
boing = 1
|
|
for(var/obj/O in orange(4, src))
|
|
if(!O.anchored)
|
|
step_towards(O,src)
|
|
for(var/mob/living/M in range(0, src))
|
|
if(!M.mob_negates_gravity())
|
|
gravShock(M)
|
|
for(var/mob/living/M in orange(4, src))
|
|
if(!M.mob_negates_gravity())
|
|
step_towards(M,src)
|
|
for(var/obj/O in range(0,src))
|
|
if(O.anchored || HAS_TRAIT(O, TRAIT_UNDERFLOOR))
|
|
continue
|
|
var/mob/living/target = locate() in view(4,src)
|
|
if(target && !target.stat && prob(object_launch_prob))
|
|
O.throw_at(target, 5, 10)
|
|
|
|
/obj/effect/anomaly/grav/proc/on_entered(datum/source, atom/movable/AM)
|
|
SIGNAL_HANDLER
|
|
gravShock(AM)
|
|
|
|
/obj/effect/anomaly/grav/Bump(atom/A)
|
|
gravShock(A)
|
|
|
|
/obj/effect/anomaly/grav/Bumped(atom/movable/AM)
|
|
gravShock(AM)
|
|
|
|
/obj/effect/anomaly/grav/proc/gravShock(mob/living/living_debris)
|
|
if(boing && isliving(living_debris) && !living_debris.stat && !living_debris.mob_negates_gravity())
|
|
living_debris.Knockdown(4 SECONDS)
|
|
var/atom/target = get_edge_target_turf(living_debris, get_dir(src, get_step_away(living_debris, src)))
|
|
living_debris.throw_at(target, 5, 1)
|
|
boing = 0
|
|
|
|
/obj/effect/anomaly/grav/detonate()
|
|
new /obj/effect/temp_visual/circle_wave/gravity(get_turf(src))
|
|
playsound(src, 'sound/effects/magic/cosmic_energy.ogg', vol = 50)
|
|
|
|
/obj/effect/anomaly/grav/high
|
|
var/datum/proximity_monitor/advanced/gravity/grav_field
|
|
|
|
/obj/effect/anomaly/grav/high/Initialize(mapload, new_lifespan)
|
|
. = ..()
|
|
INVOKE_ASYNC(src, PROC_REF(setup_grav_field))
|
|
|
|
/obj/effect/anomaly/grav/high/proc/setup_grav_field()
|
|
grav_field = new(src, 7, TRUE, rand(0, 3))
|
|
|
|
/obj/effect/anomaly/grav/high/detonate()
|
|
..()
|
|
for(var/obj/machinery/gravity_generator/main/the_generator as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/gravity_generator/main))
|
|
if(is_station_level(the_generator.z))
|
|
the_generator.blackout()
|
|
|
|
/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
|
|
anomaly_core = null
|
|
move_force = MOVE_FORCE_OVERPOWERING
|
|
|
|
/obj/effect/anomaly/grav/high/big/Initialize(mapload, new_lifespan)
|
|
. = ..()
|
|
|
|
transform *= 3
|
|
|
|
/obj/effect/temp_visual/circle_wave/gravity
|
|
color = COLOR_NAVY
|