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.
Overview
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.
Autoevo
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.
Categorization
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.