Starting the Journey: Fixing Giant-Only Evolution in My First Devlog
I'm starting this devlog to talk about the development of my alien life simulator and, hopefully, connect with other evolution and alien nerds out there. Since I'm a solo developer without funding, working on this part-time, I expect the game to take a long time to become even somewhat playable. But because I'm absurdly passionate about this topic, I feel like I have no choice but to work on it, even though I'm poor and have lots of other stuff to do. What this devlog won't be is a shiny marketing brochure. Instead, I want it to be a collection of thoughts, combined with half-understood scientific concepts that I'm bending to fit my use case, as well as various experiments in simulation and gameplay. Since this project already has a long history, I think it's best to start at the beginning so you understand my motivation and the road that led me here.
Origins of the Project
I'm not sure when I first started thinking about building an ecosystem simulator for alien life — probably around 20 years ago. But it stayed as wishful thinking while I consumed various alien civilization games, with Spore being the most important (and biggest disappointment). When I learned programming six years ago, I realized I could finally work on this idea for real. However, between university and various jobs, I didn't have much free time.
My first attempt was a summer project: a simple script that simulated how different types of organisms grow in competition with each other in a fixed-energy environment. It was a naive implementation, as it didn't account for the time needed for organisms to multiply, so they instantly grew in numbers to match the available food. I also created a generative 2D star chart that could be navigated in a Pygame demo. But once university started again, I had to stop working on it.
On my second attempt, I approached the project from the opposite direction: graphics. Instead of text-based console output, I wanted to create something visually engaging. With the insane scope of my project (simulating all kinds of alien life, including hypergravity life on neutron stars and plasma-based life in suns), I knew I couldn't just create 3D assets and render them. I didn't want to end up making another dumbed-down evolution simulator with a fixed set of alien visuals based on human assumptions. Who says alien life has to be similar in size to us, carbon-based, or even require similar temperature and pressure?
So, I had to go abstract. I focused on generating maps that symbolized life on a planetary scale as different blotches of color. I wrote my own wrapper around an open-source planet map generator, and the resulting images were mesmerizing. They could even be projected onto spheres and rendered as planets. However, the randomness made it hard to alter the maps once they were generated. I kept going, experimenting with displaying atmospheric patterns and various shading setups to simulate orbital motion. But eventually, I realized that while the visuals were beautiful, they weren't a game. They'd only serve as a fancy menu backdrop, since I couldn't change them after they were created.
Third time's the charm - right?
A few months ago, I finally found some more time again and started my third attempt. Although I'm comfortable with Python, I decided Pygame wasn't the right tool and switched to Godot. I really like Godot, but of course, a framework alone isn't a game. And I still hadn't tackled the core problem: how to simulate open-ended evolution in a generative environment.
There are so many challenges in making a complex game like this — especially alone and without a budget. Games like RimWorld and Dwarf Fortress give me hope, though, that it's at least possible. Right now, I have a small script of about 500 lines of code, and while I'm excited, I've barely scratched the surface. There's so much more to do!
Avoiding Earth-Centric Terminology
To avoid falling into the trap of mirroring life on Earth, I'm cautious with terminology. For example, I believe it's safe to assume some alien life uses sunlight for energy, but I don't want to simply call them "plants." That limits possibilities. What if there are metallic life forms that convert solar radiation into electricity via something like solar panels? Still, I need to call things something, so in my head, I call them "plants" as placeholders, but I'm always on the lookout for better, more generalized names.
The Simulation So Far
Currently, my simulated environment is a single zone that receives energy from sunlight and thermal warmth. I've seeded it with two archetypical organisms: a "plant" that uses solar energy and a "forager" that consumes chemical energy. "Chemical energy" is my simplified term for energy stored in things like starches or meat on Earth. Both species have traits that let them compete for resources, with these traits starting at a low level and randomly mutating over time. Right now, the primary traits are "strength," "speed," and "perception," and ill-adapted species are naturally weeded out.
Mechanisms of Competition
Competition in the simulation works through three main mechanisms. First, competition is restricted by "blockers." For now, the only blocker is energy preference: for example, foragers don't compete with plants for sunlight since they eat chemical energy. The second mechanism is "initiative," an abstract stat that averages speed and perception. Species with higher initiative access energy sources earlier. Finally, "performance" measures the predator-prey interaction between species, summed up into a single percentage that represents the probability of a successful predation.
I'm not computing individual organism interactions, since the simulator operates on evolutionary timescales, with each turn spanning at least 1,000 years (which may still be too short). These probabilities influence how effective a predator-prey relationship is and, depending on the predator's initiative, how much energy they capture. I'm aiming to model not just classic predation, like lions hunting gazelles, but also more abstract forms, such as clouds of microorganisms feeding on other clouds or patterns of electrical currents absorbing other patterns. This is why I'm still not satisfied with the current names of the stats and want them to be as broadly applicable as possible.
Emergence is All I Need
One of the most satisfying parts of this project is making a change, running the simulator, and observing the results. This emergent complexity is exactly what I want the final game to capture. Watching evolution shape the species in my system is fascinating, but the system is currently broken. Evolution is overly biased toward species with high initiative (a combination of speed and perception), while strength is neglected. Species that evolve higher strength don't gain enough benefit to offset their increased metabolic cost. Metabolic cost essentially translates to a species' "hunger." The higher their stats, the more energy they need to survive and reproduce. Additionally, species with a higher metabolism provide more "meat" for predators, making them more appealing prey.
A Flawed Model
It makes sense that, in the current system, initiative is the primary driver of evolution. My plant ecosystem follows a winner-takes-all model: the tallest plant monopolizes sunlight, while shorter plants die off. Mutations of the tallest plant are either shorter (and wither) or taller, overshadowing their parent. Over time, plants evolve to absurdly large sizes, and the foragers must grow correspondingly large to continue "hunting" them.
The endgame in my simulation is a small number of gigantic plants that are too few in population to mutate further. Foragers, who need to be even larger than their prey to hunt effectively, hit this ceiling of minimal population size even earlier than the plants. Eventually, they can no longer mutate and are outpaced by the plants. Unable to eat, they die off from starvation. I'm not yet tracking secondary predation (what we'd call carnivores on Earth) because I haven't differentiated between chemical energy from plants and from foragers. If I did, those carnivores would die off alongside the foragers. What remains is a stable population of colossal plants in equilibrium.
Plans for More Evolutionary Diversity
To make the simulation more interesting, I need to create a greater variety of ecological niches that support species of different sizes. One way to increase diversity is to introduce more blockers, such as making some plants poisonous and limiting their consumption to foragers with anti-poison genes. While this is something I've planned, it doesn't address the root cause: the flawed initiative-based model.
My next plan is to simulate solar energy consumption with an asymptotic function. In this model, increased stats would correspond to greater solar energy efficiency, but no plant could ever reach 100% efficiency. This would allow light to filter through the canopy of larger plants, benefiting the smaller plants below. Being a large plant would still be advantageous, but not a death sentence for smaller species.
This could lead to divergent evolutionary strategies: larger plants might focus on maintaining their size and growing even larger, despite an inefficient solar conversion ratio, while smaller plants could evolve to be highly efficient at processing sunlight in the shadows. I hope this will also lead to the evolution of smaller foragers, resulting in a more balanced ecosystem that doesn't consist entirely of giants.
I'm excited to see where these changes lead, and I'll keep you posted as I make more progress!
Andromeda: Evolving Life
Insanely ambitious alien ecosystem & evolution simulation game
Leave a comment
Log in with itch.io to leave a comment.