It would work reasonably well if your pupeteer bots stay at point blank range to the larger puppet. Use velocity matching.
Right thats what I had in mind, as for the rest:
cond
0 *.memloc =
start
*974 .memloc store
stop
cond
*973 abs *975 3 mod sgn abs 1 sub abs mult *.memval abs *975 3 mod sgn abs 1 sub abs mult =
*973 abs *.memval abs *975 3 mod 1 sub sgn abs 1 sub abs mult >
*973 abs *975 3 mod 2 sub sgn abs 1 sub abs mult *.memval abs <
start
*971 .shoot abs store
*972 .shootval store
stop
How about this instead of in and out? *971 ---> .shoot *972 ---> .shootval *973 -->hard value for condition
*974 --> puppets memory location to investigate *975 ---> determines if = > or < is used for condition.
A gene to sometimes change these values randomy at robage 0 has yet to be added:
cond
*.robage 0 =
start
1000 rnd *971 1 rnd mult 1 rnd mult 1 rnd mult 1 rnd mult store
1000 rnd *972 1 rnd mult 1 rnd mult 1 rnd mult 1 rnd mult store
1000 rnd *973 1 rnd mult 1 rnd mult 1 rnd mult 1 rnd mult store
1000 rnd *974 1 rnd mult 1 rnd mult 1 rnd mult 1 rnd mult store
1000 rnd *975 1 rnd mult 1 rnd mult 1 rnd mult 1 rnd mult store
stop
edited: I attach my first try of the puppeteer , probably the intialization is a little to random