Simplified CPA system

I’ve been thinking about the CPA system a bit and here’s where I’ve got to.

Objective: We want a simple, robust, system which reacts to the player and to the environment. We want to be able to dump a load of similar creatures in to a patch and have them adapt to be more fit in that patch. We want two branches of a species that become separated to evolve to be different. We want to be able to control this system to make it easier or harder on the player.

The original prototype I made is very complex and hard to control. It’s not very robust, it’s easy for it to take all the organelles away from all the cells, for example. Here’s an outline for an alternative system which I think might be better.

A. In each patch there are a series of buckets, one for each compound. The environmental compounds (CO2, oxygen etc) are periodically refilled. The finished products compounds (agent, DNA, fat) are periodically (slowly) emptied.

B. Every species is selected in sequence and given an action. It is decided at random whether they produce or interact with another species. If you have more flagella you are more likely to have an interaction.

B1. If you produce you choose one of your production organelles at random and check to see if there is a gradient between the buckets (so if you picked a chloroplast you check to see if there is more CO2 than sugar in the patch, which there almost always will be). If there is a gradient you move some compounds from one bucket to another and get paid some “points” for doing this.

B2. If you interact you pick another species at random in the patch. If you are stronger than them you take some of their points, if they are stronger then they take some of your points.

C. Any 2 species which are “too similar” lose some points.

D. Each species pays some points for each organelle it has (to penalise being too big).

E. The points are then counted, the number of points you have is your population.

F. After this has looped for a while Auto evo makes 5 copies of the patch, chooses a species, and makes 4 alterations to it (in one copy it remains the same as a control). This is then left to run for a while and the best copy is chosen to be the remaining one.

G. Species and compounds are moved between patches in the world etc etc this is probably another thread.

So as you can see this is a much simpler system however it has some nice features. Firstly the species will adapt to the patch. As you have to pay a fee for each organelle you have then it’s not worth having ones which aren’t helping you either produce or fight. Secondly the species will adapt to each other. In B2 when there is a simulated fight having the right agents which work on a specific other species will really help you succeed. One fo the adaptations auto evo can offer is to change an agent code and B2 interactions will let the system know if this is better or worse.

The penalty for two species being too similar is just to keep the patch interesting (it’s lame if 2 species become the same because then it’s not really worth simulating both) so it ensures good gameplay.

Having more flagella (and faster movement in general) giving you more interactions vs productions means that predators will tend to be fast and produces will tend to be slow. I think this is nice and will look good, however doesn’t take account of things like carnivorous plants and deer. However I think, in the simulated battles, there will still be an advantage to being mobile when another species comes for you. We can tweak things if we like.

Again on the issue of adjustability I think it’s not too hard to see how to let the player adjust this. So if you change the time between auto-evos it makes things easier and more stable. You can give the human player a boost or handicap in combat.

I was hoping to have time to make a prototype but I haven’t and won’t for a while. However I hope it helps to see this and maybe someone else will be inspired by it!


Firstly, I really like this system! I think it’s very manageable and player friendly. :slight_smile:

Secondly, i was hoping I could engage in some quick back-of-the-envelope systems for the “stronger than” (B2) calculation. Partly to make sure I understand and partly to inform potential prototyping.

The main categories for this calculation are “speed vs speed”, “meelee vs defense”, and “agent vs resistance”, right?

For speed vs speed I initially thought that the check could be something to this effect: arbitraryFudgeFactorForPointCount * abs(flagellaSpecies1 - flagellaSpecies2), but then if the species have equal numbers of flagellae there isn’t incentive for any change, and if one is significantly lopsided it could lead to extinction pretty quickly. It’s also possible since this was a quick thought and I’m not intimately familiar with previous prototypes that I’m seeing problems that don’t exist.

Another thought on speed vs speed was that we could have a set number of points that are then divided between two species on a (flagellaSpecies1 - flagellaSpecies2)/(flagellaSpecies2) basis where the result is the (ratio - .5) of the set points that Species 1 gets. That being said, this equation does not cause population loss in prey (I don’t think) which is a problem. I hope this makes sense, but it probably doesn’t.

I don’t really have ideas on the math to run for the other two.

Thirdly, is there a check in the system that accounts for non-player symbiosis?

In conclusion, I think it’s a very solid system and I hope my improvised calculating is a little helpful.

1 Like

Looks good, but i see some possible issues about the system:

If every species gets selected in sequence, then the first guy would get all of the compounds (and therefore it would likely be a producer), while the last one would have a lot less compounds, and a lot of other cells to attack (and therefore probably be a predator). Maybe random selection would be better, but i think we would still get some unwanted bias.
We could also periodically “release” the compounds into the enviroment while we iterate in the selection process, which could also have a bias (the first microbe would have a lesser chance to be a producer than the rest, for example) but it would be lesser i think.

But that would mean that having 1 mito vs having 2 mito would be the same thing, right? That along with the size penalty would potentially make producer microbes really small (like nucleus + mito or chloro or thermo, if we don’t count defenses against predators). Why not all process organelles?
Also we would need some way for storage organelles to evolve.

Would agent vacuoles need B1 and B2 to be functional? If that’s the case that could be an issue.

But then extinction wouldn’t really happen, and every initial microbe would get a descendent until the end of the game no matter what.
If you are worried that the microbes could make a lot of different species to the point where it becomes too hard on pc resources my suggestion would be having both a penalty to number of different species, and/or have a failsafe mechanism where species get extinct or have their populations heavily reduced when they get above a certain number of species limit (like the current system does)
Another thing we could do depending on how we represent biomes) it’s to “divide” the biome in two, and either get half of the species on each or half of tge populations of all species on each.

That would mean that a producer microbe with a lot of flagella would either beat another microbe (even if in game that would be impossible) or be able to flee. The problem is, even if it flees from all interactions, the fact that it had those interactions in the first plaxe means it didn’t get to produce stuff, which would be detrimental. Maybe having B1 and B2 be non exclusive could help?


Good points @crodnu .

If every species gets selected in sequence, then the first guy would get all of the compounds (and therefore it would likely be a producer),

Yes to a degree. Because each species only gets to do one thing (operate a single organelle or have a single fight) then this is mitigated a bit. But yeah I agree choosing in a random order is a good idea.

But that would mean that having 1 mito vs having 2 mito would be the same thing, right?

I guess the system could be “if you choose to produce with mito then you use all your mito at the same time”. Though maybe that makes it much more beneficial to have more than 1. Maybe you get 1.5x production for having 2 and 1.75x production for having 3, could be balanced.

Would agent vacuoles need B1 and B2 to be functional

I was thinking that, in order to simplify things, there would be no personal compound stores for each species. So you don’t need to produce your own agent in order to use agents. Everything is done on a patch level. (Maybe to use agents you have to check that there is some agent in the patch store). This means that we don’t have to see the complex food web (the plants make sugar and the cows eat the plants and the wolves eat the cows) we just keep track of what compounds are available in the whole patch and what the general processing flow is.


Yeah this system doesn’t have extinction and splitting inside the patch. It might be better to have a system which, as you say, culled the least fit and split the fittest.

represent biomes

Yeah I’ve been using the word “patch” to mean a sub area of a biome. So it’s possible that there could be a giant forest biome with 10 patches in it all with different species in.

That would mean that a producer microbe with a lot of flagella

yeah in general this system would heavily discourage being a producer with a lot of flagella. It would tend to push things into being either static producers or fast predators. The danger of having B1 and B2 seperate is that every microbe may end up relatively similar (all will want flagella and pilli and agents for fighting, all will want organelles to produce to get points there) and there’s no specialisation.

Ultimately this system where speed increases interactions will lead to plants vs animals. The plants will be always producing and rarely interacting where the animals will be almost always interacting (from their perspective hopefully with plants to eat them). I’m not sure if it’s a good idea.

i was hoping I could engage in some quick back-of-the-envelope systems for the “stronger than”

@The_Wayward_Admiral yeah this is great. Basically we want a function which is f(flagella, pilli and agents in species A & flagella, pilli and agents in species B) = points transferred. Keep thinking about it!

Just a quick mock up of B1, to address concerns about organelle amounts making a difference and to identify potential coding snags:


    case 1: //Accounts for production in mitochondria
        if mitoCount > 0 && glucose > ATP
            pointsAdded = log10(mitoCount) * (fudge * (glucose - ATP));
            [species]Points += pointsAdded; 
            mitoDiff = fudge * (mitoCount - glucose) / glucose;
            glucose -= mitoDiff;
            ATP += mitoDiff; //Reassigns compound values 

Repeat for chemoplasts, thermoplasts, and chloroplasts.

The above coding makes a few mitochondria beneficial (log10), but excessive amounts aren’t worth the energy tax. Additionally, it takes into account gradient magnitude, but just in raw values and it doesn’t account for sunlight, etc. It also reassigns values from one compound bucket to another (the mitoDiff statements), but I think it does so rather clumsily.

The “if” statement checks for glucose being greater than ATP, which I believe was a requirement for the system if I understood the OP correctly. And my apologies, but for the life of me I couldn’t get anything to indent. Also my apologies if it’s frowned upon to drop a ton of code on the dev Forums.

1 Like

If I remember correctly, a while back we decided to treat a species as the total number of compound (free and locked) that it contains. In this case, the number of “points” you are talking about is simply a transfer of compounds from species to species or to/from the environment.

A. I am guessing these buckets are refilled using the co2 and nitrogen cycles you wrote a prototype on as well as organisms dying or releasing compounds into the environment.
B. Why do we have to split up into B1 and B2? Wouldn’t it be better if we simply did both?
B1. Can’t we simply run the process system you made (implemented by moopli in the current version) for an individual cells compound onto the whole species? From the above, we already have that a species is simply a compound bag, we can then just iterate and run all of the processes.
B2. Simply choosing random wouldn’t work, since it will result in an interaction rate between species A equal for the following distribution (1 member of A and 1 member of B in huge patch; 1 member of A and 10000 members of B in huge patch, 10000 members of A and 10000 members of B in tiny patch). I’d say this is the hardest step of the whole CPA since we need to calculate the number of interactions using the species density and then calculate the outcome of the encounter).
C. How would similarity be determined? This will also lower diversity since two similar species could split into two separate and different species. I suggest changing this step to lowering the points of two species that occupy the same niche (since they are in direct competition for resources). If we do the above (B2) right, we wouldn’t even need these steps, since the species that is better in its niche will automatically score more points than the other.
D. Again, why are we directly penalizing for being big? Having a large size has two consequences—a greater a compound requirement and slower movement. The former will decrease population size (since population size = compounds / compounds per cell) and autoevo will automatically work against a smaller population size, so only species that actually need more organelles will be able to justify having them. The slower movment will factor into B2, both for decreasing encounter rate and from decreasing speed to be able to run away.

In my movement thread we can calculate maximum speed by looking at cell shape, stokes’ drag, and the number of movement organelles, which could be useful. An issue that arises is that it isn’t directly speed vs speed, since a lot of slow cells (amoebas) can slowly envelop small and unsuspecting, but extremely fast cells since most cells are pretty blind.

I think we could have something along a behavior tree or finite state machine, where we check if the small cell noticed that large one and if it did we do a speed vs speed comparison and if it didn’t we check attack vs defense. Alternatively we could try using the neural network we have planned for the AI and “solve” it to determine outcomes, which will be better in the long run, but much harder to do. Probably a simply offensive organelle count - defensive organelle count check for both species could do for now to test if other mechanics work.

In the beginning of the game there are huge amounts of compounds, so it isn’t an issue, but you’re right that it will be really problematic once compounds get locked and rarer. I think a better solution than random selection would be to, in pseudocode using glucose as an example:

local glucoseAmount = currentPatch.getGlucose()
totalGlucoseTaken = 
for each species in species 
    local glucoseTaken = species.tryProcess(glucoseAmount, dt) // Doesn't actually take 
    totalGlucoseTaken += glucoseTaken

for each species in species do
    species.runProcess(glucoseAmount / totalGlucoseTaken, dt) // Actually takes compounds

Basically, we see how much glucose each cell would take if it were chosen first and then given it proportionally that amount. This mimics that cells are all continuously running their processes simultaneously.

The only difference is the rate of process, so using my above code as an example, a cell with more mitochondria would be able to use much more glucose than other cells and as a result would have more ATP.

I think we should run them at the same time.

If a species keeps loosing compounds (due to predation in B2), it will eventually get to zero, which means that it has no more cells, so it goes extinct. At this point we can take the largest species population and split it into two species that go through the CPA system on their own. More realistically, we can take the most successful species in a neighboring patch and move it here. This keeps the total number of species constant, ideally one for each niche.

Wait… but wasn’t it decided that each species is literally defined by a species-shared compounds store? Or are we no longer doing that?

We could use a probability distribution using the number of cells in one species, its average speed, and the average distance between members of a species to find out the total number of encounters between Species A and Species B. Then, if species B wins in step B2, it gets (numberOfEncounters(A,B) / totalNumberInSpecies(A) * totalCompoundsStored(A)) while the other species loses this amount. If you guys think this is a good idea, I could try writing a prototype, hopefully we’ll get some sine curves.

Could you explain why you’re subtracting organelles and compounds? I also think we could do without log10, just use mitoCount as it is. Large cells will be penalized in a different step.

No worries, you just need to put 4 spaces before each line. Here, I’ll edit it for you to improve readability.

Great job so far everyone! A lot of great thoughts in this thread.

1 Like

@TheCreator in reference to subtracting glucose from number of organelles: I wrote that before coffee, and quite frankly I’m not really sure what I meant by that. :expressionless: I think I was going for finding an error percentage and then normalizing to come up with a decent point value, but yeah.

At any rate, I appreciate the edit assist!

Okay, so I did some more work on B2. For simplicity, let us assume that we only have one species and we are interested in finding the number of times two cell interacted with each other in a given time dt. By symmetry, we have that the average distance between the members of each species is the same as the distance we get by equally distributing members of the species across the patch. In other words, if we took a patch of area A and put N circles (where N is the species population) in such a way that the distance between each center is maximized, the average distance would be 2 * the radius of each circle. This gives us the following average distance:

d = 2 * sqrt(A/Nπ)

Next, we are trying to find the average velocity of each cell. Assuming that form fits function, we have that species with more flagella will use those flagella and will be faster than species with fewer movement organelles. The movement thread describes the maximum velocity for a cell, and we can divide it by 2 to get the average velocity (arbitrary number, but I think it works well).

v = v_max / 2

The average time between encounters will then be:

t = d/v = 4 * sqrt(A/Nπ) / v_max

Therefore in time dt between runs of the CPA system, we have that there will be dt/t encounters.

I will work on expanding this system to two species tomorrow, but if that works we can simply determine the outcome between an encounter of species A and species B, and multiply it by number of encounters to determine the total number of compounds transferred. Interestingly enough, this calculation works both for solitary species and species where members clump together.

Doesn’t that mean the cell knows exactly where the other cell is?

Lemme try some math :smiley:

Let’s say that D is the “detection radius” of the cell, N the number of microbes, and T some arbitrary time
If we assume the biomes are square for simplicity, then every cell it’s (on average) on a square of area


and the side of the square

S = sqrt(A)

Let’s also assume for simplicity that the interacting cell moves in a straigth line parallel/perpendicular to the squares sides.
Let’s, finally, assume that the interacted cells can be anywhere with equal probability.

Then, the probability of the interacting cell finding another cell on a square is D / S.

A singular microbe would have M = MICROBE_SPEED * T / S interaction possibilities each T time (if we consider that interactions themselves take no time, no idea how to math otherwise ^^), and there are N microbes in total, then the number of interactions each T time has a binomial distribution B(N * M, D / S), and the mean of that is N * M * D / S (according to the wikipedia), so the number of interactions over time is.

I = N * M * D / S = N^2 * MICROBE_SPEED * D * T/ SIZE_OF_BIOME

(Btw i suck at doing math so you may want to double chack this numbers).

Edit 2: no idea why i divided by T :confused:

A. I haven’t actually written the CO2 and Nitrogen cycle prototype, the planet generator only gets as far as generating a planet at t=0. I haven’t had time to put in how it changes over time. However I don’t think it’s so hard (keep CO2 and N circulating so long as the ocean isn’t frozen over, if it is let them pool in the atmosphere). From the current prototype you can request a temperature based on atmospheric gasses and it can do that. It can also generate stellar spectrum on the planets surface (based on gasses) (from which a chloroplast could choose what colour to be).

B.As you say you need both production (B1) and interaction (B2) for all species. As you say it’s fine to do both for all each timestep. The reason I moved away from that was to encourage some species to become static producers (eventually plants) and others mobile predators (eventually animals). If each species has the same experience they will tend to evolve towards being the same.

B1. Ok so the problem with the old CPA prototype (and hence the reason for this simplified version) is that it’s too complex to control. For example if the species pop is it’s compounds / number of organelles then if auto evo takes an organelle away then the species gets a population bump. This means getting rid of an organelle is heavily favoured (especially if you go from 3 to 2, for example, that’s a 50% bump for nothing). It took me quite a long time of playing around to find that out (it was causing all species to shed all organelles and die out). I tried to fix it but the prototype still wouldn’t do something sensible.

So that’s my basic approach here. I’m just trying to simplify. If you want to build a more complicated system that’s totally fine with me. If each species has 10 compound bins and interacts with all other species every turn it’s going to be very hard to diagnose what is wrong if it’s not doing what you think it should. However maybe these simplifications make the system too boring. I don’t know. I’m trying to capture the essence of the system with as little complexity as possible.

B2. Yeah as you say pop matters when choosing interactions. It depends on what pop levels are allowed but it’s not insane to assume all species are equally likely to be encountered. Though as you say if there are 1000x more of one thing than another then it’s unreasonable. If the max difference is more like 10x then it’s closer to reality.

C. Yeah leaving out the similarity penalty is something that can be tried. I think having it in will just help the patch look like it’s a real patch, Species that have the same experience will evolve convergently. IMO we want to have variety because that is what makes good gameplay.

What do you mean when you say niche?

In terms of how similarity is calculated I was thinking something like “make a list of species A organelles and species B organelles. Go through list A and, if you can find a matching organelle in list B, remove the organelle from both lists. When this is done the sum of the lengths of the lists (the organelles that have no pairs) is the difference score. The penalty is proportional to this score.”

D. Slower movement isn’t a penalty if you are already static. As you say if pop = compounds / organelles then yes being big is penalised but, as I discussed above, that system has problems. If pop = amount of points remaining at the end of the round then there is no penalty to being big and having tonnes of production organelles will be better than having a few. This is why you need a size penalty term.

So basically to sum up.

  1. I am very happy for anyone to try and make a CPA system like the oldschool prototype. Where pop = compounds / organelles and each species has a personal bin for every compound. You can find the most recent version here.
  1. I put a lot of work into the prototype and couldn’t get it stable and so I now thing it’s better to simplify. At least it might make sense to build a nice simple system as a stepping stone to a more complex one. The simplifications I’m suggesting are, as outlined above, the patch has a bin for each compound and the species has no bins. The thing which is kept track of is how the species move these compounds and how they predate on each other.

  2. I’m very happy to reconsider any of this. I think one of the design considerations is that the player will have a very strong idea of what an ecosystem should look like (predators and prey, evolving in a sensible way, lots of diversity etc) and so there’s a danger in straying too far from this. Of course a powerful simulator is awesome, however it’ll be hard to manage. There’s a balance to be struck between letting the simulator loose (which gives unexpected dynamics) and keeping it controlled (which means it won’t do anything dumb, like have all species die out). Where we strike that balance is a delicate thing.

Hope this is helpful!

Someone might have said this and I missed/forgot it, but what if we have a probability modifier for each species?
And seperate them into families. Then we have a RNG apply a semi-random part to each famile, effectively making each family a different species, and the computer compares the survival times (or children born) of each family, which would signify they are more fit for their environment than other families, making a few families the main branches of the species as the others die out. The computer can periodically do the same thing with each family, split off a group, apply a semi-random adaptation, and see how they compare to the main line through the simulation. If there is a significant increase in fitness, they can be classified as a sub-species (like african and indian elephant). If they’re less fit, they die out.

The downside is that it require a huge number of species at the start to figure out what works and what doesn’t.

This would have the benefit of creating more species gradually over time, without having to have a ridiculous amount of pre-made species, and the player can interact with it as they’re considered part of the simulation as far as diversification is taken into account, as an effect on the species fitness (because life is not fair). It would also have the benefit of having somewhat similar, but not identical creatures, like zabras and lions are quadrapeds, but one is and herding herbivore and the other a pack carnivore. But creatures will also adapt to new species as new predators or prey appear.

The adaptability might be more…extreme if species become seperated by an ocean (assuming moving tectonics), like how Australia has unique life not found anywhere else.

@rastro yes that is largely what we are thinking. A lot of thought has gone into the evolution system already (as it’s one of the main parts of the game). I’ll try to describe where we are at a bit, feel free to ask questions. I’ll only talk about the microbe stage for now.

Currently there is a process system. This governs, inside a cell, how compounds are processed. For example a mitochondria takes sugar and oxygen and turns it into co2 and ATP, there are lots of different processes. @crodnu has been working on this. This is the metabolic pathway we came up with.

When this is done it can also be applied at a species level. So not asking how much sugar does your cell process but how much sugar does your species as a whole process. With the compound constraints in the patch where you live this is enough to have basic population dynamics (different species process different amounts of compounds and use some of those compounds to make more of themselves).

Then we’re thinking of adding a combat function, which basically determines how much predation takes place between two species. So basically the output is a flow of compounds from species A to species B with some wastage to the environment.

Then finally we have auto-evo, which does the evolution itself. It copies the patch five times and in four of them makes a little change to one of the species. The simulation is then run forward some time and whichever patch the chosen species is doing best in is kept and the others are thrown away. This means over time the species will evolve.

We’re going to have multiple patches which are of different biomes (shallow sea, coastal, ocean vent, abyss etc) with some ability for species to move between them. This will mean speciation will occur when part of a species moves to a new patch and evolves in a different direction there.

The whole thing is called the CPA system because it’s about Compounds, Population Dynamics and Auto-evo. Hope this is a helpful primer on where we are at with it.

Okay, yeah, that makes sense.

I just have two questions:
-How variable will the atmospheres of worlds be, like will we have to try to accommodate for an ammonia-based atmosphere with cells that work with mainly N2, CO2, and O2?
-Have we decided how many “stages” of evolution we want, or are we not there yet?

Yeah so something I’ve been working on (and meaning to finish off) is the star + planet generator. So far it keeps track of CO2, O2, water vapour and N2 in order to calculate the specta of light form the star hitting the planet (which determines the colour of the planets, see here, for example).

Not sure how many other compounds need to be kept track of on a planetary scale.

What’s a “stage” of evolution?

That was a term used in Spore, and I don’t have any other word to describe it; it was just a segment of the game that was markedly and noticeably different from the rest.

Like in spore they had cell, creature, tribal, civilization, and space stages

I was wondering if we had planned that far ahead, and what we would call the…segments? I’m still new :sweat_smile:

Mostly for curiosity, how varied are the stars (suns?) and planets going to be? Like are we gonna home star types other than main sequence G-types, or no due simply to the nature of less…lived star types?

Are planets going to be realistically sized, or shrunk down some? Shrinking them some might help gameplay, but too much would kill realism. On that line, is gravity going to vary widely between worlds? Or is that not a consideration now?

Am I asking too many questions? Did I mention astrophysics is a hobby? :sweat_smile:

Planned stages in a nutshell are:

  1. Microbe stage: the current one, you’re a cell and you multiply and stuff. Getting a bonding agent will allow your cell to stick to other cells and go to the…

  2. Multicellular stage: where you are a colony of cells, that will grow to have more cells that will then specialize. When your species develops a basic nervous system you will enter…

  3. Aware stage: where you are a (relatively) larger creature, doing creature stuff, kinda like it’s spore equivalent. In either this stage or the previous one your species will be given the option to move to land. the stage ends when you develop a big brain and sapience which leads to (headaches and)…

  4. Awakening stage: in which your species takes the first step towards social life, inventing things like language, tools and whatnot. When you build a society center (whatever that is) you enter…

  5. Society stage: which is where you start playing an rts-esque game, after developing the foundations of society. When you develop enough tech you enter…

  6. Industrial stage: which is… kinda the same as the last stage really, but with more tech and at a larger scale, with more globalized issues. It ends when you invent space travel, which leads to…

  7. Space stage: which is not really all that much planed yet, but i imagine it would have a resemblance to masters of orion/stellaris/galactic civilizations/something like that. it ends with…

  8. Ascension stage: the last stage of the game, your species become demi-gods (somehow) and can do whatever. It may or may not have some objectives.

For more information check out the wiki :slight_smile:


Ah. Thank you.

It does seem that after Industrial stage starts the plot gets…fuzzy…

Like just conquer the world, or unite in peace and harmony with hugs and champagne?

It seems like playing space and Ascension stages as a return to first person might be more interesting, as a captain who is pioneering their species settlement and colonization(?) efforts among the stars. Plus it makes more sense in a way, not every communique to your species will be with the supreme overlord.

And ascension stage, uhhh…yeah how?? It does sound cool, but still, how? Also should take crazy long time and actually be a notable achievement.

This is what I think the ascension is/could be like:
So you basically turn into pure energy and unlock god mode / sandbox mode