Ok. So. Thermoplasts.
Now that there’s a LAWK setting in the game, we need something to make it worthwhile this release, i.e. an organelle that isn’t available with LAWK turned off. I can already picture the many complaints about a button that does nothing otherwise.
Thermoplasts are the obvious candidate, partly because they’ve been on the backburner for years and partly because nobody can think of anything else.
@IceDjuro added thermoplasts in this PR over a year ago. There are two problems though: the merge conflicts with master are nigh on unfixable (at least for me, because I’ve tried several times) and I think we need to put more thought into the mechanics anyway.
After fixing a few issues with the original branch, I recorded this gameplay footage, mainly as a reference for myself so that I understand how the feature worked.
Thermoplasts and thermosynthase (a prokaryotic version of the thermoplast) produce ATP directly from the temperature gradient. There’s a (tiled) noise map representing heat overlaid on the environment, and the thermal gradient “compound” a microbe collects is equal to the change in heat between its current and last position.
Unfortunately, my issue with this system is that it’s not intuitive to the player. For them, there’s just an extra pink bar that goes up and down seemingly at random. To have something that players can have fun with, we need some visual indication of thermal gradients on screen.
I have an idea I prefer. But since 0.5.9 is scheduled for mid-July, it might be too much to design, create and test by then. So I also have a backup idea.
Photosynthesis Model (Backup)
This is basically how thermoplasts were envisaged until the extra design work last year.
Thermoplasts and thermosynthase act like chloroplasts and thylakoids respectively. They produce ATP at a flat rate which scales with patch temperature. Unlike chloroplasts, they have nothing to do with glucose, so a thermosynthetic organism could survive without glucose storage.
Meanwhile, Auto-Evo calculates the fitness of thermosynthetic organisms just as it does for photosynthesis (again with sunlight and glucose replaced by temperature and ATP respectively).
Since this follows the model of in-game photosynthesis, it would be simple to implement. It won’t provide much gameplay interest or variety though. Still, survival as a sessile organism in the vents would be somewhat novel, so if this is all that I can get done for 0.5.9, that’s enough to justify the LAWK switch.
Visible Heat Map (Ideal)
This is a modified version of the newer thermoplast design that I think would be much more interesting to the player.
Again, there’s a noise map overlaid on the environment to represent temperature. This time, there’s a button in the GUI to toggle its visibility. It would be invisible by default, but would be set visible when the player leaves the editor after adding a thermosynthetic organelle for the first time so they don’t have to find it themselves.
There are a few options for how to display it and some questions about its interaction with compound clouds, particularly iron and ammonia due to colour resemblance. One way to lessen the impact of clashes is to realise that areas of constant temperature don’t matter, only boundaries do. So we could try something based on contour lines, akin to a topographic map.
Keeping the visuals for the heat map to mostly lines should help distinguish it from the blobs of compound clouds. This is something I put together in a graphics program - it has five contour lines and their opacity scales with the level they represent. I have no idea how difficult this would be to do in code though.
A thermosynthetic cell constantly measures the temperature around its membrane. Probably using the same circular approximation to the membrane that compound collecting currently does, and probably only measuring at a few points (otherwise, you know, massive performance issues). It then calculates the greatest difference between the temperature at any two of these points. Multiplying by the number of thermosynthetic organelles (with thermoplasts counting for more than thermosynthase) then gives the total ATP generation rate.
The temperature of a patch determines both the average height of this heat map and its variance in height. So the vents for instance would give rise to more common thermal gradient boundaries with more extreme temperature differences than any other patch. Think the topography of the Himalayas versus the Sahara. So thermoplasts are much more effective in the vents than anywhere else, but can still do something in most patches.
I think Auto-Evo would have to ignore all this complexity though and function as it does in the photosynthesis model. That seems fine to me.
One big issue with this system - and a reason why it could take a long time to implement - is displaying all this information in the editor. What does the process display in the tooltip look like? How do you calculate the expected ATP balance when it can change so significantly in the environment? How do we modify this display based on the temperature in the patch, which will affect ATP generation but only indirectly? For the record, IceDjuro’s thermoplast branch doesn’t really address these questions adequately either, since a “thermal gradient” compound is hard to wrap your head around.
Overall, I think this system sounds pretty fun to play and a lot more intuitive. There are still some holes though, so I would appreciate people’s thoughts.
The Plan Moving Forward
Unless anyone has a better suggestion, my plan is to add the photosynthesis model thermoplast in the next few weeks, leaving the full version as an overhaul to make post-0.5.9.