def id 6395 def status 53 def tstatus 54 def ally 1 def veggie 2 def enemy 3 def rrr 942 def speed 10 '****************************Birth init************************** cond *.robage 0 = start .dnalen .memloc store .dnalen .tmemloc store 100 rnd .rrr store stop '**************************************************************** '*******************Const**************************************** cond start 'Unfix myself 0 .fixpos *.fixed sgn mult store 'Identify myself .id dup *.out5 sub sgn abs .out5 mult store 'arrange my eyes -140 dup *.eye1dir sub sgn abs .eye1dir mult store -105 dup *.eye2dir sub sgn abs .eye2dir mult store -70 dup *.eye3dir sub sgn abs .eye3dir mult store -35 dup *.eye4dir sub sgn abs .eye4dir mult store 35 dup *.eye6dir sub sgn abs .eye6dir mult store 70 dup *.eye7dir sub sgn abs .eye7dir mult store 105 dup *.eye8dir sub sgn abs .eye8dir mult store 140 dup *.eye9dir sub sgn abs .eye9dir mult store -30 dup *.eye1width sub sgn abs .eye1width mult store -25 dup *.eye2width sub sgn abs .eye2width mult store -15 dup *.eye3width sub sgn abs .eye3width mult store 5 dup *.eye4width sub sgn abs .eye4width mult store 45 dup *.eye5width sub sgn abs .eye5width mult store 125 dup *.eye6width sub sgn abs .eye6width mult store 285 dup *.eye7width sub sgn abs .eye7width mult store 605 dup *.eye8width sub sgn abs .eye8width mult store 1221 dup *.eye9width sub sgn abs .eye9width mult store .deltie *.tienum sgn mult inc stop '**************************************************************** '************************Eye focus manager*********************** cond *.eye1 0 > *.eye2 0 > or *.eye3 0 > or *.eye4 0 > or *.eye5 0 > or *.eye6 0 > or *.eye7 0 > or *.eye8 0 > or *.eye9 0 > or start 'Focus using the narrowest eye that sees something *.eye1 *.eye2 *.eye3 *.eye4 *.eye5 *.eye6 *.eye7 *.eye8 *.eye9 floor floor floor floor floor floor floor floor 50 store -4 *50 *.eye1 sub sgn abs -- - .focuseye mult store -3 *50 *.eye2 sub sgn abs -- - .focuseye mult store -2 *50 *.eye3 sub sgn abs -- - .focuseye mult store -1 *50 *.eye4 sub sgn abs -- - .focuseye mult store 0 *50 *.eye5 sub sgn abs -- - .focuseye mult store 1 *50 *.eye6 sub sgn abs -- - .focuseye mult store 2 *50 *.eye7 sub sgn abs -- - .focuseye mult store 3 *50 *.eye8 sub sgn abs -- - .focuseye mult store 4 *50 *.eye9 sub sgn abs -- - .focuseye mult store stop '**************************************************************** '****************************Tie manager************************* cond *.numties 0 > start 'We will need this later :D *.tiepres .tienum store *.tiepres .readtie store stop '**************************************************************** '****************************Target ID*************************** cond 'I see something.. what is it? *.eyef 0 > start 'Oh, you. Hi again, I guess. .ally *.in5 .id sub sgn abs -- - *.refage sgn -- - add sgn mult *.memval *.dnalen sub sgn abs -- - mult .status store 'Its a veggie! Let's eat it! .veggie .status *.status .ally sub sgn abs mult *.refshoot sgn -- - mult *.refaimsx sgn -- - mult *.refkills sgn -- - mult *.refeye sgn -- - mult *.refup sgn -- - mult *.memval 13 sub sgn abs -- - mult store 'You're not my race and you're not food.. you must be trying to kill me! .enemy .status *.status .ally sub sgn abs mult *.status .veggie sub sgn abs mult store stop cond 'I'm attached to something.. what is it? *.tienum 0 > start 'Oh, you. Hi again, I guess. .ally *.tmemval *.dnalen sub sgn abs -- - *.trefage sgn -- - add sgn mult .tstatus store 'Its a veggie! Let's eat it! .veggie .tstatus *.tstatus .ally sub sgn abs mult *.trefshoot sgn -- - mult *.trefaimsx sgn -- - mult *.trefkills sgn -- - mult *.trefeye sgn -- - mult *.trefup sgn -- - mult *.tmemval 13 sub sgn abs -- - mult store 'You're not my race and you're not food.. you must be trying to kill me! .enemy .tstatus *.tstatus .ally sub sgn abs mult *.tstatus .veggie sub sgn abs mult store stop '**************************************************************** '**************************Untie allies************************** cond *.numties 0 > *.tstatus .ally = start *.tiepres .deltie store stop '**************************************************************** '****************************Seeking***************************** cond *.eye1 0 = *.eye2 0 = *.eye3 0 = *.eye4 0 = *.eye5 0 = *.eye6 0 = *.eye7 0 = *.eye8 0 = *.eye9 0 = start 'We clearly aren't looking hard enough .speed .up store stop '**************************************************************** '*******************Aim in direction of movement***************** cond *.velup 0 != *.veldx 0 != *.eyef 0 = *.numties 0 = *.status .ally = or start 'theta = arctan (veldx / velup). (math ftw) *.veldx 628 mult *.velup div *.veldx *.velup div dup mult 8824 mult 31416 add 10000 div div - *.velup sgn sqr -- - 628 mult add *.aim add .setaim store stop cond *.velup 0 = *.veldx 0 != *.eyef 0 = *.numties 0 = *.status .ally = or start 'divide by zero (eek!) *.velsx sgn 314 mult *.aim add .setaim store stop '**************************************************************** '***********************Target non-allies************************ cond *.eyef 0 > *.status .ally != start '"children, scooch closer" *.refvelup 250 *.eye3 sub add *.velup abs - floor .up store *.refveldx .dx store *.refveldx .dx store *.refxpos *.refypos angle .setaim store stop '**************************************************************** '************************Avoid allies**************************** cond *.eyef 0 > *.status .ally = start 'root 2 = 14142 10000 div 'Yo. How's it going? Good? Me too. See ya. *.tiepres .deltie store *.refveldx sgn abs -- - *.refveldx add sgn .speed mult - 14142 mult 20000 div .dx store .speed 14142 mult 20000 div .up store stop '**************************************************************** '***********************EAT YOUR VEGGIES!!*********************** cond *.eyef 0 > *.status .veggie = *.numties 0 = start *.memval .tie store stop cond *.eyef 0 > *.status .veggie = start .tieloc *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult .tienum *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add .shoot store -1 *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult 1 *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add .shootval store stop cond *.numties 0 > *.tstatus .veggie = start .tieval .tieloc store 30000 .tieval store stop '**************************************************************** '*********This section is dedicated to killin'******************* 'This section is also a pain to comment, 'but I'm sure you can figure it out if you're interested cond *.eyef 0 > *.numties 0 = *.status .enemy = start 1000 rnd .tie store .shootval *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult .strpoison *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add .strvenom *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult add .fixpos *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add .shoot store 32000 .shootval store stop cond *.eyef 0 > *.numties 0 > *.status .enemy = *.trefbody 50 > start .tieloc *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult .tienum *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add .shoot store -1 *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult 1 *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add .shootval store stop cond *.eyef 0 > *.numties 0 > *.status .enemy = *.trefbody 50 <= start .shootval *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult .strbody *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add .strpoison *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult add .strvenom *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add .shoot store 32000 .shootval store stop cond *.numties 0 > *.tstatus .enemy = *.trefbody 50 > start .strbody *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult .tieval *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add .tieloc store 32000 .tieval store stop cond *.numties 0 > *.status .enemy = *.trefbody 50 <= start .shootval *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult .fdbody *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add .strpoison *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult add .strvenom *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add .tieloc store 32000 .tieval store stop '**************************************************************** '**************************Waste & body************************** cond *.waste 400 > start -4 .shoot store *.waste .shootval store stop cond *.body 2 >= start *.body .fdbody store stop '**************************************************************** '*****************************Repro****************************** cond *.nrg *.body 10 mult add 600 > start 'Face the direction opposite to velocity *.veldx 628 mult *.velup div *.veldx *.velup div dup mult 8824 mult 31416 add 10000 div div - *.velup sgn sqr -- 628 mult add *.aim add .setaim store 'Accelerate with current velocity 80 *.velscalar sub 0 floor .dn store 50 .repro store stop