You know, the evolution game community is pretty neat. It’s not a big community, but it has heart. Or at least a primitive organ for the circulation of internal fluids.
Tactical weaknesses of puny terrestrial organisms aside, I’ve been in contact with the folks from Revolutionary Games (makers of the evolution game Thrive) to discuss our work to-date and our mutually bonkers ambitions. I’ve also been attempting to try out the Mindmonkeys on human test subjects, but I haven’t been able to get the larvae into their tea without them noticing, so I may have to forgo that part of the plan. It’s been fun and enlightening chatting with them, so we thought a mutual dev-blog would be an interesting collaborative project.
Thrive, for those unfamiliar with the project, is an attempt to allow the player to guide their species from the tidepool to the stars. They’re just as inspired by the actual science as we are here, but by forgoing the strict rules of hands-off Darwinian evolution I constrain myself to in Species, Thrive hopes to offer a different style of game: a more tailored experience with a much larger scope, more akin to a Role Playing Game in comparison to Species‘ strict focus on scientifically accurate simulation.
Unlike Species, Thrive is also completely open-source, so if anyone reading here has any programming knowledge and wants to help make Thrive a reality, please head on over!
You can read their version of this post here: http://revolutionarygamesstudio.com/devblog-5-thrive-vs-species/
Developer: Revolutionary Games
Thrive originally grew from the idea of remaking Spore, billed as a scientifically accurate God game, the way it was meant to be, though the motives have shifted during its development towards simply simulating the development of sentient life in a game environment. It’s an open-source project, so anyone can help out as much as they wish, and the game will always be free to download. At the moment, an early release is out for the microbe stage, incorporating editing, compound processing and more, with further updates on the horizon.
Species: Artificial Life, Real Evolution
Species ALRE is both a sandbox video game, and a ground-up simulation of Darwinian evolution in a 3D environment. Every creature in the game struggles to grow up, find food and reproduce before they die, and when they do reproduce, their offspring will be slightly different to them via random mutation. Since not all creature’s will naturally survive to reproduce, selection pressures kick in and everything from there is (natural) history.
From this simple concept, the game ends up replicating a lot of the complex processes of evolution on earth. And if you don’t have the patience for that side of the game, there are always plenty of ways to commit horrible genocide and/or create hideous abominations of science. That works too.
The game is fairly well into it’s alpha stage, and is available for free download.
We asked each other a series of questions, some applicable to both games, and between us answered those we thought relevant.
What is your game about?
Thrive is first and foremost a game about evolution, similar to Species. We want to explore the possibilities of simulation within a game context, not only biological, but chemical, physical and societal too.
From the player’s point of view, Thrive is a journey from unicellular insignificance to galactic domination, as they guide their own species towards increased intelligence. We want to pit the player against the environment itself, and challenge them to outwit or exploit the forces of evolution for their own ends. In the editor, your job is to make it as easy as possible to survive long enough to reproduce again; while playing, your job is to actually do that. The best adapted organism in the world means nothing unless you’re good at using it, since your own species’ evolution is fixed to when you can reproduce.
Species is an accurate simulation, with emphasis on the accurate. All the gameplay stems from exploring and manipulating the simulation.
Unlike Thrive, the player in Species doesn’t act as an agent within the game: instead they act on it, making changes to the world and environment and observing whatever results those changes may bring.
The game’s job, then, is to provide tools for the player to experiment with. From the ability to change the world’s climate and sea levels and rovers capable of performing automated artificial selection, to observation tools like the satellite map and real-time clade diagram.
How did the project originate?
Back in my high-school years I discovered the microbial evolution simulator Primordial Life (no longer available online, but you can still get its spiritual successor Biogenesis). It was such a neat idea I went looking for larger scale evolution simulators, and was genuinely surprised to discover that there really wasn’t much in the genre. It seemed like such an obvious and interesting idea for a game I couldn’t believe nobody had invested in it.
The idea stuck with me until 2007, by which stage I had discovered the XNA framework and decided that, if nobody was going to make a full-scale evolution simulator for me, I’d just do it myself.
The project actually started as a hoax to persuade Maxis into producing a better game with Spore. When Spore disappointed the founders of the hoax, they decided to actually pursue the hoax as a project. The team got really excited to produce a game that integrated elements of games from many genres, such as Civilization, Mount and Blade, Spore, Sim City, etc. However, the team had difficulty working with the project’s leader, so they moved to a new forum and renamed the project to Thrive. Since then, several generations of users came and left the project, until a few years ago a burst of activity caused by a Reddit post kickstarted the project into action and got a few programmers on board, and it’s been slowly chugging along ever since.
What are the main themes of your game?
Thrive has several fundamental themes. One is evolution. The whole game is about evolution. First your species from natural selection, and then your civilization from technological innovation. However, not only will your species or civilization evolve, but so too will their surroundings. As a species your ecosystem will always be changing, continents will shift, other creatures will evolve, climates will fluctuate, etc. As a civilization, religions emerge and spread, diseases will strike, populations will migrate, etc. In both these periods your success will be determined by how well you evolve to adapt to the evolution of your surroundings.
This leads into another important theme of the game, interaction. We want the player to be able to interact with the game and customize it. This is mostly characterized by the editors. The Microbe Editor, Organism Editor, Technology Editor, and Unit Editor are examples of editors meant to allow the player to directly evolve and customize their species or civilization as they see fit.
Another big theme for the game is realism with compelling gameplay. We want to make the game as realistic as possible, while still offering the player a fun and unique experience. An example of this is that, in the Organism Mode, we traded some realism in allowing the player to choose their mutations each generation. Obviously, the ability to evolve your creature is one of the most essential parts of the game and so we can overlook that it’s not very realistic.
Much like Thrive, evolution is the obvious one: a lot of the visual design involves things like cladeograms, and providing a sense of change over time is the reason for other features like the climate, adaptive biomes and vegetation growth system.
After that, it’s a game fundamentally about science and experimentation: that’s why the rovers resemble NASA rovers, and why the evolving creatures are autonomous beings, rather than player-controlled. My plans for future gameplay further emphasize this: species gameplay cycle will involve making changes to the simulation, followed by a period of observation and study while you try to work out what effects those changes had and how to tweak them better for the next round.
What are the unique elements of your game?
Individually, nothing is unique. Macroscopic ecosystem simulators have been done before in the form of games like SimLife, as have fast-paced natural selection sims like Biogenesis. But as far as I know, Species is the first time the two have met in the same program.
As with Species, Thrive doesn’t have anything that is unique to the game on its own. It does have a few uncommon elements, and the specific combination of these common and uncommon elements found in Thrive is what makes it unique. For example, strategy games have been made plenty of times before, and Thrive won’t deviate too far from that, but there are very few out there that actually have the whole world and ecosystem evolve into place before the strategy gameplay even begins, and allow the player to customize every tool, vehicle, and building that their species uses.
What is the current state of development?
We’ve had several releases out, the latest of which features a procedural microbe membrane and organelle models, and we’re aiming next for compatibility fixes, gameplay features and deeper simulation. Could you call that Alpha? We’re not even sure – it’s still a way away from the final product, but we do have a solid plan with the basics already in place. Slow and steady (hopefully) wins the race. If you’re more interested in the day-to-day work that goes on, you can always follow the development of our codebase on GitHub.
Alpha. It says something about the ambitiousness of this project that, 8 years since I began work on it, even some of the core features are still in a placeholder state. We are nearing beta, however, and I’m excited for that. Beta will allow me to add a lot of the flashy ‘non-core’ features, like flight and swimming.
What goals do you have for the near-future?
The next release will include a Nursery and a Player Species, which will show up on the clade diagram. This will give players the ability to design their own creature (via automated artificial selection), as well as giving them a stake in the world.
The game still won’t have any explicit goals, but with ownership over their own species the player can aim to co-exist with the wild species or, more likely, drive them all to extinction and take over the world. Maniacal laughter optional.
We’ve just released 0.3.1, which features Linux compatibility, some semi-major features and other minor fixes. Beyond that, we’ll start to implement some of the more important features of the game from both a gameplay and simulation standpoint.
Compound clouds – nutrients suspended in a fluid dynamics simulation for microbes to gather or add to – are on the horizon, followed by free-roaming bacteria, overhauls of the health, reproduction and death systems and iterative additions to the CPA (Compounds, Population Dynamics, Auto-Evo) algorithm. This along with editor improvements, combat and a general fleshing out of what we have now.
Revolutionary Games: How is a species defined, and when is it determined that a new species has been formed? Is there a measurement of change from the original species?
Species: A “species” is defined, at least in the context of the game (it’s a bit fuzzier in real life), as a collection of creatures connected by the ability to breed.
A Dachshund and a Chihuahua don’t have to be able to mate to be the same species, but so long as there’s a continuum of ‘intermediate’ creatures they can mate with, they remain the same species. This is what is known as a ring species. It’s only when that continuum is broken by the death of those intermediates that they will speciate.
Individually, creatures ability to mate is determined by their “genetic distance”, a measure of how similar their genomes are to one another.
Quasar: Metabolism is a complex concept. Are you planning to visualise the in-game metabolism at all, or hide it and simply let them work with the end results?
Thrive: Obviously the astute player should be able to look at what’s going on to better optimise their organism, so we won’t hide the inner workings completely. Think of building organelles in the editor like a production line, with each having an input, output and an energy upkeep requirement. These values will all be visible when building the cell, but should mostly be out of sight during gameplay.
That said, we do want some visual cues. We previously had hex organelles change colour based on processing rate, and animating their activities is an option with the proper models. The UI will also show compound stores if nothing else.
Revolutionary Games: We use an arbitrary currency called Mutation Points to prevent wild changes to a species within a single generation. What limits the maximum possible change caused by a mutation in one generation in Species?
Species: Since the genes are represented as numbers, most mutations are applied as a simple random number between -1 and 1, multiplied by a modifier (factoring in the background mutation rate and individual radiation exposure).
The modifier is unlimited, though. The quickest and most hilarious way to break the game is to put a stupidly large value into the Mutation Rate. But don’t tell anyone that, it’s a secret.
Quasar: Some features could steer the game towards adult themes: will you have things like inbreeding, cannibalism, the ability to eat other creatures before they’re killed, etc?
Thrive: From the start some people have labelled us simply as ‘Spore but more mature’, which we appreciate but would like to steer away from. Much as people want it as a lost feature of Spore, blood spewing from your prey is not a priority. Sorry.
It’s a bit early to say what our approach to these questions will be. Microbes cannibalising each other isn’t anywhere near as controversial as macroscopic organisms, so it isn’t a worry for the near future. We aren’t averse to having some mature themes, but it’s by no means a goal, and adding them only for the sake of adding them would in our opinion detract from the overall game.
Revolutionary Games: I can see variables like aggressiveness and curiosity, but how would they operate in an in-game situation?
Species: The creatures act on an emotional basis: they will eat when hungry, flee when scared, attack when angry, and so on. Each behavior/emotion pair is tied to a personality gene, so a high aggression makes them more easily angered, which in turn makes them more likely to attack others when angered.
They still need to be angered by something in the first place, though. A creature will never just lash out for no reason, but being targeted or attacked by a predator cause bursts of anger, as does overcrowding.
Quasar: Will the game be merciful towards players who make mistakes, or will it kill them repeatedly until they learn not to do that?
Thrive: It depends on the difficulty settings and how the world around them has developed. If set very low, a player could get away with using organisms which wouldn’t actually be able to survive properly, but at the highest level they’ll have to work hard to keep up with the pace of AI evolution and make logical choices about how to evolve (depending on their customised settings, they could also be wiped out by meteorites and gamma ray bursts without warning, but that’s a topic for another day).
Revolutionary Games: How do you distinguish between behavioral evolution, and adapted behavior?
Species: Due to the average length of an organisms lifespan, individual learning won’t be a part of the simulation. It’s short. Like really, really short. Imagine a tortured metaphor about mayflies or George R. R. Martin characters here, that’s how short we’re talking. It keeps the pace of in-game evolution high, but it means they wouldn’t have time to learn things, even if they were capable of doing so.
Their personality and instincts will change and adapt via natural selection, but each individual dies as dumb as when they were born.
Both (Jinx!): How does the ontogenical process affect an organism?
Species: At the moment, it doesn’t. Creatures are spawned as fully formed juveniles, they don’t develop from a zygote, so the development process doesn’t exist for them.
However, I would definitely like to see some elements of it implemented: certainly oviparity vs viviparity (egg laying vs not) is a shoe-in, and there should definitely be consequences to having small eggs and short incubation times in the form of smaller, more undeveloped offspring. As I so often find myself saying with Species, though, that’s a long-term goal.
Thrive: This concept has not yet reached a full consensus. Originally, it was never specified during discussions whether organisms would age or simply be born as adults. Having all organisms always be adults certainly makes modelling species over time (Auto-Evo) much easier, but at the same time detracts from the entire experience of living as an organism from birth to death, and experiencing the changing gameplay as you age. The tentative answer we’ve settled on for the moment is that organisms will age, but it will be restricted to a simple aging process, in that the only result of aging will be a gradual increase in your body size and related attributes. This concept will definitely be discussed in much more detail when we get to implementing the later stages.
Revolutionary: How do you relate the structure and design of an organism with its attributes, like strength and speed?
Species: For most stats, it’s generally a combination of math… (for example: Leg Speed = Leg Type Base Speed / (Bicep Width + Tricep Width + 0.5) * Size)… and simply eyeballing the numbers. (“Leg Type Base Speed” is a value stored alongside the leg model asset).
That said, many stats also include physical variables like mass, surface area and volume into their calculations. Some of the more complex attributes, like stamina and balance, even have me doing skeletal physics, calculating of things like joint torques, and compressive/tensile strength’s for each bone in the body. It’s surprising how much complexity it can take to make a stat’s behavior act intuitively.
Quasar: Will organs be implemented in future?
Thrive: Organs will definitely be implemented. The player will be able to add organs specialized towards circulation, respiration, reproduction, nervous control, digestion, and several other functions.
The organism will have an internal structure, where the organs will be placed, and most organ systems will be connected via a tube and node system.
Revolutionary Games: Will you implement organs in Species? If not, what parts of a creature’s structure simulates the effects of organs?
Species: I’m unsure: I have several ideas on the subject that would be worth exploring, but it’s not a high priority since you can’t see organs by default, and it’s against my design goals to implement ‘invisible’ genes that would affect a creature’s evolution.
For the moment, stats relating to organs are mostly just defined on an intuitive basis: for example, a larger ‘gut’ (middle part of the torso) corresponds to increased stomach capacity.
Revolutionary Games: What are the goals for underwater and flying creatures?
Species: Definitely planned, and hopefully within a few versions. As Terry Pratchett put it, “Water is just a wetter form of air”. I’d like to implement both flight and swimming as part of a single “movement in fluid” system. The difference will be one of drag and lift, with the former being the limiting factor for movement in water, while the latter is the limiting factor for movement in air.
Quasar: Playing with your prototype, I noticed that your microbes are simulated as rigid-body objects. Are you planning to extend that to soft-body physics?
Thrive: That’s the ideal, yes. If it works we envision flexible membranes undergoing distortion in collisions and under movement, but we realize this could be incredibly difficult, both in implementation and game computation. We want to move to soft-body physics and we’ve discussed some ideas, but we don’t currently have viable short-term plans to get it going.
Revolutionary Games: I noticed a lack of social structure within species. Will there be implementation of group dynamics in the future, such as herds of grazers, or packs of carnivores?
Species: There are plans for this, yes, but it will most likely be temporary and situational. For example, a creature going hunting or grazing may ‘ping’ other nearby creatures with a request to join/aid them, and the other creatures will choose to do so or not based on their own needs and genetic tendency towards cooperation.
I don’t have any plans for family or social groups, although it’s quite possible a highly cooperative species will stick together for many generations simply by always responding to each others pings.
Both: what is a feature, currently not in-game, that you most look forward to implementing?
Thrive: Auto-Evo, no question. It’s a game about evolution…and it doesn’t even have any real evolution in it yet. Bad mark for us there.
If you’re wondering, Auto-Evo is the term we use for the algorithm which determines which species evolve and in what way. It isn’t completely Darwinian, as with Species. Instead it’s a lot of abstraction, with species outside the player’s area interacting only via procedural food chains and the algorithm predicting how well on average they’d do at obtaining enough compounds to survive. Unsuccessful species are killed off, while successful ones have a chance of evolving which scales with their population number. Occasionally species will split and diverge. The player’s species is also subject to this system, so their job is to make it as well adapted as possible. Their actions will butterfly out into the rest of the global ecosystem, just as global biodiversity will influence their experiences in an intricate feedback loop.
Species: Well, I know from people contacting me that the feature most looked forward to by everyone else is flight and swimming, and that’s completely understandable. It’s a big feature, and one that will hopefully make a huge difference to the game, and I am prioritizing it because of that.
But personally, as a developer, I’m really looking forward to implementing a biochemistry simulation to handle the creature’s diet. The idea is that creatures would need to consume carbohydrates, protein and lipids, and break them down into ATP (energy) to live and amino acids to grow. That system would hopefully lead to more food sources and dietary niches in the game, which is a major driving force behind evolution in real life.
Well that was fun, and I learned things! For example, I learned Mindmonkey larvae can’t survive in boiling hot tea.
Thanks to the folks from Revolutionary Games for agreeing to this collaboration, and best of luck to them! Seriously, go check Thrive out. They’ve just released a new update for their Microbe stage prototype and another is soon to come, so keep an eye out for that too!
Speaking of keeping an eye out for new versions of games (dat segue), development on Species 0.9.0 is nearing the final stages. All the main features are in (I’ll do another blog post soon) and I’m tallying up the bugs and polishments. So stay tuned here as well!
Quasar and the Revolutionary Games team.
Species has a messaging system now!
Don’t worry: they are designed to be unobtrusive and easily ignored: the font is small, they use slow fades to appear and disappear, and they don’t make any noise. This is all partially because there’s likely to be a lot of repetitive ‘speciation spam’ in them, but mainly because City: Skyline’s fake-twitter is the most annoying game mechanic in all existence (in an otherwise great game). I erred on the side of not-being-an-obnoxious-twitbag.
Species has sexual reproduction mode and automated population control now!
I think I’ve discussed the automated population control before: it works by carefully adjusting the global food efficiencies in ways designed to dampen both population explosions and mass extinctions. It makes hands-off simulations easier to run.
Asexual/Sexual reproduction modes (or more accurately, Parthenogenic/Hermaphroditic reproduction modes), on the other hand, are new: I only implemented it this morning. I was surprised to find that Primum specium are actually quite okay at finding mates by smell. They don’t survive, but they do hang on for quite a few generations before extinction.
You do still need to give them more food to make up for the additional survival requirement. I’m planning on running a longer simulation later today to see whether it’s sustainable once they start speciating and the available mating pool diminishes.
I’m expecting this to have some interesting effects on speciation, as well. For one thing, sterile mutants will no longer be able to found entirely new lineages.
Species has fewer bugs than it did yesterday now!
Which is, yeah, pretty normal. We’re in bug fixing mode, which means I’m feeling more and more confident about when I’ll be able to release 0.9.0.
Tremble mortals and despair blah blah maniacal laughter blah blah kill off a main character to prove I’m a threat etcetera etcetera blah blah blah. Nothing you haven’t seen before, let’s move on to the interesting stuff:
I have been trapped in the endless dull hell that is the content management system, hence the lack of blogmaking and/or world conquering. While I was adding some of the new head types back in January, I found the whole system a pain to work with, so I attempted to improve upon it.
The attempt went poorly and I systematically broke all of the things (ALL OF THEM) but the sunk cost fallacy is strong with this one, so I kept plugging away at it.
I eventually reached critical shark quota and realised I was doing things wrong, cut a few losses and managed to bring the game back to ‘workable’. At which point, after careful consideration of the pro’s and con’s of various options, I gave up.
The content management system is functional and a lot better than it was. Asset stats are all written to a single file, I can specify and write them via the Mutation Map editor, and they show up in the editor without me needing to manually type placeholder nodes into the mutationmap.txt file. All good, if somewhat dull, things.
It’s still not quite as streamlined as I was aiming for, but that’s not my problem now, ’cause I’m working on other things for now. Future me can deal with that. May the gods have mercy on his soul.
So I’m back onto fun stuff! Starting with this:
It’s the new User Interface for the nursery. The box on the left shows the current average of all player-owned creatures: the box on the right shows the ‘Target’, that you can set either from exported creatures, or by the gene editor.
Over time, the nurse bots will artifically select for creatures that match the genetic profile of the target, breeding those that do and culling those that don’t.
The bar just underneath the creature images acts as a progress bar of sorts. Each blue dot represents a creature in the nursery, and it’s distance along the bar represents it’s genetic distance to the target. As new creatures are born and selected for, their genetic distance will close and the distribution of dots will drift from left to right.
Things I learned today # 1: wordpress can do slideshows!
As you’d expect, evolution in the nursery is faster than in the wild, but it’s still not fast, nor perfect. Even with a few in-game hours, it’s unlikely that whatever you evolve will be an exact replica of your target. I consider this a feature rather than a bug: designing your own species should be something with a bit of weight and randomness to it.
As a result, I’m planning on adjusting the way exporting and importing works in 0.9.0. There will be two types of exported creature: Specimens (exported by selecting a creature and clicking ‘Export’) and Genomes (exported via the Gene editor). Genomes can only be used as targets: they cannot be imported as living creatures.
Oh, and you can now position the nursery anywhere you like on the map during world generation simply by clicking on the map preview. Which is neato.
So… where does that leave us, re: the 0.9.0 release? Yes, I’m aware it’s well overdue, and I’ve made some changes to the plan to compensate:
* I’ve dumped the original plan of overhauling the UI. It’s still a pain to work with, but I can’t justify the time it would take. I’ll focus more on incremental improvements over the next few version than on one big overhaul.
* As far as mechanics go, I’ve implemented most of them. In addition to splitting exported creatures into specimens and genomes, I still have one moderately-sized one to add: a messaging system to help keep you appraised of events in the world, particularly ones related to your species. Together with some sort of easier way to find your creatures in the world, this should help tie the whole ‘player-interaction’ update together.
* I’d also like to get a decent number of additional new head types in: we’ve got the grazing-mammal branch in (horses, bovines, dromediares), and I’ve started on the carnivorous-mammal branch as well (canine, feline, bear), but thanks to the decision to use internet assets I have a lot more assets waiting in the wings. Just need to spare some time to add transitional forms, fur polygons, texturing and stats.
* After that, it’s really all just polish and bug fixing. The nurse bots need textures and additional code to stop them from driving through walls, there are a few freshly minted bugs with the UI to iron out, the display of player-owned clades in the clade diagram needs to be vastly improved, and I still need to track down that persistent bloody stack-overflow bug in the clade diagram that causes the game to crash during long simulations.
I’m not ready to commit to a release date until all the features are complete, but we’re on the home stretch to kick the shuttlecock into the hoop for massive damage. Touchgoal!
I am not a sports person. The point is, the end is in sight, and I’m already planning out what I want to work on for 0.10.0.
Still messing about with the design for the nannies. I think going for something a bit more “pathfinder” inspired was a good idea…
First look at the new nursebots:
These little robots will do your evil bidding inside the nursery, keeping the captive population alive and stable, as well as applying artificial selection pressures towards whatever you design in the gene editor. Because the captive population is so much smaller and more controlled than the wild, they will be a *lot* better at it than their larger cousins outside the nursary (especially now that the wild is twice the size it was).
Obviously the model is a placeholder: I’ve only blocked them out, and they don’t have a texture yet. I’m still designing them, but I needed something in the engine in order to code their behavior
I’m currently leaning towards taking the camera-stalk off of them and using a design more like the Mars Pathfinder, if only because Pathfinder is adorable:
Also, I need to pin down a name for them. Any ideas? Let me know in the comments!
Hello again minions!
Apologies for my extended leave of absense. I’m going to blame the vitamin D deficiency, although it’s quite possible I’m just lazy.
I’ve been all over the place lately. Here’s a few of the things I’ve been working on, changing, designing, redesigning, staring blankly at or considering scrapping entirely in favor of something objectively more awesome…
The current content system is a lot better than nothing, but it’s still a pain when I’m trying to import assets in bulk. It stores assets like this:
That’s a seperate folder, asset file (in this case, png images) and a data.txt file for every single asset in the game. The game interprets that structure to automatically import the assets and get their stats from the text file, but it’s still a pain to set up the folders and files.
My current task is to rework it into much simpler system, which simply stores all the assets in the same folder and uses a single large ‘Stat Dictionary.txt’ file to provide values for every asset. This reduces adding assets from a 4 step process (create folder, create file, create data.txt, edit data.txt) to a 2 step one (create file, edit Stat Dictionary.txt)
I’m very nearly done with this, and will be returning to the nursary once I’m done here.
Common Species Names
I did some experiments with the idea of generating common names for species (as opposed to the existing faux-latin scientific names). I’m thinking the most immediately recognisable way to do it would be to have an adjective that describes some aspect of them, followed by a name: “rainbow lorikeet”, “eastern rosella”, “bottle-nose dolphin”, “spotted quoll”.
So I threw together a quick, half-hour library of adjectives and sounds (I literally just pulled apart the common names of a bunch of animals), dumped it into the same algorithm that generates the latin names, and this is the result:
Short furred Ralf
One or two bugs where I accidentally cut the syllables at the wrong point (“Snnn” and “Flgon”), but otherwise the rules I’m using for syllables work quite well. If I could just find a way to assign the adjectives logically, this could be quite a viable addition to the game.
In case you’re wondering about the rules:
– Syllable 1 must end with a vowel,
– Syllable 2 must begin and end with a consonant
– and Syllable 3 is often empty.
So the first one, “Dracadpo”, is “Dra-cad-po” (Dragon-cicada-kakapo). See how many other animal names you can spot!
And yes, I’m aware I’m using the word “syllable” wrong.
Progress is being made, but it’s slow. Some images:
Some of the mechanics are in place (you can add creatures to the nursary with the move tool, and the game registers them and their offspring as “player owned”), others are still in progress.
As I already mentioned on the forum, I’ve finally given in and started using downloaded, royalty-free assets rather than modelling my own.
This isn’t quite as lazy as it sounds: it takes quite a bit of effort to turn a wolf modeled by someone else into an evolvable head type. I need to download the model, cut off the head, remove the eyes and eye sockets, seal the gaps in the model, UV it to use the fur textures, UV it a few more times if it’s got geometry for mouth or horn textures, optimise or smooth it if the poly-count is way off the average, scatter fur polygons over it, and export it.
Oh, and then I need to repeat the process for a few intermediate types so wolfy faces don’t just appear out of nowhere…
You get the idea: it’s actually more work to bastardize a downloaded asset than simply to adjust the shape of an existing one and export it. But since I suck and can’t actually model (ability to screw with existing models notwithstanding), the downloaded assets more than make up for the extra effort in quality.
Improvements to discrete/mutation-mapped Head Types
Currently, the game stores Discrete genes (head types, limbs, body covering) as integers. They mutate rarely and when they do they provide big stat changes, in comparison to the floating point genes which mutate commonly in small ways and provide a continuous spectrum between points.
For a discrete mutation to evolve, it’s proponents have to actively outcompete and displace the existing population in order to take over: the entire population can’t simply evolve statistically through hundreds of tiny converging mutations the way floating point genes can.
Those familiar with evolution may actually recognise this: it’s a textbook example of the Hopeful Monster hypothesis vs Darwinian Gradualism.
And here in Species we have something genuinely remarkable: evidence that the hopeful monster method of evolution is highly inefficient.
The discrete genes do evolve and even seem to respond to natural selection a little, but they don’t do so nearly as fast or as efficiently as the continuous ones. Creatures are far more likely to optimise their limb sizes than they are to optimise their limb type despite the significant speed/stamina benefits a more developed limb type would provide.
But enough theory, how can I use this information to improve the game?
If I convert these discrete genes into continuous ones, they would be far more responsive to natural selection. The trick is finding a way to do that. Consider this mutation map:
As a discrete map it makes perfect sense: each node is represented by an integer. Each node might be a head type, or a body covering… any of the existing discrete genes.
As a continuous map, it doesn’t work.
It *nearly* works: it works for 0-1 (0.2 rounds to 0, 0.8 rounds to 1), and can be interpreted to work for 1-2, 1-3 and 1-4 (1.2, 2.2, and 3.2 all round to 1). But the moment you have more links than nodes in the map, it fails.
The solution, therefore, would be to not represent the nodes genetically at all. Decouple the actual node’s from the genes entirely. Instead, represent the *links*.
Mutations will be a bit more complicated under this system: usually they will just add or subtract a small random value, but when they pass a node the mutation map will have to decide which branch they’re moving to and adjust the value accordingly. For example, adding 0.2 to 0.9 could result in 1.1, or it could result in 2.1 or 3.1. In all these cases it will still reference the same node and look the same, but which branch it is on will affect it’s offspring and it’s future evolution.
So that’s the technical implementation, and it would work for natural selection, since the stats of each head type could be easily lerped for in-between states. But what about the visual side of things?
It would be easy enough to just round it to and display the closest head type/body covering. But there’s other possibilities here too, although I’m not completely sure how viable they are. Fading between body coverings is the obvious one (although I’m honestly not sure how much more complexity Shader Model 3.0 can handle on top of the skinned animations and fur shader), but an even more interesting one would be morph targets on the heads: moving the vertices of the head model to an in-between state resembling the model on the other end of the link. It wouldn’t be possible to make it perfect: there would still be noticeable pops when the model changed it’s UV’s and how many vertices it had, and implementing it would be asking for some weird visual glitches, but it would provide a much smoother and more interesting transition between head types.
All long term stuff, of course, but I’m feeling optimistic some of these at least stand a good chance of being implemented.
I doubled the world size.
Specifically, I doubled the default size of the tree’s and terrain in every dimension. That’s 4 times as much area and 8 times as much volume.
The creature’s, rovers and grass are all still the same size as before, but a size 1 world in 0.9.0 will cover four times the area of a size 1 world in 0.8.0, the 6 meter tall tree’s are now 12 meters tall, and the cliffs are twice as high.
This was a good move. The world is still pretty tiny by real-world standards, but it doesn’t look tiny anymore. It is now a lot easier to believe that baby Primum specium actually are their canonical 30 centimeters.
Of course, some things have had to be changed to support this…
Ground textures had to be re-sized to keep them from noticeably pixelating at double size. The tree’s are also noticeably low res, but I haven’t addressed them yet.
Gameplay-wise, I’ve doubled the creature speed modifier, meaning the reduced density of tree’s and creature’s shouldn’t overly impact survival. I’ve also increased the sight and hearing range modifiers, for similar reasons.
But anyone who has played the game with World Size 2 knows it had a few problems. Some of these were easy fixes: increasing the size of the tree’s as well meant I avoided any of the scaling issues the vegetation simulation had. Grass density was trickier, since grass is tied to the LOD grid, but still ultimately a simple matter of multiplying the amount of grass by 4.
But the most noticeable problem was those Out Of Memory exceptions you could generate by creating over-sized worlds.
I had already reduced their frequency for 0.8.0 by addressing the memory problems in the tree simulation, but they are still there. This is at least partly because, in the released versions, I’m offloading grass vertices for the entire map to VRAM at the start of the game.
That’s a lot of grass vertices: enough to cover the entire map in the highest density grass. Simply making them fade out when you’re not looking at them doesn’t remove them from memory. And this is VRAM, not RAM. Your graphics card generally has a lot less memory than your computer.
Of course, I didn’t implement it like this for no reason. Sending a large number of grass vertices from the CPU to the graphics card is a slow operation: continually doing it on the fly so we needed to only store the vertices around the camera would be prohibitively expensive and cost a few frames per second.
But, that wasn’t going to work for 4 times as much grass, so I had to come up with an entirely new way to render grass: one that didn’t require sending grass vertices to the GPU every frame, and didn’t take up more memory than we needed.
The new system looks almost identical, but it acts significantly differently. To start, we only generate enough grass for a small area in the north-western corner of the terrain. Then we send those vertices to the graphics card when the world is created.
Then, when the game is actually playing, the camera continually tells the grass shader where it is on the map and the shader translates the vertices horizontally to follow the camera around. So as you walk the map, you’re not seeing a unique set of grass billboards: you’re seeing the same square set tiled across the map, like a texture.
But translating horizontally would only work on a flat world: the grass still needs to actually appear at the height of the terrain. This is accomplished by handing the shader the terrain’s height-map itself, along with instructions to translate vertices vertically to meet the terrain.
Interestingly, this means the grass doesn’t *exactly* follow the terrain geometry anymore. The texture is interpreted by the shader by interpolating smoothly between pixels, while the geometry is subdivided into sharp triangles. If the terrain wasn’t smoothed, this could potentially be quite noticeable, but unsmoothed terrain would be ugly anyway so I consider that a small price to pay.
So, rather than costing CPU time, the cost of the new grass is more vertex shader work. It still has the potential to impact performance when you’re GPU-bound, but not by too much: I’ve lost 2 or 3 fps when playing the game with no creatures to get in the way. Since I expect most players are more interested in having a decent number of creatures wandering about, which puts the burden of work back on the CPU, I’m willing to accept this cost for now (there’s still plenty to optimise in the future, of course).
For those wondering how this affects the Facility Design: I’m implementing an above-ground nursary for 0.9.0. Indeed, that’s a big part of why I’ve increased the world size. Turns out an octagon of fences (a new style of fence, too) is far easier to implement than a method for rendering an underground base.
This will most likely serve as another placeholder, though: there’s still not enough room for any other facilities, and I want to provide room for the rovers, gene lab, museum and AI core. But for now, we only need a single facility: the nursary. A larger world provides enough room for that without subtracting too much space from the wilds.