hey yall, im back at 153.118 million cycles. because of some hiccups with plants developing shell and/or fooling the conspec eye recognition system by literally just tacking on one eye gene that does absolutely nothing and consequently spreading all over the map unmolested, i lowered the mutation rate to 1x and when it still happened again i turned plant mutations off entirely. I still kept the 1x mutations despite the bots actually evolving really low mutation rates (before, the default was 4x) because i wanted to try something new, instead of a barrage of mutations i would use time and only the most beneficial mutations would make it through, at least i hoped.
I think it works, there have been some really interesting things going on, given the dynamic of tons of food but spawning only every 10100 cycles (the extra 100 is there so it doesn't match up with the day/night cycle of 1000, just to make things more interesting) so it's like seasonal. First, the bots have split up into 2 distinct species, the first and most dominant is our good old friend the scavengers, who move around randomly and try to find plants (or corpses of their dead comrades) to feed on. They explicitly don't attack other bots and actually run away from other bots.
There was an interesting strategy that branched off of the scavenger species. This was a mini species that would just sit still and do nothing, and wait until food spawned next to them. I call them couch potatoes, probably from the result of a mutation that removed their ability to search around and look for food. Because moving around takes energy, and it could be 10100 cycles before you even get any new food, this strategy actually kind of makes sense at first. Plus, you have all your non-moving comrades right next to you, so in hard times, you can just eat the corpses of your mates once they starve to death, they're free food! Unfortunately, the math did not work out for the couch potatoes. 10100 cycles means losing at least 10100 energy waiting for food to spawn next to you, and it might not even spawn next to you at all. And, if a plant did spawn next to a couch potato, they would just eat it immediately without letting it grow and make more energy in the long run. Each plant starts with 5000 energy. Now, I'm not a nobel prize winning mathematician or anything, but the couch potatoes, even if 2 plants spawned next to them (which is even more unlikely than just 1 plant) they would only be able to almost even out their energy balance. And once they ran out of fellow couch potatoes to eat, then what? TLDR they all died, the end.

Enough about the couch potatoes, they've been extinct for hundreds of thousands of cycles. Remember that way back in this simulation, there was a bot that ran away from other bots while shooting at them? I believe that was an adaptation that rose out of a significant part of the population being cannibals, but then all the cannibals died and all that was left were the bots that shot while running away... and then I speculate that eventually that ability was lost because it was better not to shoot and waste energy (shooting costs are high, 5 per shot which is to heavily punish incontenent bots that just shot all the time and lagged the simulation to all hell, and once all the bots lost the ability to control their shots it was basically impossible for them to evolve it back) both from missing shots and fighting each other.
But that's led to the rise of a small but fierce species of green cannibal bots that have survived for a few dozen million cycles at least. They seek out plants, corpses, and bots, not discriminating between species. They'll happily eat their parents or children, but most of the time get it right and eat some unfortunate scavenger. Not that they're usually 100% successful, though. The scavengers may not shoot back anymore, but they still run away from other bots which massively improves their chances of survival. Most of the time, the cannibals are small and weak because they generally shave each others' body points off when they encounter each other. So, more often than not their target gets away, but the cannibal still gets some energy from them.
While the cannibals do eat plants, I believe they make their niche in the plant-less environment after all the spawned plants have run out, and everyone is just waiting for the next batch of plants. While the scavengers' food sources are reduced to only corpses of other scavengers or cannibals, cannibals have corpses AND scavengers AND other cannibals. Actually, what would normally be a huge waste of energy (eating members of your species) merely becomes condensation of energy into fewer bots. Because each bot has a flat 1 energy cost of living every cycle, plus a little bit more depending on how long their DNA is and how much body they have, this actually kind of becomes an advantage in really lean times to save the entire species more energy in the long run, and times can get REALLY lean when you have to wait 10100 cycles for more energy to be introduced into the system. I think I saw once the total number of bots drop to something as low as 40 or 30, and this in a simulation where the population averages 150-300, it almost made me crap myself because I would have to go back to a really old save to start again if everyone died. Good thing the big drop of food happened right as it reached that point. I think if plants were introduced regularly so that there was a steady supply of food, the cannibals would be inefficient in that new environment so they would just die off to the more efficient scavengers, who don't waste energy infighting or chasing and shooting at other bots and each other.
Now, cannibal bots are nothing new. They spring up all the time, from the results of some unfortunate mutation. But this almost never spreads, because all the mutation does is remove the ability for the cannibals to differentiate between plants and bots, so they treat everything they see as plants and try to eat it. The cannibals always eat their own children, or get eaten by their children. They might be able to survive for a bit in very very small numbers, but the insane waste of energy caused by eating your offspring as soon as you give birth to them (also true in real life) means the numbers are stacked against them, and they always snuff themselves out at one point or another due to starvation and not being able to spread around their genes enough.
But these green cannibals wouldn't have survived that long if that were the case. They have a little secret weapon, they know when they're tied to something, and since nothing in this simulation uses ties, being tied must mean that the bot is either recently born, or recently had a child. When they're tied to something, they basically shut off and don't shoot anything at all even when surrounded by plants, instead I think there's actually some different things that happen depending on the particular strain of species. Some harmlessly spin around, some try to move in one direction only to separate from the parent/child, and confusingly, some do both, but switch between methods randomly. This little bit doesn't seem like much, considering the fact that once the ties are off, it's back to shooting everything on sight, and some bots do get sucked back into fighting anyways, but it's enough to at least give a better than 50/50 chance that the parent and child both live, which is the entire point of reproduction.
I think the fact that they can't shoot at all when tied is a massive help, because a lot of familial cannibalism happens within the first few cycles of birth, where the bots are perfectly next to and exactly facing each other, and if the bots can get some distance from each other, then that's a greatly increased chance of both just going on their merry way, AND I've observed that even in the cases where they DO get sucked back into each other, it's usually only a glancing blow because they have speed so they're running into, then past each other, therefore losing sight in the process. Even if the 2 bots would happily go after each other without the ties, It's still pretty impressive how this one small behavior can allow a cannibal species to live and thrive, where they usually kill themselves. One more thing I want to note is that this does decrease their efficiency when diving deep into piles of plants, because they have to wait for the ties to wear off before they can continue feeding. That's one more reason why if plants were introduced regularly instead of in big batches with nothing in between, the cannibals would die out to the more efficient scavengers, which can reproduce AND feed at the same time.
Ok, 2 best bots, and 2 handpicked green cannibals because the best bots are all scavengers
37 descendants out of a population of 270? Holy crap
store
store
*.tin9 *.tielen2 <
481 sub *.refveldx !=
*.refage *.shang 3106 * sub 419 -19
start
'''''''''''''''''''''''' Gene: 1 Ends at position 17 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 2 Begins at position 18 '''''''''''''''''''''''
start
*.trefaimdx store
*.tin9 *.eye2 <
<=
++ inc
store
469 *.refmulti substore
stop
'''''''''''''''''''''''' Gene: 2 Ends at position 31 '''''''''''''''''''''''
432 ceil * rndstore
*.refmulti -6 *.genes
'''''''''''''''''''''''' Gene: 3 Begins at position 39 '''''''''''''''''''''''
cond
store
300 *.mydn *.tielen2 254 div 2 *600 *.refveldx inc
1 *.refvelsx *.eye5 *.venom
'''''''''''''''''''''''' Gene: 3 Ends at position 53 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 4 Begins at position 54 '''''''''''''''''''''''
cond
>
*.bodloss .fixang store
-6 3097 -6 start
7 *.refvelscalar *.refeye addstore
.up store
store
*.trefvelyourup *.tielen2 <
<=
1 -19
'''''''''''''''''''''''' Gene: 4 Ends at position 75 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 5 Begins at position 76 '''''''''''''''''''''''
start
inc
'''''''''''''''''''''''' Gene: 5 Ends at position 77 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 6 Begins at position 78 '''''''''''''''''''''''
cond
.strbody store
start
*.veldn | multstore
*.nrg ++ *.totalbots *.thisgene substore
30007 >
553 sgnstore
446 11194 *.refshoot
'''''''''''''''''''''''' Gene: 6 Ends at position 96 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 7 Begins at position 97 '''''''''''''''''''''''
start
swapbool
| <<
'''''''''''''''''''''''' Gene: 7 Ends at position 100 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 8 Begins at position 101 '''''''''''''''''''''''
start
*.veldn | *.mypoison *.nrg *.nrg
'''''''''''''''''''''''' Gene: 8 Ends at position 106 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 9 Begins at position 107 '''''''''''''''''''''''
start
swapbool
| <<
'''''''''''''''''''''''' Gene: 9 Ends at position 110 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 10 Begins at position 111 '''''''''''''''''''''''
start
*.veldn | *.mypoison *.nrg *.refshoot 14938 .repro store
'''''''''''''''''''''''' Gene: 10 Ends at position 119 '''''''''''''''''''''''
This guy seems to be doing well. 4 descendants out of a population of 260, but he seems perfectly functional and is diving into a pile of plants as we speak
*.shang *.refage !=
*.refveldx sub 481 <
*.tielen2 *.tin9 store
store
3106 * sub 419 -19
start
'''''''''''''''''''''''' Gene: 1 Ends at position 17 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 2 Begins at position 18 '''''''''''''''''''''''
start
*.trefaimdx store
*.tin9 *.eye2 <
<=
++ inc
store
469 *.refmulti substore
stop
'''''''''''''''''''''''' Gene: 2 Ends at position 31 '''''''''''''''''''''''
432 ceil * rndstore
*.refmulti -6 *.genes
'''''''''''''''''''''''' Gene: 3 Begins at position 39 '''''''''''''''''''''''
cond
store
300 *.mydn *.tielen2 254 div 2 *600 *.refveldx inc
1 *.refvelsx *.eye5 *.venom
'''''''''''''''''''''''' Gene: 3 Ends at position 53 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 4 Begins at position 54 '''''''''''''''''''''''
cond
>
*.bodloss .fixang store
-6 3097 -6 start
7 *.refvelscalar *.refeye addstore
.up store
store
*.trefvelyourup *.tielen2 <
<=
1 -19
'''''''''''''''''''''''' Gene: 4 Ends at position 75 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 5 Begins at position 76 '''''''''''''''''''''''
start
inc
'''''''''''''''''''''''' Gene: 5 Ends at position 77 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 6 Begins at position 78 '''''''''''''''''''''''
cond
.strbody store
start
*.veldn | multstore
*.nrg ++ *.totalbots *.thisgene substore
30007 >
553 sgnstore
446 11194 *.refshoot
'''''''''''''''''''''''' Gene: 6 Ends at position 96 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 7 Begins at position 97 '''''''''''''''''''''''
start
swapbool
*.dnalen <<
'''''''''''''''''''''''' Gene: 7 Ends at position 100 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 8 Begins at position 101 '''''''''''''''''''''''
start
*.veldn | *.mypoison *.nrg *.nrg
'''''''''''''''''''''''' Gene: 8 Ends at position 106 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 9 Begins at position 107 '''''''''''''''''''''''
start
swapbool
| <<
'''''''''''''''''''''''' Gene: 9 Ends at position 110 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 10 Begins at position 111 '''''''''''''''''''''''
start
*.veldn | *.mypoison *.nrg *.refshoot 14938 .repro store
'''''''''''''''''''''''' Gene: 10 Ends at position 119 '''''''''''''''''''''''
Alright, here's a cannibal, 4 descendants out of a population of 250 which is pretty high for the cannibals, which make up about 10% of the population I'd say, so 25
!~=
*.nrg *.shdn 20314 48 *.shflav *.refvelscalar *.numties addstore
addstore
*.numties .tielen1 store
addstore
522 *.refdn
start
.up store
++ inc
*.tiepres
'''''''''''''''''''''''' Gene: 1 Ends at position 22 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 2 Begins at position 23 '''''''''''''''''''''''
start
*.shang 20838 *.numties *241 cos 7 30823 *.numties addstore
*.vel not
%=
.memloc store
*.eye5 *.venom
'''''''''''''''''''''''' Gene: 2 Ends at position 39 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 3 Begins at position 40 '''''''''''''''''''''''
cond
>
cos !=
store
5 -6 3097 -6 start
7 *.refvelscalar *.numties addstore
.up store
store
>
substore
1 not
%=
*.tin9 | dec
<=
div pow *321 *.eye3 .vloc store
1 -19
'''''''''''''''''''''''' Gene: 3 Ends at position 73 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 4 Begins at position 74 '''''''''''''''''''''''
start
inc
'''''''''''''''''''''''' Gene: 4 Ends at position 75 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 5 Begins at position 76 '''''''''''''''''''''''
cond
.strbody store
start
*.veldn | multstore
*.nrg ++ *.totalbots *.thisgene substore
30007 >
*.nrg 17722 14938 .repro store
'''''''''''''''''''''''' Gene: 5 Ends at position 94 '''''''''''''''''''''''
Some time has passed now, second cannibal, 2 descendants out of a population of 180
!~=
*.nrg *.shdn 20314 48 *.shflav *.refvelscalar *.numties addstore
addstore
*.numties .tielen1 store
addstore
522 *.refdn
start
.up store
++ inc
*.tiepres
'''''''''''''''''''''''' Gene: 1 Ends at position 22 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 2 Begins at position 23 '''''''''''''''''''''''
start
*.shang 20838 *.numties *241 cos 7 30823 *.numties addstore
*.vel not
%=
.memloc store
*.eye5 *.venom
'''''''''''''''''''''''' Gene: 2 Ends at position 39 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 3 Begins at position 40 '''''''''''''''''''''''
cond
>
cos !=
store
5 -6 3097 -6 start
7 *.refvelscalar *.numties addstore
.up store
store
>
substore
1 not
%=
*.tin9 | dec
<=
div pow *321 *.eye3 .vloc store
1 -19
'''''''''''''''''''''''' Gene: 3 Ends at position 73 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 4 Begins at position 74 '''''''''''''''''''''''
start
inc
'''''''''''''''''''''''' Gene: 4 Ends at position 75 '''''''''''''''''''''''
'''''''''''''''''''''''' Gene: 5 Begins at position 76 '''''''''''''''''''''''
cond
.strbody store
start
*.veldn | multstore
*.nrg ++ *.totalbots *.thisgene substore
30007 >
*.nrg 17722 14938 .repro store
'''''''''''''''''''''''' Gene: 5 Ends at position 94 '''''''''''''''''''''''