Posts Tagged game

Species 0.5.0 is out!

Species 0.5.0 is out, and with a second alpha release under our belt we are now a totally professional games development outfit- pfffhahahahah I can’t say that with a straight face.

I do, however, feel like we’ve reached a milestone. 0.5.0 introduces several massive new systems (including temperature, grazing, 3d trees and a water plane) and dramatically changes the look, feel and scale of the game. It’s also a lot less clunky and a lot more streamlined than 0.4.1 was, and the evolution itself is much more interesting and unpredictable than before thanks to tweaks and bug fixes.

Get it here:

It’s still an alpha release, of course. It still has it’s fair share of bugs and oddities, and a long way to go. But we’re on our way.


Left-click to select a Creatures or Species, or Use the Selected Tool.
Use the buttons on the UI (or C/X/Z) to switch between Creature/Species/Ecosystem Selection Modes.
Use the Details And Statistics Button (or Tab) to discover more about the selected creature, species or world.
Use the buttons in the top-left (or ~, 1, 2 or 3) to set the Time Accelleration

RTS Camera
– Pan: WASD, Up/Down/Left/Right, or move the mouse cursor to the edges of the screen
– Rotate camera: Q/E, or Right-click and Drag
– Zoom: Scroll the Mousewheel, Shift/Ctrl, or Page Up / Page Down

FPS Camera
– Move: WASD, Up/Down/Left/Right
– Rotate Camera: Right-click and Drag.
– Toggle Flight: Press Spacebar
– Rise/Fall: Q/E.
– Sprint: Hold Shift.

Orbital Camera (activates in Creature Detail Mode)
– Rotate camera: Right-click and Drag
– Zoom: Scroll the Mousewheel, Shift/Ctrl, or Page Up / Page Down

New Features

Biomes (x23)
– Now each with a distinct ground texture, grass billboard, and vegetation type.
– Based on a variable fertility/temperature map, continually updated in real time.
– Biomes include snow, swamps, forests and lava plains.

– 3d Instanced models (thanks Jade!)
– Edible foliage (because only lollypops uniformally decrease in size as you eat them)
– More realistically scaled trees. (creatures can now walk under the tree’s)
– Hereditable tree simulation.
– Tree’s influence biomes.

– Biome-specific Billboard grass (purdy!)

Water Plane
– Creatures float, and swim at 1/3rd their normal movement speed.
– Has a heavy influence on fertility.
– Water replaces the crater in prevent

– Player triggered only, for now.
– Temperature (enables global warming and ice ages)
– Fertility (enables droughts)
– Water height (enables floods)

– Grassy biomes are grazable, providing a secondary food-source for herbivores.

– 5 tracks, set to play randomly with 3 minutes of quiet between each track.

Species Names
– Species now have randomly generated names, (with genuine bio-latin-gibberish!)
– The blank slate slugworms are now officially known as Primum Specium.
– Names mutate during a speciation. (closely related species will have similar names)

New World Page
– Pretty new biome-compatible preview map
– Creature-type Preview Thumbnail
– A variety of new options, including statistic modifiers, vegetation growth parameters and diet efficiencies.

Other features
– Simulation Time tracked. (because everyone likes knowing how much time they’ve wasted)
– Revive Button
– Species List (w/ populations) visible on Ecosystem page.
– Flash of red text when creature hardcap is reached.
– A number of new head types.
– etc.

Tweaks and Fixes

– Explainy Tooltips
– Redundant selection-mode buttons
– New players should be able to find their feet a lot faster. (hint: bottom of your legs)

Fat Torso Mutation Bias
– Fixed.
– Creatures now evolve into a much greater variety of forms. (this is honestly one of the biggest fixes )

Thin Legs
– Increase speed, but come with a stamina cost
– Vice versa for thick legs

Facial Feature Mutation
– fixed an issue that was suppressing the expression of facial features (Species: now with even more hideously surreal faces!)

Meatpile/Corpse size
– Smaller on both counts. (RIP my massive fields of meat. You will be missed)



, , , , , , ,

Leave a comment

New Notable Forum Threads

Want more details about features and fixes in the upcoming sub-release? (I’ll try to get it out in a week or two)
0.4.1 Development Thread.

Want more details on the plans for the next big release? (might take a bit longer)
0.5.0 Development Thread

Details about known bugs in the game, and their status (fixed, not fixed, etc).
Known Bugs

(Note: Instructions on how to use the Mod Maker coming soon!)

, , , , , , ,

Leave a comment

A wild forum appears!

I’m still working on getting the main site up and running (sorry, you’ll have to keep using MediaFire for the downloads), but I’ve got the forums up and running. Welcome to the community!

Unfortunately I’ll be offline for the next 48 hours, so you’ll have to entertain yourselves. Good luck with that.

, , , ,

Leave a comment


Well, here we are.

One year ago today I started this blog with a simple post with the most inspiring and unique title ever, unofficially unleashing the concept of Species on an unsuspecting world.

Now I officially release the Proof of Concept Demo: Alpha 0.4.0. You poor sods.

I’ll try to keep the maniacal laughter to a minimum, but no promises.

How to install

First, download and install the XNA redistributable from the Microsoft website.

Then, download Species: Artificial Life, Real Evolution (0.4.0). I’ve uploaded it to MediaFire as a stopgap solution until I’ve got an official website set up. That should only be a week or so, so check back! With any luck I’ll have forums and a wiki on it too.

To play the game, just extract the zip file and run “Species.exe”. I recommend you go into the options and set your resolution. 🙂

Note: some graphics cards will give you a Texture Width error when you try to run Species. If that happens, try copying this file into the “Mods” folder. It should fix that particular error.

Note 2: some other graphics cards don’t play well with the Terrain Shader. If your terrain appears blue or invisible, try copying this file into the “Mods” folder. Obviously I’ll try to build these modifications into later versions so you don’t have to install them manually.

If anyone has any problems running the game, send me an e-mail at qu.quasar{at}gmail{dot}com! I’ll do my best to get back to you as soon as I can, and I should be on consistantly for the next few days (except for sleep).

Massive thanks goes to Jade, our Friendly Neighbourhood Graphic Artist, without whom the game wouldn’t look anywhere near as polished as it does. Check out that deviantart account to see some of Jades other stuff!

The game comes bundled with the Mod Maker. I’ll post a tutorial for that later, or you can try to work it out through trial and error. You know, the same method I used to make the game. Okay, mostly error.

It’s just a proof of concept at this stage: I’ll discuss what needs implementing and improving in next weeks post. The game still has a long path ahead of it: this is only the first step!


(EDIT) Controls!

To move the Camera: Use W, A, S and D.
To toggle camera Gravity: Press Space.
To Move Faster: Hold Shift.
To change the Time Accelleration rate: Press ~, 1, 2, 3 (or use the mouse buttons)
To view individual Creature Statistics, including DNA: click the Select Creature button twice.
To view individual Species Statistics: click the Species button twice (you can even see the Species Average morph over time!).
To see the Tree Of Life: click the World button twice.
To Move creatures: click the move button, then click the creature you want to move to pick them up. Click again to place them.
To Feed creatures: click the feed button, then click the creature you want to feed.
To Kill creatures: click the murder button, then click the creature you want to murrrrder.

Bonus Controls! (mildly buggy)

Orbit camera: Press C (good for keeping track of individuals)

“Have fun.”

, , , , , ,


T-minus 6 days and counting…

Species: Artificial Life, Real Evolution: Alpha 0.4.0 (Proof of Concept Demo) Release is this Sunday!

Still working on getting administrative stuff done, but the game itself is ready and apparently stable on at least 3 machines. I’m only performing a few small optimisations and bug fixes at this stage (don’t want to break it!), as well as cleaning up the dead-ends and exceptions in the mod maker.

As mentioned on the comments recently, here are some system requirements. They’re not minimum requirements, strictly speaking (they’re actually taken from my development laptop, which struggles a bit but does run it), and if you’re okay with lag feel free to try it out on something slower.

CPU: Intel Core 2 Duo, T8100 @ 2.10Ghz
Graphics: NVIDIA GForce 8600M GT

BTW, any readers here who own a Mac and would be interested in getting their hands on the game a week early? If so, email me: I’d like to try to find a way to get it working on Mac. I’m trying to cancel out the negative karma points I incurred by using a Microsoft product to build the game.

PS: that surprise I mentioned a few weeks back? Turns out I’ve actually got two of them. Should have one in time for the release, and another within a week or two after that.

(Edit) Oh yeah, I managed to keep the entire game smaller than 25MB once it’s zipped up.

“518402… 518401… 518400… 518399…”

, , , , , , ,


Evolving Reproduction

Sorry this post is a day late. Administrative stuff has been occupying a lot of my spare time. Hopefully I’ll have a few surprises for you guys in time for the release… [ominous smile]

It’s been a while since I did an evolution/misinformation post. Better get onto that…

This claim probably qualifies as picking the low hanging fruit, but I’ve heard it enough times recently to finally lose my cool and deal with it. Those who use it prominently, evangelists like Ray Comfort and Eric Hovind, are surprisingly popular despite being some of the least intimidating intellectuals amongst the anti-evolutionist movement, so I feel the need express my awareness that this is kind of like picking on the special needs kid at school. I’ll will make an attempt to increase the local level of intellectualism somewhat by dealing with the fundamental disbelief that motivates this claim, but quite frankly, it seems likely I’ll descend into the incoherent noises of someone suffering first degree WTF.

The claim, to quote the aforementioned Mr Comfort, goes something like this:

“For example, evolution has no explanation as to why and how around 1.4 million species of animals evolved as male and female. No one even goes near explaining how and why each species managed to reproduce (during the millions of years the female was supposedly evolving to maturity) without the right reproductive machinery.” – Ray Comfort

The ignorance required to even make this claim is breathtaking. I get phantom keyboard pains in my forehead just thinking about it. Where to even start?

I suppose the first point to make here is fairly blatantly obvious to anyone who didn’t fall onto their head from the top of a ten story building: the theory predicts that sexual selection evolved once in the common ancestor of those “1.4 million species of animals”. I don’t know how Ray Comfort got to the end of the sentence without realising that this is obviously what the theory must predict, but he has somehow managed that weirdly impressive feat many times since: for several years he frequently made this bizarre argument, hundreds of times over. As far as I know Comfort himself finally seems to have stopped using the argument, but his followers most certainly have not.

The claim, despite being the equivalent of a lobotomised guppy in a swimming pool full of sharks, does have a more interesting basis: general disbelief in the evolution of sexual reproduction. Explaining the origins of dedicated sexual reproduction is a tricky one with few concrete answers, so seeing creationists asking gotcha questions about it online is not uncommon.

The first point is that, as is often the case, we can see a continuum of creatures in the ecosystem already. Plenty of asexual and hermaphroditic organisms exist, and there are a variety of creatures that fall somewhere in between. Even amongst our own species gender is hardly a binary male/female trait, and the animal kingdom makes the even the most varied among us look positively mundane. It’s not that hard to draw a line from the asexual to the sexual organisms once you gather up enough dots.

For sexual reproduction to evolve, it needs two things: a viable evolutionary pathway via multiple, progressive mutations (similar to the metaphorical line I wrote about above), and a benefit to following this pathway.

The benefit to sexual reproduction isn’t immediately apparent. Sexual creatures as individuals don’t survive any better than their asexual cousins: indeed, the necessity of finding a mate is quite a harsh impact on an individual’s ability to reproduce. But evolution isn’t about individuals: it’s about populations, and genes. A lot of people think of evolution in simple ‘faster leopard catches more food, faster leopard survives’ terms, when it often doesn’t work like that.

The benefit to sexual reproduction (well, okay, one of several) isn’t that the creature that mates survives, it’s that the population of creatures that mate can take advantage of beneficial mutations more efficiently than the populations that don’t. Amongst asexual creatures, every creature is in direct competition. In order for it’s genes to survive in the long term, it isn’t enough for creature A to survive and reproduce: creature A’s descendants have to survive and reproduce and continue to survive and reproduce, out-competing and avoiding being out-competed by the descendants of creatures B and C.

Assuming creature A’s lineage out-competes lineage B and C, any beneficial mutations amongst B and C will be lost.

Sexual reproduction introduces an entirely new dynamic: co-operation, rather than competition. Creature A’s lineage doesn’t have to out-compete B and C’s: instead they interbreed, merging their three lineages into one. This means that the beneficial mutations of all three creatures can make it into the descendant population. This co-operation is a surprisingly powerful benefit: so powerful that it prompted the development of a requirement to breed prior to reproducing.

The evolutionary pressure in favour of sexual selection, then, is that it increases the efficiency of evolution itself. Populations that evolve faster and more efficiently will, over time, be able to out-compete slower populations.

This is a large advantage to macroscopic creatures, for which the cost of reproduction is high. Microscopic creatures like bacteria and viruses see less benefit from this: they can easily compensate for the lack of efficiency by cranking out ridiculous numbers of offspring at a rapid pace.

All of this is fairly theoretical and abstract, but one of the things I’ve been very happy to see is that it is replicated in at least some form in Species. Individual species usually do become more amorous over time, without me ever having had to implement any direct advantage to mating.

My hope is that tools in future versions of the game will help us dig down even further, to establish exactly why this is the case, by (for example) comparing the most successful half of the population to the less successful half, and highlighting the largest changes.

Another hope for future versions of the game is to improve the evolution of sex. Currently, all creatures can reproduce sexually, and their ‘amorousness’ behavioural modifier increases the chance they’ll mate upon encountering another of their kind. When they mate, both creatures take a copy of the others genetic code. Whenever they subsequently reproduce, they blend their own genetic code randomly with that of their mate to produce the offspring.

So they can and do evolve from asexual (never mates) to sexual (mates whenever given the chance), but it’s a very simple spectrum, and even the most sexual creatures are still capable of reproducing without mating. Adding additional complexity in this system, like possible birthing restrictions and maybe even gender differentiation, would be worthwhile.

As a friend said recently, the feature creep potential for this game is practically infinite. Good thing I’m not trying to implement everything before release!


Hmm… I had actually meant to do a thought experiment fr this post: try to work out the most likely evolutionary pathway from basic splitting to gender differentiation. Oh well, some other time I guess.

Here’s something we found while Googling around for the relevant Ray Comfort quote”: “Darwin theorized that mankind (both male and female) evolved alongside each other over millions of years, both reproducing after their own kind before the ability to physically have sex evolved. They did this through “asexuality” (“without sexual desire or activity or lacking any apparent sex or sex organs”). Each of them split in half (“Asexual organisms reproduce by fission (splitting in half).” – Ray Comfort.

The Banana Man, ladies and gentlemen. Accept no subtitute.

, , , , , ,

Leave a comment

Future Development

This’ll be fun post to write: I’ll outline the things that are ready for the alpha release (ie. bragging), and then I’ll start talking about what needs to be fixed, and then go on to where we’re heading after that. And then… well, we’re now officially in testing-and-bug-fixing mode for the alpha, so I guess it’s time to announce the release date. Ahem.

Where we’re at.

Species 0.4.0 is a functional and apparently stable evolution-from-first-principles simulator. It’s possible to spot natural selection in action with the Species Average statistics, and I’ve seen things like convergent evolution (creatures consistently become more amorous, for example) and punctuated equilibrium (evolution starts off quite rapidly, but slows down after a number of generations). There’s plenty of neutral, beneficial, and harmful mutations, and a variable mutation rate (you can set it when you start a new map).

We’ve also implemented genetic recombination (mating) and the possibility of predator/prey relationships (attacking and eating dead creatures).

We also have a small variety of observational functions. It’s possible to analyse most of the creatures statistics, watch the progress of their energy and health bars over the course of their lifetime, and read their genetic code (which, admittedly, is somewhat indecipherable).

We’ve got a built-in speciation detector, that works out which populations can and cannot interbreed, and allows for the retrieval of stats and averages. We also have a real-time population history, which doubles as a tree of life.

Oh, and we’ve got a variable map generator, that you can use to customise the map before you enter the game, as well as entry-level save/load functionality.

And moddable body parts, too. 🙂

What we’re missing

Playing the game at the moment reveals a few… not so much ‘bugs’ as ‘things that aren’t much fun’. They’re things I’m aware of, but haven’t had time to fix and/or expect to fix with a planned, later feature.

Constant environment. The environment at the moment is a fairly constant variable: tree’s always regrow in the same area’s and the temperature never changes. This means that creatures have a tendency to adapt to their environment and stagnate.

Highly variable survival rate. A less-than-fertile map has a good chance of killing off the starting creatures, while a fertile one will cause a ridiculous population explosion once they adapt to be more efficient.

Lack of carnivorous incentive. Creatures rarely become predators because vegetation is plentiful and easy to find in comparison to meat.

Unmapped Mutations. I still need to add a mutation map for feature, limb-tip and body covering mutations. At the moment they find an ‘ideal’ far too rapidly.

Not enough Homogenizing. Species currently don’t visually distinguish themselves very well: you end up with a large crowd of highly variable creatures. Reducing the mutation rate helps, but I’d like to amplify homogenising forces like mating to make individual species more visually distinct from each other, as well as implement some sort of herding behaviour to make them congregate into discreet area’s.

Stupid creatures. They’re really pretty dumb sometimes. I expect their AI to improve slowly, a little bit with each release.

Incomplete Statistic Mapping. The UI allows you to track which statistics affect which other statistics, but the mapping is incomplete and doesn’t take into account all the effects (it’s a big list, and I’m tweaking it all the time. Nevertheless, I’ve managed to include all the major effects).

Performance. Is absolutely terrible on less-than-modern machines. My development laptop struggles to keep it going at better than 10fps once the simulation reaches more than 500 creatures.

Where we’re heading

Here’s the fun one! (Note that everything I say from here on out is tentative. I can’t make any promises, this is just what I’m planning)

The Big Feature for Species 0.5.0 will be a complete and massive overhaul of the vegetation system. It will use dynamic biomes based on a temperature/humidity map (which will change over time based on the actions of the creatures), instanced models, and a rewritten terrain shader.

It will also separate vegetative energy into two sources: fruit tree’s (point energy-sources, similar to the tree’s in the current system but rarer and more valuable), and grazing (idle, herbivorous creatures will graze, very slowly and inefficiently gaining energy but reducing the local fertility).

This system will solve the first two problems I have with the alpha release (mentioned above), and will have an as yet unknown effect on the third. But it’ll probably make the performance issues worse, so I may have to shrink the default world-size and creature-cap to compensate.

0.5.0 will probably also feature a top-down map view, with coloured icons for creatures and food sources, and another real-time phylogenetic tree of life. Unlike the current population history graph, though, this tree will encompass the entire history of the simulation, and will record morphological data about extinct species. It will form the basis for an extensive ‘fossil record’ in later versions.

One apparently minor inclusion to the vegetation system will be a ‘height’ value for fruit tree’s: creatures will need to hold their head (or hands) at a particular height to eat from particular tree types. While this might not seem like much, it sets the stage for a creatures vertical position to influence their actions and survival. And that sets the stage for another Big Feature: flight and swimming.

And of course, I’ve already mentioned a third Big Feature in a previous post: multithreading to improve performance. Not to mention my extensive plans for player interaction in the Beta… I may or may not be too ambitious for my own good.

But pulling right back from my deranged ramblings about the future, the figure you suffered through that entire post for is here. Without further ado:

Species 0.4.0 (alpha) will be publically released on the 27th May, 2012

(one way or another)


“… assuming the Old Ones don’t return before then and consume us all. You know, the usual disclaimer.”

, , ,



Wow, are we really at this stage already? In chronological terms, this post takes place just after Development Video #1. Ahhh, I was so young back then in the summer of 2011… [nostalgia]

… anyway, since I’m a cynical old fart now and clearly nothing like my half-a-year younger self, I’m free to criticise past-me for being a naive twit. And naive twit he was indeed when it came to speciation. He knew… wait… I knew? Gah, pronouns. This would be so much easier with a TARDIS, but I’m not a Time Lord. Past-me was but that was before the accident. Wait… after the accident? Goddamn time travel. Oh well, at least I stopped the Dec-2012 mayan-zombie-apocalypse. Suck it you undead sods, nobody gets to destroy this planet except me.

Back on topic, past-me I knew that seperate species, and thus speciation, was not going to be an easy thing to implement. We can’t even define it properly here in the real world! “Species” as a category usually means “unable to interbreed”, but what about ring species, where there is a continuous spectrum of creatures capable of breeding between two populations that can’t?

But they're still just birds! it's not like they've evolved into flying carnivorous fungi! Therefore evolution is false.

Image Source

This provides an interesting design challenge as well as a coding one. How do I define a species? How do I detect when two species have split?

(I say “detect” above because the existing simulation already includes speciation: what I’m describing here is a passive process that analyses the population, not an active process that forces a speciation under certain conditions)

As already stated, I knew that this was not going to be a simple problem to solve, but I was quite unprepared for the sort of problem it actually was. Coding it turned out to be difficult yes, but for all the wrong reasons. And as it turned out it was the design problems that required the most attention. This wasn’t a case of making it up as I went along (my usual method of coding): I was going to have to sketch out the problem in detail to find a realistic and sensible solution.

However, the game is called Species, so I couldn’t just chicken out on this one. It needs to be able to inform the player when speciation occurs, and allow them to track the progress of new and existing species in the ecosystem.

Initial attempts at defining this were sketchy in the extreme. Here’s something I wrote on the SMRT forum back when I was trying to work this out (because I’m too lazy to repeat myself when I can just copy/paste):

The biggest problem is defining species/populations. Just to give you an insight into the internals: I’ve set up a genetic comparison function which compares two creatures and returns their “Genetic Difference”, and I’m using this to determine mating compatibility (greater than 20 and two creatures can’t mate, and are thus different species). So, in the same generation, you have creatures A, B and C. If A’s genetic value is 10, B’s is 25 and C’s is 35, you can see the problem: A can mate with B can mate with C, but A cannot mate with C. Thus A and C are seperate species: but how do we define B?

This would be fairly simple to deal with if it weren’t for speciation. In a large population of many B’s and a few A’s (we’ll call them all “Species 1”), a C is born. What do we do? Do we mark the new C and all it’s descendants “Species 2”? Do we modify the existing populations label, making the B’s a mix of 1 and 2 depending on who’s closer? Or do we change the label and call all the B’s “Species 1.5”?

Despite the difficulties it causes, though, it’s kinda cool I’m dealing with the same issues taxologists have to deal with when trying to categorise animals…

My naivety shines through a little bit in those early comments, and later designs incorporated what I learned about ring-species and subspecies from the answers to my queries above. My second design had a system of ‘sub-species’ underneath ‘species’: a subspecies would be a group of creatures all of which were genetically compatable with one another, and a species would be the larger group that contains all subspecies, linked by those creatures that were genetically compatible with more than one subspecies. It took a few attempts at defining how this would work before I realised that my concept of a series of semi-mutually-exclusive subspecies simply wasn’t possible: the group of compatible mates is different for each creature, so any algorithm to determine this would end up with almost as many subspecies as creatures.

Eventually I dropped the concept of subspecies entirely and just stuck with a solid definition of “species”: a species is a group of living creatures from which a genetically-compatible path exists from any creature to any other creature within the Species. So despite the fact that the subspecies on either end of the ring species above cannot interbreed, the game would consider them all to be part of the same species

This solution brings up several more problems to solve: how do we tell if two creatures can interbreed? How and when do we work out if speciation has occured? And how much of a performance hit is this analysis of every creature going to be?

The first problem was, luckily, one I had already solved. While I was implementing mating, creatures had to check to see if they could mate in the first place. For reasons detailed in the previous post I couldn’t use the genetic string for this, so they instead compare their associated genetic values. Differences in floating point values increase their genetic distance proportionately to the difference, while differences in discreet values provide a constant (but dramatic) increase.

The end result is a floating point number representing the genetic distance of any two creatures. If it exceeds an arbitrary constant, creatures are no longer able to mate.

This system is an interesting one: it leads to a couple of interesting side-effects (for example, the genetic distance value is logarithmic. Immediate descendants can easily have a genetic distance as far as 10.0 units away simply by random mutation, but randomly generated creatures with no relation to one another have only 60.0-100.0 units distance). It’s also unmappable: afterall, how do you represent co-ordinates in 80-100 dimensional space? Because that’s what the genetic values usually amount to. Of course, just because something is unmappable doesn’t mean I’m not going to try…

Everyone loves graphs!

The graph is a bit misleading: the X position of a line represents the genetic-difference away from a “baseline-creature”. So if you imagine a circle, with the baseline-creature in the centre, the horisontal position of the line is the distance away from this creature. Two creatures can be on opposite sides of the circle, but appear at the same place on the graph and a species could be moving “around” the centre (instead of towards/away, as the yellow/orange-coloured species is clearly doing) and you’d never know. And since genetic difference includes a whole load of parameters, it’s less of a “circle” and more of a “50-dimensional sphere”.

Yeah, at that point it loses me too.

… [pause for thought]…

…actually, I just worked out a way to map it while I was typing that, by using the compatible connections rather than the co-ordinates and an elastic vector-web (ever played ‘world of goo’? If you have, you can probably sort-of imagine what I’m suggesting). Not only would that work, it would be absolutely fascinating to watch. Darn it, yet another thing to add to the feature creep list…

Moving on, the second problem then is “How and when do we work out if speciation has occured?”

The genetic comparison function isn’t too bad, but it does take time to run unless I can find a way to convert a Timecube into pure software (no luck so far). Back when I was only using it to help a creature determine if they could mate with another creature it’s effects were negligable, but calling it for every creature in a species, against every other creature in a species, every frame… well, you can see where that leads.

Thankfully, speciation can only happen under very specific conditions. It never happens unless the size of the species is changing, and never in response to a birth: adding a node to the web can’t create a new species (well okay, if the new creature is completely sterile it could create a species of 1, but that’s an exception to the rule).

Speciation is triggered by death: a population will speciate when the creature(s) linking it to the main population die off. So I only need to run the speciation checking routine in response to a death.

But we still need to work out how it works. I know I said working out the design for this system was the hardest thing about building it, but because I’m not an expert in searching algorithms, programming this algorithm was a close second.

The function starts by comparing the Species Average to all other creatures in the List, dumping any that are compatible into the “main population” bin. From there it compares every creature in the ‘main population’ bin to the remainder of the population, putting each compatible match into the bin before recursing to check the match against everything remaining.

By the time this function is finished, we have two bins of creatures: the main population and the remainder. 99% of the time there will be no remainder, which shows that the search function managed to find a way into every segment of the population. But if there is a remainder then it concludes that speciation has occured and splits it off into an entirely new species.

Huh… typing these posts forces my brain to rethink the processes I’m describing, and I think I’ve just stumbled on a few cases where this routine can be optimised. That’s good news: it means the game will be smoother and more efficient in the long run. Glad to see these blog posts serving a purpose beyond my own egotism!

Which isn’t to say egotism isn’t my primary incentive for writing this blog. That, the ability to tell rediculous lies in public. Oh, and also as cover for my time travel shenanigans. Nobody will ever suspect that I am really my evil time clone! Hahhahahahahah!

Now if you’ll excuse me, predestination demands I attack my past self with a toaster in a few minutes.

*Vwhooom vwhoooom vwhooommm…*
“Guys! I’m here from the future to warn you about- !”
“That’s quite enough of that.”

“Actually, predestination is a load of bull. I just told him he had to because it was hilarious the first time.”

, , , , , , ,