You can still produce points at a decent rate. This stops someone
that managed to thread the needle to extremely low pressures while still
meeting mass requirements from making half a million points per second,
though that did require maxed out parts.
Basically when a group with a breakdown timer one tick away from settling merges with a group with hotspots in
it, and the one with a high breakdown timer is larger, the group would settle without respecting the timer of
the hotspot group, causing fwoosh levels of flame.
There's two other ways to achieve this, if you had one group of tiles that are close to the same gasmix as
another
group, and they became inactive, we'd have the same issue. I've solved this by moving the hotspot subprocess to
after active turfs and before excited groups, just for safety ya feel me?
It's still in theory possible, but much much harder. The hard solution to this would be to integrate heat with
how we reset excited group timers, and split excited groups into smaller portions, but I'm not sure I like that
idea.
I need to mull it over.
core/var/corners is assumed to be a list at all times.
Previously, deconstructing then reconstructing the HFR would get one
stuck where:
- "Activate the machine first by using a multitool on the interface." when attempting to use the interface
- "You already activated the machine" when attempting to use a multitool on the interface
All components, except the core, would show as correctly inactive.
This situation can be worked around by deconstructing and reconstructing
the core, or varediting the core to have active = 0 and corners = list().
This fixes runtimes of the form:
> [21:03:06] Runtime in hypertorus.dm,368: type mismatch: 0 |= HFR corner (/obj/machinery/hypertorus/corner)
> proc name: check part connectivity (/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_part_connectivity)
The additional heat users were supposed to deal with when producing
higher tier gases with Proto-Nitrate, and the reduced heat output that
came from managing to run a mix with enough Freon without also killing
the reaction, was being silently discarded because the temperature
adjustment was applied before heat_output was modified.
The changed value would still show up in the UI, but would have no effect
since the application used the pre-modification value.
While internal_fusion has gases added and removed directly as part of
the gas consumption and producion process, no reference to temperature
is made, so it's safe to just move the application of internal_fusion's
temperature change to immediately after the gas consumption and production
process, instead of immediately before it.
A Pipeline that should've died when its last atmos component got deleted hasn't died, because of SSair.networks. Now they die. Its non-existence grants a lilliputian performance improvement to SSAIR_PIPENETS. airs[i] qdel is mostly about being thorough; every component has a gas mixture for each node all the time by default.
## About The Pull Request
This prevents the dreaded station-wide firelock, at least mostly, and moves us away from being dependent on room size. As a downside, we're closer then ever to ZAS, and the transition between pre-breakdown and post-breakdown is a lot more visible. This also allows us to raise the breakdown timer and decrease the amount of overtime experienced in each tick.
See video, I'm not sure I'm happy with the current rate, it does look somewhat shit. I'm considering tweaking the alpha curve for gas visuals to try and make it look less not good. [Video](https://cdn.discordapp.com/attachments/326831214667235328/797766078389813298/2021-01-10_01-55-53.mp4)
Closes#56066
## Why It's Good For The Game
Station spanning excited groups are rarer, and will settle down more often. Cold things like space will cool down their group faster, preventing station spanning non updating excited groups.
Speeds up gas movement significantly
Documents the intent and finer details of the atmos system (Thanks dunc)
Fixes excited groups constantly rebuilding, this broke 4 years ago
Fixes superconductors just straight up not working
Allows turfs to sleep while inside an excited group
Adds a new subprocess to SSAir to support rebuilding in this state
Most heat based behavior no longer relies on being inside a fire
Adds a new element to support doing this cleanly
Adds a new subprocess to SSAir to support doing this while a turf is asleep
Refactors air_update_turf to allow for finer control
Makes apcs take damage in heat to prevent infinite plasma fire diffs
Cleans up immutable gas mixtures to make them work properly when the mix has gas in it
Planetary turfs no longer create a new copy of themselves each time they process. We instead use a global
immutable mix
Cleans up a typed for loop in reactions
Canisters will take damage from outside heat now
Speeds up excited group dismantle
Increases the superconductor threshold by 200k
Cleans up some roundstart ATs on some ruins
Uses /turf/open/var/excited to track if a turf is actively processing, preventing a |=
Prevents openspace from trying to melt
Tweaks a canister examine line
Makes planetary turfs reset to base when broken down as part of an excited group
Makes it impossible for planetary turfs to rebuild, just like space tiles
Fixes closed turfs not activating their replacement when destroyed by moving closed -> open turf activation to
the adjacent air subsystem. They were activating and then going back to sleep before adjacent air got a chance
to tick.
Fire alarms will trigger when the area gets too cold for humans
Makes irradiating tanks and portable atmospherics devices (canisters, pumps, scrubber) induce pluoxium and tritium formation if they contain the correct gases.
Does NOT affect atmos components or pipes because I don't think Lemon would let me do that to pipecode. (He's right)
There was a bug that makes cryo unable to work in tandem with heat exchanger pipes because update_parents() isn't called. This isn't evident with thermomachines because the thermomachines call update_parents() on temperature differences. This fixes that.
Looking at gas_mixture.dm, remove_specific appears to be able to
return null if the amount of a gas becomes exactly zero or negative,
somehow.
Adding a null check seems safe, and should prevent this from reoccuring.
The temperature is already assigned in remove_specific.
When the type of gas to be created did not already exist, the reaction
caused a runtime and halted processing.
While tritium would still be consumed, no hydrogen would be created,
and no heat modification would occur.
This fixes runtimes of the form:
> [02:02:46] Runtime in reactions.dm,946: cannot read from list
> proc name: react (/datum/gas_reaction/proto_nitrate_tritium_response/react)
A bit of code clean up and var name change for clarity, hopefully i got them all right
will add some docs another day
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Commit 241e9cf broke HFR. Leaving internal_output as null meant that
execution would hit runtimes during process(), and never reach the end
where changes were applied.
No radiation was emitted, no nuclear particles were generated.
No waste gases could be removed, neither by fusion waste removal nor by
moderator filtering. Fusion would produce nothing.
It could still enter meltdown, though.
This fixes the endless runtimes like the following:
[07:51:05] Runtime in hypertorus.dm,1067: Cannot execute null.total moles().
[07:52:09] Runtime in hypertorus.dm,957: Cannot execute null.assert gases().
[07:52:17] Runtime in hypertorus.dm,983: Cannot execute null.assert gases().
[07:53:21] Runtime in hypertorus.dm,1012: Cannot execute null.assert gases().
Add some documentation to atmosmachinery.dm to try and briefly explain each proc. i hope i have them all right
Why It's Good For The Game
documentation is good
changelog shouldn't be needed
- Fix layer manifolds under floor (path was missing `hide = FALSE`)
- Add missing lights
- Move some tables to better spots
- Add buttons and shutters to the atmos testing room chambers to vent
to space
This PR changes how freezers/heaters work by adding a button in the GUI that allow the users to switch between cooling and heating without the need to deconstruct the machine.
Circuitboards now will build the freezer and can't be changed by screwdriving the board.
Mapping isn't touched, all other functionalities are still there.
This PR sets several Icebox turfs to be planetary atmos turfs, such as the openspace, to return the gas mix to a standard, and reduce the number of active turfs overall. To aid in this, planetary atmos calculations are a seperate share from the main 4 turf share now, and instead re-archive and share 4/5 of their difference in moles to the atmosphere, as well as temperature sharing with a higher heat capacity. This should result in the planetary atmos turfs returning to their standard much faster than before.
Before at most planetary turfs would keep 0.8 of their difference after sharing, compared to the 0.2 difference they will keep now, log(0.2) / log(0.8) showing this is sharing about 7 times faster in getting rid of gas diffs. This should also reduce the effects of continuous fires and limit their active turfs to a certain region on the planet, ex: the incinerator outlet wouldn't spread to the entire planets turfs. This also makes behavior more like space for the purposes of cooling and venting gas for toxins.
This might also make gas farming slightly faster since the gas will also come back faster, but considering most of the expensive gasses have been removed and this will also reduce the lag from gas farms, I think it is a worthwhile change. It can't be worse than making the turfs immutable anyways since that would be the fastest.
Reduces lag and makes gameplay more in-line with space stations in ways that improve quality of life but still preserve uniqueness by not making the planetary turfs completely immutable.
When generating a gas mix with no temp provided the gas mix starts out at basically 0K.
This set this gas mix to room temp if no temp is listed in the gas mix string.
Nothing should start at 0K for temp, gasses being one of the big issue points.
- Refractor HFR core from binary device to unary device to fix issue with cooling not properly connecting, that was deleting gases when tryed to use (only one port cooling now similar to a Thermomachine)
- Small fix of GUI data where two vars were inverted
This PR introduces the wacky round gauge for showing all of your favourite metrics in half-circle format. Show off those wacky numbers, use some scary blinking lights, feel alive!
I've also gone ahead and included this in the canister and tank (think internals) UIs. I've also done some refactoring of data sending from canisters because GOSH DANG it required some.
The core temp was meant to be cooled separately through the skin in cryo pods, but on inspection that interaction was skipped.
This makes the core temp match skin temp in a cryo pod.
* cryo fixes and cleanup
Move magic numbers to defines
Fixes cryo deleting 100L of gas each time it transfers
Remove unneeded/unused variables
Moves gas all gas consumption to process_atmos
delta_time in process_atmos
* simplify consume_gas
This PR removes fusion from reactions.dm and add the Hypertorus machine and its new and improved fusion reaction (results may vary).
Fusion is one of the most costly reactions from the atmos system, is one of the most complex and yet most simple ones; this will move fusion inside a buildable machine and it will allow a degree of complexity that can't be done inside react()
* The Re-pricening
* Rewritten and adjusted for paycheck defines.
* I made the map changes finally.
* And the refills too.
* "OH YEAH REPLACING IT ALL WITH DEFINES AND SCALING IT THE EXCEL DOCUMENT WILL BE EASY, ARCANE!!!"
* And the premium ones too.
* Accidently spoiled a future pr due to dme bleedover
The PR aims to allow advanced tool users to be defined by traits rather than a hardcoded proc.
Also necessary for the CanUseTopic refactor I'm working on, which will be PRed separately for atomization purposes.
This PR also fixes an inconsistency with can_hold_items (since monkeys can actually hold items).
This PR changes the Hypernoblium gas around a bit.
First the stop-all-reaction property has been limited to a minimum temperature of 20 K, under that it will no longer stop the reactions in the container (canister, pipenet or open air), over that it will behave normally
Second the production of the Hypernoblium has been shifted to very low temperature, under 15 K so you need at least t3 freezers to achieve and at least 1000 moles of BZ as catalyst to lower the vey high energy released by the reaction
Lowered amount of credit received by cargo to 5.
The production of Hypernoblium was always a pain to make it happen, so it was a super rare gas that almost nobody made, now that the endgame for atmos shifted to more advanced gases and tools, Hypernoblium needed a little rework to fit right into those changes.
Atmos canisters now display their correct max. pressure capacity. Game code always expects kPa, code for SI-prefix-generation only expects the base unit (here: Pa), so the displayed value was always off by the factor 1000.
This PR removes the burn damage you accumulate when breathing nitryl and adds a reaction to breakdown nitryl into its components(excluding bz) when in contact with oxygen under 600k. This produces small amounts of heat.
Nitryl, as it stands, is barely made or used due to the constant damage you take from breathing it, which causes damage slowdown after less than a minute of use. By making nitryl unsafe or unable to breathe with oxygen present, users must turn to pluoxium while using it in tanks, or hyper-nobilium when filling a room with it. BZ is not refunded if you waste your nitryl.
You now burp while breathing nitryl instead of gasping because it no longer directly harms you.
Breathing nitryl will cause lung damage proportional to the amount you are breathing at a rate proportional to the amount you are breathing when it makes up more than 10% of your breath.
imo; the ss13 audio-scape is quite barren, you can only hear most things if you can see them, which in my opinion doesn't make much sense. This changes that so you can hear further away, but falloff is much higher, so in reality you will only hear things relatively quietly when they're out of sight.
This PR increases the hearing distance of most sound by 9, excluding sounds such as antag items that are meant to be used stealthily
This PR also replaces Byond's inbuilt falloff system with something I made, (And thanks to potato for helping me throw together a formula for it). This fall-off system makes sound fall off more naturally, with sounds being full volume within a certain range, and then softly falling off until they are completely quiet. This makes for a smoother transition between "This sound is full volume" and "I dont hear this sound".
Co-authored-by: ff <ff>
removes hexane gas from video game
(the ability to hear dchat got removed like half a day ago) (Lemons note, it's been more then half a day)
it will speed up atmos a bit with less reactions, the reagent from the gas does the same things as halon + bz and the reaction from it is pretty similar to halon, they are both gases that exist to stop fires, i dont think we need both