Artificial life has always fascinated me. As a side project- a diversion, I thought to build a small ecosystem where I could tinker with RL in competitive environments. I planned to spend most of my time in PyTorch, but I wanted something fun to look at too. So, I started with a Petri Dish:
Light provides a regular source of energy, small critters turn that energy into more of themselves, bigger critters make more of themselves by eating the littler critters, so on and so forth.
Most artificial-life style games I've built become balancing games on their own. Seriously, build one, they're fun.
So, completely forgetting why I had built this, it occurred to me that I could make my critters composable. I wanted to see the individual components keep on, attached or otherwise, when something happened. That also meant no more global health.
Also I put them on a sphere- because why the ████ not.
I started fresh again with a Rust app called Cella on March 18th. The original stack is more or less what I'm currently building with.
Each cell has a function. When cells die, they became detritus. Organisms (because cells) require energy for mobility, attack and logic.
The organisms themselves can be composed of things like solar collectors for energy, digestive cells to eat detritus, motor cells, vision cells, and so on.
As cells, or groups of cells, break off an organism they become their own organism. Because logic cells can operate in parallel, it's technically possible to recover from some pretty severe "injuries".
The ability to create is there, but limited by cell types- it's clear I'm more focused on form than function; that's fine. It also has a couple dimensions of fun I'd like to explore, and the allure of self-piloting alongside the drones, FPV, and 3D is with me.
Building can be fun too. I've played countless games where meticulously designing craft was every bit as rewarding as the game loop.
Ok, it's not exactly Eve Online's vast collection of configuration options, but it is super composable.
Yeah- code :/ - ok, so it limits a potential user base which I really don't want, and most devs I know don't want to spend their spare time coding. LLMs have changed that barrier though, and there may even be some good potential here for composable programming if people want to take it that direction. I just want to pilot one, so and prioritizing first-person playability is a must.
One could imagine LLMs cranking out competing organism JSON structures and accompanying Lua scripts to battle it out.
I'd learn later about the game Screeps.
Still, mission accomplished; cells have function. As a nice side-effect, when an organism loses a cell (or gets ripped apart) it continues on.
If your logic cell can stand up to losing a couple vision cells and a motor cell, great. If not, it's only dead in the sense that it's no longer working as a whole.
If your differential-thrust-powered critter loses a motor cell and you can't adapt, you spin out of control. No global health stat, just physics.
The less-than-stellar attempt at a 3D-rendered first-person view is where I decided to change course, dig a little deeper, and start with a fresh code base.
I want to see these organisms in 3D.
You know what- let's put the little blocky buggers in space! Blocks in Space!
. I want to see them dogfight!
.. Targeting each-other with informed and specific intent and not just winding down a set of health bars.
... Tactical displays that actually tell me something about my ship!
In fact, let's call them spaceships now- yeah, that's the ticket!
And voxels, I guess. -- Hey, it's a straightforward place to start with Newtonian physics and composability in mind. And, as someone who's never once played Minecraft, I've always wanted to build a voxel editor. Also, moving forward I don't see anything precluding additional shapes.
This could get fun!