Organism Stamina Mechanics

Recently we have been discussing how to rework the ATP system in Thrive to work more like a sort of stamina bar. The reasoning behind this is that currently the ATP bar is entirely meaningless except for when the player is either currently out of resources, or decides to leave the editor with less generation than movement cost. Additionally, a stamina system can support a new strategic layer to the game which would make things more interesting and hopefully enjoyable.

After a bit of thinking after our most recent discussion, I feel I have finally developed a more concrete idea for how a reimagined ATP system could work, and have decided to create this thread so it and any future discussion is not easily lost in the relatively disorganized nature of our developer chatroom.

The Main Idea:
My proposal so far is that instead of reworking standard movement cost to always drain a player’s ATP when moving, we could grant new abilities and features to the players and AI that will allow them to begin willingly expending their excess ATP in exchange for various benefits. My reasoning behind this is that we will not be taking anything away from the current gameplay this way, and instead will be adding on to what already exists. This will be less likely to impact playability and enjoyability.
An example would be something like this: A cell want’s to boost themselves, so they enter boost mode and start moving 20% faster. By the time the danger passes, they have expended half their ATP and exit boost mode to save their energy, and now need to wait a couple seconds to let it regen so they can be ready to escape the next danger. They could expend all their energy but that would leave them unable to sprint for a while, and would be more vulnerable. It’s this strategic layer that I would love to see in Thrive.

ATP and how it will be consumed:
As of now, ATP quantity is only important so long as the cell is capable of producing more than is consumed which is currently not difficult at all! A great amount of discussion was held on how we would change this,and I have now decided that ATP production and consumption under normal circumstances are fine as is. Instead I am proposing that when a cell chooses to perform certain actions, their ATP production will be either slowed down or completely stopped depending on what works better for us. As long as the player still has ATP, they will be able to continue using their ability until they run out of ATP or stop the action. Once the cell is no longer using such an action, their ATP generation will resume it’s normal pace after a momentary pause (Probably about a second or two).
The important question here is; Should we slow down ATP production? Or stop it outright? I personally feel like slowing down ATP production would be better (Maybe something like a 25% reduction), as it would help mitigate the problem of running out of ATP much too quickly, it would also mean that certain incredibly efficient cells could potentially bypass the ATP cost all-together!

The Actions:
With this system in mind, we need to decide on what actions and abilities should reduce the player’s ATP. An obvious choice is “sprinting” which I will discuss below, but it’s also worth considering if mechanics such as engulfment mode or shooting projectiles should also drain the player’s ATP.
“Sprinting” was one of the topics brought up most often during our discussion, since it is a natural and obvious use of stamina mechanics in any videogame. Sprinting will be a togglable mode that drains the cell’s ATP in return for a boost of speed, which can be a game changer for predator and prey both as it will allow cells to speed to safety. It will need to be used carefully however, because if a cell expends all their ATP they might not be able to dash when they really need to!

There are many ways to go about implementing a sprinting feature like this, so I will list a couple potential methods below;

Method A: Provide a multiplier or simple addition to the cell’s base speed stat upon entering sprint mode.
This would simply be applying a bonus to a cell’s speed when they sprint. Something like a 25% or +30 increase to speed when activated. This is easy to understand, and I feel like it could be easy to implement as well.

Method B: Apply a dynamic multiplier or additive bonus determined by placed parts.
This method is a bit different, in that instead of all cells having the same sprint speed, the bonus would be determined by parts that provide said bonuses. For instance, flagella could have their normal base movement bonus, but also provide a 4% sprinting speed bonus. So a cell with 2 flagella would move 8% faster when sprinting! This method is more complex, but also much more interesting than the previous method due to it’s dynamic style. This method would also give us a great mechanical use for something like microbial jets which could provide a large sprint bonus but no normal movement bonus were we to be so inclined.
If we go with this method, I would prefer if sprinting would be disabled unless the player had parts that enabled it.

Changes to Balance:
This wont work too well without a moderately intensive change to how ATP generation and storage is handled unfortunately. Cells currently do not store very much ATP, and also consume it REALLY quickly when they suddenly dont produce any at all. In order to allow this feature to function properly, we will need to see about either separating ATP storage from the current all-encompassing capacity value in order to allow cells to store much more ATP, drastically rebalance ATP production and consumption rates to allow for slower regen and drain, or both. The objective here is to have ATP drain and regen at reasonable rates on average so that cells will be able to perform actions for a decent amount of time, while also being mindful of wasting ATP incase they find themselves in a bad situation.
I unfortunately dont have any concrete ideas for specific values at this time, as this is something we will have to experiment with. I will definitely think about it though, especially when I get some feedback from everyone else!

Many other ideas and concepts have previously arisen from this discussion and haven’t exactly been ruled out, so I might go about posting them here later if the other developers do not. That being said I look forward to seeing what everyone thinks of this idea, and apologize if this post is particularly disorganized.

2 Likes

It’s been sometime since I last approached this topic, and I have decided to go ahead and take a second pass over it.

I am actually content with the main idea, as well as the actions in the above post. However; I feel like I should not be so hasty about rebalancing endeavors, especially when it would involve total reworks of a well-established system. So I’ve decided to reassess how to handle ATP consumption.

ATP Consumption Redux:
To put things simply; I believe we shouldn’t really touch it at all, and instead just focus on how actions will drain it in a meaningful way.

My current idea is to introduce a sort of “strain level” to cells. That is, a scaling ATP cost that gradually increases as the creature performs associated actions. The longer a creature performs actions like “sprinting” without resting, the more strained they become and the more their ATP is drained until they eventually cannot keep up with the cost, forcing them to rest. When not being used, this strain level will gradually diminish to allow strenuous actions once again.

Concerns:

  1. Strain Induced Starvation: One concern from this strain system is the potential for players to perhaps over-strain themselves and end up starving because they can no longer produce ATP due to building up too much strain. Perhaps this would be preferable, but in the event we want to avoid players carelessly overworking their poor creatures, we can either force-stop strenuous actions upon hitting a certain ATP threshold, or penalize players with an “Exhausted” state where strain will be set to a safe value, but the player won’t be able to utilize strenuouse actions for a set duration.

  2. Strain Visualization: ATP count on it’s own is relatively straightforward, but how will we communicate to players their level of strain? Without visualization, players would not be able to determine how strained they are until it begins to visibly effect their ATP storage.

Should we desire visualization for this feature, my only current idea is that the ATP bar gradually shifts to a yellow color the more strained the player becomes. However this bears it’s own complications when you consider player accessibility and understanding.

Edit: Alternatively we could just cap ATP production to slightly less than the current consumption, resulting in the ATP bar slowly draining when performing actions. In order to prevent rapid regeneration of ATP, regeneration would similarly be capped in relation to consumption.

1 Like

I guess we kind of had Method B implemented with slime jets now, as such how will this impact the whole sprinting mechanic?

2 Likes

Indeed that seems to be the case. Though if we add more “sprinting” parts it’s worth considering merging their ability hotkey into a singular action that constitutes sprinting.
Such as a sprinting enabling flagellum and slime jet both being activated to provide a collectively larger boost in speed.

Otherwise it may just feel a bit odd to have numerous abilities that kinda do the same thing in their own way that must be activated separately…

1 Like

I naturally lean towards choosing the Shift key for sprinting.

I may also get this implemented sometime soon for 0.6.x combat update :slight_smile:

Which may not have the full ATP rebalance change, probably will just make the ATP cost of actions relatively low so that it doesn’t drain too quick.

2 Likes

Seeing as this is a feature that might be focused on soon given the expected focus on .6 features as soon as this update is out, I wanted to post this here to make sure it is in mind.

An upgrade proposal for flagella alters the behavior of sprinting by changing length…

  • Length as Short, Rapid Sprint v. Long, Paced Sprint (M) – Longer flagella will result in greater initial acceleration and faster speed, but a sizable drop-off in speed afterwards, similar to a burst. Shorter flagella will result in slower initial acceleration and speed, but a more sustained and consistent speed boost, similar to a measured jog.

This would mean that sprinting behavior will require varying acceleration/deacceleration rates. I was told before that this isn’t too difficult to implement. I think having this relatively simple customization ability in movement speed would help make a fundamental aspect of the game - movement - even a bit more engaging. If speed is constant all the time, it’s very obvious what you can and cannot catch, and chases become just pointing your mouse at something while pressing W. A sprint button will inherently provide some sort of dynamism in these moments, but a simple tweak would provide very interesting situations and better customization options.

1 Like

I largely agree with this… Except I personally feel like the long versus short dynamic should be the reverse… With length being the long paced sprint.

My reasoning being that the larger flagella require more energy to get spinning at the same speed as a shorter one. The added length means more torque required to move the greater mass, and also fighting against the physical forces of the water with greater surface area. Once moving though, those big fellas could use their momentum to keep energy use and speed consistent.
Short flagella wouldn’t need much time or energy to get going, but they would ultimately need more energy to keep up higher speeds due to producing less propellant force.

In my eyes this would be the intuitive method, but ultimately I suppose this is best left to the @Theory team. Haha.

1 Like