Jump to content

Brief Alpha Review, and Dev Suggestions

Recommended Posts

First off, I just wanna say that this is a pretty strong foundation for this game. The devs oughta be proud; despite some quirks, this game is incredibly playable and addictive even at this early stage. Hope you guys enjoy working on this project.

I've clocked a fair few hours and about 3 runs in the game so far; the latter two reaching 50+ cycles, which I think is decent, so I feel as if I've played enough to firmly experience the gameplay loop on offer here. Expand, build, plan, then loop around again using new tech unlocked. Learning the ins and outs of mechanics for the game is a bit troublesome at the moment, as a poor planning decision can leave your entire base in a sorry state - possibly even unsalvagable. I didn't know about the mop until my third run so I had stressed Dupes vomiting everywhere, although that might be preferable to destructive Dupes gunning it for the only power generator to the air supply. Air is the most precious resource, of which you have fiendishly little to go around (unless you do some exploits, but I digress.), so having that can certainly be a little panic.

My post is a bit long so I won't blame you for TLDR-ing, however for any devs who glance at this, thanks for reading.


Now then, I'd say there's 3 big issues I had with the core game right now. Obviously these will get fixed sometime, but just so the devs can be aware I'll list the most prominent concerns I had:

  • Lack of Conservation: If you're play fair, you run out of air. It's really as simple as that. I'm not sure where exactly the oxygen gets used up, but I'd wager it's the Dupes breathing it. I understand that a dwindling resource you constantly worry about replenishing can make for a tense experience - that was the draw of Don't Starve, after all - but it honestly feels a little out-of-place here. DS had the benefit of being able to wander and scour new spawns for resources. ONI is effectively stuck in a fixed location, and what resource spawns you can find are toxic or otherwise worth more than they should be. (Of course, toxic doesn't seem to do anything right now but I operated as if it did because diseases will get patched in at some point).

    Because of this fixed nature, I really think the devs should focus on making things conserved. I loved managing my resources carefully, trying to create a self-perpetuating biosphere, but even a skeleton crew will still suck through oxygen like nobody's business. This becomes a huge issue later on when you have larger bases, since the air will continue to spread thinner and thinner as you expand. Low air also increases stress, making a deadly cycle where your Dupes can't set up new supply lines for air because they're freaking out about how there's no air. Even pumping raw toxic air onto cleaners will only solve the issue for a cycle or so. Water and Air need to stop disappearing, or at least not at such a high rate. It's a feature that will only make exploits more appealing - the "if the game's cheating, why shouldn't I?" kind of thinking.

    I managed to solve the stress issue by literally creating a suffocation room, killing one Dupe, and then cycling in a new one. This is a ****ty thing that should not be viable. I realize human metabolism is complex, but there should be more heed placed on balancing the O2 + Food intake to CO2 + Work output. This should be a priority.
  • Algae & Farms: Right now, Algae serves the purpose as the early-game oxygen source but it is incredibly inefficient at doing so. There's very little point to setting up CO2 farms given how much water they eventually consume (violating conservation), so grinding them for air is probably the better option, and then just gunning for electrolyzers. I'd suggest Algae be retooled to be an introduction for the player to Oxygen and Food production.

    Make Algae Colonies like regular farms, but require no research. They are your dirt farms; set up a box, seed it with an initial colony, add water, the watch it pump out O2 and grow more Algae. It could easily be represented in growth phases, with a harvest-able clump at the final stage. Heck, it might make more sense to make Algae the source of the nutrient clumps rather than dirt. CO2, in the meantime, should be used up by actual plants when under sunlight - producing better food at the cost of less O2 production and more requirements (light, water?). Don't know if Klei plans to change the Algae at some point, but I really feel they should - they're kind of just bad CO2 scrubbers in the current state.

    Farms and food also need a rework, since you can sustain yourself indefinitely right now by setting up a bunch of mealwood plants and eating them raw - assuming the pressure and temp stay constant. Cooking shouldn't just be a water-sink; it should concentrate nutrition and time, and possibly give other benefits such as better mood or bonuses. Rimworld is probably a good game to look at regarding food production in survival management sims. But, obviously, this is just comments for the future; alpha features are alpha.
  • Air, Liquid, and Temperature: I had a bigger section here but I eventually decided that the current implementation actually works fine, if with a few quirks. Simulation speed for fluid flow could afford to be much faster, or perhaps some tweaks to how fluid actually redistributes (on a long enough stretch, water seems to blob annoyingly. Gas seems to work fine), but primarily the issue I always ran into was just not having enough gas for my pumps to work with. A four-tile pump is... annoying, especially in a game where expansion is at a premium, so perhaps some miniaturization options for research in the future? Small, single-block intake and outflow points, with a Vacuum Pump placed along the length to 'pull' things into the pipe (functionally similar to how the cooler works for gas vents) using negative pressure would probably work well enough, and also serve for 'circulation' systems a lot better. Having such things would make segmentation of rooms far more functional.

    Side note; I don't think Membrane tiles work very well right now (I ditched them and just made 1-block hoppable spaces for CO2 to drop into), and Temperature seems quite bugged (plants overheating despite getting direct cooling one-tile over), so those need some more work. Again, my main issue is the entropic removal of gas via some kind of resource sink.

    I realize this is probably coming in the future, but we definitely need water and gas tanks similar to the resource compression boxes. Perhaps we could also designate 'Dump' zones for resources, fluids, and gases, instead of building a piping network for each piece of water and gas. Lastly, bit of a bugbear, but I wish that pumps could either suck in more than one thing or that Electrolyzers could come with outflow gas terminals. Seems needlessly obtuse to release Hydrogen and Oxygen, only to need to need two pumps to re-use them.

Whether or not these features will work is for Klei to figure out. I hope they work to improves their model and their game! Look forward to seeing it.

Link to comment
Share on other sites

Did some experimentation using Dev tools on the airflow system.

It's pretty clear to me that the method the devs use is a simple cardinal direction flow check (up,down,left,right) - at a rate which seems to be dependent on the gas itself. CO2 moves at a 10% rate, whilst Oxygen moves at 12%. Good to know, at least, that Oxygen flows 'faster' than CO2 (they flow at the same 1 tile rate, oxygen just carries more).

To elaborate; say you have 1kg of gas next to vacuum tiles; if its Oxy it'll send 120g and if it's CO2 it'll send 100g. Now the game seems to calculate things down to at least 1 microgram (mcg) or 0.00,000,001 kg. I can understand how this might be more manageable but unfortunately that means your gas movement results in calculation errors. I put 9kg of Oxygen in a vacuum 9x9 square and ended up with two squares holding 1.0009kg. Similar with a 3x1 of CO2 with 1kg resulting in 333.3g in each.These sound like tiny errors but sadly when gases are zipping around everywhere, it can really add up to some gases spontaneously generating more of or destroying themselves.

It also seems to disregard movement below a certain difference, probably of 0.001+- or so. Enough that the differential doesn't matter, and that's fine. I never encountered any large gradient of tiny differences (micrograms are so insignificant I doubt many would ever witness a microgram atmosphere situation). The spontaneous destruction/generation can add up to a big problem over a long period of time though, so you guys might want to consider some kind of rounding in your calcs so you always end up with the same numbers. so if 10 mcg splits into 3 tiles, it gives 3, 3, 4 to each, instead of 3.3, 3.3, 3.3 - resulting in a 1% loss. Not sure how to do that in code but there's probably a way somehow.


Another issue you can have is the problem of distance: the more tiles that gas CAN flow into, the less efficiently it WILL flow. Because it's independent of any momentum, gas freely can flow backwards and forwards and will only go forward at a fixed rate dependent on the differential between the two tiles. While this DOES eventually level off gases (and fixed rate actually avoids the backflow problem since it never creates a situation where it can flow backwards), it's exponential in the time it takes to do it. Filling a 20x20 space from a single tile takes ages, 

So what if, say, two identical gases attempt to flow into the same vacuumed tile? I tested this, and found that it seems to work on an over-ride; One tile will flow, the other will not. I'm guessing this is a simple switch of 'if tile has been flowed into this turn, prevent any more influx'.


This one seems important.

So what about if gases are flowing into a tile containing the same gas? CO2 is the easiest to test, having a multiple 10 flow limit. Vacuum seems to be accepting from only one tile, but if say 1kg of CO2 is surrounded by two 10kg CO2 tiles, both will flow into that tile. Rather than at a 10% rate though, it figures out the difference. So (10kg - 1kg) / 10 = 900 g being moved. However, this seems to be where the system goes a little nuts.

When I tested a 9kg CO2 tile with 10kg CO2 tiles surrounding it, the centre tile did rise to 9.4kg as expected (10-9/10=100gx4tiles=400g added), but the 10g tiles ROSE to 10.8kg each. This eventually 'evened' out to the surrounding tiles having 10.8kg each and the centre having 10.7kg. We started with 49kg of CO2, and ended up with 53.9kg at the end!

This kind of blew my mind when it happened. It's completely repeatable too. When I tried 5kg surrounded by four 10kgs. The 5 rose to 8 on the first turn - indicating each transported 1kg instead of the expected 500g each (10-5/10=500). The 10kgs also fell down to 9.2s - a loss of 800g each. When it evened out, we had four 9kgs, and one 9.9kg - aka, going from 45kg total, to 45.9kg.

Another repeat: four 100kgs, one 1kg. Ended up with 400.9kg at the end, losing 100g of CO2. There seems to be a sweet spot somewhere between generation and loss, but hell if I can figure it out.

This error is doubly compounded when mixing with any other gases. Different gases seem to trade places when they attempt to flow past one another; resulting in two 10kg tiles of CO2 in a sideways T shape and one 10kg of Oxy on the bottom producing two 10kg CO2 tiles in the centre, then 9.8kg Oxy on the bottom and 1200.9g of Oxy on the top. Yes, we now have over 11kg of oxygen. Admittedly the centre tile here was vacuum so I repeated with a 1kg oxy tile in the centre junction.

Again; two 10g CO2, one on top and one on side, then two Oxys, 10kg on bottom and 1kg in the middle. Immediately, the 1kg of O2 was moved down, creating a 11kg tile of O2. So far, so good. As for the rest; the 10g CO2 on the side remained stable, while the top one flowed down; creating a 9.7kg tile on top and a 1250g tile in the center. Final tally: 11kg O2, 20.95kg CO2. Creation of 950g of CO2.

Sorry to say, but whatever calculation the developers are using for their gas flow, it's pretty clear it isn't conserving the numbers properly.

Note: I actually have a good inkling that tiles update from left to right, bottom to top, at least in gas flow, so you can count on gases from the left and bottom flowing first. My first thought is probably this is a way to ensure oxygen has first dibs, but might just be a quirk.


Flow rate also seems to completely independent of pressure. Sadly, since we don't know the Volume of a tile or the Pressure, I don't think I can reverse engineer the calculations based solely on the 'mass' of the gas and it's temperature. Not that it would help; total mass doesn't seem to affect pressure/temperature. A tile with 100g oxy and one with 100,000kg oxy still both sit at 19.2 C comfortably, depending on the surrounding tiles. Ideal gas law be damned.

Temperature seems to MAINLY be affected by adjacent tiles, which bleed heat into adjacent ones. Pressure doesn't really affect it. If your plants are overheating, it's very likely due to the environment itself. Gas cooling still seems to work, but it's subject to the craziness of the piping, so good luck there. Walling it in with dirt ironically solves the problem better (dev tools though). Gases also seem to have a resting temperature; 19.2 C for Oxygen/Contaminated, 25.5 C for CO2, 20.5 C for Hydrogen, 23.8 C for Chlorine. These were done surrounded by dirt/clay, which has about 16.9 C resting temp. So Oxygen is the absolute best gas to put your plants in. Also the slime regions have a higher tile temperature because of the igneous rock and such, so it's also best to set your farms in the dead center of the map, where all the cold dirt is. If tiles can suffer the temperature bleed, you might be able to build farms in those zones.

As for pressure affecting plants; Mealworm and Bristle Blossom both require at least 150g of air to remain unstifled. Ironically there is no upper limit for atmospheric pressure in plants; they survive just as well in 1kg oxy as in 1000000kg oxy. Funny dat.

Link to comment
Share on other sites

Excellent analysis.  I've seen the same issues, but I haven't done the quantitative analysis you have.  Presumably adjusting those 10%-12% flow rates you mentioned would improve the speed at which the pressure equalizes.  (But even if that fixes the flow rate, they still need to fix the "1 kg of chlorine has the same pressure as 1 kg of hydrogen" problem.)

In the update preview, the developers did mention some improvements to flow algorithms that might fix the gas flow conservation of mass issue you addressed in your second post, but they didn't say anything about the intentional lack of conservation you address in your first.  Until that intentional lack of conservation gets fixed, I've pretty much lost interest in playing the game.

Link to comment
Share on other sites

Well for starters you'd have to add pressure. There is no pressure in this game. None that I can find.

Anything you would call 'pressure' is just density of mass; there's no effect of temperature or volume on it. So far as I can tell only two things actually concern 'pressure' in the game; Plants and Pipe Exits - both of which only concern the density of gas at the exit. Ironically plants cannot be over-pressurized and vents cannot be under-pressurized. Just a fun tidbit.

The problem with the 10% rate is that, while yes, it does scale the rate effectively (larger gas pockets will shift more gas), it doesn't actually affect the speed. All gas tiles flow at the same speed; 1 tile per update. If you want to visualize it; picture a tiny rat and a large elephant running at the same speed and getting 1/10th smaller each step. That's basically what happens to gas in the game - probably fluid as well. To have gas resemble reality - depressurization, for example - it needs to be faster than that. That's the limit of cellular automaton.

This unfortunately does explain why pumps are so terrible: if you remove all the gas from the 4-tile space that the pump occupies (I'm assuming, I haven't tested it), then every tile around it has to transport at a 12% rate per update into those squares. If you can imagine a sinkhole centered around the pump, moving about as slowly as a sinkhole does, that's how pumps work right now. It's why they keep jittering on and off. Ironically you could probably fix this by making them slower than the tile updates so the gas has tile to refill the tiles before it sucks up again. Slower but more consistent.

Good to hear they might fix the flow function though. That really seems like a bizzare oversight.

For conservation, in the alpha so far, it's not too difficult to actually end up self-sufficient - if you ignore like 50% of the content. Algae is too slow, cooking is a giant waste of water (meal lice cost nothing to grow), temp tech is pointless, and there's no health issues. I can understand them maybe wanting to make it harder, but given the structure of this game - outward exploration like in Don't Starve just makes your base more fragile (more open tiles to fill with gas) - so it should really try and instead focus on trying to establish a proper base. I believe this means keeping things conserved, but I can see why a drip loss of resources is desirable from a difficulty standpoint.

Link to comment
Share on other sites

Um, thank you @tehMugwump.

Anyway, I remember doing some work on automata in the Bay12 forums and it's a bit more of a complex issue than people realize - particularly with 3-dimensional models. Since ONI is just 2D with gravity, it's not as complex but does have one major hurdle:


So this is a classic problem for cellular automata; the U-bend. In the real world, the pressure of the fluid pushing down on the large container would force fluid up into the small container according to gravity, until the hydrostatic pressure is equalized. Now I certainly don't fault the devs for falling prey to this: it's a bastard of a problem. Solving it requires going beyond simple automata - it requires each tile to speak to the others and exchange information about what is around them. In basic terms: the fluid tiles at the top need to be able to tell tiles below them that they should be under pressure. If they have enough pressure to neutralize the force of gravity, they can flow upwards.

I tacked this issue with a fairly dense formula that relied on tiles knowing how deep they were in relation to open air (Depth) and how much pressure, in energy, was being forced down on them (9.8 for earth gravity): http://i.imgur.com/8gjOlwY.png
I realize that's a large image but each vertical line is a single pass of the function, trans-locating the hydrostatic pressure, until it reaches a new open space and flows. I worked hard on that, and as far as I know it works to simulate a Cartesian well. Might help, might confuse, I don't really mind at all.

I never developed a good model for gas, but my theory for how to approach it would be that when a gas tile flows, it can transmit some force along with the mass it gives; hopefully creating a 'wave' of momentum that drives the gas forward with increasing content and velocity until it hits a wall or a higher pressure area. By leaving a lower pressure differential in places that lose more mass than they gain, it creates a 'suction' priority that pulls gas towards it. This way, gas movement is more dependent on pressure differentials than mass differentials - which avoids the annoying issue of trying to give 10% of 10% of 10% down a small trail.


Because I'm having fun with this, lets try and figure out exactly what pressures our Dupes are dealing with.

I'm going to be nice and say that we have 1kg of Oxygen per tile, at approximately 26 C. Using this, we can actually calculate the amount of pressure our guys are feeling in their area. Gas calcs can be complex but handy dandy calculators make it easier:


So, for our units we have:

  • 1 kg of Oxygen should be 62.5023 moles of Oxygen
  • at 26 C (lets say)

Since dupes are called 2 tiles tall and humans are roughly 1.5 or so meters, lets assume we have 1m3 for each tile

  • Volume is 1 m3.

That gives us: 155451.648186807 Pascals, or 155.451 kPa. For reference, standard atmospheric pressure is equal to 101.325 kPa; so in 1kg of oxygen our dupes are getting approximately 150% normal earth atmospheric pressure. Poor little guys.

For course, if we say our tiles are double at 2 m3, we're only getting 77.725 kPa, or 76% normal earth atmospheric pressure. Ironically, to get nearly exactly earth pressure for 1kg of oxygen, our tile volume would be around 1.534 m3. If I set this down to 19.2 C (what Oxygen is usually at) we get almost exactly 1.5 m3... so I think that about settles what size our tiles are.

The devs did think about this, whaddya know~

Link to comment
Share on other sites

6 hours ago, tehMugwump said:

@SpaceKing, wouldn't water refuse to flow because of vacuum vs pressure: [image]

@tehMugwump ...Well, no, those containers are both in vacuum. There's no pressure to push against in the other chamber. You are right though; cartesian wells rely neutralizing both gravity and air pressure forcing them down - so if that second chamber were filled with high pressure gas, it will push against the hydrostatic pressure.

Fun fact though: Water exposed to a true vacuum actually tends to boil, then freeze due to the energy and pressure changes:

So technically, if the devs wanted to be accurate, if any water is inside an otherwise vacuum space, it'd probably turn into ice. I'm not sure if that'd happen if heat was bleeding into it from the environment though. It'd probably stay as ice until it could get enough heat to melt it at its pressure level.

Link to comment
Share on other sites

I was thinking, though, that the left side would become MORE of a vacuum as the water moved down and the right side would become pressurized - thus resisting movement on either end....

It's also interesting how water acts more like pudding in ONI, so it tends to get 'stuck' in one-block sized openings when you'd think it would pour on out...

Link to comment
Share on other sites

15 minutes ago, tehMugwump said:

It's also interesting how water acts more like pudding in ONI, so it tends to get 'stuck' in one-block sized openings when you'd think it would pour on out...

That's a direct result of the cellular automata model. It's a cheap way of doing simple fluid dynamics by having each tile run a check of the tiles around it and distribute fluid accordingly. The problem with it is that doesn't model any kind of pressure or momentum, which is what you need for stuff like waterfalls. The U-bend I illustrated up there is the classic failing of the system to recognize pressure, but your 'blobbing' issue is the failure to recognize momentum.

That's what my 'granted pressure' idea is an attempt to solve - it transmits Force along with Mass. The problem with my model is that it's omnidirectional, so it can flow backwards when it shouldn't. An ideal method is that when a tile flows, it not only transmits Mass but a Force Vector (ONI would only need a 2D Vector) as well, and the next flow factors that vector into deciding where it should flow and with how much mass. Ideally this should produce waves, like at the beach, or a rushing river. Momentum is actually easier to model than Hydrostatic pressure.

Like: 10kg of water flows, gives 1kg to the next tile, along with a 2DVector pointing away from the original tile with a velocity equal to the mass multiplied by its viscosity. So long as that velocity overcomes shear stress for the liquid, it should be able to flow at a rate multiplied by the remainder. You could also factor in some other stuff like air density affecting flow rate (high pressure pushes it back, low pressure sucks it in) or even adding force to items and creatures as it flows, carrying clumps of dirt or hapless Dupes along for the ride.

Link to comment
Share on other sites


This topic is now archived and is closed to further replies.

Please be aware that the content of this thread may be outdated and no longer applicable.

  • Create New...