Author Topic: Slim Evo 2: The Swarm Bot (Interesting behaviour bots)  (Read 2675 times)

Offline rsucoop

  • Bot Destroyer
  • ***
  • Posts: 166
    • View Profile
Slim Evo 2: The Swarm Bot (Interesting behaviour bots)
« on: February 04, 2008, 11:14:48 PM »
Code: [Select]
'Slim Evo 2.0; The Communicator (Aka, Retirment Plan): Designed from the same principle as the Slim Evo, and still 'implements the same

'feeder formulas as 'the previous version.
'One great improvement is the introduction of armor, secondary weapons genes, and a finall kill all 'gene for when all goes wrong. The eye

genes have been reduced to just three gene.

'Initialize Genes
cond
*.robage 0 =
*.eye5 50 <
start
1 .tie store
stop

'Identification Genes

cond
*.robage 0 =
start
5 rnd 110 store
*110 .out1 store
*.dnalen .out2 store
1 40 store
'40 - Parental Override Value
stop

'Phase 2 of Child (aka 21 activator)

cond
*.robage 21 =
start
0 40 store
*40 .out3 store
1 .deltie store
stop

cond
*.robage 21 > and
*140 0 =
*.nrg 4000 >
*.body 500 >
*.numties 0 >
*.pleas *.numties >
*.eyef 0 > and
*.refeye 0 =
start
45 *.aim sub .setaim store
55 .repro store
90 *.aim add .setaim store
stop

cond
*.robage 21 > and
*140 0 =
*.nrg 4000 >
*.body 500 >
*.numties 0 >
*.eyef 0 > and
*.refeye 0 =
start
45 *.aim sub .setaim store
40 .repro store
90 *.aim add .setaim store
stop

'Shoot waste out the backdoor

cond
*.numties 0 = and
*.multi 0 =
*.waste 0 >
start
*.waste .shootval store
-4 .shoot store
stop

'Store away 10% of Nrg if 9% pleasure recieved

cond
*.nrg *.pleas add 2 div 1 %=
*.body 800 <
start
*.nrg 10 div .strbody store
stop

'Maintain a body of 900

cond
*.nrg 1000 >
*.body 800 <
start
*.nrg *.body div .strbody store
stop

'Eyef Rotator

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye5 *.eye1 >
*.eye5 *.eye2 >
*.eye5 *.eye3 >
*.eye5 *.eye4 >
*.eye5 *.eye6 >
*.eye5 *.eye7 >
*.eye5 *.eye8 >
*.eye5 *.eye9 >
*.focuseye 0 !=
start
0 .focuseye store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye4 *.eye1 >
*.eye4 *.eye2 >
*.eye4 *.eye3 >
*.eye4 *.eye5 >
*.eye4 *.eye6 >
*.eye4 *.eye7 >
*.eye4 *.eye8 >
*.eye4 *.eye9 >
*.refeye 0 !=
*.focuseye -1 !=
strt
-1  .focuseye store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye3 *.eye4 >
*.eye3 *.eye1 >
*.eye3 *.eye2 >
*.eye3 *.eye6 >
*.eye3 *.eye7 >
*.eye3 *.eye8 >
*.eye3 *.eye9 >
start
-2 .focuseye store
*.focuseye -2 !=
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye2 *.eye1 >
*.eye2 *.eye6 >
*.eye2 *.eye7 >
*.eye2 *.eye8 >
*.eye2 *.eye9 >
*.eye2 *.eye4 >
*.eye2 *.eye3 >
*.eye2 *.eye5 >
*.refeye 0 =
start
-3 .focuseye store
*.refxpos *.refypos angle .setaim store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye1 *.eye6 >
*.eye1 *.eye7 >
*.eye1 *.eye8 >
*.eye1 *.eye9 >
*.eye1 *.eye2 >
*.eye1 *.eye3 >
*.eye1 *.eye4 >
*.refeye 0 =
start
-4 .focuseye store
*.refxpos *.refypos angle .setaim store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye6 *.eye7 >
*.eye6 *.eye8 >
*.eye6 *.eye9 >
*.eye6 *.eye5 >
*.eye6 *.eye3 >
*.eye6 *.eye4 >
*.eye6 *.eye2 >
*.eye6 *.eye1 >
*.refeye 0 =
*.focuseye 1 !=
start
1 .focuseye store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye7 *.eye8 >
*.eye7 *.eye9 >
*.eye7 *.eye6 >
*.eye7 *.eye5 >
*.eye7 *.eye4 >
*.eye7 *.eye3 >
*.eye7 *.eye2 >
*.eye7 *.eye1 >
*.refeye 0 =
*.focuseye 2 !=
start
2 .focuseye store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye8 *.eye9 >
*.eye8 *.eye2 >
*.eye8 *.eye3 >
*.eye8 *.eye4 >
*.eye8 *.eye5 >
*.eye8 *.eye6 >
*.eye8 *.eye7 >
*.eye8 *.eye1 >
*.refeye 0 =
start
3 .focuseye store
*.refxpos *.refypos angle .setaim store
stop

cond
*.out4 0 = or
*.out4 2 = or
*.out4 3 =
*140 0 =
*.eye9 *.eye5 >
*.eye9 *.eye8 >
*.eye9 *.eye1 >
*.eye9 *.eye4 >
*.refeye 0 =
start
4 .focuseye store
*.refxpos *.refypos angle .setaim store
stop

'Tie to Algea

cond
*140 0 = or
*.out4 0 =
*.eyef 40 >
*.refeye 0 =
*.numties 6 <
*.in4 5 !=
start
*.refvel *.vel sub .aim store
10 rnd 3 add .tie store
0 40 store
25 *.aim add .setaim store
stop

'shoot enemies

'first make them fight along your side with myeye shot

cond
*140 0 =
*.eyef 55 >
*.refeye *.myeye !=
*.refeye 0 !=
*.focuseye 0 = or
*.focuseye 1 = or
*.focuseye -1 =
*40 0 =
start
728 .shootval store
-1 .shoot store
*150 .tienum store
.nrg .tieloc store
*.out3 1000 div *.out3 315 div add *.pain 2 mult add .tieval store
3 40 store
stop

cond
*140 0 =
*.eyef 55 >
*.refeye *.myeye !=
*.refeye 0 !=
*.focuseye 0 = or
*.focuseye 1 = or
*.focuseye -1 =
*40 3 =
start
*.refveldx 3 mult .aimshoot store
*.nrg 4 div .shootval store
*.nrg 3 mult *.nrg add .out3 store
*.nrg *.pain div *.pain add 170 store
-1 .shoot store
*150 .tienum store
.nrg .tieloc store
*.out3 1000 div *.out3 315 div add *.pain 2 mult add .tieval store
0 40 store
stop

'respond to shot hits.

cond
*.shflav 0 !=
*.shflav -2 !=
start
1256 *.shang sub .aimshoot store
16 .shootval store
0 .shflav store
-2 .shoot store
stop

'remeber birth place

def xbirth 54
def ybirth 55
def return 56

cond
*.robage 0 =
start
*.xpos .xbirth store
*.ypos .ybirth store
stop

cond
*.pain 200 > or
*.nrg 400 %< or
*.out1 1 = and
*.trefage *.robage < and
*.trefeye *.myeye =
*.xpos 400 rnd mult *.xbirth %= ~
*.ypos 400 rnd mult *.ybirth %= ~
start
*.recalls abs 25 mult rnd 0 = and
*.xfood *.yfood angle .setaim store
*.return inc
stop

'Read Ties

cond
*140 0 =
*.numties 0 >
*150 *.numties <
*.multi 0 >
149 1 =
start
*150 .tienum store
*150 .readtie store
*150 1 add 150 store
0 149 store
40 .stifftie store
stop

cond
*.readtie *150 =
start
15 .memloc store
*.memval 76 store
454 .memloc store
*.memval 71 store
463 .memloc store
*.memval 72 store
466 .memloc store
*.memval 70 store
505 .memloc store
*.memval 73 store
*.sharenrg .tmemloc store
50 .tmemval store
stop

cond
*140 0 =
*170 *.trefnrg 1 sub<
*.nrg 9000 <
*.body 800 <
*.trefeye 0 =
*.numties 0 >
*.waste 0 >
*.multi 0 >
*.trefnrg 1000 >
*.pain 0 >
start
*150 .tienum store
*.out3 1000 div *.out3 315 div add *.pain 2 mult add .tieval store
.nrg .tieloc store
1 .sharewaste store
stop

'Tell Veg that You're taken

cond
*.trefeye 0 =
*.trefnrg 10 >
start
.out4 .tmemloc store
5 .tmemval store
stop

'Make veggie fire at enemy bot

cond
*.out4 1 !=
*73 40 >
*.trefnrg 100 >
start
.refxpos .memloc store
*.memval 74 store
.refypos .memloc store
*.memval 75 store
*74 *75 angle 76 store
19 .tmemloc store
*76 .tmemval store
cond
*.eyef *73 >
start
.vel .tmemloc store
23 .tmemval store
.trefvel .tmemloc store
*.vel .tmemval store
cond
*.eyef *73 <
start
.vel .memloc store
*.memval .vel store
*76 .setaim store
stop

'Make veggie tie to other veggies

cond
*.numties 0 > and
*.trefeye 0 = and
*70 1 <
*72 *.trefeye = or
*466 1 >
start
'fire tie
330 .tmemloc store
100 rnd 10 add .tmemval store
stop

cond
*72 0 =
start
'share energy
476 .tmemloc store
*830 .tmemval store
stop

'cause veggie to eat enemies

cond
*.numties 0 > and
*.trefeye 0 = and
*70 1 <
*72 *.trefeye != and
*72 *.myeye !=
140 0 =
start
'locate energy info in enemy bot
476 .tmemloc store
*.sharenrg .temval store
1 140 store
stop

cond
*140 1 =
start
475 .tmemloc store
*.trefnrg .tmemval store
0 140 store
stop

'set the paramaters for the veggie, ie distance and angle

cond
*.numties 0 > and
*.trefeye 0 = and
*.tielen 40 != or
*.tieang 230 !=
*.out4 0 = or
*.out4 4 =
start
40 .fixlen store
90 *.tienum add .fixang store
40 .stifftie store
stop

cond
*.numties 0 >
*.numties 0 > and
*.trefeye 0 = and
*.tielen 40 != or
*.tieang 230 !=
*.out4 1
start
180 *.tienum mult .fixang store
40 .fixlen store
40 .stifftie store
200 .tmemloc store
*.vel .tmemval store
stop


'move forward

cond
*.numties 3 <
*.vel *.maxvel <
*.eyef *73 >
*.eyef 90 <
*.out4 0 = or
*.out4 4 =
start
*.maxvel *.vel sub .aim store
stop

'Swarm in a Circle:

cond
*.multi 0 >
*466 0 >
*.eye5 30 >
*.eye5 80 <
*.refeye *.myeye =
*.in4 1 =
*.numties 2 >
start
*.aim .setaim store
*.refvel *.vel sub .dn store
1 .out4 store
stop

cond
*.refeye *.myeye %=
*.in1 *.out1 %=
*.in4 1 =
start
20 rnd *90 add 90 store
90 .tie store
*90 .readtie store
stop

cond
*90 *.tiepres =
*.trefeye *.myeye %=
*.robage *.trefage >
start
30 *.aim add .setaim store
*.maxvel *.vel sub .dn store
stop

cond
*90 .tiepres =
*.trefeye *.myeye %=
*.robage *.trefage <
start
20 .fixlen
0 140 store
260 .fixang store
40 .stifftie store
*.trefvel *.vel sub .up store
*.trefaim .aim store
stop

cond
*.out4 1 =
*.poison 150 <
*.nrg 2000 <
start
*.nrg 9 div .mkpoison store
*.eyef .ploc store
stop

'Return to Gather Mode when Veggies Die Off

cond
*.out4 1 = or
*.numties 2 <
start
0 .out4 store
*.tiepres .deltie store
stop

'rotate to object

cond
*.out4 1 !=
*.eyef 0 >
*.eyef 80 <
*.refeye *.myeye !=
*.refxpos *.refypos angle *.tieang !=
start
*.refxpos *.refypos angle -1 mult *.aim add
1256 add 1256 mod
dup dup dup dup dup 314 ceil swapint
314 floor 942 ceil 314 sub sub swapint
942 floor 942 sub add 2 div *.veldx sub .dx store
628 ceil -1 mult 314 add swapint
628 floor 628 sub add 2 div *.velup sub .up store
stop

'sever bad ties

cond
*.trefeye *.myeye % != and
*.trefeye 0 !=
*.numties 0 >
*.pain 0 > and
*.nrg 10000 < and
*.mulit 0 >
start
*.tiepres .tienum store
*.nrg .tieval store
310 .tieloc store
stop

cond
*.numties 0 >
*.trefeye *.myeye !=
*.trefeye 0 !=
start
*.tiepres *.tienum store
*.trefaim *.aim sub .setaim store
*.tiepres .deltie store
*990 dec
stop

cond
*.nrg 14000 <
*.tiepres *150 !=
*.numties 0 >
*.trefeye *.myeye !=
start
*.tiepres .tienum store
400 .tieval store
.tieval .tieloc store
99 .sharenrg store
1 *.sharewaste add .sharewaste store
stop

cond
*.nrg 14000 <
*.multi 0 >
*.numties 0 >
*.trefeye 0 = or
*.trefeye *.meye =
start
50 .sharenrg store
50 .sharewaste store
stop

cond
*.tielen 100 <
*.multi 0 >
*.trefeye *.myeye %=
*.trefage *.robage > and
*.eyef *73 >
start
100 .fixlen store
45 *.refaim add .fixang store
stop

cond
*.multi 0 >
*.trefeye 0 =
*.stifftie 0 =
start
40 .stifftie store
stop

'feed from body when hungry

cond
*.nrg 4000 <
*.body 200 >
*.pain 0 >
start
*.body *.pain div .fdbody store
stop

cond
*70 0 >
*149 0 !=
start
0 149 store
stop

'Use Force to determine a moneuver:

cond
*.refaim -1 mult *.aim =
*.refvel -1 mult *.vel = or
*.refeye *.myeye != and
*.out1 *.in1 !=
*.eye1 20 <
*.eye2 20 <
*.eye3 20 <
*.eye4 20 <
*.mass 1 >
start
*.maxvel *.mass div *.vel sub .sx store
2 140 store
*.refxpos *.refypos angle *.setaim store
stop

cond
*.refaim -1 mult *.aim =
*.refvel -1 mult *.vel = or
*.refeye *.myeye != and
*.out1 *.in1 !=
*.eye6 20 <
*.eye7 20 <
*.eye8 20 <
*.eye9 20 <
*.mass 1 >
start
*.maxvel *.mass div *.vel sub .dx store
2 140 store
*.refxpos *.refypos angle *.setaim store
stop

cond
*.refaim *.aim =
*.refvel *.vel = or
*.refeye *.myeye != and
*.out1 *.in1 !=
*.eyef 90 <
*.mass 1 >
start
*.refvel *.vel sub *.refaim store
*.refxpos *.refypos angle .aimshot store
*.myeye .shootval store
*.myeye .shoot store
0 140 store
cond

cond
*.refaim *.aim =
*.refvel *.vel = or
*.refeye *.myeye != and
*.out1 *.in1 !=
*.eyef 89 >
*.mass 1 >
start
0 .vel store
*.refxpos *.refypos angle .aimshot store
*.myeye .shootval store
-1 .shoot store
0 140 store
cond

'Protect the Swarm

cond
*.numties 1 <
*.trefeye 0 != or
*.robage 300 > and
*.robage 1200 <
*.in4 1 =
*.out4 2 !=
*.energy 1500 >
start
*.refvl *.vel sub .dx store
2 .out4 store
.50 .repro store
*.xpos 80 store
*.ypos 81 store
stop

'Go scout for an enemy

cond
*.eyef 0 =
*.out4 2 =
start
*.maxvel *.vel sub .aim store
stop

cond
*.eyef 0 >
*.out4 2 =
*.refeye 0 !=
*.refeye *.myeye !=
start
*82 1 add store
*.refxpos 84 store
*.refypos 85 store
stop

'Return to Swarm with new Coordinates

cond
*.aim *80 *81 angle !=
*.out4 2 =
*82 0 >
start
*80 *81 angle .setaim store
*.maxvel *.vel sub .aim store
stop

'Tell the Swarm to Activate

cond
*.xpos *80 =
*.ypos *81 =
*.eyef 0 >
*.refeye *.myeye =
*.refaim *.aim -1 mult !=
start
*.refxpos *.refypos angle .aimshoot store
.setaim .shootval store
*.aim .shoot store
3 .out4 store
*84 .out2 store
*85 .out3 store
stop

'Build Up Armor and Weapons

cond
*.slime 1000 <
*.nrg 1000 >
start
100 .mkslime store
stop

cond
*.venom 10 <
*.nrg 900 >
start
*.nrg *.body div .strvenom store
stop

'Shoot at any enemy That aproaches the swarm

cond
*.eyef 50 >
*.refeye 0 !=
*.refeye *.myeye != or
*.in1 *.out1 !=
*.in2 *.out2 !=
*.venom 0 >
start
*.myeye .vloc store
*.myeye .vencal store
-3 .shoot store
-1 .shoot store
stop

'Troop Activation

cond
*.in4 3 =
*.in4 3 !=
start
*.tiepres .deltie store
*.tiepres .deltie store
*.in2 *.out2 store
*.in3 *.out3 store
*.out2 *.out3 angle .setaim store
*.out1 *.in1 add store
stop

cond
*.myeye *.refeye %=
*.out4 3 =
*.in1 *.out1 <
start
*.refaim .setaim store
*.refvel *.vel sub .aim store
stop

cond
*.out4 3 =
*.nrg 8000 >
*.eyef 0 %=
*.myeye *.refeye %=
start
*.nrg 4 div .shootval store
stop

cond
*.out4 3 =
*.eyef 40 >
*.focuseye 0 = or
*.focuseye -1 = or
*.focuseye 1 =
start
-1 .shoot store
stop

end
The Current Bugs are a lack of good offensive genes, but I'm working on improving them for the next release of DB. Slim Evo Development has been put on hold until DB 3 is released, because many more features must be added on to.
« Last Edit: February 06, 2008, 10:40:17 PM by rsucoop »