Up to this point organisms mainly interacted with each other through competition for resources and space. That is to say the closest kind of direct interaction they possessed was bumping and pushing each other.
We have greatly expanded the capacity of the simulation for organism-organism interactions. This was done by creating a special set of phenotypes that may operate on two organisms simultaneously and triggers so that these new phenotypes can be activated by the collision of organisms.
Note that here we use a somewhat expanded scope for the word phenotype. While a phenotype is described as an observable characteristic determined by genetic and other factors, we include the resulting action/behavior as part of that phenotype.
Let’s just say this was not a simple task… Writing a function that can operate on two organisms simultaneously in a multi-threaded environment can be complicated. Especially if one is focused on performance and intends to accomplish the task without the use of any locks or atomic variables in a cache friendly manner. Additionally there were certain incomplete aspects of both the collision system and organism growth code that needed to be updated for this task to be successful.
Two very unique genes were created to demonstrate the flexibility of this approach. One a direct damage genes that adds a spike to an organism that inflicts damage when organisms collide. And the second a virus that is spread upon organism contact. Within the system its modeled as a phenotype that spreads to other organisms when they collide. Writing this into the system has also initiated the code of extragenomic information. There may be other interesting uses of this functionality. One could easily create structures resembling bacterial plasmids that transmit multiple genes!
The next stage will be to further develop the UI to allow for an expanded view of individual creatures, statistics, selection by criteria, tree of life, creature designer, etc… Once this is looking decent we will release a set of videos demonstrating the functionality.