## Mirror of PR #22521: [Partial atmos
refactor](https://github.com/space-wizards/space-station-14/pull/22521)
from <img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)
###### `18a35e7e83b2b71ee84b054d44d9ed5e595dd618`
PR opened by <img
src="https://avatars.githubusercontent.com/u/60421075?v=4"
width="16"/><a href="https://github.com/ElectroJr"> ElectroJr</a> at
2023-12-15 03:45:42 UTC
---
PR changed 43 files with 891 additions and 635 deletions.
The PR had the following labels:
- Status: Needs Review
---
<details open="true"><summary><h1>Original Body</h1></summary>
> This PR reworks how some parts of atmos code work. Originally it was
just meant to be a performance and bugfix PR, but it has ballooned in
scope. I'm not sure about some of my changes largely because I'm not
sure if some things were an oversight or an intentional decision for
some reason.
>
> List of changes:
> - The `MolesArchived float[]` field is now read-only
> - It simply gets zeroed whenever the `GasMixture` is set to null
instead of constantly reallocating
> - Airtight query information is now cached in `TileAtmosphere`
> - This means that it should only iterate over anchored entities once
per update.
> - Previously an invalidated atmos tile would cause
`ProcessRevalidate()` to query airtight entities on the same tile six
times by calling a combination of `GridIsTileAirBlocked()`,
`NeedsVacuumFixing()`, and `GridIsTileAirBlocked()`. So this should help
significantly reduce component lookups & entity enumeration.
> - This does change some behaviour. In particular blocked directions
are now only updated if the tile was invalidated prior to the current
atmos-update, and will only ever be updated once per atmos-update.
> - AFAIK this only has an effect if the invalid tile processing is
deferred over multiple ticks, and I don't think it should cause any
issues?
> - Fixes a potential bug, where tiles might not dispose of their
excited group if their direction flags changed.
> - `MapAtmosphereComponent.Mixture` is now always immutable and no
longer nullable
> - I'm not sure why the mixture was nullable before? AFAICT the
component is meaningless if its null?
> - Space "gas" was always immutable, but there was nothing that
required planet atmospheres to be immutable. Requiring that it be
immutable gets rid of the constant gas mixture cloning.
> - I don't know if there was a reason for why they weren't immutable to
begin with.
> - Fixes lungs removing too much air from a gas mixture, resulting in
negative moles.
> - `GasMixture.Moles` is now `[Access]` restricted to the atmosphere
system.
> - This is to prevent people from improperly modifying the gas mixtures
(e.g., lungs), or accidentally modifying immutable mixtures.
> - Fixes an issue where non-grid atmosphere tiles would fail to update
their adjacent tiles, resulting in null reference exception spam
> - Fixes#21732
> - Fixes#21210 (probably)
> - Disconnected atmosphere tiles, i.e., tiles that aren't on or
adjacent to a grid tile, will now get removed from the tile set.
Previously the tile set would just always increase, with tiles never
getting removed.
> - Removes various redundant component and tile-definition queries.
> - Removes some method events in favour of just using methods.
> - Map-exposded tiles now get updated when a map's atmosphere changes
(or the grid moves across maps).
> - Adds a `setmapatmos` command for adding map-wide atmospheres.
> - Fixed (non-planet) map atmospheres rendering over grids.
>
> ## Media
>
> This PR also includes changes to the atmos debug overlay, though I've
also split that off into a separate PR to make reviewing easier
(#22520).
>
> Below is a video showing that atmos still seems to work, and that
trimming of disconnected tiles works:
>
>
https://github.com/space-wizards/space-station-14/assets/60421075/4da46992-19e6-4354-8ecd-3cd67be4d0ed
>
> For comparison, here is a video showing how current master works
(disconnected tiles never get removed):
>
>
https://github.com/space-wizards/space-station-14/assets/60421075/54590777-e11c-41dc-b49d-fd7e53bfeed7
>
> 🆑
> - fix: Fixed a bug where partially airtight entities (e.g., thin
windows or doors) could let air leak out into space.
>
</details>
Co-authored-by: SimpleStation14 <Unknown>
ChunkSize is still 32 so doesn't cut down on heaps of decals atm though we avoid passing many decals to drawing with the coordinates bounds check now.
(cherry picked from commit d8e5f5c24b88bf8096ddaec11e80f1af2953637b)
* Use new Subs.CVar helper
Removes manual config OnValueChanged calls, removes need to remember to manually unsubscribe.
This both reduces boilerplate and fixes many issues where subscriptions weren't removed on entity system shutdown.
* Fix a bunch of warnings
* More warning fixes
* Use new DateTime serializer to get rid of ISerializationHooks in changelog code.
* Get rid of some more ISerializationHooks for enums
* And a little more
* Apply suggestions from code review
Co-authored-by: 0x6273 <0x40@keemail.me>
---------
Co-authored-by: 0x6273 <0x40@keemail.me>
(cherry picked from commit 68ce53ae17985876d6d112b764b2144964a9f42e)
* Gateway generation
* Gateway stuff
* gatewehs
* mercenaries
* play area
* Range fixes and tweaks
* weh
* Gateway UI polish
* Lots of fixes
* Knock some items off
* Fix dungeon spawning
Realistically we should probably be using a salvage job.
* wahwah
* wehvs
* expression
* weh
* eee
* a
* a
* WEH
* frfr
* Gatwey
* Fix gateway windows
* Fix gateway windows
* a
* a
* Better layer masking
* a
* a
* Noise fixes
* a
* Fix fractal calculations
* a
* More fixes
* Fixes
* Add layers back in
* Fixes
* namespaces and ftl
* Other TODO
* Fix distance
* Cleanup
* Fix test
- Guaranteed spawns in salvage
- Triple vein count
- Made it so rocks only drop 1 as it's kinda whacky (I believe they still convert differently to bars).
* Planetmap tiles
Biomes etc etc
* a
* oop
* Chunk-based rendering
* funny
* Less allocations
* Fix overdraw
* Content tile edge support
Also updated grass to use it as a POC.
* Kindly revert
* Update for variant edges
* fixes
* Use fastnoise
* Remove redundant group
* a
* refactor a fair bit
* Prototype data instead
* tweaks
* a
* fix maths
* working
* a
* Slightly better empty support
* a
* flowers
* sounds
* lewd
* Networking
* more fixes
* better
* colours
* Some chunk loading
* Proper loading and unloading
* Better loading
* Fix parallax and movement sounds
* Anchoring support + decal setup
* Most of the way to load and unload
* Decal loading kinda werkin
* large trees
* started diffing
* a
* Variant support and deserts
* a
* snow
* agony, even
* working again
* todo
* a
* laba tiles
* aeiou
* a
# Conflicts:
# Resources/Prototypes/Entities/Tiles/planet.yml
# Resources/Prototypes/Tiles/planet.yml
# Resources/Textures/Tiles/Planet/Lava/lava.rsi/meta.json
* laba
* Add lava
* Initial ignition
* triggers
* a
* a
* y
* Add basalt tiles
Did some unconventional things for the animation + rocks.
* fixies
* mergies
* promotion
* lava biome
* Lava planet start
* cleanup and more lava
* laba
* maccas
* biome stuf
* weh
* bongflicts
* aeaeae
* More fixes
* a
* these too