Gene Creation Language

 

The above image gives an example of the gene creation language that we are working on. There are two stages to writing a gene. The first is specifying various properties of the gene and the second is implementing it's behaviors. Because individual genes can be very complex we have begun the creation of a language in Emergence for their creation. Currently it mainly exists in C++ as a series of C-processor macros for prototyping. All the gene code gets compiled and optimized.

I won't currently go into details about what all the code does as nothing is in stone as of yet but I'll give a general idea. The gene in question "Spike" codes for the ability to create a sharp Spike on an organism. Now having this gene alone won't result in a spike on the organism, other genes are necessary to decide where it's placed etc...) The gene has two parameters that may mutate and evolve rate (length of spike and damage done) and angle which determines the angle that the spikes protrudes at. It goes through a couple steps of phenotype refinement as other genes can affect it. The gene also determines the shape of the spike so as genes mutate the shapes of the parts that make up creatures do as well. When the shapes change properties of the shapes (area, volume, sharpness, etc...) change as well that may affect other genes/processes. This makes genetics in emergence very dynamic.

We hope to make the creation of genes available for those whom purchase the software.

DemoCamp Presentation

Yesterday we presented a pre-Alpha game play video at Software Hamilton’s DemoCamp Event. We are very happy with how the presentation went and made great connections in the process. Thanks to all of you for your support.
We have added voice over to the presentation video and uploaded it for anyone who missed it.

Getting Ready for Marketing

Up until now this project has been mostly secretive. However, during the next few weeks we will begin to start marketing and promotion with the hopes of having an early alpha release ready for pre-sale in the next few months. With that in mind we have been spending the past week producing content to show off when marketing. I have just recently completed a diagram of the major functionality genes may possess. This outlines our genetic model quite well.

Gene-Actions-Black-01

New website and forums

We have migrated to a new web host that provides us with much more flexibility. The websites had to be entirely rebuilt from scratch, however now we have community forums as well! It was a busy day of work.

Selection and Species hybrids

Having all organisms based of the same modular genetic templates allows for some interesting functionality. Up to this point you could combine a whole species genetics into a species genetic profile. If the user places a new creature down according to the profile

Now we are introducing functionality to select multiple creatures at once from different species and create a hybrid genetic profile of the selection. A creature placed from this profile would come into existence as a hybrid of both species. It also brings up the important question of what a species really is and how accurately we can hope to portray one.

Organism-Organism Interactions (and others)

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.

Emergent Phenotypes

During the past month I have been extremely busy finishing the code to assemble body parts. It is now (mostly) complete and working very well. I should be able to begin the addition of many new genes and creature parts.

Setting this up resulted in the addition of two new features to the genetics simulation that had not previously considered. The first being the multi-pass phenotype generation described in the previous dev post. The second while closely related to the first is far more significant. The simulation may now determine multiple phenotype from a collection of genes. For instance we have a gene for a flagella. By it’s self this genes does nothing only describing what a flagella is. Placement of the flagella is dependent on the existence of other genes. One signifies where it will be placed and the other creates the structure that it is placed on. This can result in the placement of multiple flagella in various locations. The behavior of these is determined by the flagella gene, the gene placing it, and it’s ultimate location and orientation. Currently if your have two flagella they activate simultaneously and the result in movement of the organism in a combined direction, however we are planning to expand the simulation to allow for separate activation of multiple phenotypes. So for instance with a single flagella gene but other genes specifying how a body part is assembled and behavior of parts you could for instance have a organisms that has flagella specialized for different tasks. Some could function for forward movement others for lateral and others yet for rotation.

Multi-pass Phenotype developement

I’ve been working today on adding a final pass to phenotype development for structural genes. Before I go any further I’ll provide an analogy to explain my motivation.

Okay lets say you have a gene for a nose. Where are you going to place that nose? Is there a gene for a head that it will be placed on? Or can it be placed directly on a body and does a gene need to exist to specify the placement. Well if this is the case obviously you wouldn’t want to generate a phenotype for that nose if it’s gene can not function without the presence of other genes. So before you can fully generate the nose phenotype you need to generate the dependent genes.

That gives you two passes to phenotype generation. The generation of the nose and then inclusion dependent on the existence of other prototypes. However that is not really enough. Would a nose be expected to function different if placed on a foot vs a head? What about the angle of placement? What if the organism has 3 fold symmetry and 3 noses are placed? So obviously further refinement is necessary.

That leaves us currently with three passes for structural gene phenotype generation. Identification of the base phenotype, inclusion or exclusion based on the existence of other phenotype, and finally refinement based on the included phenotype base set. One could argue for an iterative refinement. However, in the hopes of restraining complexity and processor requirements we hopefully will not have to go there.

Gene Hierarchy Tree Update

Image will open in new window.

I have been busy tonight implementing more genes. Many of the primordial genes are setup and linked so that they may evolve. Additionally many of the early life genes are complete as well from when we had evolving plants early in the simulation. These genes are however no yet link up in the gene hierarchy, and can’t evolve in game.

I have attached a schematic of the gene hierarchy showing most genes and many of the links. Not all links are currently represented as they would clutter the tree. Currently implemented genes have black boarders while ones in progress have green.

The current goals with the tree are to implement genes that allow for aggressive behavior as well as those that allow for photosynthesis. After that we will focus on genes necessary for survival on land and more advanced body parts and behaviorsgenetrees1