I found the new problem, 971 wasn't increasing with each generation. That should fix it.
cond
*.robage 1 =
start
971 inc
stop
That seems to be working somewhat better - bots still sometimes stare at each other until something runs by them. Exactly who will the bots not attack in this system? Is it everyone of the same age?
I think what you have going on now would be far less complicated, we already have it coded anyways...
Gotya, that makes sense. I'm just trying to make sure there's sufficient cannibalism, without bots just circling around their immediate children. The goal is cross-pollinated violence

. This is key to my system (I don't insert veggies when their population is low, they and the taxxons have to find a sustainable level). The real goal is an evo-sim that's as full featured and realistic as possible, while keeping population totals low enough to minimize slow down.
One interesting thing I've noticed is that perhaps the most effective mutation is bots lying about whether they've been fertilized. This makes other bots think they're not fertile, and sperm them over and over while they're being eaten. I've also had a case where a taxxon mutated to the point where it would fertilize a rolling moss, and the moss mutated where it woudl sexrepro, thus creating a carnivorous mobile veggy! Or maybe they just spermed them by accident?
On a whole different topic... (Tutorial Mode) you can ask me what ever questions you have.
Yay tutorial mode
'You can define custom names for memory locations and you can make constants.
' Just put def followed by a name then memory number to name a location
def count 51
' That names the memory location 51, count
def age 100
' Here I set the constant "age" to 100
[/quote]
Are constants stored in memory somewhere or are they just nice and free?
[quote]
' Example
cond
' When bot age is greater than the constant age(100) (use .age to refer to the 100)
' (*.robage 100 >)
*.robage .age >
start
' Look at the variable count(51) add 3, then store that back into count(51)
' (*51 3 add 51 store)
*.count 3 add .count store
stop
So this means after 100 cycles from the bot's birth, every cycle, add 3 to count?
To help with debugging, you can click on a bot and open up it's console, here you can see what genes activate, set the energy, and look at the eyes.
You can also look at the bot's memory by opening the info panel and pressing memory, and looking over the dna in the dna panel will show you if you make a typo by usually saying "0" instead of ".aimdx" ect. You can also move bots around in the sim window.
I hadn't looked at the console - this means its good to spread out your dna across genes so you can see what happens when right?
For coding, I have found that looking at other non-complex and preferably commented bot code helps. Also, commenting someone else's bot dna is a good way to see how things work.
Try figuring out how "SexBot" by d-EVO works. http://forum.darwinbots.com/index.php/topic,3037.0.html
Thanks for the tip - I'm trying to find understandable bots. I'll look over that in detail at some point, looks actually comprehensible, and gives me a good reason to look up sysvars

. Right now I'm confused with
cond
*.x 1 =
*.eye5 0 >
*.in1 1 =
start
*.refveldx .dx store
*.eye5 50 =>
*.refvelup .up store
-6 .shoot store
dropbool
*.eye5 50 <
*.refvelup 30 add .up store
dropbool
stop
Is this like gifting some body to another female?
In bot dna, the bot's controls and senses are operated by referring to 1000 memory addresses. Storing a number in one makes the bot do something.
The * tells the dna what is currently in that memory address. The words on the sysvar page are just for us humans. Saying .up means use memory location 7.
Saying *.up says look at what is in memory location 7. That's why we use *.eye5, it says "what does eye 5 see" Which is technically "what's in memory location 505"
Ahhhh, thank you so much.
The stack is really crazy to me also. For some reason, numbers in dna get put in a pile that is worked on and stays there till the cycle ends.
"5 5 5 add store" would put three 5's on the stack, then add the last two numbers on the stack (the second and third 5), then store the first number on the stack (the first 5) in the result of 10. It's the same as:
5 10 store
The stack is not confined to just one gene or action either.
cond
*.eye1 *.eye9 >
start
mult -145
stop
cond
*.eye9 *.eye1 >
start
mult 145
stop
cond
start
.aimdx store
stop
This code will get rid of previous stuff on the stack with "mult" (I don't know how...) and then place a number. The last gene will use the last number placed and store it in .aimdx.
I wonder if I should find a tutorial for FORTH or some other stack language.
Thank you so much, please keep the advice coming! I need all the instruction I can find, and I'm working on finding the next thing to improve. I think I'd like to get bots to better handle objects - they seem to just look at them and stand still indefinitely, adding unnecessary population and not eating or hunting anything.