Darwinbots Forum

General => Leagues => Bot Challenges => Topic started by: Moonfisher on May 04, 2008, 06:08:57 AM

Title: Conspec Challenge
Post by: Moonfisher on May 04, 2008, 06:08:57 AM
Start in normal F1 conditions, with the test alge as the only alge and your bot as the only bot.
The object is to live off the alge with a bot that has a conspec (Doesn't attack it's own).
I guess the secondary objective would be to have as solid a conspec as possible, only being folled for as few cycles as possible, or not at all.

Also ofcouse the conspec used should be something that's hasn't been posted in this topic yet.
There are conspecs out there it can't steal, you can also post those if you like, but I want to encourage people to try to think of new ways aswell.

The test alge will not attack or make shell or anything like that, it only reproduces slowly and steals conpecs.
Just post or upload a bot that uses the conspec you want to submit.

The conpec test alge :
Code: [Select]
'Alge for testing your conspec
'If you can't get up close and feed on this
'Then your conspec is obviously vulnerable to these genes

cond
*.robage 0 =
start
.memloc .memloc store
.tmemloc .tmemloc store
100 .eye5width 1 mult store
stop

cond
*.nrg 3000 >
start
50 .repro store
stop

cond
*.memloc .memloc !=
*.memval 0 !=
start
*.memval *.memloc store
stop

cond
*.memloc .memloc !=
start
.memloc .memloc store
stop

cond
*.eyef 0 >
*.memloc .memloc =
*.memval 0 >
*.memval .memloc !=
start
*.memval .memloc store
stop

cond
*.tmemloc .tmemloc !=
*.tmemval 0 !=
start
*.tmemval *.tmemloc store
stop

cond
*.tmemloc .tmemloc !=
start
.tmemloc .tmemloc store
stop

cond
*.numties 0 >
*.tmemloc .tmemloc =
*.tmemval 0 >
*.tmemval .tmemloc !=
start
*.tmemval .tmemloc store
stop

cond
*.eyef 0 >
start
*.in1 .out1 store
*.in2 .out2 store
*.in3 .out3 store
*.in4 .out4 store
*.in5 .out5 store
*.in6 .out6 store
*.in7 .out7 store
*.in8 .out8 store
*.in9 .out9 store
*.in10 .out10 store
stop

cond
*.numties 0 >
start
*.tin1 .tout1 store
*.tin2 .tout2 store
*.tin3 .tout3 store
*.tin4 .tout4 store
*.tin5 .tout5 store
*.tin6 .tout6 store
*.tin7 .tout7 store
*.tin8 .tout8 store
*.tin9 .tout9 store
*.tin10 .tout10 store
stop

cond
*.eyef 0 >
start
*.refxpos *.refypos angle .setaim store
stop

cond
*.eyef 0 =
start
*.aim 70 add .setaim store
stop

cond
*.shflav 0 !=
*.shflav -2 !=
*.memloc .memloc =
start
*.aim *.shang sub .setaim store
0 .shflav store
stop


'--- Addapt shoot commands
cond
*.eyef 0 >
*.refshoot *.myshoot <
start
*.thisgene 1 add .delgene store

*.myshoot *.refshoot sub 1 >
*.thisgene 3 add .delgene store

*.myshoot *.refshoot sub 4 >
*.thisgene 4 add .delgene store

*.myshoot *.refshoot sub 9 >
*.thisgene 5 add .delgene store

*.myshoot *.refshoot sub 19 >
*.thisgene 6 add .delgene store

*.myshoot *.refshoot sub 39 >
*.thisgene 7 add .delgene store
stop

cond
0 1 =
start
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop


'--- Addapt eye commands
cond
*.eyef 0 >
*.refeye *.myeye <
start
*.thisgene 1 add .delgene store

*.myeye *.refeye sub 1 >
*.thisgene 3 add .delgene store

*.myeye *.refeye sub 4 >
*.thisgene 4 add .delgene store

*.myeye *.refeye sub 9 >
*.thisgene 5 add .delgene store

*.myeye *.refeye sub 19 >
*.thisgene 6 add .delgene store

*.myeye *.refeye sub 39 >
*.thisgene 7 add .delgene store
stop

cond
0 1 =
start
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

end
Title: Conspec Challenge
Post by: Peksa on May 05, 2008, 07:02:39 PM
There's a bunch more refvars, like .refdx or .refdn, but I guess using them would be unsportsmanlike
Title: Conspec Challenge
Post by: fulizer on May 06, 2008, 08:54:47 AM
not really theres was no rule against what conspecs you can and cannot use.
also a conspec is a conspec weather moonfisher likes it or not.
anyway living of vegs isnt that hard I thing my bot has a just aout solid conspec but unfortulatey I lost the origonal code and the only other one I have is badly mutated.
Title: Conspec Challenge
Post by: Moonfisher on May 06, 2008, 10:02:41 AM
There are no rules, as long as you can eat the alge.
Using other refvars can be interesting, like always aiming in the same direction and using .refaim, or always traveling at a certain speed...
But it's an extra bonus if the conspec can be put into any bot.
The point is actualy to see some new ways of building a conspec.

So far there are some "plug n play" conspecs this doesn't beat.
Endy uses .thisgene as it's .memloc value and has it's conpec as the last gene.
Since thisgene is a sysvar that gets updated each cycle.
Not sure if it's fooled for one cycle when the key is first entered though, that would still let it be fooled every 2 cycles while the target is looking at it...
I guess you could save the observed keys and push them into their memmory locations every cycle, but that would be more complex.
And I'm not sure you can overide any sysvar, you could have a bot that randomly checks, .thisgene/.genes/.dnalen/.totalmyspecies or something like that.
(The bots with Endy's conspec don't seem to be fooled though, so I'm guessing maybe .thisgene is also updated after the last gene)

But the new Slim evo has an even better way. Just pushes a value into out4 and if in4 is the same it's an enemy... so easy but very effective. (I can't think of a way to fool that)
Title: Conspec Challenge
Post by: Peksa on May 06, 2008, 02:45:59 PM
Actually, .refup and .refdn refer to number of .up or .dn commands in the DNA. It's .refvelup etc. that you're thinking of. Interesting thought though, to use speed for conspec.

Aura had an interesting conspec recognition system:

Code: [Select]
cond
start
1234 *.robage 1234 mod sub .out1 store
start

cond
1234 *.refage 1234 mod sub *.in1 %=
start
1 .botisafriend store
stop

Something like that at least, I can't remember exactly.
Title: Conspec Challenge
Post by: Moonfisher on May 06, 2008, 02:56:17 PM
Oh, didn't know that, just thought it was the value you where pushing into up or something...
Anyway that can still be fooled, same way as for eyes and shoot...

And didn't know Aura had that conspec, that's the same thing I usualy do... but it seems rather unstable the refage value can be unpredictable it seems...
Title: Conspec Challenge
Post by: Peksa on May 06, 2008, 03:20:55 PM
I guess that's why Aura's got %= instead of =. %= returns two if the first value is within 10% of the second one.
Title: Conspec Challenge
Post by: Moonfisher on May 07, 2008, 01:20:38 PM
I don't like using %= for something like that, since it depends on your age... if you're 1 cycle old you'll likely fail to be reconized by your parrent, if an enemy is very old it has better chances of being within the margin (If you have a high key value).
In this specific case I'd rather set the range manualy.
Title: Conspec Challenge
Post by: Numsgil on May 07, 2008, 01:41:17 PM
Do something like *.robage *.targetage sub abs 15 <
Title: Conspec Challenge
Post by: bacillus on May 08, 2008, 01:38:16 AM
Here's my conspec gene:

cond
 *.robage 0 =
start
 111 .out1 store
 -32000 32000 rnd .out2 store
stop

'CONSPEC CONDITIONS:
*.in1 *.out1 !=
*.in2 *.out2 = or

The I/O channel 1 checks that it's its own species, the second I/O channel takes out clones.
Title: Conspec Challenge
Post by: Endy on May 10, 2008, 07:45:10 AM
When viewed by another bot .thisgene will return the last active gene. It's relatively fool proof since it would be difficult for bots to deliberately up their own gene count(you could yes, just very very hard  ). Gets quickly messed up by viruses though, that was the main reason I stopped using it  

Title: Conspec Challenge
Post by: bacillus on May 10, 2008, 06:42:22 PM
I haven't actually found a better way to write a conspec gene than mine; I guess you could use those obscure vars Peksa pointed out.
Title: Conspec Challenge
Post by: Numsgil on May 11, 2008, 01:19:58 AM
The ideal conspec would be difficult or impossible to spoof, but be robust against minor mutations to allow you to release it on IM.  And super ideally you should be able to flag cannibots as cannibals so others can flee, or attack, or whatever.  I don't have a good example, just throwing that out there.
Title: Conspec Challenge
Post by: Peter on May 11, 2008, 04:00:25 AM
I suspect there is something serious broken inside the conpec-alge you have posted or just that you have forgotten some serious possibilities.

I just tested it against multiply4, it just uses the alge like it is alga minimalis. Sees one, kills one, without any thinking.

I never did much trouble in conspec recoconition, conspec recocnition of it is really extreme simple. The best way of making a conspec recocnition sytem is simple enough, make it yourself. Then it is not commonly used, and somebody else just have to make a anti-system only for your bot, this would mean you're a lesser target.
Even with that said, I would be really, no really suprised if my system hasn't been used by someone else. It is too, just too simple to be overseen by everybody.


All my genes are 'plug an play', or how you would like to call it. And yes it can be used in any bot. Does this mean I have completed the challenge.

Title: Conspec Challenge
Post by: Moonfisher on May 11, 2008, 10:27:07 AM
I was testing it against Multiply4 while making the genes for stealing the eye and shoot commands, so I know it worked in DB 2.43.1i.
And just tested it in version k and it still works... multiply starts of killing a few but it doesn't take long before all the alge are safe from it...
What version did you run, and where the test alge and multiply the only bots present ?
If theres other bots, like alge minimalis, then it'll also steal that conspec and loose the one from multiply.
(So if you're making a league bot with these genes remember not to steal the alges conspec)

And the test alge isn't tailored to any bots, it should addapt to any amount of eyes and shoots below the amount it has, and it only costs one more cycle to steal the conspecs for each time you double the amount of eyes/shoots available.

I'm also probaly going to add the other refvars at some point, so I wouldn't recommend those
It also occured to me theres a downside to the way slim evo is doing it... it only allows 10 different bots to use the conspec.

And the only way I can think of to mimic thisgene is by adjusting the amount of genes wich would take too many cycles and would require a lot of SG'fieing, especialy if using this on another bot.
But using thisgene does have a small chance of overlapping with other bots, especialy if you're making a SB, and theres the virus issue...

And using robage added with a key can be inacurate, you either need a large buffer wich will especialy leave you exposed during the eraly cycles of a league fight, or a tight buffer with the risk of killing your own.

So far the one used by slim evo is the most stable, but you won't reconize bots that are attacking alies.

Still nothing rock solid for league fights, not that I can think of anything myself.
Title: Conspec Challenge
Post by: Peter on May 11, 2008, 11:11:50 AM
I have been running it in 2.43.1i, with multiply and the alga as the only bots.

Well probably I did something wrong. I will look into it.
Title: Conspec Challenge
Post by: abyaly on May 28, 2008, 10:33:09 PM
Quote from: Peksa
I guess that's why Aura's got %= instead of =. %= returns two if the first value is within 10% of the second one.
No, Aura was done SG style. It checked if the sum of a few vars was what it should be, although there was an error in it.
The first Etch checked *.refbody in addition to several other vars. The second one doesn't. I was planning to add better conspec recognition back in, but I didn't get around to it. It's rather vulnerable to chameleons because of this.
Title: Conspec Challenge
Post by: d-EVO on November 30, 2008, 03:47:15 PM
This bot will live quite happily off your alge.

Title: Conspec Challenge
Post by: Ta-183 on November 30, 2008, 04:41:36 PM
What if..... What if you made a bot, that could use a number of standard conspecs, and check each of them by 'spoofing' conspec returns , and use each one every now and again, monitoring which ones still work. Add in an extra function, this alga's conspec stealing gene, and check to see if the targetted bot A, passes most of the bot's remaining functional conspecs, and B, doesn't steal it's conspec. If the targeted bot steals the bot's conspec, it's an enemy. If it's an enemy, steal it's conspec and kill it. Use the conspec like a fake I.D. to run around unopposed. Imagine Seasnake with such a conspec system.   It would destroy the IM in less than a day.
Title: Conspec Challenge
Post by: Moonfisher on December 06, 2008, 08:26:07 AM
I should mention, last I checked the alge it was broken... I think the amount of sysvars counted as eye/shoot commands or such has changed slightly causing it to delete itself
But the conspecs I've seen here would work though, broadcasting coordinates is a clever way of being sure.

So far the conspec I like the most is the one that was similar to the anti parroting conspec from bascillus. Can't rememebr who posted it, but the idea was more or less the same, except you broadcasted a random value from 0 to 100, and added 10 on the other output.
And the reason I like it is beacsue it can be compressed into one output without too much trouble. (To spend less energy on stores every cycle).

And if you're not concerned about viruses then I ussualy use .dnalen .memloc store because it requires no stores per cycle and can't eb faked. However if you get infected by a virus the conspec will break.

Anyway nice conspecs... I'll fix the alge when I get a chance. But lately all my spare time is going into making a NN mod for DB... and I barely have any spare time to begin with... so it'll be a while
Title: Conspec Challenge
Post by: jknilinux on December 06, 2008, 09:02:00 PM
Actually, that's kinda cool- virus infection automatically messing up conspec. That way, bots attack infected members of their own species... I consider that a feature instead of something to worry about.

EDIT: WHOA! I'M A BOT LORD!
Title: Conspec Challenge
Post by: Moonfisher on December 07, 2008, 06:06:20 AM
The downside is that the infected bot also attacks it's own
But I guess you could put in a gene to save the amount of genes, and one to react to infections. It would just be the 2 last genes.
I know you can use .genes dec to help hide the presence of a virus, so maybe it would be possible to just know the size of your virus and deduct it from dnalen... if that's the case then you also need to save your dnalen every cycle in your first gene and then check against the saved value instead of the location for dnalen (But then it costs a store every cycle).

start
*.dnalen X sub 110 store 'Where X is the dnalen of this gene
*.thisgene .delgene store
stop

cond
*.dnalen *110 !=
start
0 .shoot store
-1000 .mkshell store
-1000 .strpoison store
0 .up store
0 .dx store
'asf
'asf
stop
Title: Conspec Challenge
Post by: jknilinux on December 07, 2008, 06:27:34 AM
But my point was that's good- maybe not exactly in F1, but it is neat to kill off diseased members of your own species, to contain the virus.
Title: Conspec Challenge
Post by: d-EVO on December 07, 2008, 01:48:05 PM
Quote from: Moonfisher
So far the conspec I like the most is the one that was similar to the anti parroting conspec from bascillus. Can't rememebr who posted it, but the idea was more or less the same, except you broadcasted a random value from 0 to 100, and added 10 on the other output.
And the reason I like it is beacsue it can be compressed into one output without too much trouble. (To spend less energy on stores every cycle).
that was me  

one problem I had with the alge using this system.

when the alge simply copy the in/out syvars it doesnt work because my bot attacks bots with the same in/out as it
but when an alge copeys another alge that copys one of my bot it is safe. so aventualy you just have a lot of alge stareing at each other safe from attack.
fond a way around this by seeing if the alges in/out changes each cycle. problem is it takes 2 cycles to evaluate an enemy which is ok when they are just alge but in an f1 match it is kind of useless.

I fixed it by making the ratio between the conspects a syvar which is fixed for a whole species. such as *.totalmyspecies and just through in a *.totalbots
that way the enemy cant reproduce without being vunerable to attack and every time your bot repros eny unupdated enemy becomes vunerable.
very easy to throw in a few other syvars just to be sure
Title: Conspec Challenge
Post by: abyaly on December 08, 2008, 11:06:54 AM
The best conspec I have seen that doesn't require using stores to change values is Excalibur's.
It uses multiple memory locations and memloc. I don't remember how many, but let's say 10.
At init it picks a random number from 1 to 10.
This bot will check the nth memory location.
A conspec-stealer, in order to steal a memloc, must do the following:
-read the value of .memval in the opponent
-read the value of *.memval in the opponent
-assign *.memval (in the opponent) to the necessary location.
Excalibur uses the same value in each memloc, but it is not required.
This memloc can theoretically be fooled, but it's really hard. You need to keep a list of memlocs, and the list has to be large enough to keep up with how many the opponent uses, and you need to be able to distribute the entire list (and the associated values) among the species. The total number of locations dedicated to stealing conspec values has to be double the number of locations the opponent is using. At around 50 locations, the energy cost of the conspec is still low, but communicating this quickly becomes infeasible.

Although, if you don't mind using a store every cycle to guarantee the conspec is secure (I don't), then the options are endless. You can use pretty much any number sequence (in synch with either .timer or .robage). Saber uses robage. Here is the code:
[div class=\'codetop\']CODE[div class=\'codemain\' style=\'height:200px;white-space:pre;overflow:auto\']*.type .thrust =
.id1 *.robage .key1 mod .key2 add mod dup
.out1 store
.tout1 store
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
*.type .parry =
.id2 *.robage .key1 mod .key2 add mod dup
.out1 store
.tout1 store
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
*.type .riposte =
.id3 *.robage .key1 mod .key2 add mod dup
.out1 store
.tout1 store
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Title: Conspec Challenge
Post by: Numsgil on December 09, 2008, 03:38:06 AM
One of the things I really like about Darwinbots is how, years and years after it was created, there's still no perfect conspec recognition.  We always come up with new ways, and new ways to fool the new ways, but there's never a perfect solution.
Title: Conspec Challenge
Post by: d-EVO on December 09, 2008, 08:43:43 AM
Quote from: Numsgil
One of the things I really like about Darwinbots is how, years and years after it was created, there's still no perfect conspec recognition.  We always come up with new ways, and new ways to fool the new ways, but there's never a perfect solution.

I think we should keep it this way. There is no perfect solution in reality, so why make one for darwin bots?
you would never see interesting mimic bots evolve like we see in nature
Title: Conspec Challenge
Post by: abyaly on December 09, 2008, 01:55:30 PM
A conspec that uses a store every cycle is plenty secure; it won't be mimicked without copying over the conspec code. Unless your definition of a perfect conspec system talks about maintenance costs, this is it:
- Just one .out sysvar used.
- Leaves .memloc free to look at other useful values.
- Can only be fooled (in the general case) if a bot becomes capable of solving a problem it can't realistically solve: a polynomial of any degree could be used to generate the sequence. This is a problem a person wouldnt be able to solve (seeing just a finite part of the sequence), much less program a darwin bot to solve.
Title: Conspec Challenge
Post by: Moonfisher on December 10, 2008, 04:02:11 AM
Actualy the alge was able to steal the conspec from excalibur before it broke... it uses 5 different keys, but when you meet an oponent you only need to steal his key... so it works ok, eventualy you end up with all keys.
It doesn't do anything specific for stealing excaliburs key, it just checks where excalibur is looking and copies whatever is there to the same location in ones own memmory... after that you no longer need to worry about it, excalibur will look at that location and see the key... eventualy you end up with all 5.
Title: Re: Conspec Challenge
Post by: Pirate-Rob on August 31, 2010, 12:52:59 PM
Code: [Select]
' Gene 3 Start gene
cond
start
1 971 store
*971 .memloc store
stop

' Gene 4 Avoiding Family
cond
*.eye5 0 =
*.refeye *.myeye =
*.refkills 0 >
*.refpoison 0 =
*.refvenom 0 =
*.reffixed 0 =
*.memval *971 !=
start
 314 rnd .aimdx store
stop


This is the code I made for this challenge. This is Animal_Minimalus genes to avoid family only it is highly edited.

(I hope I can still post here even though the last post is from 2008, but I think I can because I'm still trying the challenge.)
Title: Re: Conspec Challenge
Post by: spike43884 on January 24, 2015, 05:29:10 AM
There are no rules, as long as you can eat the alge.
Using other refvars can be interesting, like always aiming in the same direction and using .refaim, or always traveling at a certain speed...
But it's an extra bonus if the conspec can be put into any bot.
The point is actualy to see some new ways of building a conspec.

So far there are some "plug n play" conspecs this doesn't beat.
Endy uses .thisgene as it's .memloc value and has it's conpec as the last gene.
Since thisgene is a sysvar that gets updated each cycle.
Not sure if it's fooled for one cycle when the key is first entered though, that would still let it be fooled every 2 cycles while the target is looking at it...
I guess you could save the observed keys and push them into their memmory locations every cycle, but that would be more complex.
And I'm not sure you can overide any sysvar, you could have a bot that randomly checks, .thisgene/.genes/.dnalen/.totalmyspecies or something like that.
(The bots with Endy's conspec don't seem to be fooled though, so I'm guessing maybe .thisgene is also updated after the last gene)

But the new Slim evo has an even better way. Just pushes a value into out4 and if in4 is the same it's an enemy... so easy but very effective. (I can't think of a way to fool that)


Actually. .thisgene is quite clever for conspec, because if a bot gets mutated to the extent it gains new genes...or loses some.
It'd be able to kill off the mutated one, or the mutated one kill off the others