The Role of Life in Shifting Environmental Conditions

One of our long-standing plans for Thrive is to have organisms in the world effect resource availability through their actions and processes. This would allow us to simulate not just the evolution of species, but the evolution of the world within which they live, enabling us to reenact major events in life history such as the Great Oxygenation Event.

There have been ongoing efforts to implement and balance this system for some time now, so imagine my surprise when I realized there was no dedicated thread for discussing and documenting our plans on the matter!

While updating the GDD for our microbe stage, I happened to think of some fresh new ideas on how to handle this herculean task, which were then further tempered by a brief discussion related to the topic. I’ll also be drawing upon @Maxonovien’s shared experiences with attempting to implement and balance the feature.

Please keep in mind that the following concepts are by no means final, and are best thought of as a rough draft. I would greatly appreciate the opportunity to discuss this with everyone to ensure we are on the same page.


As species evolve to utilize the world around them, they begin consume the resources available to them, replacing them with new byproducts that ultimately leads to a gradual change in their ecosystem. To simulate this in Thrive, we are going to have to cut some corners in the simulation aspects to remain within a preferred range of performance, as well as gameplay balance.

The ultimate goal of this concept is to simulate a dynamic and changing environment. But we don’t want it to be difficult or overwhelming. It’s worth mentioning that any change should be fairly gradual so that the players can have time to see it coming, and be able to adapt comfortably and accordingly.

Covered in this topic are the three primary aspects of the system; Dynamic Atmospheric gasses, Compound Diffusion, and Autoevo. My goal is to plan out how to implement each of them in what is hopefully a meaningful and well balanced system.

Dynamic Atmospheric gasses

The most impactful and dynamic parts of this system will be the change of atmospheric gasses within the environment. These gasses play a critical role in determining the rate of a cell’s processes. As life evolves to make use of certain gases, they begin to slowly but surely drain it from the atmosphere in what is known as a “compound sink”. A famous example on Earth are carbon sinks such as forests.

All gas occurrence in the world will be measured by a single Global Atmospheric Composition score for each gas type. As species make use of the gasses in their local ecosystems, the GAC is gradually adjusted based on the metabolism of the species. The impact of GAC varies depending on patch type, with each patch having it’s own gas multiplier that determines how prevalent gasses of specific types can become. For example, abyssopelagic patches will always have a much lower oxygen multiplier than other patches, while epipelagic patches will be higher.

This effectively simulates the change and migration of atmospheric gasses throughout the world overtime, while still allowing for variance in biome gas composition and more importantly, still ensures a stable gameplay experience overall. It’s mechanical simplicity also means that it should probably be easier to implement.

Compound Diffusion

Unlike their atmospheric counterparts, basic resource compounds represent more localized materials that may be absent or present depending on the individual patch. These compounds play a much more direct role in Thrive due to being necessary to collect for players and AI alike in order to survive. Thus it is imperative that these resources should always remain available in some form, even if somewhat diminished.

There are three primary methods that compounds can be dispersed into the environment, which will be addressed below.

Primary Source

Compounds are largely sourced through geological processes that continue to act during gameplay, thus it is sensible for them to always actively be released into the environment regardless of the activities of life. This means that there will always be a minimum amount of resources available in certain patches, as long as that patch is the source of the resource.

For example, volcanic vents will continuously spew forth hydrogen sulfide. This means that in the local biome, a minimum concentration of hydrogen sulfide will be available at all times, perhaps with the concentration becoming larger if there is a lack of species consuming it.

Adjacent Diffusion

Patches in Thrive are not isolated from each other, and indeed it makes sense for compounds to be able to disperse from one environment into another over time. In terms of gameplay, this also serves an important role of bridging environments so to speak. For instance, hydrogen sulfide diffusing into the sea floor creates an opportunity for sulfide dependent species to travel between patches.

In order to mechanically simplify the process, adjacent diffusion should only occur between a geological source, and patches immediately adjacent to it. Or otherwise, within the same grouped region. This can be done by applying a “bonus” to patches adjacent to a source.
For instance, all patches adjacent to a caves patch would have +6 iron availability. This in turn would not extend to patches adjacent to the effected patch.

This simplification is important for two reasons; Remaining understandable to a player, and allowing autoevo to remain consistent without worrying about compound availability wildly fluctuating across the board over-time.

I am personally unsure if we should allow for the total depletion of resources diffused in this manner.

Marine Snow

Unlike adjacent diffusion, marine snow is the “falling” of compounds throughout the water column. Primarily to be applied to the occurrence of cell chunks. Marine snow will occur in all patches located in a row beneath the source patch, and act as a major source of food for heterotrophic scavengers once life begins to take root in the upper patches. It’s occurrence is related to the amount of life in the source patch, and should otherwise remain consistent barring sudden extinction events.

Later on in the game, marine snow is going to be essential to maintaining life in the water column as otherwise these patches will never act as a primary source themselves.


By limiting compound diffusion to these three methods, my hope is to ensure that it’s implementation is much more feasible in scope, and comprehensible to our players. Admittedly, it’s a bit shakier of a concept than atmospheric gasses, and may need to be implemented at a later period once we have a more firm grasp on what exactly we want from compound exchange.


Perhaps the most important aspect to this concept is determining just how exactly auto-evo shall impact the environment. In order to do this effectively, we will need to determine how to measure the compound exchange of each species as a collective, and calculate how that will adjust the environment each generation. This is likely to be the most demanding and difficult piece of the concept.

In this concept I have presented multiple potential options for how to handle autoevo’s part, which will be elaborated on below.


Rather than calculate the precise inputs and outputs of a species, we can potentially determine the effect of a species based on it’s niche as determined by autoevo.
For example, species occupying the photosynthesizing niche would be classified as photosynthesizers, and thus their population would then contribute to an overall increase in O2 GAC score.

The immediately apparent downside of this method would be the lack of nuance. The amount of output per species would need to be identical save for the impact of population count, as this method would not consider the precise amount of O2 output from the cell’s internal processes.

The upside is of course, it’s simplicity. Making it easier to understand, implement, and tweak.

Direct Calculations

Probably the most obvious method is to calculate the total input and output of a species’ processes in order to determine it’s impact on the environment.

When it comes to atmospheric gasses, we’ll need to determine an input and output value for our gasses as that is currently not calculated. (They are just used as a modifier to process rate). Let’s say for now that thylakoids produce +1 O2 and metabolosomes consume -1 O2.

We’ll need to add up the outputs of all processes of a species, and subtract from it the inputs. The resulting number would then need to be multiplied by species population and finally adjusted to planetary scale via a constant. I’ll provide a very rudimentary example below.

(Output - Input) * Population * Constant_Mod = Impact

Let’s use a theoretical photosynthesizer for an example.
(12 - 8) * 1928 * 0.000001 = 0.008
This rather chunky species consumes a bit of it’s own oxygen but still ultimately produces more. Multiplied by it’s population, this species will increase the oxygen GAC score by 0.008 for this generation.

This method is a tad bit more complicated than the prior categorization method, especially when accounting for multiple processes and compounds. Of more import, is the increased amount of calculations that we will need to balance, and autoevo will need to perform.

Hopefully this provides a great basis for us to better discuss and plan around the topic of dynamic compounds and the gradual change to Thrive’s environment over time. It has been a difficult task for our programmers to handle, and for plenty good reason. A more dynamic environment presents less control overall, which can be substantially harder to get right. But if done right, it will make for a much more engaging and unique environment every playthrough!

As usual, I would greatly appreciate everyone’s feedback on the matter.


This might be slightly off-topic, but it is tangentially related in an important way.

For balancing reasons, process inputs and outputs being somewhat arbitrary makes sense, but as we move into more environmental numbers, grounding them in something real becomes highly valuable for a couple of reasons (listed below).
Additionally, I think the current arbitrary population numbers should be swapped to a density measure like Microbes/mm or cm. Along with patches being given a “livable” volume that represents the area in which microbes could live it would allow the number of microbes in a patch to be calculated (while never actually having to be stored as the number is likely insane. It should be fairly easy to keep numbers reasonable with smart uses of units.)

  • The real world - A huge advantage we have that often goes unused is looking at the real world for numbers. Trying to make the output of thrive’s simulations match the real world is the only real way we can verify their accuracy. Additionally, we can be sure the IRL numbers are “balanced” in a way, as they work in the systems of the real world.

  • As we move away from cell internals and enter stuff like compound density in water we begin to enter territory that is well understood by science. A lot of math already exists for modeling real life systems; for example things like concentration and light penetration though water. By assigning real values it opens up this world of pre-existing math we can use. Circling back around to population numbers, instead of a random constant we can calculate the output of compounds from the number of cells in a patch.


I see the value of incorporating this in terms of balancing and verifying information, but I do think it would be a rather bizarre performance metric for the player to understand. I can already foresee many players thinking “why don’t they just tell me the population instead of this area-focused metric”. As abstract as it is for the microscopic scale, the average person can more easily understand the implications of having a loss or gain to population size rather than a loss in population density, especially since space might dramatically change between patches (performance wise, a given density in a cave does not necessarily equal a given density in the open ocean).

That being said, I do agree with the fact that we might want to look at a way of revisualizing how we demonstrate gameplay information to the player via population. It can be hard to understand exactly how many “lives” you have within given patches or just how healthy the population of another species is in a given environment.

@Buckly I think this is a great way to think about compound/gas diffusion. It provides us a very good baseline understanding, whereas before we kind of were essentially assuming equal compound conditions between various patches. It makes sense that hydrothermal vents would inherently have more H2S, for example, than other patches, and inherently reinforcing that makes it easier for us to attempt to simulate dynamic atmospheric/compound diffusion.

One thing I would like to bring up, which isn’t necessarily incompatible with this line of thinking. I’ve alluded to this before in prior discussions, but I think we can really spruce up gameplay by having compounds be rather unstable at the beginning of a playthrough, on the player’s young and immature planet. On our planet, the distribution of resources is maintained by these robust biogeochemical processes which took eons to mature; our young planet, and really any young planet ever, was much more volatile.

Representing this in Thrive will increase replayability, throw another challenge for the player to grapple with, and encourage players to take advantage of the evolutionary behavior of prokaryotic species in a realistic way - simple, but rapidly-pivoting, diverse, and occasionally extremophilic organisms.

PS: I liked the graph O2 visualization and how it approximates the spread of oxygen throughout the ocean. That’s a good way to go about a very unique and interesting phenomena.


It is true players might find it bizarre. We are assuming a uniform distribution of microbes in a patch (because anything else would be too difficult to model) In many ways I think this generalization saves us. It is true that patches vary wildly in size, and I think this is a clear advantage for density. If there is a lot of space and resources available microbes will just multiply and fill up that space. The overall population, (which as a number currently doesn’t really mean anything,) is much more dependent on the size of the patch than the number of microbes that manage to live in such a small area is. Based on that I belive the density is a much better performance metric.

If it does prove too confusing to players, calculating the total population is trivial and can easily be displayed to players. I’m advocating for a standard much more for technical reasons than for the player, though I belive that telling the player they have however many billion-billion microbes isn’t very useful.