-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add pipe pressure damage #20931
Add pipe pressure damage #20931
Conversation
This impl will break the entire pipenet at the same time. Can you make it so the damage is randomly spread out through the pipes so ruptures don't occur everywhere at once? I'm thinking of distro getting overpressurized and needing to replace all of distro. |
An additional thing could be making pipes just leak, instead of breaking entirely, when they are partially damaged. That way this doesn't repeatedly split a large pipenet. |
Yes, it would be good to avoid a whole-distro explosion. What I could suggest is for me to randomize damage in this PR, and in the separate related PR #20928 make the pipes leak contents to prevent repeated splitting. |
i'd say somewhere around 12 MPa for 1-steel pipes, and potentially have 2-steel pipes which are much more resistant |
imo a new plasteel pipe should have higher resistance since currently engi has very little use for plasteel |
There's no pressure bypass valves or any form of automated pressure management, meaning this will exponentially increase the learning curve for a role that's already the hardest role to learn in the game. I think this is a good idea to implement once there's more tools available to regulate pressure and some form of automation is added. However, currently it's a bad idea to implement and this implementation is very rudimentary. As for what the pressure limit should be: All pipes share the same volume, regardless of shape, which doesn't make sense in reality as a junction should logically have a higher volume than a straight pipe. Current pipe volume: 200 L // 200 000 000 mm3 Now to get the diameter of our pipes:
Now the only question remains, how thick are the pipe walls? This is represented by "schedule" in the specification table. What happens to gas from ruptured pipe(s)? It should blow into environment at place of rupture, proportionate amount to the amount required to lower pipe pressure below damage threshold. What kind of pipes can burst? Can connectors burst? Can pumps burst? If not, you know that players will just replace all pipes with pumps. Can valves/filters/mixers burst? If not, players will just replace all pipes with these. Can injectors/vents burst? Can canisters burst? Can machines such as a thermomachine burst? Why yes and why not? How do you identify a damaged pipe? How do you repair a damaged pipe? Can you reference a design document for atmospherics? |
this role barely needs pressures high enough to cause pipes to burst, this is fine as is and we don't need perfect realism (see also pipenets are a single giant gasmix as currently implemented, gas moves instantly inside of them, so trying to account for stuff like slight volume differences or exact pipe thickness with realistic values is small potatoes) I'm not making the PR author fill out ur questionnaire, sorry. |
The threshold probably shouldn't be below 9Mpa to not make vol pumps useless. I think being able to utilize the vol pump's max outlet pressure is a feature, not misuse. And plasteel pipes could be made to withstand higher pressures than that for more specific applications. It sounds good to have rupturing also apply to mixers, filters, pumps, etc. maybe vents too. Randomized damage sounds like a good solution. |
I see, so all the edge cases I listed are not relevant? You realize that as is, this will be completely ignored by clever usage of pipes and devices as I mentioned. but you're free to assume it's a "questionnaire". |
Canisters currently CANNOT explode. |
Concerning some of @AJimmyU s concerns:
As far as damage identification, effect and repairs go, that is explained and handled in #20928 . Personal opinion: I'm also pro pressure damage, but would keep it from destroying the pipe and just make it leak. |
Some of these I had concerns about as well. When doing a burn for gas synthesis, how is the gas then handled? Once it's above a certain temp/pressure, the only way we have of affecting these variables is inside of pipes. The gas has to enter a pipe to get cooled, etc. And so, do passive vents take damage or explode? Now we move on to a potential repair scenario: what does a broken pipe look like? Is it easy to find as an atmosian to fix? Stations can have miles of pipes for distro/waste, in the event one of the systems gets overpressurized how does an atmosian find the break? And is there any counter play? Any way to stop a leak or a break from occurring? Or any kind of timer or other signifier(doesn't break instantly, gives some kind of audio/visual cue that it's about to burst) Not opposed to the idea fundamentally I'm just not certain this is an optimal implementation. |
Re: Burn chambers |
making all pipes volume-leak would probably be a lot better, maybe merge gas tank explosion code but with different constants? |
Responding to @AJimmyU :
I think there's some physics misunderstanding here. Pressure is force divided by area, so maximum pressure does not depend on volume (or length of pipe). Only the cross-section matters, as the linked article shows.
Your calculations suggest a 20" diamter pipe. If you look at the "STD" column, which is a reasonable assumption since NanoTrasen is cheap, the maximum allowable pressure per your linked article is 6337 kPa. Which happens to be very close to the number I proposed. So it sounds like you're fine with this number.
Unclear, please leave your thoughts in the related PR: #20928
Only straight, bent, T, and 4-way. We can adjust this as needed.
No.
No. And they won't because they require power and reduce flow rate. Of course we can make pumps burst if you want.
See above.
No.
Yes. See "maxcap".
No. See above.
You can't. You're welcome to PR a pipe analyzer.
Depressurize it, unwrench it, and replace it with a new one.
What do you want to see there? To respond to @Cheackraze : I understand your concerns. At the same time, there shouldn't be no limit whatsoever. I'm planning on updating the breakage to also not break the entire pipenet at the same time. These numbers are also defined in YAML (pipe breakage is disabled by default in code) so are easy to remove. It would help if you could suggest a specific number to increase the limit to. 10 MPa? 100 MPa? 100000000000000 MPa? There have been suggestions for 10-12 MPa. The realism suggestion from above agrees with the 6.5 MPa I PR'd. I'm inclined to up the number to around the 10-12 MPa range and keep bursting behavior. |
maxcaps explode tanks not canisters |
It would also be trivial to add a sort of "weak pipe" that can burst first, to protect the rest of the pipes like distro. As @daerSeebaer pneumatic valves can already function as over-pressure release valves. If only one pipe bursts (instead of the whole pipenet bursting) I don't think leaking matters.
This would only require YAML changes to add. Maybe we should flip this around and make pumps/filters/etc burst way before pipes do, so that pipenets are protected in a sense? |
in a burn chamber passive vents wouldnt burst since its high pressure on inside and outside, probably fine to let them burst also an issue with making pipes under walls immune is that it will be the new meta to just wall/window up everything to handle infinite pressure |
That sounds ok tbh, think of it as reinforcing the pipe, except it is very expensive and inconvenient. |
@Partmedia i concur, they shouldnt be magically immune, im just concerned about making burn chambers (the intended synthesis method for now) impossible to actually operate, or other unintended knock-on effects. I think that, the combination of 1 pipe section breaking + having that section then leak its contents to 'relieve' the pressure out of both sides would be more optimal. In this fashion, you not only have simply 1 pipe break and not the whole net, but the leaking of pressure means that the pipenets (now 2) themselves have an outlet for the resulting pressure (which may still be too high above the threshold, meaning simply a cascade of pipe failures) |
along with that however, the broken pipe sprite should be made much more high contrast and obvious to casual passers by (even non-atmosians should be able to spot a broken pipe IMO) and probably render above the floor tiles after they've broken |
I think the algorithm going forward is going to randomly damage all pipes, then preferentially damage already damaged pipes so that in practice damage will get focused on one pipe, and then leaking out the gas after breakage to prevent cascading failures. Alternatively, we might just decide to make pipes basically indestructible but instead make pumps/valves/filters/other things burst at high pressure. |
There's no misunderstanding, the chart takes pipe diameter and schedule, and tells you recommended max pressure. The calculation was to determine SS14 pipe diameter and compare it to the chart.
Again, CANISTERS CANNOT burst or explode or anything of the sort, and will at most leak all contents when destroyed by damage. A handheld TANK can rupture if a burn reaction occurs inside of it or extreme temperatures meet. Maxcap is referring to tanks, not canisters.
More than 1 person deciding the fate of the whole system, such as was the case with radiators where only you got to decide. If there's a document to reference, then there can be consistency and an argument can be made. Any feature people add there's an immediate request for a design document when it's a larger feature, I don't see why atmospherics is an exception for this.
The thing is that if you do not make it burst, then some time later someone will decide that using pumps/valves in such a way is an exploit just like it was decided that stacking scrubbers is an exploit. So I'd prefer thinking ahead about the consequences of a pressure induced burst and how players will certainly try to bypass it. |
This will need some discussion as engineering is known for having a lot of volumes in pipes. Allowing pipes to rupture also adds a new way to grief - purposefully popping pipes to grief. |
I've read it. I know what you wrote but that doesn't really handwave what I have to say.
Considering some stations can be huge. How are these pipes found? What would be the main deciding factor to finding the pipe? Is it the air alarm? Gas Analyzer? There could be leftover atmos in the pipes.
If this PR was a psuedo-fix for people stacking pipes & devices, it becomes irrelevant & an annoyance for people who want to mix gases. If pipe layering is in, it's one of many ways to get around the pressure limit. |
t-rays exist |
I'd like to at least see an example of what this would look like if they're not going to be layered above the tiles. The sprite itself turns into a smaller, one direction, damaged pipe. It also doesn't show what was damaged. You wouldn't recognize that a T or corner pipe would go there unless you knew what it looked like beforehand. |
ok that definitely needs unique broken sprites for each kind of pipe yeah |
In addition to my previous comment - What happens when a room is super heated due to a fire? Or what happens if fires are made to burn hotter in the future? Assuming the scrubbers are there, how would atmos deal with removing super heated gas? Wouldn't the pipes break due to the gas pressure being overwhelming? Wouldn't it cause a chain reaction of damage through the pipenet or does this exclusively stop at one pipe? How would they safely attach a freezer to the pipes to cool the gas down? How would they try to cool the raging fire down to be safe enough to go into the pipes? This would be exceptionally difficult without fireproof machinery. And how would this prevent spacing the room from being the better solution? |
mappers could put fuse pipes under firelock doors to contain any kind of damage from fires |
fuse pipe? |
see:
|
Fuse pipes/weak pipes sounds like a bandaid. Adding valves/pumps/etc would be a better idea overall and is a bit more engaging then having a failsafe pipe. |
random shitters just turning off valves everywhere is bad and requires no effort |
I mean this still removes the ability to get rid of hot rooms without just spacing them, makes scrubbers even more useless when siphoning or trying to get temperature back to normal |
makes plasma floods more deadly, and makes the air lost impossible to get back because it's too hot and pressurized |
its already very slow to use a freezer, the way to remove hot air was always to space it |
Having weak pipes is also a low effort meme. Maybe also a way to direct it so it can detonate under a certain condition or a blow off valve?
Spacing has been a meme for awhile now. I don't see how exploding pipes would help it. |
it certainly doesn't feel intended, especially with how emergency siphon exists for scrubbers. And when gas miners are removed, this is just going to be annoying for preserving that hot gas. |
Admin issue, then. |
with unwrenching you can be caught in the act by players an admins since it takes a few seconds and is very audible, with just turning valves off you have to be really looking for it or camping logs for non atmos toggling valves which is bad too |
ID locked valves like air alarms? |
That's a bit too hugboxy but an idea is potentially putting these valves in the already id-locked maint closets. |
an exploding pipe should fling any floor tiles around it away due to the escaping pressure |
An update for this since discussion hasn't been active for a bit. Potential issues with this:
Solutions:
Personally I do not see pipe bursting from temperature/pressure being good for the game, but the solutions would at least make it more manageable. |
yeah, i think we should implement the power monitor but for pipes before doing this |
Mostly it would be due to either the pipe being damaged somehow (someone broke/unwrenched a pipe, or a bomb dislodged it, etc) OR because fire got too hot & the waste (scrubbers) pull in too much hot/pressurized gas (CO2, plasma, oxygen, etc), which causes a pipe (or more) to burst. EDIT: The first case (broke/unwrench) does become a bit more overbearing like suit sensors. If there's an engineer or an AI that's overly zealous & looking at the pipenet consistently for changes they could spot it in an instant. Which would prove to be an issue for antags trying to set something up stealthily. |
You could have pipes on the monitor flash different colors for being over temp / over pressure / or burst pretty easily. The biggest issue is that with stacking it could get very confusing to follow the pipes. Pipe stacking should either be removed or converted to the tri-layer pipe layout system first, probably |
Isn't that the counter play for the crew though? You need to spot the damage early if you want the crew to be able to intervene before the problem gets out of hand |
As we discussed and agreed, the game isn't quite ready for this, although we agree that it would be okay after implementing the pipe monitor. Let's close this for now and re-open with the same code when we are ready. |
stack removing & introducing 3 layered piping and the RPD would be ideal before implementing for sure.
Kinda? It introduces counterplay but it also introduces a hard counter, which isn't as desirable. |
Pipes need more obvious signs of incoming damage like shuddering in place |
About the PR
This adds pipe pressure damage, which damages pipes when the internal pressure exceeds some threshold. In other words, pipes now explode from pressure.
Why / Balance
It doesn't make sense that pipes can hold an infinite amount of pressure without bursting, especially because canisters can explode. Most people agree that pipes should have an upper limit, so the rest of this is dedicated to discussing what that limit should actually be.
The pressure chosen in this PR is intended to demonstrate this code (see screenshots below), and not as the final number. For the final number, we turn to the community for feedback. Please contribute to the discussion by commenting below.
The number chosen in this PR is 1.5 ×
Atmospherics.MaxOutputPressure
. This means that pressure pumps can never cause a pipe to burst, but misusing a volume pump will. This adds risk to using the volume pump. I didn't think to hard about this number since we're leaving this number to be determined by the community.Technical details
Adds a pressure check to all pipe nodes in a
PipeNet
after eachPipeNet
Update()
. Deal damage that scales exponentially with pressure.Media
out-2023-10-11_15.20.01.mp4
Changelog
🆑 notafet