* Fixed atmospherics components air relocation and unsafe pressure release (#80244)
## About The Pull Request
At present
- If user deconstructs/unwrenches something from
[/obj/machinery/atmospherics/components](https://github.com/tgstation/tgstation/blob/master/code/modules/atmospherics/machinery/components/components_base.dm)
- all air inside it disappear. (only unary, binary, trinary devices).
-
[/obj/machinery/atmospherics/components/unsafe_pressure_release()](f9a5502f78/code/modules/atmospherics/machinery/components/components_base.dm (L175))
doesn't work at all.
- HFR UI has the problem of [activation request
message](f9a5502f78/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm (L209C3-L209C3))
constantly repeating if the user forcefully switches off the machine
(e.g. unscrewed one of the components).
- Thermomachine and Bluespace sender do not connect to pipes when panel
is open.
- Crystallizer does not move air from node after rotation.
Now
- Each
[/obj/machinery/atmospherics/components](https://github.com/tgstation/tgstation/blob/master/code/modules/atmospherics/machinery/components/components_base.dm)
deconstruction will move air into connected pipeline if any, otherwise
it will be released from open nodes, HFR internals or if there is
portable connector that has no device connected will also release air
outside. The user will also be notified of deconstruction and if
pressure inside is safe for action.
- The
[/obj/machinery/atmospherics/components/unsafe_pressure_release()](f9a5502f78/code/modules/atmospherics/machinery/components/components_base.dm (L175))
will act like a normal pipe
[unsafe_pressure_release()](f9a5502f78/code/modules/atmospherics/machinery/atmosmachinery.dm (L447C1-L447C1))
if there is an empty node with air.
- When HFR interface is turned off - UI will be closed.
- Thermomachine and Bluespace sender will always try to connect to pipe
if they are anchored.
- Air inside of nodes will move to connected pipenet after the machinery
is rotated.
## Why It's Good For The Game
This fixes things that essentially had to exist at the same time adding
new possibilities for realization. Even though these aren't critical
bugs, it's still unpleasant enough to lose air.
## Changelog
🆑 mogeoko
fix: Atmospherics components will now move air into connected pipeline
on deconstruction if possible. Otherwise, air will be released to the
outside from open nodes.
fix: Unsafe pressure release on atmos components will now work the same
way it does in the normal pipes if there is an empty node with air.
fix: The HFR user interface would close when the machine is shut down.
fix: Atmospherics machinery will now share air from nodes after being
rotated and reconnected to pipenet.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixed atmospherics components air relocation and unsafe pressure release
---------
Co-authored-by: mogeoko <109075486+mogeoko@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Reverts Canister Wiring (#80265) (#80607)
## About The Pull Request
Reverts #80265
It's a cool idea, but the ability to toggle valves/control pressure make
this just a ttv but without the access issues we tie to that.
Eats into that space way too much.
Removing those but not the rest results in disappointment, so I'm just
full removing this.
I am keeping the code quality changes, screentips, that sort of thing
tho. That bit goes hard.
Also, refactored a few procs slightly to make them easier to read. Early
returns, sane loops, etc.
## Why It's Good For The Game
Closes#80604
Cheap remote mass producible maxcaps are a bad idea actually
Sorry I didn't catch this in review, been resting for the week
## Changelog
🆑
del: Removes the wires from canisters. It's a cool idea, but cheap
controlled maxcaps are bad actually
/🆑
* Reverts Canister Wiring (#80265)
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Canisters: Wires, Rigging and Screentips (#80265)
## About The Pull Request
Added 6 wires to gas canisters, accessible when you screw open the panel
Toggle valve, toggle shielding, min pressure, max pressure, eject tank,
toggle reaction suppression (only works with hypernob crystal'd
canisters)
Pulsing the wires only works if the canister has a cell
You can attach dual assembly combos to canisters too, doesn't have to be
an igniter combo, could be a prox-signaler or timer-signaler. These are
visible on the canister sprite and can be removed by right-clicking the
canister. Visible assemblies don't trigger anything inside the canister,
it's like taping it to the canister, also looks more menacing.
Also added screentips to canisters
## Why It's Good For The Game
Emergent gameplay, more possibilities with atmos automation and
contraptions, can make traps like a proximity sensor N2O canister in
maint for cult conversions, anything
AND YES EVERYTHING IS LOGGED NO STEALTH GRIEFING POSSIBLE
## Video
https://github.com/tgstation/tgstation/assets/46101244/922465b3-9f9c-4b7b-8769-fca6df3b87a3
## Changelog
🆑
add: Canisters now have wires! You can pulse wires to do various
canister functions like opening/closing the valve. Make sure it has a
cell though.
add: You can rig assembly combos (igniter-timer, prox-signaler, etc.)
onto canisters
qol: Canisters now have screentips
/🆑
* Canisters: Wires, Rigging and Screentips
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
* Atmos wrench act & small typo fix (#80245)
## About The Pull Request
Because `deconstruct()` returns the component that was unwrenched which
is not a valid attack result. We have to explicitly state what our
result is. The parent proc wrench act does nothing so no point calling
it
Also fixes small typo in attack define comment
* Atmos wrench act & small typo fix
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Air Alarm Circuit fix 2: It works this time (#80166)
Also removed the (turf/location check in "check danger" as its not being
used.
## About The Pull Request
I made a mistake in the last fix as I thought my_area was a turf. I am
not sure why as its in the freaking name. I went though the air alarm
and noticed it was using the same code to get the turf from either the
air_alarm turf itself or the connected sensor so I just created a
function get_enviroment() so any future device can just get the
environment pointed by the air alarm.
I also removed the turf/location from the check_danger function as it
had no purpose in the function itself. Then I started 3 separate games
and tested to make 100% sure the air alarm AND a simple circuit works.
## Why It's Good For The Game
Fixing bugs is good.
## Changelog
🆑
fix: The air_alarm_circuit to gets the environment from the proper turf.
🆑
* Air Alarm Circuit fix 2: It works this time
---------
Co-authored-by: WarlockD <warlockd@gmail.com>
* Attack chain refactoring: Broadening `tool_act` into `item_interact`, moving some item interactions to... `atom/item_interact` / `item/interact_with_atom`
* Patches up merge skew (#80197)
## About The Pull Request
Yeah #79968 (1e76fd70b4) was not
compatible with master but no one said anything on the PR so i got
jebaited into merging it. The code should be up to the same standards
per the documentation I read (preventing thwacking the target in certain
situations while not returning anything in other situations)
master will definitely compile now though
* Patches up merge skew
* Merge conflicts
* Modular adjustments
* Removes this entirely duplicated proc...
* Update tool_override.dm
* Update weldingtool.dm
* Update tool_override.dm
* Update tool_override.dm
* Nope. Copy paste begone.
A skyrat edit is so much easier to deal with here
* Update brand_intelligence.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* General maintenance for canisters (#80145)
## About The Pull Request
1. Fixes#80139
The greyscale config was not applied correctly and run timing halfway
causing the appearance of the canister to be broken. That's fixed now.
2. Removes prototype canisters. They are not available in game and even
as an admin tool their only function is to open the valve after an
elapsed time interval. Even this was broken cause the UI for adjusting
the timer was never added and the params had to be manually var edited
all for a pretty pointless function.
A better solution would be to allow players to attach signallers to
canisters to control the delay but that could be a future PR
4. Other smaller optimizations include
- converted vars like `can_min_release_pressure` and
`can_max_release_pressure` & `temperature_resistance` into defines. Vars
take up memory but not defines and so we saved some memory from this
- removed var `starter_temp` cause its unused
- removed var `protected_contents` cause it did nothing
- moved the global canister list to its appropriate
`code/define/globalvars/lists` folder where it belongs
- Auto doc some vars & procs
5. Converted UI to typescript
## Changelog
🆑
fix: canisters don't disappear when their colours are changed
code: changed some vars into defines to save memory, removed
unused/useless vars & added auto docs
code: converted UI to typescript. moved global canister list to its
appropriate folder
refactor: removed prototype canisters and optimized canisters as a
whole.
/🆑
* General maintenance for canisters
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Adds investigative logging for vent overclocking (#79932)
## About The Pull Request
Basically what it says in the title.
We added a feature which could destroy vents but forgot to log who
turned it on and forgot to turn it off.
Now the Investigate log for atmos will record who toggled overclocking,
whether they turned it on or off, and whenever a vent was destroyed as a
result of overlock damage.
Also this removes a little bit of code which never ran, as a result of
that it checked the integrity of the vent _before_ damaging it and does
not process after being damaged to destruction.
No changelog because it's not player facing.
* Adds investigative logging for vent overclocking
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Makes gas visuals send less assets (#78955)

~~I'll see how this works out for the downstream, if it improves the
situation for them I'll check the profiler to see how much it affects
performance.~~
This reduces assets that need to be sent to the client, how much is hard
to tell but a downstream that was having issues due to it got reduced
issues when testing with this. Server side costs are roughly equivalent
now that I switched to using a straight color in the color matrix
filter.
* Makes gas visuals send less assets
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* More standardization for ghost notifications (READY) (#79596)
## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.
It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers
After:



NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑
* More standardization for ghost notifications (READY)
* Modular
* Update outpost_of_cogs.dm
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Fixes the air alarm circuit component to read the air at the right turf (#79765)
I figure someone forgot about it, but apparently the air alarm usb port
is practically useless if your using it with a remote air sensor. Now
you can have circuits control the SM automaticly!
* Fixes the air alarm circuit component to read the air at the right turf
---------
Co-authored-by: WarlockD <warlockd@gmail.com>
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.
The following code changes can be summarized into points.
**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code
**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE
**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.
We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code
**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves so
the while loop has been removed
## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage
* Modular update
* Update alcohol_reagents.dm
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Pipe painting, spraycan preset colors (#79521)

## About The Pull Request
Made pipe painter properly paint pipe colors, work on pipe items, and
added the same functionality to regular spraycans.
Spraycans now have the color presets in UI for easier selection of the
valid pipe colors.
## Why It's Good For The Game
Bug fixing is good.
It was weird that spraycans couldn't paint pipes, but some other device
could.
Also custom spraycan color is too clunky, presets are nice for quick
spraycan color selection.
## Changelog
🆑
fix: fixed pipe painter not applying pipe color properly
qol: made spraycans work also as pipe painters
qol: spraycans now have basic color presets for quick selection
/🆑
* Pipe painting, spraycan preset colors
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Cuts down on unnecessary non-TGUI stuff (#79590)
## About The Pull Request
Removes INTERACT_MACHINE_SET_MACHINE on machines that don't use a
non-TGUI UI.
Removes set_machine from TGUI things that forgot to remove them
previously.
Decouples advanced camera consoles from UI procs since it doesn't
actually use one.
## Why It's Good For The Game
TGUI machines don't need to be using these procs and vars, and this
makes it more clear what does and doesn't use a TGUI menu from a glance.
I explain it a bit better
[here](https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA) if you're interested.
## Changelog
No player-facing changes.
* Cuts down on unnecessary non-TGUI stuff
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Changes Cryo cells to use machine direction instead of hardcoded one on startup. (#79585)
Cryo cells on Delta and Tram wouldn't work round start due to the fact
their gas input was defaulting to South and not the direction of the
cell itself.
This uses the machines direction to setup the initial direction for the
internal gas connector instead.
* Changes Cryo cells to use machine direction instead of hardcoded one on startup.
---------
Co-authored-by: TwistedCicrularConvexLens <106436013+TwistedCicrularConvexLens@users.noreply.github.com>
* prevents infinite paper glitch in HFR framework (#79493)
## About The Pull Request
Fixes#79492 . Infinite paper isn't so much an exploit as much as it is
annoying to have someone spam the multitool action and just end up
having dogshit amounts of stuff.
## Why It's Good For The Game
There's no particular need for more than one guide to the HFR, this is
an oversight.
## Changelog
🆑
fix: The HFR will not print out a piece of paper every time you
multitool it, saving any desired energy to use for more useful
processes.
/🆑
* prevents infinite paper glitch in HFR framework
---------
Co-authored-by: san7890 <the@san7890.com>
* uhh yeah sure
* das solarpanelen
* solar panel test
* fix the dme
* that path changed silly
* should make the designs actually choose the right ones, makes it easier
* i hate techwebs i hate techwebs
* makes that not just "protolathe"
* designs be like ???
* i give up on trying to modularize that
* day 100 still despise tech code
* makes those not drop anything when repacked
* maybe we can modularize it after all
* yeah not quite
* STOP DROPPING THINGS WHEN YOU'RE TAKEN APART
* ok shut up
* tonie tsark
* live arc furnace audio
* fixes some code bits
* slight logic errors
* makes the soundloop stop
* makes the audio not pop
* trims a quiet clip from arc furnace audio
* should make the fabricator's icon fully correct
* power cells
* removes extra bit of code that doesn't need
* fuel generator, gas output
* arc furnace exhaust
* solid fuel generator done i think
* logical
* I LOVE ELEMENTS HOLY SHIT
* lets see if thats all still stable enough
* must not sleep
* ggraahhhhh
* i see it all makes sense now
* massively nerfs the gas spewing of the arc furnace
* makes solid fuel generators bolted by default
* moves the designs to a folder
* aint hat neat?
* designs designs and more designs
* that is hopefully it for now
* get logical
* maybe that ought to work better
* oughghg kill me
* reworks the arc welder
* terminator
* we dont need to override that i dont think
* reverts changes to that because it didnt work
* mmm boulder up a big mountain so good!
* ok that makes sense actually
* fuark of
* wallframe device
* doohickey
* one eternity later
* now why doth that one not work right?
* fugget about it
* ok lets pr this as part 1
* name death
* that one too
* that makes more sense
* last bit
* should fix the missing test
* what the flarp??
* yum radiation
* lets borgs manipulate the flatpack machines
* ok checks cancel deez
* wall cell charger
* ggrahhh
* Update modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Update modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Update modular_skyrat/modules/colony_fabricator/code/tools/tools.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* everything everywhere all at once
* attributions and restricts the crowbar
* fixes that
* Update modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Update modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Update modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* sprite changes
* changes the solar panels again actually
* grey panels, colored base
* ok
* makes undeployed rtgs not radioactive
* fixes wall cell charger overlays
* for real this time
* lets the wall charger actually be taken down
* ok buddy pal friend
* lets the machines be repacked regardless of power
* castle vein
* gives design descriptions to the fabricator things
* adds screen context to repacking
* lets pumps and scrubbers of the portable variety be produced
* who built this thing?
* moves that around a bit
* huh?
* ok pal
* thermomachines, yippie!
* i forgot the animation that plays when it deploys its so over
* should fix the thermomachine not being interactable much
* makes the arc furnace hopefully put the right amount of materials
* adds some very much needed devices
* fixes some things
* fixes some missing designs
* gives the thermomachine a sound for operation
* grahh!!
* ooprs!!
* co2 cracker
* actually adds that path
* fixes the AC audio being WAY too loud.
* makes the cracker not repackable, its not meant to be
* fixes that reaction being a lie
* water synthesizer
* oh yeah baby
* joly moly
* fixes the dme
* updates some stuff
* undefines some stuff at the end of their files
* I LOVE FIXING CODE!!!
* moves the can hold global list up to defines
* riiight
* restores include i accidentally got rid of
* lets those actually be printed
* fixes some organics printer things
* reconfigures the company stuff a bit
* gps locator beacon
* LOL
* those appeared to be causing problems too
* gives the gps thing a working overlay
* sustenance dispenser
* fixes up a few things
* retweaks the sustenance machine to have a godawful cell
* except not backwards
* makes it not show nri clothing designs
* makes the organics printer less awful
* unanchors the synth
* final fixes for the night
* fixes an appliance research node
* resorts a lot of stuff and nerfs the clothes pt1
* galaxy in devastation as the chest rig is nerfed!
* works some stuff around
* makes a few of the structures in cargo deployables instead
* probably actually makes the co2 cracker work now
* deployable cracker for cargo
* co2 cracker deployable object sprite
* the cracker remains a problem and im not fully sure why
* yeah the co2 cracker has some messed up stuff
* that node doesnt exist anymore
* i lied its REALLY missing these two cooking machines
* snap back to reality
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Overclocked Vent Pumps (#78583)
## About The Pull Request
Adds in the capability for vent pumps to be overclocked, which allows
them to ignore pressure differentials and move their entire air contents
each process. Doing this causes them to take damage over time however
which causes them to be less effective in normal operation.
**the penalty for low integrity does not apply to fans which are
overclocked, however reaching 0 integrity will still disable them**
## Why It's Good For The Game
Engineers got used to vent pumps being stupid and ignoring pressure, now
its a feature not a bug.
## Changelog
🆑
add: Vent Pumps can now be overclocked, do some light reading in the air
alarm to figure out what this means.
balance: Vent Pumps now have fan integrity, the damaging of which
reduces their ability to move air.
sound: Overclocking sounds, including spool, stop, and loop
/🆑
---------
Co-authored-by: Emmett Gaines <ninjanomnom@ gmail.com>
* Overclocked Vent Pumps
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@ gmail.com>
* Pipe gas visuals (#78217)
## About The Pull Request
Primarily this pr is all about getting pipes to have a visual display
for the gas within them. A couple other things of note have been done to
make that easier though:
- A sprite generator that outputs to a dmi has been made for all pipe
variants and the layers. This is because I didn't want to work with
hundreds of pipe sprites just to do minor changes. In the future I would
like to generate things like this during a github action but for the
moment this is just a helper you can use for generating the pipe dmi
files.
- Some minor reorganization of the code in the pipe dm file.
- Some doc comments on things that bothered me
## Why It's Good For The Game
Gives a bit of visual feedback when working with pipes that should
hopefully make people more comfortable around them if they can easily
see if the pipes are empty or are filled with an unknown gas mixture.
Can also serve as a warning to those keeping an eye out for things like
plasma floods.
🆑 ninjanomnom
add: Pipes now have a colored visual display that shows their contents
at a glance.
/🆑
~~The colors for gases could stand to be better, if anyone wants to
suggest alternatives to what I've used please do as I put only a bare
minimum of thought into each choice.~~ I've switched to using the gas
colors defined in tgui constants.

* Pipe gas visuals
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* Scrubbers and Vents will no longer reset their settings on map load. (#78582)
## About The Pull Request
Scrubbers and Vents will no longer reset their settings on map load.
## Why It's Good For The Game
On map load, vents and scrubbers would be set to filtering, overriding
any map-edited settings of scrubbers/vents or unique subtypes of
scrubbers/vents, such as siphoning vents.
## Changelog
🆑 BurgerBB
fix: Scrubbers and Vents will no longer reset their settings on map
load.
/🆑
* Scrubbers and Vents will no longer reset their settings on map load.
---------
Co-authored-by: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com>
* [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor. (#78310)
## About The Pull Request
Zap strength is now measured in joules. Scales everything to account for
this.
NT CIMS will now display the zap power transmission in watts, instead of
a modifier. This will allow you to actually see how much power the
supermatter is generating accurately, without knowledge of hidden
multipliers. NT CIMs will also show the internal energy gain from heat
in eV/K/s, so you can easily figure out how internal energy gain works,
and how much energy gain it actually gives. The internal energy
measurement will also adjust its prefix. Internal energy is now a
measure of internal energy, rather than internal energy density,
removing the "/cm^3".
Here is what it looked like:

This image was created on an earlier commit where the numbers were wrong
due to a hidden multiplier that got removed later, so keep that in mind.
Also fixes inactive supermatters unnecessarily scaling delta time. The
high energy (>5GeV) additional zaps now also scale with delta time.
The code in this PR is absolute garbage trash and there are some major
issues, so I'm drafting this for now.
## Why It's Good For The Game
Makes it more clear what the factors add, and also how much power the SM
is releasing. Zap strength being measured in joules will simplify a lot
of things, making power balance more clear rather than guessimating.
Adjusting the prefix for internal energy is just the natural thing to
do. The per cubic centimeter part of internal energy would imply it is
energy density, however it is functionally not. It would probably
confuse people thinking the volume of the turf or the size of the
supermatter actually matters for what the internal energy does, when it
does not (except for gas absorption I guess, which changes heating/mol
requirements, but nothing else), so I am removing that part.
## Changelog
🆑
qol: NT CIMs shows how much power the supermatter is releasing.
qol: NT CIMs internal energy will adjust its prefix.
qol: Energy displays (such as multitooling grid) will use the full range
of SI prefixes available, up to the peta prefix if you somehow managed
to reach that.
del: Removes the per cubic centimeter part of internal energy.
fix: Fix unnecessary delta time scaling on inactive supermatters.
fix: Fix high energy zaps not scaling with delta time.
fix: Fixes grounding rods lying about potential power you can generate.
code: Convert supermatter_zap() and tesla_zap() zap_str argument unit to
be in joules, and scales everything that uses that argument.
/🆑
* [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor.
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
* Fixes Multitool Buffer Clearing and Adds Multitool Linking Balloon Alerts (#78309)
## About The Pull Request
I was working on a feature that required the buffer of a multitool to be
cleared out after linking two devices, when I noticed it wasn't possible
to clear the multitool's buffer. The change to multitools in #77639 made
it impossible to set the buffer of a multitool to null without
destroying the stored object, yet many objects still tried to have the
multitool clear it's buffer after a successful linkage. This creates a
new proc, clear_buffer() dedicated just to clearing the buffer of a
multitool.
Also made all of the multitool linkage messages balloon alerts.
If there's any issues or things I can improve please let me know, I'm a
bit new to BYOND and DM but I'm working on learning so I can make some
more ambitious projects! _(I think I got the signaling right)_
## Why It's Good For The Game
Some objects aren't meant to be saved in the multitool's buffer after
the initial linking, this should fix that.
Also balloon alerts are nice.
## Changelog
🆑
fix: Nanotrasen has finally recalled their faulty multitools and
replaced them with working ones! The multitool's buffer now properly
clears itself.
qol: Moved multitool link messages to balloon alerts
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Fixes Multitool Buffer Clearing and Adds Multitool Linking Balloon Alerts
---------
Co-authored-by: Moose1002 <33578674+Moose1002@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Adds a new component so that items that are "attached" to walls will now drop/deconstruct on turf destruction. (#77417)
## About The Pull Request
Adds a new component, called wall_mounted, which applies on the
wallframe objects on construction, as well as a number of wall frame
objects and structures to cover mapped in, roundstart objects of the
like.
I might have forgotten a few, but this covers the vast majority that
players will run into in a given round.
This will cover wall destruction, turf explosion, the whole nine yards,
and call that object/structure/machine's deconstruct proc. We have some
special handling for intercoms as well since they're apparently items.
So most basic case is this: You have a wall. that wall holds a sign. If
you examine the wall, it tells you that the wall is currently supporting
the **Example Sign**. It tells you that if the wall is damaged or
destroyed, the sign will **fall off the wall.** So, if you were to
welder, bomb, or hulk your way through that wall, it would call the
deconstruct() proc on that sign, and fall off the wall, leaving an item
sign at the foot of the wall.
## To-Do
- [x] Stop breaking all wallmounts when operating shuttles (Signal
conflict with COMSIG_TURF_CHANGED 😔)
- [x] Confirm that the ~~deconstruct~~ designated proc of each wallmount
falling is sane for the intended object
- [x] Clean up the contents of the wall_mounted component to reduce
copy-paste on object init.
- [x] Add it to more stuff that may just not have a directional helper?
- [x] ~~Change how APC construction is handled to make it easier!~~
- [x] ~~Don't accidently nerf malf AI into the ground I guess~~
## Why It's Good For The Game
Closes#22283.
Helps close more of #47526.
Closes#54983.
Closes https://github.com/wall-nerds/wallening/issues/90.
All of these objects are "wall mounts". It stands to reason that they're
mounted to the walls they appear to be attached to. This attempts to
rectify them by giving them a turf link to the turf they're mounted to,
and then upon changes to that turf, dropping or breaking that object.
It'll need a little more polish to get to 100%, since I can see a few
more issues to iron out first, but I'm dropping this here for now to get
some feedback and put some fire under me to get this completed.
## Changelog
🆑
add: Wall mounted objects (Things like APCs, Air Alarms, Light switches,
Signs, Posters, Newscasters, you name it) will now fall to the ground
and break or deconstruct when their attaching wall is changed or broken.
/🆑
* Adds a new component so that items that are "attached" to walls will now drop/deconstruct on turf destruction.
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Vents & Injectors now link properly with air sensors via multitool both ways (#78238)
## About The Pull Request
If you first log a unary vent/injector in an multitool and then link it
with an air sensor(i.e. you invoke the air sensors multitool_act)
everything works correctly.
But if you first log a air sensor in an multitool and then link it with
an unary vent/injector (i.e. you invoke the vents/injectors
multitool_act), the vent gets set up incorrectly i.e., its output
pressure, operating mode is not set and it does not function.
This PR fixes that
## Changelog
🆑
fix: Unary vents & Injectors now link properly with air sensors via
multitool both ways
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Vents & Injectors now link properly with air sensors via multitool both ways
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Change gas mixer to mix by molar instead of volumetric (#78034)
## About The Pull Request
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
Gas mixer output now accurate to set ratio regardless of mismatched
input temperatures
Input

Mixer

Output

## Why It's Good For The Game
We can start by looking at what gas mixers are actually good for. First
we have air supply mix and burn mixes, these are the main uses for a
mixer, but the resulting mix becomes inaccurate if one of your gas
supply tanks is cooler or warmer than another (this often happens when
someone adds a bunch of cold n2 or o2 to wastes). A gas mix for the HFR
or crystallizer, usually these are set up with a constant supply of
gasses with temperature of an input often varying, eventually clogging
if the mix becomes inaccurate. Finally we have bomb and internal mixes,
I would argue that this is the most important reason to keep things the
way they are, but are actually currently the easiest to manage. All of
these uses require molar precision, something the gas mixer doesn't
really provide on its own, making it almost useless if two inputs do not
match in temperature.
In my experience, in order to mix gasses accurately, you must do one of
three things. First, you must use a combination of heat gates and
thermomachines to equalize the temperatures before mixing. Second, you
can combine the mixtures into one to equalize the temperature, filter
the gasses apart, and mix again with your desired ratios. Or the third
option, you could create a custom calculator to take in your desired
ratio and the current temperatures of your input and plug the resulting
ratio into the mixer.
The way gas mixers work currently serves no real purpose outside of
tripping up new players and providing 'busy work' for the experienced
ones. Many newer players expect gas mixers to provide the set ratio to
the output, not knowing that the temperatures on the input mixes must
match. It requires a lot of additional effort and knowledge to
accurately mix gasses, something that should just be provided by the
tool itself.
This change is good because it helps makes atmos a bit simpler and more
intuitive. Unfortunately we will lose complexity in setups and make
atmos a bit easier, but maybe these are good things
## Changelog
🆑
balance: gas mixer output now accurate to set ratio regardless of input
temperatures
/🆑
* Change gas mixer to mix by molar instead of volumetric
---------
Co-authored-by: Redbert <109347230+Deadgebert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Cryo improvements: Auto eject dead and turn on automatically (#77919)
## About The Pull Request
This PR makes two changes to cryo. First, if the patient inside is dead,
it will notify medical over comms, and if auto mode is on, it will eject
them. This is the exact same behaviour as if the patient is fully
healed. Second, if auto is on, the tube will turn on as soon as it's
closed, preventing negligent doctors from leaving people to die in a
locked tube. To prevent people from putting themselves in cryo, you can
no longer close the cryo tube yourself when you're standing in it. This
is effectively the exact same as it was before, except now the game
explicitly tells you that you cannot cryo yourself, instead of letting
you jump in and die.
## Why It's Good For The Game
For the first change, there is absolutely zero reasons for a dead body
to be in a cryotube, and it makes sense that a machine that can tell if
someone is fully healed and eject them can tell if they're dead and
eject them.
For the second change, there are few things worse than being left to die
in a cryotube just because the doctor didn't turn it on. You're just
locked in there until another doctor walks by and notices that the tube
isn't actually on (if they ever do), and you likely die before then,
leaving your organs decay, and turn what was once some simple brute and
burn into a whole revival ordeal. "Auto" implies that treatment is
automatic, so it makes sense that it actually is.
## Changelog
🆑
qol: Cryotubes will now notify medbay if the patient within is dead, and
will eject them if auto is on.
qol: Cryotubes will now automatically turn on when a patient enters it
if auto is on, but you can no longer close the cryotube on yourself.
/🆑
* Cryo improvements: Auto eject dead and turn on automatically
---------
Co-authored-by: Nick <42454181+Momo8289@users.noreply.github.com>
* Fixes vents having "infinite" pressure caps. (#77686)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Unary vents didn't have a pressure cap on either pressuring or siphoning
mode.
This allowed 2 unintended behaviours that are now fixed:
The first is that unary vents on pressuring mode would work as "better"
Injectors, there is some small pros and cons to each, but we shouldn't
have 2 atmos devices that achieve the same goal of "put as much pressure
as you have available gas" into a tile.
The second is that while on siphoning mode it could bypass the pressure
caps other atmos pressure/volume pumps have and "put as much pressure as
you have available gas" into pipelines, canisters, etc.
## Mid PR changes
As it was requested to add a new way to achieve infinite pressure,
volume pumps that are overclocked will not have a pressure cap anymore
in the most streamlined way for new and veteran players.
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
Atmos has a lot of cheese strats that we can use to achieve goals, it is
part of the charm in mastering the system for a lot of players and it
does add some interesting mentoring scenarios where an Elder Atmosian
teaches Eldritch pipe knowledge to new players.
But then it comes the problem that a lot of these are unintented and
thus are not taken in consideration when doing important balance
changes, contradict other "atmos logic", are secret club knowledge that
can only be passed from player to player, etc, etc.
The "put infinite pressure on a tile" change is not that important, as
that is the injectors' job already.
Now the "put infinite pressure on a pipeline" is something unique (As
far as I'm aware since I purposely avoid learning Eldritch atmos tricks)
and it is used to achieve a few goals like high temperature/pressure
burns.
This one is kinda sad to lose, but if we are going to have an atmos
machinery that allows us to "put infinite pressure on a pipeline" that
should be in the tin, new players should look into the device and know
what atmos goals they can achieve with it, future coders should take
that balance in consideration, etc, etc.
And as it was requested to keep the old trick in game, volume pumps do
not have a pressure cap anymore.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑 Guillaume Prata
fix: Unary vents have a pressure cap on both their pressuring and
siphoning mode now, preventing the bypass trick of putting "infinite"
pressure on tiles/pipelines.
balance: Overclocked Volume Pumps do not have a pressure cap anymore.
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
* Fixes vents having "infinite" pressure caps.
---------
Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
* Fixes cost values of RCDs (#77650)
## About The Pull Request
fixes cost values to be 1:1 of what the construction would have costed
in manual construction for the RCD. also changes all decaseconds to
seconds in code for clarity.
the biggest change is windows, they used to cost more than they needed
for manual construction:
grille - 4mu - 1 iron sheet - 100% efficiency
directional normal window - 6mu - 1 glass sheet - 66% efficiency
directional reinforced window - 9mu - 1 reinforced glass sheet - 66%
efficiency
fulltile normal window - 12mu - 2 glass sheets - 66% efficiency
fulltile reinforced window - 15mu - 2 reinforced glass sheets - 80%
efficiency
this PR fixes all of these to be 100% efficient by lowering their matter
costs, among some other items like racks or reflector frames.
## Why It's Good For The Game
consistency for material costs is good. most of these incorrect material
values are also for things that don't matter, like racks or reflector
frames. also decaseconds are gross looking in code
## Changelog
🆑
fix: Some RCD constructs took more material than manual construction.
The RCD cost should be consistent in comparison to manual construction
now.
/🆑
* Fixes cost values of RCDs
---------
Co-authored-by: iwishforducks <65363339+iwishforducks@users.noreply.github.com>
* MODLink System (+ NWTLMM) (#77639)
## About The Pull Request
A pact made with `@ Kapu1178`
Small changes you should not care about:
RD MODsuit outfit (admin only) no longer has a beret that blocks the
activation of the suit
The beret used by death squad officers no longer is blocked from being
put on a hat stabilizer module
Admins can now Shear matrices of objects in Modify Transform
Multitool buffers have been a little refactored to use a setter proc
that saves them from causing hard dels
Cooler stuff:
A revival and remake of [Nobody Wants To Learn Matrix
Math](https://github.com/tgstation/tgstation/pull/59103), this time with
additional tooling for quick matrix calculations.

The MODLink system, available through every MODsuit and MODLink scryers
(a neck item obtainable from advanced modsuit research or
charliestation)
Let's you make a holographic call with any other MODLink user, where you
can chat in realtime and see what's up with em


## Why It's Good For The Game
Adds a fun way for the crew to communicate with each other that can be
done in real-time with relative privacy compared to radio.
## Changelog
🆑 Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato)
fix: RD MODsuit outfit (admin only) no longer has a beret that blocks
the activation of the suit
fix: The beret used by death squad officers no longer is blocked from
being put on a hat stabilizer module
admin: Admins can now Shear matrices of objects in Modify Transform
admin: Admins now have access to Test Matrices in the VV dropdown, an
all-in-one tool for editing transforms.
add: MODLink system, available through scryers (from RnD and Charlie
Station) and through MODsuits. Lets you call people with holographs!
/🆑
* MODLink System (+ NWTLMM)
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Implements usage of the REVERSE_DIR macro throughout the code. (#77122)
## About The Pull Request
Replaces a ton of `turn(dir, 180)` calls with the aforementioned macro.
## Why It's Good For The Game
Afaik, `REVERSE_DIR` was coded to be faster than the classic `turn(dir,
180)` call, being a simple set of binary operations. To sum it up, micro
optimization.
## Changelog
N/A
* Implements usage of the REVERSE_DIR macro throughout the code.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Adds a unit test to stop elements from using identical lists for their arguments. (#76322)
## About The Pull Request
Ok, so a few days ago I made an issue report about multiple instances of
identical elements being generated because of uncached lists.
ninjanomnom (the mind being the element datums) cleared it up and said
an implementation of GetIdFromArguments() that also checks the list
contents wouldn't be worth the performance cost, while adding that a
unit test should be written to check that it doesn't happen at least
during init, which should catch a good chunk of cases.
Also, i'm stopping RemoveElement() from initializing new elements
whenever a cached element is not found. Ideally, there should be a focus
only unit test for that too, but that's something we should tackle on a
different PR.
Some of the code comments may be a tad inaccurate, as much as I'd like
to blame drowsiness for it. Regardless, the unit test takes less than
0.2 seconds to complete on my potato so it's fairly lite.
## Why It's Good For The Game
This will close#76279.
## Changelog
No player-facing change to be logged.
* Adds a unit test to stop elements from using identical lists for their arguments.
* Fixes unit test
* seeing double
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Removes two redundant components (#76866)
## About The Pull Request
We're starting to get to have enough components that people don't
realise that what they want already exists but doesn't have the name
they expect 🙃
I recently added `track_hierarchical_movement` which is similar enough
to `connect_containers` that it shouldn't independently exist, even if I
like sending a new signal more than the ugly setup pattern for
`connect_loc`.
`trait_loc` is actually older than `give_turf_traits` but
`give_turf_traits` covers more edge cases than `turf_loc` so seems like
the better one to maintain.
HOWEVER `give_turf_traits` held a list of references to atoms in it,
which isn't great in an element. I couldn't think of a way to completely
eliminate the list, but it isn't a list of references any more so it
shouldn't cause any hard deletions.
## Why It's Good For The Game
Having two components which do the same thing but marginally differently
is confusing and going to cause us trouble down the line.
## Changelog
Not player facing
* Removes two redundant components
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Adds an extra siphon mode using vents (locked behind emagging) (#76668)
## About The Pull Request
Vent siphon: Disables pressure checks of vents, disables scrubbers, and turns vent to siphon
Useful for people extracting gas from a room - but also valuable for bad actors liking to fill distro with some bad atmosphere
* Adds an extra siphon mode using vents (locked behind emagging)
---------
Co-authored-by: nikothedude <59709059+nikothedude@users.noreply.github.com>
* Fixes cryo cells being on at roundstart (#76933)
## About The Pull Request
Fixes a minor oversight in cryo cell's update overlays which gave the
exact same overlay regardless of being on/operational, now they have the
proper 'off' overlay when necessary.
## Why It's Good For The Game
Fixes a minor visual bug with cryo cells.
## Changelog
🆑
fix: Cryo cells no longer appear on when off.
/🆑
* Fixes cryo cells being on at roundstart
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Volume pump refactor (#76260)
## About The Pull Request
A new pull request that DOESN'T make Lemon and Ghil kill me. _[I had
made a previous PR about the same original commits that was going to
make Volume Pumps leave a lot more gas in pipenets then people would
want.]_
Removed Hardcoded values from Volume_Pump.dm and moved them to __DEFINES
Updated documentation on Volume pumps because it was copied from
Pressure Pump. Volume pumps attempt to move a certain volume and ignore
pressure limits until exceeding them. This can lead to pressures well
above the limit, so there is no ‘perfecting’ of pressures, as previously
detailed by documentation.
Edited to be more specific.
## Why It's Good For The Game
Less Hardcoded values.
Documentation more readily reflects the realities of the game.
## Changelog
🆑
code: replaced hardcoded values in volume_pump.dm with __DEFINES vars
doc: Volume Pump's basic introduction was copied and pasted from the
Pressure Pump documentation, and made mention of trying to 'perfect the
pressure'. Volume pump doesn't care about pressure until it exceeds it,
so there is no 'perfecting' going on.
/🆑
---------
Co-authored-by: EliteCreature <EliteCreature@gmail.com>
Co-authored-by: Riley Redd <riley@pcs-ms.com>
* Macros multi-z code, removes the false premise of manual offsets (#76248)
## About The Pull Request
[Removes the pretense of relative multiz
levels](0293fdc2bd)
Our multiz system does not support having a z level that is only
connected one way, or which goes down backwards or anything like that.
That's a fiction of the trait system, the actual backend has never
really supported this.
This pr removes the assumptions we were making backend around this, and
uses that to save cpu time.
I am also converting multiz_levels from an assoc list to a pure one,
which saves significantly on access times and cleans up the code
somewhat.
Also I'm making the get_below/get_above procs into macros, for the sake
of cpu time.
[Converts the starlight disease to use BYOND's directional defines
instead of our
own](7d698f02d9)
To some extent spurred on by
https://github.com/DaedalusDock/daedalusdock/pull/298, tho it was known
before
## Why It's Good For The Game
Faster multiz code, faster init, etc etc etc
* modular files how very dare you
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Fixes multiz gas not displaying properly (#76572)
## About The Pull Request
Broken by 51f02b5acc I introduced logic
that would use SET_PLANE_EXPLICIT's context arg's PLANE (if it had no
turf) as a source.
Since we use SET_PLANE_IMPLICIT in atom Initialize, if we set a plane
before Init, it'll end up double offsetting. This was effecting gas.
Solution, because this case is so rare, is just to set the plane on init
and store the offset on the object until then.
## Why It's Good For The Game
Closes#75709Closes#73642
## Changelog
🆑
fix: Gas, like plasma, will now properly display on multiz stations
/🆑
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Adds an extra malf AI ability: Remote emagging. Also tidies up emag code and coverts a lot of things to balloon alerts
* Update communications.dm
* Modular override
* Some modular adjustments, removes 'emagged' vars in favor of obj_flags
* whoops, mobs don't have obj_flags.
---------
Co-authored-by: nikothedude <59709059+nikothedude@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
* Gas monitor reaction information will use the primary gas as its reference instead of "reaction rate". (#76264)
## About The Pull Request
Changes gas monitor gas reaction descriptions. They use the main gas as
the reference instead of the "reaction rate".
## Why It's Good For The Game
"Reaction rate" refers to the collective variables that are used as the
gas reaction rate in code, which is OOC in IC, which is fail RP.
Improves atmospherics RP standards by making them reference a physical
thing instead.
## Changelog
🆑
spellcheck: Improves gas monitor reaction information RP.
/🆑
* Gas monitor reaction information will use the primary gas as its reference instead of "reaction rate".
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>