Environmental Tolerance Adaptations

I was focusing a bit on summarizing, reviewing, and presenting a unified concept for environmental conditions when I realized something.

It honestly is a bit difficult to conceptualize things for the microbe stage because of the very abstract nature of the patch map. We have a pretty good concept for how we will be dealing with the patch map in the macroscopic stages so I am not worried long-term. But in the short-term, it can be a bit awkward balancing environmental tolerances. For example, look at this patch map:

There are some pretty dramatic shifts in environmental conditions displayed here. If you started at the hydrothermal vent at the bottom-right and transitioned out of it, you would have two, maybe 3 patches to interact with due to your adaptation to pressure. Transitioning to the Mesopelagic patch (below the ice shelves) would give you one habitable patch since you aren’t adapted to the cold, and aren’t adapted to the high pressures which you escaped. And then transitioning to the cold (which is the patch from which you are able to access different clusters of patches here btw) would then limit you to one patch again. If you make it to the shallow sea patch in the middle, you will then have a few more options to spread to since surface patches are more uniform. However, for other patches, you are very limited.

This limitation isn’t in itself necessarily a bad thing (geographical/environmental barriers are very important aspects of species divergence) but it complicates things in terms of balancing environmental tolerances. Small shifts in your habitable ranges via organelles, such as we have conceptualized in the upgrade/modification concept, are useless if we have such dramatic shifts in temperature and pressure; the player would need huge and instant changes in environmental tolerances to move anywhere. It also means patch migration would have to be thought over since you’d essentially be forsaking your older population to death once you switch patch types.

We can dramatically increase the number of patches to include a better “gradient” of environmental conditions, but that could make auto-evo take a very long while (which to be fair is something we’ll want to deal with in the long-term). We can also eventually implement Buckly’s more elaborate patch map concept:

But I would like to preserve the mental health of our programmers after having just so recently found a satisfying short-term conclusion to our patch generation questions.

What do you guys think? Am I overthinking things? I guess we could theoretically just bump up the modification values for what we have conceptualized so far. But would that be the ideal gameplay experience?

EDIT: not quite sure why two photos aren’t being displayed on my screen. Is this the same for you guys?

1 Like

I’m not sure if it has been mentioned yet, but environmental tolerance could be a slider like behaviors found within the editor. Also, I feel that a cell should have a lower health pool if it is in areas outside of its environment tolerances. While this isn’t totally accurate to science per say, it should be easier on the player to deal with and could even be a way for people to make games intentionally harder for themselves.

1 Like

Sorry for not replying to this sooner, I had forgotten about replying until now.

For both performance and simplicity reasons, the amount of regions and patches should remain fairly limited in number. A healthy quantity probably being about 1-3 per sizable continent, or ocean. On a small world, this would probably result in about 8-10 regions in total. Each region would probably contain about 4-5 patches. This would result in about 38 patches in total which is about the same amount as the current game, and can be fairly intensive to process for autoevo as is. With few exceptions, most patches within a region should also have a similar range of temperature.

This might not leave too much room for a particularly smooth gradient, so to deal with this problem it may be best to make environmental tolerance non-problematic for most species, and instead more of a factor of efficiency in all but the most extreme cases.

Being outside of your tolerant range should not out-right kill you (Unless the difference is very extreme), but instead increases the cost of osmoregulation. This means that as long as you aren’t very specially adapted to a specific environment you should be able to safely migrate to a new one. You may not be able to thrive as well as your previous home, but you can still survive to move on or further adapt to this new climate.

This means that as long as a species has sufficient excess ATP production, they should be able to survive in a non-ideal environment just fine, but may have trouble competing with the species already adapted to it.

I think that in theory, this method should work just fine as it encourages adaptation to an environment, but doesn’t prevent relocation when needed or desired.


I wonder, then, if we should rethink how we approach adapting to environmental ranges. For example - maybe instead of having a discrete continuous spectrum of temperatures ranging anywhere from 0 to 100, and having players match up their tolerance ranges to their preferred range of numbers, we should have more abstract “categories” of environmental spectrums. So for example, instead of having temperatures be 35-45 C for a very arid environment, we would just refer to that patch as “Very Hot” (we could have course add discrete temperatures as flair but the idea is balancing around categories rather than numbers). It sounds like a very subtle difference, but I think this line of thought could be easier for us to deal with.

For example, instead of temperatures ranging from something like -60 C to 40 C, we could just have broad categories on a spectrum:

Very Cold: Represent the coldest, frozen regions on a planet, like ice shelves and the poles
Cold: Represents colder regions like tundras and taigas
Average: Represents more temperate and common regions, like grasslands, forests, and certain coasts
Warm: Represents warmer regions like savannahs and tropical forests.
Very Warm: Represents the hottest regions on a planet, like deserts.

Then, instead of players (and ultimately us) worry about the gaps between patches, crunching all the numbers via very slight modifications, defining exactly what discrete temperature range you want, etc., they just have to make sure they are within their preferred ranges. This can also help us make a better modification system that is more cognizant of the wide gaps between patches.

For example, instead of having it so that the player must edge closer and closer to their preferred temperature number range and checking that preferred range every time a player makes a move, having these categories gives the player more options as long as they meet a basic threshold of matching their preferred habitats. Instead of the player having to reach, say, -5 C to enter the polar regions from their preferred range of 10-20 C, they just have to reach Cold/Very Cold and they’d be set.

A few other things I noticed: first, this can help us differentiate between marine and terrestrial temperatures, as there is much less extreme temperature fluctuations in water biomes (“Very Cold” water is different from “Very Cold” land, and that might have been an awkward thing to help the player understand purely via math). Second, discrete numbers might be generally be a bit unnecessary since overall, patches of the same kind have similar conditions, so the exact decimal value of temperature isn’t really essential as information to the player. And third, this lets us more easily deal with barriers and penalties for environmental conditions. For example, perhaps the player prefers very cold environments but makes it so they can do well in cold environments too. Perhaps the player wants to remain around average but have the option of entering warm environments. This I think is better to conceptualize and design around than “preferred range of 10-20 C, okay performance in 5 - 25 C, anything beyond that is blocked”.

Sorry if this isn’t exactly clear and a bit rambly, I didn’t explain the logic well because I’m a bit busy as of now (I can sound more articulate later if the discussion continues). But I hope others can see how a categorical approach to environmental tolerances could be much easier to deal with than a discrete approach.

1 Like

I think from a gameplay perspective this is about the right way to think about it. But for planet simulation I think we’ll have to have accurate numbers anyway for that to be possible so the game would still know the exact temperatures. But I agree that it’s probably much more productive to determine abstract gameplay value ranges in this kind of early discussion (before implementation is even close) and talk using those. Then when it is actually closer to being done mapping value ranges to the abstract categories can be done.


Let’s hash out a conversation using environmental tolerances categorically in accordance to the above logic. I say first order of business is agreeing upon some rough estimates for what environmental condition ranges should count for what categories by going through each one.

Then we might want to start a discussion regarding general principles for general principles regarding environmental conditions, which can help us answer questions like: how will the player have sufficient environmental tolerances as a single tile of cytoplasm? How will we be cognizant of the fact that different organism body plans require different coping mechanisms in face of the environment? How will we adequately balance patch movement if the player has to kill off their existing population to move into a different biome? That should then give us a pretty good understanding of how we can balance and integrate changing environmental tolerances within Thrive.

Some Environmental Factors to Consider


  • Should we outright lock players off from moving to environments way out of their tolerance range? For example, should we block players adapted to temperate environments from going to extremely cold environments? Or should we make the player learn to organically avoid these areas? The latter would be a strong reinforcer of making the player be responsible for themselves, but it might be frustrating to spawn into the environment and have absolutely no chance of survival, quickly dying.

Pressure: Pressure will obviously differ depending on the depth at which your organism is adapted to live in.

I’d say pressure should have the following categories: Low, Medium, and High. Low pressure includes the Epipelagic and Mesopelagic Zones, which includes frozen shelves, estuaries, and tidepools. Medium Pressure includes the Pelagic Zone and Hydrothermal Vents. And High pressure includes the Abbysopelagic Zone. Caves will vary depending on their depths.

Eyeballing these estimates, perhaps adequate rough estimates of pressure ranges can be…

  • Light: 0-800 meters
  • Medium: 800-3000 meters
  • High: 3000+ meters

NOTE: we might introduce a “Very Low” pressure category if we implement high-elevation environments in the macroscopic stage, though this is very far away.

Temperature: Temperature can vary dramatically in an ocean across various depths. Seafloors can approach or even exceed freezing temperatures (a higher concentration of salt prevents deep seawater from freezing). Temperatures don’t vary too much in an ocean at the same depth as they might on land, though temperatures plummet as you approach the poles and increase as you approach the equator.

I’d say categories should include Very Cold, Cold, Temperate, Warm, Very Warm. Very Cold includes frozen regions, and perhaps some abyssopelagic zones. Cold includes the pelagic zones. Temperate can include epipelagic and mesopelagic patches. Warm includes shallow seas and estuaries. Very warm includes tidepools and hydrothermal vents.

With that in mind, these can be rough estimates…

  • Very Cold: Less or equal to 0 C.
  • Cold: Warmer than 0 C, colder than 13 C
  • Temperate: Warmer than 13 C, colder than 23 C
  • Warm: Warmer than 23 C, Colder than 33 C
  • Very Warm: Warmer than 33 C

Salinity: Salinity can vary across different regions of seawater. Though this variability is not enough to make certain regions of saltwater inaccessible to most aquatic animals, it can induce subtle osmoregulatory stressors on life. Surface waters are typically more salty than deeper waters due to evaporation - the same is true of cold, polar water and warm, equatorial/tropical waters.

We want to represent the switch between freshwater and saltwater. That can be pretty simple in the Microbe Stage, where we can just introduce a specific part or something which signifies a switch to freshwater.

Regarding this variability in saltwater bodies, I think it’s fine if salinity isn’t a huge constraining environmental factor for the Microbe Stage beyond the freshwater/saltwater divide. Salinity could just be represented by a value with some slight variation across different patches. A higher salinity can make osmoregulation more costly. However, this can be compensated by an increase in phosphate/ammonia within the patch, justified by the fact that a greater concentration of salt likely is paired by a greater concentration of other important nutrients. So it can be a choice for the player to make - is taking on more osmoregulatory costs worth the easier access to nutrients?

Oxygen: The evolution of oxygenic tolerance will be a very important phenomena to represent in our simulation; planets will begin anoxygenic, but photosynthesis will introduce oxygen, aerobic respiration, and thus, the need for oxygen tolerance.

I think oxygen is fine to represent numerically without diving into categories since I think it can be easier to keep track of. I also think that this oxygenation discussion should be its own thing since it will be so numerical and rather difficult to conceptualize without actually doing.

This is a list of currently described environmental conditions attached to different biomes. Note that a list of this can also be found in the Developer Wiki (Microbe Stage Appendices - Thrive Developer Wiki), but this list is more relevant to our current discussion. Also note that salinity isn’t described in every biome due to the fact that it will have some variance according to the above concept - I only mention salinity when I am noting which patches will likely have higher salinity on average.

  • Hydrothermal Vents: Very Warm. Medium to High Pressure. Average Salinity
  • Abyssopelagic (Ocean Floor): Cold. High Pressure. More Salty.
  • Bathypelagic (Mid-Ocean): Cold. Usually Medium, Sometimes High Pressure.
  • Mesopelagic (Sub-Surface): Temperate, Sometimes Cold. Light Pressure.
  • Epipelagic (Surface): Sometimes Warm, Sometimes Temperate. Light Pressure.
  • Coastal: Usually Warm, Sometimes Temperate. Light Pressure. More Salty.
  • Caves: Dependent on conditions of parent patch.
  • Shelves: Very Cold. Light Pressure. Less Salty
  • Estuary/River: Warm. Light Pressure. Freshwater or Minimal Salt.
  • Tidepool: Very Warm. Light Pressure. More Salty.

A question to consider: I previously thought that simulating sunlight tolerance would be a bit unnecessary since I felt that it would overlap a lot with pressure tolerance. But do you guys think we should include it? Looking at the list, I can see an argument for it.

Also, should we simulate acidity? It would probably be similar to how we deal with salinity if implemented.

General Principles

As Mass Increases, Environmental Tolerance Range Decreases

Many of the most extremophilic organisms are small and simple, such as Archaea and other prokaryotes. For example, the vast majority eukaryotes inhabit relatively “average” environments and are anaerobic. The latter fact is largely to do with the fact that oxygenic metabolism is the most powerful form of energy production available to life. As to the former, @Bird notes that for more complex organisms, it can become a lot harder to specialize around extreme temperatures with so many moving parts. For example, eukaryotes have various incredibly complex enzymes and proteins necessary for functioning which have very specific preferences in terms of environmental conditions. Imagine this compounding for multicellular organisms, who must ensure that every part of the colony survives.

In terms of gameplay, this can mean that as your organism increases in size, you will have less of an inherent tolerance to certain environmental factors, hence necessitating the placement of more dedicated parts. This can effectively mean that eukaryotes will have to spend more energy adapting to an extreme than a prokaryote might, and the same for larger eukaryotes/multicellular organisms and smaller eukaryotes. This can also slide into how we deal with the fact that LUCA will have to have extreme environmental tolerances despite lacking any specialized adaptations.

Surface Area and Volume

More on this here: Surface Area, Volume, and Ratios - #8 by Buckly

While surface area and volume are still being brainstormed about, they have strong effects on environmental tolerances. A higher surface area to volume ratio means less resilience in the face of environmental extremes. Think of a deciduous leaf vs a coniferous leaf - it’s skinnier, meaning less captured light but less of a chance for a flimsy structure to freeze over.


What will this mean for Thrive?

We generally want smaller and more compact organisms to be a bit more resilient to environmental extremes. Organisms with less surface area in comparison to volume and organisms with less mass will do better in extreme environments, such as the depths, vents, and shelves than with higher surface area to volume ratios and larger organisms. In the Microbe Stage, this will effectively mean that prokaryotes will be more capable in adapting to the environment than eukaryotes. In the macroscopic stages, this will mean that players will have to adjust their morphology to live in their preferred habitats.

I think this can be simulated by just decreasing the “steepness” of the ATP debuff outside of a preferred environmental range for smaller, more compact organisms. For example, a tiny prokaryote slightly out of its preferred habitat will receive a +2 osmoregulation cost increase, while a large eukaryote would comparatively receive a +10 osmoregulation cost increase. This could part of how we address the Thrivian “LUCA having no adaptations yet being perfectly adapted to extreme environments” paradox.

This will probably mean that most players will drift towards the surface patches as they increase in complexity, which is completely okay. Complex macroscopic life probably started in shallow, oxygen-rich waters: Shallow Waters Allowed Early Fish-Like Creatures to Experiment With Evolution.

How Will We Deal With Patch Migration?

Here is an important question to answer: how will we address patch mobility when we begin simulating environmental tolerances? Right now, you move with a small population into a new patch, from which you can grow a new local population. If you die out in a local patch, you get to choose any of the patches your species currently inhabits.

How will this logic work with environmental tolerances? Wouldn’t the player basically be hurting their original population if they decide to change tolerances and biomes? I guess this would be balanced enough if you move between two similar patches, but what about transitioning from one extreme to another? For example, transitioning from a vent to an abyssal patch, or transitioning from a surface to a polar patch? Perhaps successfully reproducing in a new patch can give you the option of migrating the majority of your species in a former patch to the new one?

If we agree on things related to the above ideas discussed, then I think we will have a very solid understanding of how to simulate environmental tolerances for the rest of the “biology” part of Thrive. Then, we can focus specifically on exactly how players can adapt to these conditions. I think the question for that is considering whether or not we want to have environmental factors be completely dealt with via placing down parts, or have sliders in the membrane tab as well.

Once that is decided, I think we’ll finally have a cohesive plan for replicating a phenomenon as complex as simulating the ways in which life adapts to its environment.

Also, if it is possible to adapt to no longer being suitable for none of the environments the player is already in (by for example trying to adapt to a new environment which the player also isn’t fully yet adapted for), that one choice would result in game over.

I assume that is a typo and should be “temperate”

At least for the memes it would probably be quite popular with players if we include the phrase “the sun is a deadly lazer” somewhere.

Shouldn’t there be an extremophile temperature? I remember reading somewhere about some very special microbes that can live in boiling temperatures, and that made them very special.


I think we’re heading towards a patch migration logic revamp anyways with the introduction of environmental factors since that will be such a fundamental change to the constraints placed on players. Players will have to be a bit more deliberate and thoughtful with how they manage movement and population densities across their inhabited patches since they will be occupy far fewer patches than they do now.

So I think we’ll have to be a bit more deliberate in giving players the tools to deal with this management of population. Options like “move 50% of patch population to new patch” and the such will likely be ways players can better deal with moving to new environmental conditions.

If nothing else, I think it could be okay if we give a 1-turn “grace period” of sorts if the player has adjusted their environmental tolerance ranges and moves a patch, where the auto-evo effects of environmental conditions are slightly diminished in effecting the population of the patch you migrated from. This can allow a player to settle a new patch then decide in the next turn if they want to continue the move to that new patch/biome or revert changes and remain in their old environment.

Though that could theoretically lead to a player continuously moving between two different patches to exploit this grace period, if we make it so that environmental tolerance ranges are decently expensive to maintain, that could be minimized. Or if we do something like a cool-down for this grace period. This would be a pretty gamey abstraction, so if we can figure out a more “organic” solution then that should take priority.

Alright, I’m convinced for now.

That was what I was attempting with the “Very Warm” category, though I realize now that a threshold of 33+ isn’t really an extreme temperature at all. I guess then we should introduce an “Extremely Warm” category that includes temperatures of 50 C+. This would realistically only be allowed for prokaryotes and small enough eukaryotes, and thus would be a Microbe-specific environment.


I continue to stand by a simple increase in osmoregulation cost or something similar that scales increasingly larger the further you are from your ideal conditions.
This allows species to reach outside of their comfort zone and adapt to new environments as needed, providing the freedom of movement a species needs if they are for whatever reason pushed outside of their ideal habitat. Of course, extremes could still probably instantly kill a species, so we would need to issue a warning over patches the player cannot inhabit in any feasible way. (Hey going into this region will kill you, proceed?) This could be done by calculating if a player still produces enough ATP to sustain themselves in that patch, exactly how the balance bar operates.

Naturally, when a species moves from their original habitat to a new one and adapts to their new environment, this almost always leads to a speciation event in time. This would mean that if the player ended up doing this they would be leaving their original population behind… Which is problematic in Thrive due to how population is currently your survival score.

We could work around this by migrating the player’s population in other patches towards more hospitable regions when they can no longer survive them. The player’s total pop would still take a hit probably, but it wouldn’t make them start over!

Edit: I see you’ve already touched upon this conclusion in a reply to hh now, nice.


Oh yeah, I agree with this. I was just wondering if we should restrict players from environments where they would instantly start dying from this mechanic and such.

I wonder if we could color code patches a bit. Patches with a red overlay on them indicate patches where your metabolism doesn’t allow you to survive in them, and patches with an orange overlay on them indicate patches where your metabolism is effected, but you still could feasibly survive?

1 Like

I think something like a glowing border would be pretty nifty to help players quickly find habitable zones.

Hard to say if we would want to restrict players from uninhabitable zones though… You never know if we might add a mechanic where players can seek refuge or utilize the environment in some way to survive (if just barely) enough to at the very least pass through a patch in their way.
That might be pushing it though…

It’s also worth noting that we already allow players to exit the editor despite having a build 100% likely to die…

I think that’s starting to be a bit too many borders, as we already have the actively selected, player is currently here, and “you can move to this patch from the selected patch” borders. Something like an icon saying the player can’t survive in a patch or a colour filter on the patch icon, would be better to avoid adding one more border colour which players will ignore (I’ve noticed the “you can move to this patch from the selected one” is very easily ignored).


We’ve gotten a decent amount of progress in this topic, with discussion of a patch movement logic revamp in another thread (Player migration - #7 by Deus from this post downwards), I think we should start actually discussing how players will be able to adapt to different conditions. We’ll go environmental factor by environmental factor to make sure not too much information is being thrown out at a given time, starting with a general idea of how tolerances should act and a discussion of how organisms can adapt to Pressure.

How Will Organisms Adapt to Different Conditions?

There will largely be two ways…

  1. Specialized Parts/Upgrades. Most things will probably be upgrades, but some unique parts will exist to make it easier for players to adapt.
  2. Morphology. Different membranes can have different tolerance effects. More rigid membranes will be better at tolerating crushing atmospheric pressure, for example.

It is important to note that shifting your organism’s tolerances should be easy and straightforward. Environmental tolerance ranges serve as a constraint on the player, so we don’t want this constraint to be incredibly difficult to deal with.

Tolerance to extreme environments will reduce as organisms get more complex. This might occur either through the nucleus shifting ranges due to the introduction of more complex and selective enzymes or will occur naturally with increasing size.


Membrane Type & Rigidity - More rigid membranes will universally allow greater tolerances to higher pressure environments. They won’t dramatically decrease tolerance to normal pressure environments, though the effect won’t be enough to make an organism tolerate the deepest layers of the ocean in larger organisms. Max rigidity in most organisms will allow tolerance to surface level patches and medium-level pressure zones.
Sulfur-Metabolism Adaptation/Slider - A common metabolism in deep-sea bacteria, changes in amino acid and protein structures can make enzymes more barotolerant. This will be a pretty significant boost to prokaryotic organism’s ability to survive high pressure environments, and in combination with rigidity should allow simple prokaryotes to survive in even the most demanding environments.
Contractile Vacoule - A eukaryotic unlocked variant of the vacuole which will allow a greater tolerance level for larger, more complex organisms.

1 Like

Shouldn’t this be the default situation (well at least when vents starting type is used)? Also I’m not looking forward to having to code different world initialization logic for it to be able to make viable species for each starting patch (thanks to panspermia being able to start with any patch). Also microbe freebuild starts the game off with the patches filled with life.


For playthroughs that start in hydrothermal vents, I would think that having the rigidity slider be at its default position should be enough tolerance for small prokaryotes. Hydrothermal vents, and especially alkaline vents which are predicted to be the origins of life as opposed to the black smokers, aren’t necessarily found in the deepest parts of the ocean all the time.

Unless we treat the original spawning patch as a one time exception and only begin applying environmental tolerances after the initial move or something, I don’t see many alternatives besides giving players tolerances at the start of the game.

That’s not really what I meant. I was raising the point that default microbes should be fully adapted to the starting patch of the player, which gets a bit complicated if the default microbe can’t survive in any patch (as the microbe would need to be automatically modified before the game starts).


Ah yes, you are correct. Apologies I misunderstood. There would indeed need to be some different logic depending on where a cell spawns in, which makes panspermia a bit of a design conundrum. Cells might have to spawn in with enzymes already or with certain physical traits.

I think it’s best to jot out the several adaptations players are able to take in response to environmental factors and then we can figure out what LUCA cells might look like depending on where they spawn. My hopes is that we can get away with placing down a simple enzyme or with having a certain membrane setting and have the lower mass of prokaryotes enable tolerance ranges to be more lenient. But if that turns out to be not optimal, we might have to look at another solution when it comes to the first patch.

1 Like

This is not my favoured solution as the species generation API interface will need to be changed so that it knows what the patch it is generating the species for is like. Right now freebuild and the game itself can just generate new species or species with a certain number of auto-evo steps already performed. With this change the code needs to be changed to require the calling piece of code to know the target patch the new species is for and then the species generation logic also needs quite a lot of extending to make it know how to make viable initial species based on the patch conditions. As can hopefully be seen, this feature would require a very significant increase to the complexity of the species creation code.

1 Like

Then it’s probably best to go the exception route, where players don’t have to worry about their first patch’s environmental tolerances (atleast at first).

That’ll be a pretty smooth solution but we would want to avoid players exploiting this by never moving patches and thus never having that element of evolution be applied to them. So perhaps players will have a 3 turn grace period where they would need to apply their adaptations before receiving consequences. Hopefully, auto-evo in the free-build editor can somewhat function under these terms too, where AI cells will start applying their tolerance adaptations before their grace period is up.

I would be wary of this as players might not understand what they need to do until it’s too late and they get swatted down by the sudden onset of overheating when they were otherwise fine. It would be a very jarring way to go extinct.

It’s that, or we make sure that tolerance is neglectable for tiny bacteria and begins to really matter when you’re a certain size.

The only other solution I could think of is the introduction of variance of temperature in a patch, where the vents would have really hot spots in an otherwise just relatively warm environment. I think this would be nice but very difficult to implement because it runs into the same issue as thermosynthesis because players cannot see or feel the temperature themselves. But that’s a new can of worms that I’ll leave unopened for now.

I guess we could do something wonky like setting whatever environment you start in as your “ideal” range and you have to evolve to adapt to anything different, but that would mean the player would have to constantly place warming parts to survive in any patch that isn’t the vents.

I suppose there’s no perfect solution…