## About The Pull Request
they are not attackable or clickable
fixes https://github.com/tgstation/tgstation/issues/90155
## Why It's Good For The Game
less likely to break things
## Changelog
🆑
fix: portable grav gen effects can't be moved by tram
code: portable grav gen effects are actually a subtype of effect now
/🆑
## About The Pull Request
Closes#83370
Converted most cases where we could benefit from using shared particles
(aka when there's probably more than 3 uses of that particle in a round)
to use the new shared particle system. Should provide significant
clientside performance in particle-heavy areas like botany (or sometimes
kitchen)
## Changelog
🆑
refactor: Converted most common particle sources to use our new pooling
system.
/🆑
## About The Pull Request
https://github.com/user-attachments/assets/98aa2177-ee0f-48d0-bbd4-83d01e688b54
it makes gravity in a radius
you may order it from cargo
may take power from wire instead
## Why It's Good For The Game
good for like space bases and stuff
## Changelog
🆑
add: portable gravity unit, bought at cargo
/🆑
## About The Pull Request
Nother bit ripped out of #79498
[Implements a get_cooldown() proc to get around dumb manual overrides
and empower me to optimize the findtarget
logic](https://github.com/tgstation/tgstation/commit/7047d294dd2675b7e38db2424d6d79c52f21783a)
[Adds modify_cooldown, uses it to optimize find_potential_targets
further](https://github.com/tgstation/tgstation/commit/4ebc8cedcefaa57a1c3d1afbbb485baa6fae0a4f)
No sense running the behavior if we're just waiting on its output, so
let's run it once a minute just in case, then push an update instantly
if we find something
[Optimizes connect_range and
promxity_monitors](https://github.com/tgstation/tgstation/commit/bcf7d7c5b371e46c02aa9039d4ccd4715b999400)
We know what turfs exist before and after a move
We can use this information to prevent trying to update turfs we don't
care about.
This is important because post these changes mobs with fields will be
moving a lot more, so it's gotta be cheap
[Implements a special kind of field to handle ai
targeting](https://github.com/tgstation/tgstation/commit/80b63b3445778eb2c75fc2f8f61aca07ed482b1f)
If we run targeting and don't like, find anything, we should setup a
field that listens for things coming near us and then handle those
things as we find them.
This incurs a slight startup cost but saves so much time on the churn of
constant costs
Note:
We should also work to figure out a way to avoid waking ais if none is
near them/they aren't doing anything interesting
We don't need to do that immediately this acts as somewhat of a stopgap
(and would be good regardless) but it is worth keeping in mind)
## IMPORTANT
I am unsure whether this is worth it anymore since #82539 was merged. As
I say it was done as a stopgap because ais didn't know how to idle.
If not I'll rip er out and we'll keep the other
refactoring/optimizations.
## Why It's Good For The Game
Cleaner basic ai code, maybe? faster basic ai code, for sure faster
proximity monitors (significantly)
## About The Pull Request
See title.
Someone added a new argument to this element, passed it in on creation,
and forgot to pass it in on removal.
## Why It's Good For The Game
A shift where the whole of the cargo bay has no gravity is fun, but the
crew can't fix it.
I might think of a way to bring it back in a more temporary fashion.
## Changelog
🆑
fix: Gravitational Anomalies will now correctly clean up after
themselves, instead of leaving an area of the station permanently heavy
or with no gravity at all.
/🆑
fixes https://github.com/tgstation/tgstation/issues/77249
## About The Pull Request
#76730 continuation, but I think I have found the actual source of the
bug. EDIT: Just kidding, that turned out to not be it either.
The issue:
During init, when the gravity generator is being set up and creating its
proximity field, a turf can get the `COMSIG_ATOM_HAS_GRAVITY` signal
registered to it multiple times. It seems like it shouldn't be possible
for this to happen due to the `HAS_TRAIT(TRAIT_FORCED_GRAVITY)` check,
but it can.
I've only seen this happen during CI and have not been able to reproduce
it during runtime, but it comes up often enough to be a nuisance when
testing PRs.
As seen below, causing CI failures. The problem turf is directly below
the `gravity_generator/main` object.

I spent too much time trying to figure out the cause of this duped
signal when it really does not matter if this signal gets overridden
here, since it's always going to be from the same proximity field.
Suppressing the warning will stop the CI failures without any ill
effects in this case.
So let's just do that.
## Why It's Good For The Game
Less CI failures for something trivial.
## Changelog
🆑
fix: fixes gravity generators causing CI failures from overriding a
signal
/🆑
## About The Pull Request
This PR is a re-pr of ##70522 , with some tweaks:
Notably:
- Wavespeak is not a say override, but instead uses a mindlink. Meaning
carp and space dragons can still talk verbally, but they can also use
telepathy to talk to all carp and the dragon.
- I would refactor Mind Linker a bit further to be a full datum rather
than a component but that's for another time.
- Removed the gravity aura component in favor of using the existing
forced gravity proximity monitor.
- Also fixed a bug involving that. Lol.
- Minor refactoring around the place.
- Reduced the volume on a lot of space dragon sounds.
- Edited the roundend report for Space Dragons to collate all entries
into one per player.

## Why It's Good For The Game
Space dragon still plays pretty "play lame win game" right now, the
optimal strategy for them is to find the cheesiest spot for a portal and
spam their stun / fire breath to make it unreachable.
I was a fan of the original PR so I updated it and brought it back.
## Changelog
🆑 IndieanaJones, Melbert
balance: Space Dragon can no longer choose its rift locations freely,
and instead is given 5 pre-determined locations to pick from instead
balance: Space Dragon itself has been buffed in order to support a more
confrontational playstyle, however its wing gust now requires a line of
sight to targets in order to affect them.
balance: Player Space Carp from rifts now have buffed health, but
reduced object damage values. They also gain a temporary speed boost
when hit by Space Dragon's fire breath instead of taking damage.
balance: Carp rift spawn times have been reduced, the healing AOE is now
a 3x3 instead of a 1x1, and apply normal gravity in a large radius
around them
balance: Space Dragon and rift carps now communicate on a private mind
link channel via action button similar to Raw Prophets and Slimepeople.
fix: Fixed Gravity Generator forced gravity not applying.
fix: Intern Announcer will no longer replace Space Dragon announcements.
qol: The roundend report for space dragons now collates all players who
played a carp into one entry, rather than one per carp spawned.
qol: Space Dragon sounds are much less ear piercingly loud.
/🆑
---------
Co-authored-by: IndieanaJones <mariosuperstar384@gmail.com>
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
## About The Pull Request
Keen eyes will notice time stop is intended to have a radius of 2
https://github.com/tgstation/tgstation/blob/3c0013dfa5198db867426ea27df14534cf95949f/code/modules/spells/spell_types/self/stop_time.dm#L14-L17
This implies it's supposed to be a 5x5 - radius of 2
Back when it was originally coded, it was a 5x5
https://github.com/tgstation/tgstation/commit/f2abe13f513afb9f2a18e4e3eb4756494d84e4cf
(scroll down a bit, and you will see `orange(2)`. This is a 5x5.)
So where did it become a 3x3? I can't find a single PR nerfing it, and
the radius is still 2 as it always has been
The answer: Here, in 2017 it was refactored to use fields
#30858
Fields track their inner fields and edge fields separately, but it used
the same radius as before, so it quietly shrunk by 1 tile as the outer
edge was no longer counted as frozen, and I guess no one noticed? or
cared? I don't know??
So I updated advanced fields to have a "mode" that tracks edge fields as
field turfs.
While I was here, I fixed some other issues with timestop. A runtime
when movelooping mobs were time stopped, sign languagers (emote mute).
And while I was "while I was here", Gravity aura had a similar issue,
causing the grav gen's aura to never work. That was fixed as well
## Why It's Good For The Game
This caused an hour long search over a 5 year old bug
## Changelog
🆑 Melbert
fix: Fixed a FIVE YEAR OLD issue causing Time Stop to be a 3x3 instead
of a 5x5. Really.
fix: The gravity generator correctly gives "forced gravity" to all
adjacent mobs
fix: Fixed some runtimes with Time Stop, and other miscellaneous issues
/🆑
I'm refactoring proximity monitors and fields, removing lots of bloat from both that's hardly even used. Proximity monitors no longer generate effect objects to track the surrounding area, should be less cpu expensive and easier to maintain (or phase out), read and use.
This PR also adds a couple components which may be needed for future stuff (for starters, the mirror reflection PR #62638 could use the connect_range comp)
Improving old old, ugly old code and adding some useful backend components. Tested and working.