# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
Ports https://github.com/space-wizards/space-station-14/pull/32294
Ports https://github.com/ss14-harmony/ss14-harmony/pull/310 (and
everything needed for it to function)
Early-merges
https://github.com/space-wizards/space-station-14/pull/34302
Adds the ability for multiple central command maps that get randomly
selected.
Tested and works.
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
🆑 Several contributors
- add: Added a new central command map that is randomly picked alongside
the old one (thank you to Spanky from Harmony)
- add: Added Advanced SMES for mappers.
- add: Added the atmospheric network monitor for seeing what the
temperature, moles, and pressure is on every pipe everywhere through a
computer.
- add: Nukie med bundle now contains a compact defibrillator.
- add: Ported a better mapping editor.
- add: Added the throngler plushie.
- remove: Removed the Throngler as a possible loot spawn for gamble
crates.
---------
Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com>
(cherry picked from commit 9272f65b64392f66a7cd4fd7c84bb152dc93b65a)
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]? -->
- Ports the Atmospheric Alerts Computer, as implemented on WizDen
---
# TODO
[x] small fixes
<!--
A list of everything you have to do before this PR is "complete" You
probably won't have to complete everything before merging but it's good
to leave future references
-->
n/a
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it -->
<details><summary><h1>Media</h1></summary>
<p>

</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name This includes
all available types for the changelog -->
🆑 zelezniciar
- add: Added Atmospheric Alerts Computer
Co-authored-by: SsalamethVersaach <thebluettdle@gmail.com>
# Description
This is a re implementation and complete rewrite of the original
Nyanotrasen CPR feature, this time as its own completely standalone
system. Unlike the original CPR, this system requires no modification of
base game code, and can be toggled on and off via CVars while the server
is running.
Fixes#473Fixes#49
# Changelog
🆑
- add: CPR has been added to the game. People with CPR training can now
perform CPR on anyone who is in either crit or dead states.
- add: CPR Training has been added to the game as a new positive trait.
All medical staff start with this trait for free.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
## 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>
Also includes some (non critical) changes to the solution file to re-organize the Roslyn components.
(cherry picked from commit e00f74505c62310bd15aeaba8d6530f648397074)
* LockVisualizer
* Fix state
* Clean some code
* Make it component, fix tests fail
* Fix for StateUnlocked
Now it is possible to manually set the unlocked state and it will work!
* Optimize LockVisualizer, add check for unlocked state
* No todo I guess
(cherry picked from commit c7870882f6f956eea07cbb4738ae45c8805c8ce6)
* Firestarter fixes
- Actually networks the action.
- Namespace fixes.
* No networky for you
(cherry picked from commit a6ea8b210db079d30823e7b4d8faa32aefa17582)
* Grave digging and decomposition
* fix
* update based on review comments
* code review
* remove unused field
(cherry picked from commit fd7ff690b1ad7b1cf6cd62deba3076684e3e9282)
* Give .props files 2-space indents.
* Move to Central Package Management.
Allows us to store NuGet package versions all in one place. Yay!
* Update NuGet packages and fix code for changes.
Notable:
Changes to ILVerify.
Npgsql doesn't need hacks for inet anymore, now we need hacks to make the old code work with this new reality.
NUnit's analyzers are already complaining and I didn't even update it to 4.x yet.
TerraFX changed to GetLastSystemError so error handling had to be changed.
Buncha APIs have more NRT annotations.
* Remove dotnet-eng NuGet package source.
I genuinely don't know what this was for, and Central Package Management starts throwing warnings about it, so YEET.
* Remove Robust.Physics project.
Never used.
* Remove erroneous NVorbis reference.
Should be VorbisPizza and otherwise wasn't used.
* Sandbox fixes
* Remove unused unit test package references.
Castle.Core and NUnit.ConsoleRunner.
* Update NUnit to 4.0.1
This requires replacing all the old assertion methods because they removed them 🥲
* Oh so that's what dotnet-eng was used for. Yeah ok that makes sense.
* Add Robust.Analyzers.Test
* Update submodule
* commit to re-run CI
(cherry picked from commit a6c9c36b688a1ba78ff4c12502e81661cf607b6c)
* Check for divide by near zero (#22876)
* Clamp after AdjustMoles() (#22907)
Clamping is needed because x - x can be negative with floating point
numbers. If we don't clamp here, the caller always has to call
GetMoles(), clamp, then SetMoles(), which makes this function not very
useful.
* Add maximum atmos temperature limit (#22882)
* Add Tmax
* Increase Tmax
* Revert "Add YAML gas reactions (#22803)" (#22939)
This reverts commit 054321d2c2c17eb55a1640150131c61c29a3eb2b.
Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
---------
Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
Co-authored-by: Kara <lunarautomaton6@gmail.com>
MinimumTemperatureDeltaToConsider sets the minimum temperature
difference for a heat capacity calculation to be run. The problem is
that when heating up large quantities of gas (e.g. with a heater), a
small dT becomes an even smaller dT when running DivideInto(). This
means that small changes in temperature are completely ignored.
* Basic TEG start.
Connects via node group.
* Basic TEG test map
* Sensor monitoring basics, TEG circulator flow
* Basic power generation (it doesn't work)
* More sensor monitoring work
* Battery (SMES) monitoring system.
* Sensor monitoring fixes
Make it work properly when mapped.
* Test map improvements
* Revise TEG power output mechanism.
Now uses a fixed supplier with a custom ramping system.
* TEG test map fixes
* Make air alarms and pumps open UI on activate.
* Clean up thermo machines power switch.
Removed separate Enabled bool from the component that always matched the power receiver's state.
This enables adding a PowerSwitch component to give us alt click/verb menu.
* TEG but now fancy
* Make sensor monitoring console obviously WiP to mappers.
* Vending machine sound, because of course.
* Terrible, terrible graph background color
* Examine improvements for the TEG.
* Account for electrical power when equalizing gas mixtures.
* Get rid of the TegCirculatorArrow logic.
Use TimedDespawn instead. The "no show in right-click menuu" goes into a new general-purpose component.
Thanks Julian.
* Put big notice of "not ready, here's why" on the sensor monitoring console.
* TryGetComponent -> TryComp
* Lol there's a HideContextMenu tag
* Test fixes
* Guidebook for TEG
Fixed rotation on GuideEntityEmbed not working correctly.
Added Margin property to GuideEntityEmbed
* Make TEG power bar default to invisible.
So it doesn't appear in the guidebook and spawn menu.
Emergency tank: 4 minutes (down from 12)
Extended Etank: 9 minutes (down from 37)
Double Etank : 15 minutes (down from 62)
Full tank : 31 minutes (down from 94)
This will make it so EVA crews actually need to watch their pressure if they spend significant time outside the station, and/or have a canister in their general vicinity.
Emergency tanks can no longer be used on timescales that far exceed escaping an emergency situation, but will probably be insufficient in extended emergencies, where access to canisters will now be much more important. How well this works in practice will have to be carefully watched.