Ok found some stuff that could help :
*.robotage 0 =
should be *.robage
So all your initial values are never set.
Also noticed some of those values are constants... for that you can just define the constant value you need and refer to the var without the *
(You don't actualy need to create a location to save the value in, however if you plan on extracting the code again from inside DB and you defined an existing sysvar then it may have replaced the comand with the name you defined. The code would execute the same way, but may be harder to read, anyway it's only an issue if you're running an evo sim or something.)
This line :
.tie *.robage 1 add mult inc
isn't working as intended I think.
You could write .tie *.robage sgn 1 sub abs mult inc
Or something like that, but right now you will be incrementing a new memmory location each time your age rises (As in every cycle)
At age 1 you will store in location 2, at age 2 you'll increment location 3... asf...
Also all you realy need is the second line (.deltie inc) to get rid of the birth tie, since newborn robots birties have ID 1 in the child. This should also help against tie attacks in F1 and F2 (But it's not foolproof... cheap though, 0.004 nrg per cycle I think)
This line :
339 .memloc store
could be put in your *.robage 0 gene (The value will not be reset at each cycle)
(Just to save 0.04 nrg per cycle )
EDIT: Also you can just write .genes .memloc store, to make the code more readable (*.genes refers to the value stored in location 339, .genes refers to the value 339 itself)
And if you want to be sure it's alga minimalis, then try checking .dnalen instead of .genes, it's dna length is 13.
The reason is that many top bots only have one gene, and you also risk meeting bots with the same amount of genes as your own bot. So the exact length of the dna is much safer to use.
The gene for checking if all eyes are empty could also be done by adding all the eye values together (Use abs on them if you want to be a 100% sure the result is valid, not sure if eyes can have negative values).
Then check if the result is 0 in the end. This would also save 0.004 nrg per cycle times 8
Although optimizing these areas usualy don't make a big difference unless youre dealing with a small bot running on low nrg.
And last but not least :
You can not change eyefocus mid cycle. If you want to know why read the first post I wrote or read the section on code execution and stacks on the wiki. The explanation on the wiki is probably better, but the post is probably more oriented towards what you need to know. Either way I think it would help you understand how the code works (It's not exactly like regular high level languages like C++ and java and such)
Anyway your eyefocus will always be 0... it will never have any other value because this is the last value you push into it in your code.
All the other actions on eyefocus are irelevant, the last one counts... you can not execute several actions on sysvars in the same cycle... again you need to read that post or the wiki to truly understand why.
But to try and put it in a short and simple way:
The actions you bot takes (moving, shooting, changing eye focus, asf) are not executed at the time where you enter the value, the are executed once every cycle after completing ALL your code.
So for instance .shoot is location 7, so if you write -1 .shoot store, the only thing you did was store the value -1 in location 7, and you spendt 0.04 nrg doing it. (Nothing else happened whatsoever, you did not shoot). Then once you reach the end of your code, if nothing happened to change this value then you will shoot in that cycle and the value in the location will be reset to 0 and your code is then run once more in the next cycle.
Understanding how this works will be very important when designing your virus or viral defences when entering F1.