Multicellular Stage: The Beginning

I just thougth about 2 questions:
A) If your multicellular species gets split in half by an angry predator killing the cells in the middle what should happen?
B) How should agents work? should they be shot from all external cells or just from the front of the creature?

:eyes:

So since we have been aiming to implement binding agents lately, I have decided to go ahead and put our general ideas into writing for future reference.

To begin, binding agents will be represented by a placable part as a placeholder as we currently do not have a different system for it to call home. This part will only be placeable as a eukaryote, and once placed will allow the player to bind with other individuals of their species to form a colony. Aside from unlocking the binding functionality, the placable part will simply be capable of performing basic glycolysis much like prokaryotic parts. This is to reflect the fact that the binding agents are infact a protein and not an actual organelle. Finally, the part will cost 100 MP, again this is temporary, and will likely change once we have a more defined concept of unlocking parts.

With that said and done, let us move on to how the act of binding shall work. First we need to discuss how to initiate bonding. I’m not entirely sure what the best way to do so might be, so I am going to go ahead and display the following options I have devised.

Option A: I suppose the easiest method of doing so would be to add a new toggled mode (Probably toggled by the B key) similar to engulfment mode that allows you to bond with cells you collide with. However, I am not fond of the idea of having separate toggled modes for each feature we add.

Option B: Alternatively binding could be an automatic action that is performed by pushing against an allied cell for a certain time. You could then break away from the cell by swimming away from them for a time. The problem with this however, is that it would mean colonies would be rather immobile, and potentially temporary.

Option C: A bit similar to Option B, but instead of being an automatic function, you would instead initiate bonding by clicking on cells you are touching. I personally feel this might be my favorite choice.

Finally, we need to think about the benefits of colonial bonding. I personally believe that cells bound together should share resources, that way if one cell ends up collecting glucose, it transfuses excess to
adjacent connected cells equally. Additionally, cells should have reduced osmoregulation cost for each cell bound to them. I would say a flat bonus of -0.2 (Not a percentage) osmoregulation cost per adjacent cell would be good to start with.

This should make forming colonies a viable option to help a species grow larger, and eventually bridge into multicelluarity.

(Was this the right place to post this?)

I don’t like this idea because it’s different from the toxin vacuole. I just checked and it only does oxytoxy synthesis. So I think for consistency the binding agents organelle should do no processes.

I like option A. It’s a major part of the game and deserves it’s own button. This also makes it easier to add controller support to the game. I just think it’s simple, similar to engulfing, and firing toxins also has its own button.

Prokaryotic civilisations doesn’t sound like the right place.

1 Like

Nice ideas

Can I ask about how you are imagining this? For example for early multicellular is it that there’s a new editor screen where each hex is a cell rather than being an organelle or something?

If so what are the criteria for unlocking that new editor? Is it about binding to a certain number of cells while swimming or something? If so what if you can’t find them? Or is it that you need another protein or organelle in your cell? How do these binding agent organelles play into this?

1 Like

That’s fair. I suppose the binding agents could have a higher cost so it takes a tad more preparation to acquire them.

Oops.

Well there was discussion on how multicellular would be started a while back started by Phrenotopian I think. From what I recall the general idea we came to was that multicellularity would be reached by binding to a sufficient number of cells and then entering the editor where cell junctions could be unlocked. And from there, you would then be able to modify your body plan and create specialized cell types. So I suppose it would introduce a new editor that allows you to shape the layout of your colony, while still being able to tweak individual cell types with the traditional cell editor.

2 Likes

If I may put in my 2 cents worth. With the cells we need to be painfully aware of how many triangles we generate as the cells reproduce, particularly later/mid-way in the stage.

There’s fairly simple ways to deal with this, for example, in the original Total War games individual Soldiers would at some point be rendered as 2D sprites and stood up to ‘look’ 3D. This meant each soldier was essentially like 2 triangles, so you could have 10s of thousands on screen at once on a good pc (theoretically). Going even deeper (like 100s of thousands or millions) we could possibly use the 2D sprites of cells to somehow generate a tiling texture for an Organism Mesh, making their individual geometry a non-concern.

2 Likes

One thing with this. With the current auto-evo the cost of cells increases superlinearly with the number of organelles, so that means when you’re a big eukaryote, even if your species gathers a huge amount of energy, there won’t be that many of them and it might be hard to find friends.

That has been one of the issues with engulfment to create choroplasts etc, that you might not find the right cells and it might be frustrating.

However auto evo could be modified, or it could be overwritten to occasionally give you a chance to bond with a lot of cells if you haven’t had a chance for a while or something. I mean there’s options,

Luckily (or maybe unfortunately?) the player is not affected by auto-evo currently. So all they have to do is reproduce a few times if their population in a patch is too low to find friends.

1 Like

I suppose there could always be alternatives such as preserving adhesion when your cell splits, so you could form a colony from there, but that might open it’s own can of worms.

1 Like

If it isn’t specifically stopped, the player will be able to bind with their sister cell after exiting the editor.

2 Likes

I think it wouldn’t be too unreasonable for new cells to immediately stick to their sisters, unless there’s a reason we’re prioritizing having to seek out new members of our colony instead of just making them.

So, the glycolysis in proteins like these isn’t really meant to actually be a process performed by them, but rather it represents the glycolysis performed by the reduced amount of cytosol still present in that hex, which is useful when you have a cell whose hexes are mostly taken up by organelles. A cell containing only one hex of a protein/organelle/vacuole/some other part which does not have this extra glycolysis added is basically equivalent to a membrane wrapped tightly around a solid block of that part, with no room for any cytosol or the processes it performs.
It’s a pretty unelegant solution, and from what I’ve seen it’s been communicated pretty misleadingly.
Sorry, that was a bit off-topic, especially since I don’t have too much else to add, but I just wanted to say something regarding that.

2 Likes

Alright, so I am going to go ahead and push this discussion along a little so we have a more concrete foundation for implementing the binding agents.

The binding agent vacuole will be a single (or maybe two) hex eukaryotic organelle that consumes 5 ATP; The same cost of oxytoxy synthesis. Since this value is incredibly easy to change, I think this is a good number to start with before testing to see what works best, there’s not much point to debating it in the mean time.

Once placed, the part will allow cells to bind to others to form colonies. Players will be able to activate binding mode by pressing the B key by default. During binding mode players will bind with other cells of the same species that they run into.

Once bound to another cell, cells will be granted a 5% osmoregulation cost decrease per each cell directly attached to them, and will attempt to evenly distribute resources across all bound cells at a rate equal to half their resource absorption rate. Again, these values are just to start with before testing and balancing.

So that’s the plan we seem to have so far. however, there are still some things we need to determine before we have a complete plan for the binding agents which I will list below.

  • MP cost:
    We need to decide on the cost of placing the binding agents. There are basically two choices here; Make the cost 100 MP so that it takes a full generation to develop it, or make the price more in line with other parts.
    Personally I am leaning on making the cost be around 55 MP or so. Binding agents are undoubtedly a huge goal in Thrive’s gameplay, but I dont feel like they are quite as large an evolutionary leap as nuclei so it would make sense that it isn’t as costly to develop. I might see about having the binding agents be a little more costly to maintain on your cell to preserve the need to progress before placing it.
  • Unbinding:
    I believe there should be a method of detaching from a colony if needed, but finding a good way to do so without being particularly “janky” is a problem. It could be argued that this is uneeded however, and could potentially be complicated if your cell is completely surrounded by other bound cells in a large colony.
    Below are the methods I am proposing:

Method A:
Moving away from cells for a time will pull your cell off of the colony. This could feel somewhat janky however, as you might end up pulling off your colony while attempting to bind to another cell.
Method B:
Holding down the binding mode hotkey will unbind connected cells. I like this idea, but am not sure how to do it without simply unbinding all cells, how can we target specific ones with this method? Maybe just detach a random single cell?
Method C:
Clicking anywhere on the screen while in binding mode will detach a cell nearest to the cursor. Similar to method B, but with different input and potentially a pain to code.

  • Binding Limits:
    Should a single cell be limited to the amount of adjacent cells bound to it? Should colonies as a whole have a limit to how many cells they can contain? The latter is more a matter of performance as large colonies could potentially be laggy.
    I believe cells should be limited to at most 5 adjacently bound cells, as any more could be pretty awkward when it comes to space. This would be specific to each cell, so colonies of more than 6 cells could still form.
    Ideally I wouldn’t want any limits to cell colonies, but we could run into hypothetical issues such as colonies taking up the entire screen, or immense lag from much the same. We could probably just dive in without this preventative measure and just see if it becomes a problem, but just in case, I think we should impose a max colony limit of at most 40 cells. I’ll ultimately leave such a choice to the programmers as they are undoubtedly more experienced with such matters.

As usual, I would like to know what everyone thinks of this so far, and ask that you would please speak up if you find certain concepts disagreeable. I wouldnt be surprised if I am forgetting something important either.

1 Like

We don’t have code for an organelle just consuming ATP like that. If this is wanted (again, this is just something on top of the normal functionality of the organelle), it needs special handling in a cell to subtract ATP.

How would this be calculated? Currently absorption rate is a maximum percentage (per second) to take compound that is in a cloud.
Basically limiting the compound transfer speed to that value, would be very marginal, unless you had huge ATP demand and fast processes to generate it, then this could be a problem, in all other cases I don’t see this having any effect other than requiring a bit of extra time to program it in.
Well, maybe it animates the compound amount bars in a nicer way, if those are kept showing your amounts. But I was thinking that the compound bars for the player should just show the total storage and total compounds in all colony members.

I put this in the related github issue (Binding agents · Issue #1712 · Revolutionary-Games/Thrive · GitHub).
How I imagined it to work is to have a separate key (perhaps ‘U’) and pressing that unbinds your cell from all other colony members, so you can ditch them if you want for speed or something to keep you from dying.

I don’t think we need a limit. Binding to something needs anyway for your collision box to hit it. If you are roughly circular you could in an optimal case have only like 9 cells bound to you.

I think it’s fine to leave as is, we’ll want to have a hard limit on the number of alive AI cells anyway.

I think that kind of limit is a bit low. I imagined that something like 20 cells bound together is a prerequisite for becoming multicellular. Also if there is a limit of 40 cells before moving to a tissue editor, I think that’s a bit low. I think that maybe something like 50 cells is a good limit when you can go to the tissue editor and become macroscopic, the limit for staying in the cell stage, should be a few times higher than that. Maybe we can get away with max colony size of a little over a hundred (in this case there probably couldn’t be that many colonies on screen at once, but this is only a concern once the AI knows how to form colonies)
I don’t foresee colonies (of course this depends on how they are formed, fusing into a single physics body or using physics constraints, which might spazz out) taking more performance than the equivalent number of cells not in colonies. It’s probably less laggy as the AI doesn’t need to run as much, though the AI is quite cheap currently.

1 Like

Yeah sounds nice :slight_smile:

Can I ask about like controls? So say I bind with a few other cells, do I have control over them, can I turn and move the colony as I like? Can I fire their agents and do any other active things?

Another thing is about damage. So say I make a colony of 5 and then one of the cells dies in combat, is that a problem or can I just carry on? Does it matter if it’s my original cell, if that dies is it game over even though the rest of the colony is ok?

Sounds like good progress on the concept.

1 Like
2 Likes

My assumption was that it would work just like the bio_processes code but without a product.

    "oxytoxySynthesis": {
        "name": "Oxytoxy Synthesis",
        "inputs": {
            "oxygen": 1,
            "atp": 5
        },
        "outputs": {
            "oxytoxy": 1.5
        }

From my understanding this subtracts ATP like I intend. I assume there is something else at work that prevents us from doing that?

Hmm interesting. Before now I never really considered if the player should become the colony or not. I think thoroughly expanding player control to the whole colony might be favorable as it would be much simpler without having to worry about complicated mechanics that would arise otherwise.
That does make me wonder how health will be managed though… I’ll have to spend some time contemplating it.
That being said, you raise a good point about the absorption speed, I was thinking a calculation as simple as dividing player absorption by 2 but that would probably not be as simple as what is in my head. I suppose it wouldn’t be too necessary anyway.

That’s fine for me. I would still like to avoid using two different keys for binding agents but it shouldn’t be a problem.

Excellent questions, and with no easy answers.
My initial thinking was that the player would assume control of the colony’s thinking, but would otherwise remain an individual when it comes to health and resources.
However, after reading hh’s post, I think it might be favorable for the player to truely become the colony as a whole. That is, their UI would now display the stats of the colony rather than their original cell.

Health is a complicated issue. Having the entire colony have a single health pool would be rather bland, and wouldn’t really reflect well on the fact that it is a colony and not one creature. However, each cell retaining individual health values could introduce it’s own issues and complexities.
I believe it would be ideal if each cell retained it’s own health and could die separately from the colony. Displaying the health to the player might be complicated, we might have to add up all health between all cells and display that to the player, while the cells themselves each retain their normal values, would that be too complicated?
Finally, my idea here is that the player is no longer a single cell but the colony itself. The “original cell” ceases to be the player. Should all but one cell die, the player will assume control of that cell, as it is still the “colony”. The problem here is that it might be complicated to choose which cell becomes the player when the colony is disbanded by choice.

I hope that this isn’t too needlessly complex. The more I think about it the more I realize that this is a really sizable feature no matter how we handle it.

Something I want to point out is that this feature could be described as a “game-defining” feature. It’s something that a designer would often build their entire game around, as it is a relatively complex gimmick that would likely serve as the selling point of the game. It really brings to mind the enormity of our project, and how what would normally serve to make a game stand out, is just one of many features of this monster we call Thrive. People would rightfully think that this is insane, but Thrive’s very existence as an ongoing project is statistically improbable to begin with. The very impossibility of this project is what made me fall in love with it so quickly. It’s very exciting, and part of why I intend to focus on learning a bit about programming myself whenever I find time so I can help with the real heavy lifting of this project.

3 Likes

Processes must have outputs, in theory it could be changed that processes with no outputs are allowed. But the reason they are not allowed is that it is weird to have a process that just makes stuff disappear.

If we make up an output for it, the cell will eventually become full of it, so the process will stop. Like oxytoxy synthesis will stop once the cell is full up on toxins.

This is the direction I’m leaning towards, as long as the physics shape index stuff doesn’t turn out too problematic. If it turns out problematic then it’s not possible to tell which part of the colony took damage and we’ll just have to have one single health bar for the entire colony. There’s an open issue in Godot repo about it, but seems a fix hasn’t been finished yet:

From code perspective it is easier to keep so that the original Microbe object the player controls is the colony leader, and also the cell the player controls after disbanding.
Also it’s probably also easier to just make it so that if the colony lead cell (in the player’s case, their original cell) dies, the colony is disbanded and it acts just like if the player had died.
This gives some benefit to forming a circular colony around your original cell to protect it from damage (assuming of course we are able to keep individual health for each cell in a colony).

2 Likes

I’ve started implementing the binding agents and still have a few questions:
How should the binding feature work in detail? Do the membranes have to touch, or do the binding agent and the other membrane have to touch?
Should all reccources be shared between all cells or should one cell transfer reccources over time to a neighbour if it has less?
How should the logic to decide who is the colony leader look like? If there is a player involved, the player should be colony leader, but if there isn’t a leader? What happens if one member of colony 1 binds to another member of colony 2? Who should be the colony leader then?

I wrote a bunch of technical details here:

I’ll make another post there adding some details.