Author Topic: Seasnake 1.0 (MB)(EricL) - 23.04.08  (Read 677 times)

Offline Botsareus

  • Society makes it all backwards - there is a good reason for that
  • Moderator
  • Bot God
  • *****
  • Posts: 4483
    • View Profile
    • DJ Paul Kononov
Seasnake 1.0 (MB)(EricL) - 23.04.08
« on: May 02, 2014, 03:56:12 PM »
Code: [Select]
' Seasnake 1.0
' Author:  EricL
' A segmented multibot

' Out variables
' These are broadcast to everyone
def linkstate 800
def mynumexposed 801
def mychain 802

'Tie variables
'These are broadcast via ties
def targetx 415    ' .tout6
def targety 416    '.tout7

'tout1 is mychain
'tout2 is mynum
'tout3 is my linkstate

' Private Variables
'These are private to this bot only
def justreproduced 50
def mynum 51
def mylastx 52
def mylasty 53
def myvelx 54
def myvely 55

'Begin coding region
start

'Initialization
'Anti info shot logic
0 .fixpos store
0 .focuseye store

'Set my unique number
clearbool
*.robage 0 =
*971 0 = and
-30000 32000 rnd .mynum store

'My unique number is one les than my parent if birthed
*.robage 0 =
*.971 0 != and
*.971 dec .mynum store

'Always set a bunch of stuff
clearbool
300 .eye5width store
.dnalen .memloc store
.dnalen .tmemloc store
*.mynum .readtie store
*.mynum .tienum store
*.mynum .971 store
*.mychain .tout1 store
*.mynum .tout2 store
*.linkstate .tout3 store
*.mynum .mynumexposed store
*.xpos *.mylastx sub .myvelx store
*.ypos *.mylasty sub .myvely store

'Tie Feeding Defense
.tieval .tieloc store
1000 .tieval store

'Set my chain number if part of a caterpiller
'If the head or alone, use my number for the chain number for both sight and ties
clearbool
*.linkstate 0 =
*.linkstate 3 = or
*.mynum .mychain store
*.mynum .tout1 store
0 .eye5dir store

'If the tail or in the middle, set my chain number from the guy ahead of me for both sight and ties
'Then set my number to one less than the guy in front of me.
*.linkstate 1 =
*.linkstate 2 = or
*.tin1 .mychain store
*.tin1 .tout1 store
*.tin6 .targetx store
*.tin7 .targety store

*.linkstate 1 =
*.linkstate 2 = or
*.tin2 1 sub .mynumexposed store
*.tin2 1 sub .tout2 store


'Get rid of the birth tie
clearbool
*.robage 1 =
*.mynum .tie store

clearbool
*.robage 2 =
*.tin1 *.mynumexposed <= and
.deltie inc
100 .up store

'Movement
clearbool
*.eye5 0 =
*.linkstate 0 =
*.linkstate 3 = or  and
10 .up store
20 rnd 10 sub .aimdx store

'Find Conspecs
clearbool
*.eye5 0 >
*.memval *.dnalen = and
*.linkstate 1 != and
*.linkstate 2 != and
*.in2 *.mynumexposed > and
*.in1 2 != and
*.in1 3 != and
*.in2 *.mychain != and
*.robage 2 > and
*.justreproduced 0 = and
*.refxpos *.refypos angle .setaim store
*.refveldx *.body mult 1000 div .dx store
*.refvelup 11 add .up store

'Find Prey
clearbool
*.eye5 0 >
*.memval *.dnalen != and
*.robage 2 > and
*.refxpos *.refypos angle .setaim store
*.refveldx .dx store
*.refvelup 10 add .up store
35 .eye5width store

'Look away from your own cells
clearbool
*.linkstate 3 =
*.mychain *.in3 = 
*.mychain *.in3 !=
*.in3 0 != and
*.in2 *.mynum <= and or  and
*.justreproduced 0 = and
*.setaim 314 1 rnd mult 157 sub add .setaim store
0 .eye5width store

'Body Management
'Increase body if body is less than 90% of nrg level
clearbool
*.body 100 mult *.nrg 9 mult <
100 .strbody store

'Release body if body is greater than 110% of nrg
*.body 100 mult *.nrg 11 mult >
100 .fdbody store

'Waste removal
clearbool
*.waste 100 >
*.waste .shootval store
314 .aimshoot store
-4 .shoot store

'Slime Production
clearbool
*.nrg 5000 >
*.slime 100 < and
10 .mkslime store

'Shell Production
*.nrg 5000 >
*.shell 1000 < and
10 .mkshell store

'Antivirus
clearbool
*.thisgene 1 !=
1 .delgene store
*.thisgene 1 =
*.genes 1 > and
2 .delgene store

'Set the linksate
clearbool
*.numties 0 =
0 .linkstate store
*.numties 1 =
*.tmemval *.dnalen = and
*.linkstate 2 =
*.linkstate 0 = or and
*.tiepres *.mynum = and
1 .linkstate store
*.numties 2 =
*.justreproduced 0 = and
*.tmemval *.dnalen = and
*.linkstate 3 =
*.linkstate 1 = or and
2 .linkstate store
*.numties 1 =
*.robage 2 > and
*.linkstate 0 =
*.tiepres *.mynum != and
'This is the case where the head gets shot off.  The guy behind is still linkstate 2 but the tie ahead is gone
*.linkstate 2 =
*.trefxpos 0 =  and or and
3 .linkstate store

'Too many ties or other tie problems
clearbool
*.numties 2 >
*.linkstate 3 =
*.numties 1 > and or
*.linkstate 1 =
*.numties 1 > and or
*.linkstate 0 =
*.numties 0 > and or
*.numties 1 =
*.linkstate 1 !=
*.linkstate 3 != and and or
*.numties 1 =
*.linkstate 1 =
*.tiepres *.mynum != and and or

*.numties 1 =
*.linkstate 2 = and or

*.numties 1 =
*.linkstate 3 = and
*.tiepres *.mynum = and or

'*.linkstate 3 =
'*.tin2 *.mynumexposed > and or

*.linkstate 3 =
*.tin3 3 = and or

'Delete ties from non-conspecs
*.tmemval 0 !=
*.tmemval *.dnalen != and or
*.tiepres .deltie store

'tie to conspec
clearbool
*.linkstate 0 =
*.linkstate 3 = or
*.eye5 0 > and
*.memval *.dnalen = and
*.in3 *.mynumexposed > and
*.in1 0 =
*.in1 1 =
*.refmulti 0 != and or and
*.in3 *.mychain != and
*.mynum .tie store

'follow the leader
clearbool
*.linkstate 1 =
*.linkstate 2 = or
*.tin1 *.mychain = and
*.trefxpos *.trefypos angle .setaim store
*.trefup .up store
*.trefdn .dn store

'Tie too long
clearbool
*.tielen 100 >
*.linkstate 1 =
*.linkstate 2 = or and
*.up 10 add .up store

'Dampen wild swings
clearbool
*.linkstate 3 !=
*.trefvelyoursx *.velsx sub abs 10 > and
*.velsx -1 mult .sx store

'Tie too short
clearbool
*.tielen -50 <
*.tielen 0 != and
*.linkstate 1 =
*.linkstate 2 = or and
*.dn 20 add .dn store

'Keep the tie angle freely rotating
'And set the tie length and stiffness
clearbool
*.multi 0 >
*.linkstate 1 =
*.linkstate 2 = or and
*.mynum .tienum store
-1 .fixang store
25 .fixlen store
100 .stifftie store

'Aim eyes to the rear for the last guy in the chain
clearbool
*.linkstate 1 =
628 .eye5dir store
628 .eye5width store

'Aim eyes to the sides for the middle nodes, alternating them side to side
*.linkstate 2 =
*.mynum 2 mod 628 mult -314 add 628 *.robage 2 mod mult add .eye5dir store
200 .eye5width store

'The head looks ahead as do lone bots
*.linkstate 3 =
*.linkstate 0 = or
0 .eye5dir store

'Target Aquisition
clearbool
0 .targetx store
0 .targety store
*.eye5 0 =
*.tin6 *.tin7 dist 1000 < and
*.tin6 .targetx store
*.tin7 .targety store

*.eye5 0 >
*.memval *.dnalen != and
*.in3 *.mychain != and
*.reftype 0 = and
*.refxpos .targetx store
*.refypos .targety store

'Head Shooting
clearbool
*.linkstate 3 =
100 .shoot store

'Aiming
clearbool
*.targetx 0 !=
*.linkstate 3 != and
*.targetx *.myvelx 2 mult sub .targetx store
*.targety *.myvely 2 mult sub .targety store
*.targetx *.targety angle 1256 add 1256 mod *.aim sub .eye5dir store
35 .eye5width store

'Shooting
'When we see something
clearbool
*.eye5 10 >
*.memval *.dnalen != and
*.in2 *.mychain != and
*.eye5dir -1 mult .aimshoot store
-6 .shoot store

'Power up shots for things close up
*.eye5 20 <
1 .shootval store
*.eye5 20 >=
 5 .shootval store

'Shooting
'When we touch something
clearbool
*.eye5 0 =
*.refxpos 0 != and
*.memval *.dnalen != and
*.in2 *.mychain != and
*.refxpos *.refypos angle -1 mult .aimshoot store
-6 .shoot store
 17 .shootval store

'Sharing
clearbool
*.mynum .tienum store
50 .sharenrg store
50 .shareshell store
50 .shareslime store
100 .sharewaste store

'Reproduction
clearbool
*.justreproduced 5 =
*.setaim 628 add .setaim store

*.justreproduced 0 >
.justreproduced dec

clearbool
*.nrg 5000 >=
*.body 500 >= and
*.linkstate 0 =
*.linkstate 1 = or and
50 .repro store
*.setaim 628 add .setaim store
5 .justreproduced store

'Make sure tie operations operate on the tie this node created
clearbool
*.tiepres *.mynum !=
*.mynum .tiepres store
*.mynum .tienum store

'Store the postion for the next cycle
clearbool
*.xpos .mylastx store
*.ypos .mylasty store

stop
end