Damaging Agents

tl;dr Agents are the most important part of gameplay. The proposed system allows the player to tailor agent organelles to certain organelles of certain species (while making them weak on other species and other organelles), strike a compromise between the same organelle of multiple species, or make weak agents that attack all organelles of all species, all in an intuitive manner.

Agents are arguably the most important part of the cell stage. They might not be as integral as the CPA system, but the player will likely spend 95% of his time in the cell stage interacting with them. If we fail to implement agents in an intuitive and fun manner, the gameplay will suck, to put it plainly. So let’s begin.

A while back I proposed this system to upgrade organelles. It was revisited a few months back and the general consensus was that it’s intuitive and easy to implement. To avoid having the player learn and the programmer code a whole new system for agents, I think we could evolve agents in the same way we upgrade structural organelles with a few minor adjustments. I suggest you read the linked post first to better understand the diagrams below.

The player will enter the editor as normal. He will see the typical structural organelle tab (with things like cytoplasm, mitochondria, and flagella) and will then click the next tab to see agents. The reason I separated these into various tabs is because they are placed in very different ways and have different functions. See this tab below:

The first section is the damaging organelles. All the 6 organelles I have drawn (all purpose, process, movement, storage, pilus, and membrane) have the main goal of damaging and potentially destroying the organelles of the enemy using the new health system (they will simply decrease the compound bin). As the affected organelles are damaged more and more, they won’t work as effectively until, eventually, they will shut down at zero health. If a cell runs out of mitochondria, it is no longer able to produce ATP and if doesn’t repair its mitochondria quickly, it will take ATP damage and die.

The 6 main types of organelles are simply different “upgrades” or “specializations” of the same agents/protein molecule and can be converted between one another (to specialize your agent against a certain prey species or to make a weaker agent that can target both storage and process organelles). They are provided to the player as presets to stop him from being overwhelmed. If the player adds a mitochondria damaging agent, this agent will damage the mitochondria of all species. It won’t be 100% effective against all mitochondria (because all species have unique “codes” for their organelles), but it will do the job. The general purpose agent is the weakest agent—it is able to affect all organelles but deals very little damage.

Now onto the UI that makes this all a breeze. When you double click on a placed agent organelle and click “upgrade”, it will open the following screen:


On the screen, you see a lot of elements that are common with the upgrade system. The 6 sided star grid is the “active space” where the cursor (yellow star) can move. I failed a bit at the drawing—my outside star was of the wrong dimensions so the lines don’t really fit it well and I didn’t bother to finish drawing all of the internal lines—so please ignore that part. The 6 purple circles on the corners are buttons. By pressing each button, you move the cursor in a direction parallel to the vector from the corner to the center along the white edges. In the image, the agent was already modified. If you took a stock process organelle agent, it would have started in the top left corner, and if you started with the all purpose one, you’d begin in the very center of the star.

The only difference is the GUI element with the checkboxes in the top right corner. This allows you to make sentances like “Show Mitochondria, Chloroplasts of Prey, Predators”. Putting down these checks modifies your star on the left in the following way:


Each icon is an organelle type from some species and the ring around it shows if that organelle belongs to a prey (green circle), predator (red circle), or neither (grey circle). To calculate the effectiveness of an agent on an organelle we will calculate the distance from the yellow star (agent code) to the species-specific organelle code (the circles on the image above). This distance will either be direct or a projection on a parallel vector (from star corner to center), not too sure which one will work better, but that’s an easy thing to change. At the start of the game, all of the NPC microbes’ organelle codes start in their respective star corners and after each round of auto evo they might move around. This means that in the beginning of the game the process organelle agent will be 100% effective on chloroplasts and mitochondrion (to be expected since this is the beginning of eukaryotic life and all cells share a common ancestor recently). This allows the player to focus on understanding other game mechanics and how agents work in the first few rounds before cells diversify and agents stop working as effectively on all different species.

Clicking on each organelle icon brings up a short box on the right that shows some stats about the species, such as population number, kill statistics and allows you to see how exactly it looks.


This allows you to find who kills you the most and how exactly you die so that you can find ways to defend yourself. You can also look at neutral microbes and decide how you could evolve to kill them and turn them into your prey.

I’m sure I’m missing some other things I came up with for this system, but I already spent too much time writing up this post :stuck_out_tongue: What do you guys think?

5 Likes

Yeah that sounds really great. I think it’s good that you put usability + fun first, that’s really important. If the player has multiple agents then they could be displayed on the same star, which is nice, that would make it easy to spread them out.

This is a bit of a diversion. I think there’s a couple of other agents to consider, the “summon members of my species” and “binding”. Seeing as binding the cells together finishes the stage, and does only that, it might just be a button. The “summon members of a species” agent is interesting because there could be good gameplay in discovering and releasing an agent which summons prey of another species to you so you can eat them. As a scavenger you could even drop some agent to summon a predator to kill some grazers and then you could scavenge what remains after the attack.

Also while swimming around if you swim over summoning agents maybe it shows you which species they are attracting and let’s you track people etc. Anyway that might be a second level to the system.

Here’s a prototype I wrote about code selection, not sure if it’s any use. https://github.com/Revolutionary-Games/thrive-prototypes/blob/master/Agents/letters.py

Overall I think it’s really cool!

2 Likes

I think this is brilliant and really intuitive!

How would the player organelles’s stars be decided?

This is cool. Great work!

With the summoning agents and the like, maybe as well as Damaging Agents there could be a section for Communication Agents. With each Communication Agent you evolve, you could attach a different message to it e.g. run away, come here etc. There would have to be preset messages that you select like selecting an organelle. What happens when one of these Communication Agents hits the player? Will the message come up on screen?

I’m wondering what the mirror mechanic will be for NPC species. Will auto-evo mutations include possible movements around the “star” of agent targets?

And what about non-damaging agents? According to this table, we might also have to accommodate:

  • Neutralising agents (those that “cancel out” agents of a certain type they mix with)
  • Bioluminescent agents
  • Bonding and signal agents
  • Inhibitors (slow down organelle processing speed, not sure whether this has been combined with damaging agents)
  • Stimulants (opposite of inhibitors)

I like the system here but I don’t know if it’s flexible enough to include these agent types, which in my opinion offer far more gameplay interest.

Auto evo them could be hard since the procedural generation algorithm should be remade entirely, having organelles of different sizes in the string genetic code thing (then again, we might want to do that anyways, to get the player species into the auto-evo for example).

@crodnu I think it’d be neat to start the player organelles at the common start point on the star with other species’ organelles (if I understood The Creator properly). Then I should think that the organelle code could be changed on a tab of the organelle upgrade star, to keep everything consistent (and intuitively I’d assign it a low mutation cost). Just my two cents, and I’m not certain I fully understand where the organelles start out.

@Oliveriver in reference to inhibiting agents, perhaps there could be an upgrade star for those and you have to match the location that another species’ agent is at? It could be a mimic of the above star, but instead of organelles there’s an overlay of enemy agents.

And as for bioluminescent agents, would it be simpler to sequester those as organelles instead of agents? Or is that too limiting for players?

Also, @TheCreator this is awesome!

This is a really cool system, my only concern is that its a grid. Wouldn’t it be easier for the play if it was a giant hexagonal slider, plus that would allow for much more variety in other cells as well as agents. Also I’m a little lost on the categories, can someone fill me in on their purpose and what an agent in say the Pilus category would do

I think it’s cool, but it may be a little too micromanagy for my taste to change every organelle and every agent on every mutation cycle.
Especially if we’re not careful with the pilus/engulfing systems, most players might go melee for simplicity.
It depends on how quicly the auto evo works tho, so maybe i’m just worriyng for nothing.

I personally think melee should be the primary go to combat style. Agents are kind of like landmines or traps in a shooter, its not as fun for some people to play that way but if youre smart and patient you can use them to deadly effect.

@crodnu I could get behind random changes to organelle codes, especially considering the point you make that players might be daunted by a more hands-on approach.

I’d like to clear up some terminology since I think I did a bad job with it in the first.
Organelle code: a species-specific vector that shows what agents will work on an organelle.
Agent code: a hex/3-dimensional vector that specifies the location of the agent on the upgrade space.
The agent code and the organelle code are compared to determine potency of the agent.
Upgrade space: the pointed star in this example that shows where the agent code could be located.

Yep, not a bad idea. We do need to be careful to prevent the UI from being over cluttered with various pieces of information. There also needs to be a screen where we can bind numbers to agent organelles (so pressing 1 releases agent A and pressing 4 releases agent B).

Dang, I knew I was forgetting someone. There are different sections on the organelle box. The one I talked about were the damaging organelles. There are also defensive ones, we could probably add communication, miscellaneous, and a bunch of others. I’d like to start with only damaging ones for 0.4.0, but we’ll obviously add the whole array of agents described in the GDD in 0.4.1+, so post your ideas on how they would work. Could you pm me the link to your prototype on slack? I don’t have time to check it out right now and am worried I might forget.

Thanks mate!

I assume you mean the organelle code. We could either let auto evo handle it using the same system as for NPCs, or we could add another tab in the upgrade screen that shows the agents of all other cells to let the player modify, or we could do both: have it be modified automatically, but allow the player change it.

Communicating agents deserve a whole thread dedicated to them (I changed this one to damaging agents to keep discussion more focused). It would be cool to tie in communicating agents with the behavioral editor to specify your own behaviors and to change the behaviors of other species.

I don’t really know how auto evo will decide which mutations are beneficial or not, it really depends on how we end up calculating population dynamics offscreen. If it’s some simple formula, we could use the gradient to find the mutations that result in the greatest population increase, if it’s more complex, we could try 5-10 different mutations and choose the best ones effect on the population size (anything to add @tjwhale?) . But ideally auto evo will change both organelle and agent codes.

These will all be separated into differenent sections.

  • Neutralising agents - would work the same as damaging agents, but instead of plotting organelle codes, you’d plot agent codes of different species. Then during gameplay you’d compare the two codes and if they are close enough, the enemy agent is neutralized, if they are farther apart, the enemy agent is not as potent and more diluted.
  • Bioluminescent agents - This would likely fall into the category of secretion organelles (which includes glucose secretion, oxygen secretion, co2, etc), except that you will be excreting a cloud of luciferin. The agent upgrade box will likely be almost identical to the organelle upgrade box (actually, excretion organelles could very well be put under structural organelles)
  • Bonding agents - Bonding agents aren’t actually agents. They’re more of protein/glucose hooks sticking out of the membrane that allow other cells to grab onto them and as such should work as membrane upgrade or an external organelle.
  • Signal agents - I’d like to divide these into two types. The first ones is cell signaling over gap junctions and will be the one used to create multicellular organisms, this will be a membrane upgrade. The second is paracrine signaling and involves releasing agents into the environment. I don’t know how this will work exactly, since I want to tie it into the behavioral editor, but you’re right that we will probably have to use something else for that class of agents. It would still probably be an upgrade window of some sorts, it just won’t have the upgrade space star.
  • Inhibitor/stimulants - these agents will probably not damage organelles (lower their compound bin), but will simply affect their process rate (process organelles) or capacity (storage organelles). They offer the benefit of lasting longer (a cell can quickly fix a damaged organelle if it has enough resources, but inhibitors will last a certain time). I think the upgrade system described above works perfectly for this types—the closer the codes, the longer the duration and th stronger the effect.

In my opinion it works fairly well for most of them. For the ones it doesn’t, we could devise a separate system. I’d prefer consistency, but you bring up a good point that some agents are too different from each other to be modified in the exact same way.

I’m not too sure what you are saying. Are you talking about organelles taking up more space, in which case I think all organelle will still occupy the same amount of hexes regardless of updates (e.g. mitochondria will be 4, chloroplasts will be 6).

Exactly, this is basically what I wrote in the beginning of this post.

Once again, you’re taking words out of my mouth :smile: which is good, since it means the answer will be intuitive to other players.

Dammit wayward! You could have saved me a lot of time if I read your post before I started mine.

Each division of the grid is a set amount of mutation points (lets say its 10). A 3d slider would be less intuitive and physically appealing in my opinion than clicking where you want to go.

These are just preset positions for the agent code. The pilus would start in the the lower right corner (in the general viscinity that the pili of NPC cells will start). This makes it so that placing a pilus-affecting agent without doing any upgrades will hurt the pilli of other cells.

It really depends on how long the time between each mutation cycle is, and how much auto evo changes the organelle codes. If each cycle is 5 minutes and auto evo only moves 1 edge at a time, you’d be able to play for around 30 minutes with your agent still affecting your prey. Personally, I love micromanagement in games, provided that I can micromanage when I want and I’m not penalized for not micromanaging. This is what I’m trying to go for here—if you want to constantly upgrade your organelles and agents, you can (which adds depth to the game and more complexity for the experienced player), but if you’re a casual player, you could very well pass the cell stage without opening the upgrade window once.

This is the purpose of stock agent organelles. You can just plop a process damaging organelle and it will damage the mitochondria of all species.

Boo! In all seriousness though, a small minority of cells use pili in real life, and I’m hoping to keep it that way for the cell stage. Engulfment on the other hand (or burrowing through the membrane of large cells if you’re small) I’m all for, and I’m hoping that people will use it instead of a pilus. I’d say that agents are more of flamethrowers or freeze guns that traps in a shooter (I’d say that signaling/communication agents are more landmines/traps). But as you said a while back, agents are really a mechanic that we have to implement before we can see how fun they are.

We could probably have both. Your organelle code changes as time goes by automatically, but you could come in and tailor it using mutation poitns.

2 Likes

I can’t really understand what’s going on but everyone says it’s good so good job!

2 Likes

I didn’t think the Behaviour Editor would be unlocked until the player had developed a primitive nervous system. Until that point, wouldn’t agents be instead of the Behaviour Editor?

I like the idea of a behavior editor being available for agent reactions. I look at it as an analog of phototaxis and chemotaxis.

In the days before the ozone layer, it’s conceivable that when a photosynthetic organism had an opsin excited by light, it had cellular machinery that worked to continue this stimulation, whereas a more vulnerable cell would do the opposite. In a similar way, when chemosynthetic bacteria near hydrothermal vents detect sulfur compounds, they move in the “up” direction of the gradient. It certainly isn’t neural activity; but microorganisms are capable of evolving tailored behaviors, which to my two cents would be better served in an editor than being a set category of actions.

That being said, the behavior editor in cell stage (if it’s implemented as such) should probably have significantly simplified options and a limited action chain length.

Edit: What I just wrote lacks clarity. I’ll give an example of why I chose this position.

Ex: Species A releases gathering agent 1.
Species A sets its behavior to follow the source of gathering agent 1.
Species B creates a mimicking gathering agent 2.
Species A begins to accidentally follow this to its doom.
Species A changes its behavior to not follow agent 1 or agent 2.

Let me know if it’s still not really clear, and I would be very interested in a counterargument.

1 Like

What i mean’t is that the code the organelles use in the procedural generation string in the auto-evo (the one based on the prototype by @tjwhale) would have to be of variable lenght, since it would have to account for the agent code being there or not, and a lot of the codes could be invalid (what i mean is, we wouldn’t be able to just type random gibberish and get a new microbe, we would have to figure out a more sophisticated way to do it).

I’m not totally sure that neutralising agents are going to be very good in gameplay. Because say cell A releases an agent to hurt cell B then cell B is better off releasing an agent to hurt cell A than trying to neutralise cell A’s agent. Because if you succeed at neutralising then you go back to square one but if you manage to damage them then they will be disincentivised to attack you next time.

Maybe if neutralising agents could neutralise a lot of different things at once then they might be more worth it. Of course if they are too good it will make agent gameplay redundant.

I’ll post about the CPA in another thread.

1 Like

Here’s just a little suggestion on how i think upgrading your agent vacuole could work for harmful toxins.
Think of it as a basic tree system the functions of which you can unlock using mutation points. you could also potentially go back to reroute your toxin evolution, but it might cost you a lot.

here’s also a version with an expanded defense branch a discord user by the name of “Sporefox” made, which i think could also work well and give the player more options.

Interesting… Maybe we could consider having a tech tree for the organic stages, similar to the one @NickTheNick suggested for the strategy mode?

1 Like