package{
import flash.display.*
//CHANGE "racer" to your bot's name and save this file with the same name!!
//Rename sampleBot to the CLASS NAME (under linkage) of your bot's movieClip. Be sure to send in a .fla with that inside and everything custom named.
public class claxor extends claxorBot {
// do NOT change these
public var xvel:Number // the x velicity
public var yvel:Number // the y velocity
public var rot:Number // the current rotation
public var curNode:Number // the number of the node you are approaching
public var shotTime:Number // the time left till your next shot
public var nitro:Number // the amount of feul left for turbo
public var alive:Boolean // if your car is still active
public var lap:Number // the lap you are on
public var lapCheck:Boolean // internal stuff
public var botName:String // your bot's name
// The following variables determine the balencing of your bot. You may have a max of 25 points used and a max of 10 per attribute.
public var traction:Number // Determines how much your bot drifts (0 means lots of drift, 10 keel means no drift)
public var turning:Number // Determines how fast your bot can turn (0 means no turning, 10 means massive turning)
public var accel:Number // Determines how well your bot accelerates (0 means no acceleration, 10 means massive acceleration)
public var topSpeed:Number // Determines the top speed of your bot (0 is low, 10 is high)
public var turboPower:Number // Determines how effective turbo is (0 is low boost, 10 is large boost)
public var fireRate:Number // Determines how many shots you can fire per 10 seconds
//you can change these. use these to control your bot.
public var turn:Number // a number from -1 to 1 that determines how much you are turning
public var gas:Number // a number from 0 to 1 that determines how much you are accelerating
public var shooting:Boolean // if true, you will shoot the next time you can
public var shotAngle:Number // determines what angle you shoot towards (degrees)
public var turbo:Boolean // if true, you are using turbo
//declare any personel variables here:
public var ang:Number
public var xdist:Number
public var ydist:Number
public var xdist2:Number
public var ydist2:Number
public var xdist3:Number
public var ydist3:Number
public var xdist4:Number
public var ydist4:Number
public var dist:Number
public var spd:Number
public var spdsig:Number
public var tmp:Number
public var tmp2:Number
public var tmp3:Number
public var tmp4:Number
public var tmp5:Number
public var drift:Number
public var tspd:Number
public var cc:Number
public var cc2:Number
public var wt:Number
public var spdl:Number
public var ccsl:Number
public var dl:Number
public var ccdl:Number
public var cca:Number
public var cc2a:Number
public var wtm:Number
public var dsl:Number
public var dltt:Boolean
public var dltta:Number
public var curNodeC:Number
public var tx:Number
public var ty:Number
public var f:Number
//rename this function to your bot's name as well
public function claxor(){
//Set your attributes
traction = 0
turning = 7
accel = 10
topSpeed = 8
turboPower = 0
fireRate = 0
botName = "Claxor"
tspd=7;
spdl=4;
drift=0;
cc=-14;
ccdl=-10;
dl=70;
wt=70;
wtm=35;
cc2=10;
ccsl=1.5;
dsl=5;
f=0;
}
public function onFrame(racers:Array,nodes:Array,bullets:Array){
f++
curNodeC=curNode;
if(Math.abs(this.x-nodes[curNode][0])<25 && Math.abs(this.y-nodes[curNode][1])<25){
curNodeC=(curNode+1)%nodes.length;
}
trace(spd);
if(nodes.length>2224){
tspd=7;
spdl=1;
drift=10;
cc=-17;
ccdl=-13;
dl=120;
wt=95;
wtm=35;
cc2=15;
ccsl=1.5;
dsl=6;
curNodeC=curNode;
if(Math.abs(this.x-nodes[curNode][0])<25 && Math.abs(this.y-nodes[curNode][1])<25){
curNodeC=(curNode+1)%nodes.length;
}
dltt=false;
//this acts as your enter frame
//the following code is just as a sample:
turbo=false;
gas = 1
xdist=nodes[curNodeC][0] - x;
ydist=nodes[curNodeC][1] - y;
xdist==0?xdist=.1:0;
ydist==0?ydist=.1:0;
dist=Math.sqrt(xdist*xdist+ydist*ydist);
spd=Math.sqrt(xvel*xvel+yvel*yvel);
tmp=curNodeC+1;
if(tmp==nodes.length){
tmp=0;
}
tmp2=tmp3=tmp4=tmp5=0;
nodes[curNodeC][0]>nodes[tmp][0]?tmp2=-1:nodes[curNodeC][0]<nodes[tmp][0]?tmp2=1:nodes[curNodeC][1]>nodes[tmp][1]?tmp3=-1:nodes[curNodeC][1]<nodes[tmp][1]?tmp3=1:0;
if(curNodeC==0){
tmp4=1;
} else {
nodes[curNodeC][0]>nodes[curNodeC-1][0]?tmp4=1:nodes[curNodeC][0]<nodes[curNodeC-1][0]?tmp4=-1:nodes[curNodeC][1]>nodes[curNodeC-1][1]?tmp5=1:nodes[curNodeC][1]<nodes[curNodeC-1][1]?tmp5=-1:0
}
xdist2=xdist;
ydist2=ydist;
cca=(cc*2+cc*((10-spd)/10))/3
if((nodes[curNodeC][0]-nodes[(curNodeC+1)%nodes.length][0])*(nodes[curNodeC][0]-nodes[(curNodeC+1)%nodes.length][0])+(nodes[curNodeC][1]-nodes[(curNodeC+1)%nodes.length][1])*(nodes[curNodeC][1]-nodes[(curNodeC+1)%nodes.length][1])<dl*dl){
xdist2+=-1*tmp2*ccdl;
xdist2+=tmp4*ccdl;
ydist2+=-1*tmp3*ccdl;
ydist2+=tmp5*ccdl;
dltt=true;
} else {
xdist2+=-1*tmp2*cca;
xdist2+=tmp4*cca;
ydist2+=-1*tmp3*cca;
ydist2+=tmp5*cca;
}
xdist3=xdist;
ydist3=ydist;
cc2a=(cc2*2+cc2*((10-spd)/10))/3
xdist3+=tmp4*wt*-.8;
ydist3+=tmp3*cc2a*-1;
ydist3+=tmp5*wt*-.8;
xdist3+=tmp2*cc2a*-1;
xdist4=xdist;
ydist4=ydist;
xdist4+=tmp4*-100;
ydist4+=tmp5*-100;
dist>200-nitro||nitro>=500?turbo=true:0;
spdsig=1/(1+Math.pow(2.7,spd))
if(dist<160){
gas=(tspd-spd);
if(dltt){
gas=(dsl-spd);
}
gas>1?gas=1:gas<-1?gas=-1:0;
}
if(dist>190){
ang = Math.atan2(ydist4,xdist4) * 180/Math.PI
} else if(dist>(wt+wtm*((spd)/10))/*&&spd>ccsl*/){
ang = Math.atan2(ydist3,xdist3) * 180/Math.PI
} else if(dist>7*(spd)+4 || spd<spdl){
ang = Math.atan2(ydist2,xdist2) * 180/Math.PI
} else if(spd<1){
} else {
//tmp2=xdist+(50*(nodes[tmp][0]-nodes[curNodeC][0])/Math.abs((nodes[tmp][0]-nodes[curNodeC][0])));
//tmp3=ydist+(50*(nodes[tmp][1]-nodes[curNodeC][1])/Math.abs((nodes[tmp][1]-nodes[curNodeC][1])));
if(spd>2){
if(tmp2){
tmp3=-drift*tmp5;
} else {
tmp2=-drift*tmp4;
}
}
trace(tmp2+", "+tmp3);
ang = Math.atan2(tmp3,tmp2) * 180/Math.PI
}
rot<0?tmp=360+rot%360:tmp=rot%360
ang<0?ang=ang+360:0
tmp-ang>180?tmp-=360:tmp-ang<-180?tmp+=360:0
turn=ang-tmp;
turn*=1.5;
turn>1?turn=1:turn<-1?turn=-1:0;
} else {
dltt=false;
//this acts as your enter frame
//the following code is just as a sample:
turbo=false;
gas = 1
xdist=nodes[curNodeC][0] - x;
ydist=nodes[curNodeC][1] - y;
xdist==0?xdist=.1:0;
ydist==0?ydist=.1:0;
dist=Math.sqrt(xdist*xdist+ydist*ydist);
spd=Math.sqrt(xvel*xvel+yvel*yvel);
tmp=curNodeC+1;
if(tmp==nodes.length){
tmp=0;
}
if((nodes[curNodeC][0]-nodes[(curNodeC+1)%nodes.length][0])*(nodes[curNodeC][0]-nodes[(curNodeC+1)%nodes.length][0])+(nodes[curNodeC][1]-nodes[(curNodeC+1)%nodes.length][1])*(nodes[curNodeC][1]-nodes[(curNodeC+1)%nodes.length][1])<dl*dl){
dltt=true;
}
tmp2=tmp3=tmp4=tmp5=0;
nodes[curNodeC][0]>nodes[tmp][0]?tmp2=-1:nodes[curNodeC][0]<nodes[tmp][0]?tmp2=1:nodes[curNodeC][1]>nodes[tmp][1]?tmp3=-1:nodes[curNodeC][1]<nodes[tmp][1]?tmp3=1:0;
if(curNodeC==0){
tmp4=1;
} else {
nodes[curNodeC][0]>nodes[curNodeC-1][0]?tmp4=1:nodes[curNodeC][0]<nodes[curNodeC-1][0]?tmp4=-1:nodes[curNodeC][1]>nodes[curNodeC-1][1]?tmp5=1:nodes[curNodeC][1]<nodes[curNodeC-1][1]?tmp5=-1:0
}
xdist2=xdist;
ydist2=ydist;
cca=(cc*2+cc*((10-spd)/10))/3
if(dltt){
xdist2+=-1*tmp2*ccdl;
xdist2+=tmp4*ccdl;
ydist2+=-1*tmp3*ccdl;
ydist2+=tmp5*ccdl;
} else {
xdist2+=-1*tmp2*cca;
xdist2+=tmp4*cca;
ydist2+=-1*tmp3*cca;
ydist2+=tmp5*cca;
}
xdist3=xdist;
ydist3=ydist;
cc2a=(cc2*2+cc2*((10-spd)/10))/3
xdist3+=tmp4*wt*-1;
ydist3+=tmp3*cc2a*-1;
ydist3+=tmp5*wt*-1;
xdist3+=tmp2*cc2a*-1;
xdist4=xdist;
ydist4=ydist;
xdist4+=tmp4*-100;
ydist4+=tmp5*-100;
dist>200-nitro||nitro>=500?turbo=true:0;
spdsig=1/(1+Math.pow(2.7,spd))
if(dist<160){
gas=(tspd-spd);
if(dltt){
gas=(dsl-spd);
}
gas>1?gas=1:gas<-1?gas=-1:0;
}
dltta=0;
dltt?dltta=1:0;
if(dist>190){
ang = Math.atan2(ydist4,xdist4) * 180/Math.PI
tx=xdist4;
ty=ydist4;
} else if(dist>(wt+wtm*((spd)/10))/*&&spd>ccsl*/){
ang = Math.atan2(ydist3,xdist3) * 180/Math.PI
tx=xdist3;
ty=ydist3;
} else if(dist>1.1*(spd*spd)+0*dltta || spd<spdl){
ang = Math.atan2(ydist2,xdist2) * 180/Math.PI
tx=xdist2;
ty=ydist2;
} else if(spd<1){
} else {
//tmp2=xdist+(50*(nodes[tmp][0]-nodes[curNodeC][0])/Math.abs((nodes[tmp][0]-nodes[curNodeC][0])));
//tmp3=ydist+(50*(nodes[tmp][1]-nodes[curNodeC][1])/Math.abs((nodes[tmp][1]-nodes[curNodeC][1])));
if(spd>2){
if(tmp2){
tmp3=-drift*tmp5;
} else {
tmp2=-drift*tmp4;
}
}
//trace(tmp2+", "+tmp3);
ang = Math.atan2(tmp3,tmp2) * 180/Math.PI
tx=tmp4*50;
ty=tmp3*50;
}
rot<0?tmp=360+rot%360:tmp=rot%360
ang<0?ang=ang+360:0
tmp-ang>180?tmp-=360:tmp-ang<-180?tmp+=360:0
turn=ang-tmp;
turn*=1.5;
turn>1?turn=1:turn<-1?turn=-1:0;
turbo=false;
if((spd<10*((Math.min(nitro,180))/180)||nitro==500)&&gas==1){
turbo=true;
}
//turbo=false;
dist>200-nitro||nitro>=500?turbo=true:0;
/*this.clax.rotation=-this.rotation
this.clax.targetp.x=tx;
this.clax.targetp.y=ty;*/
shooting=false;
if(f>30){
shooting=true;
}
shotAngle = Math.atan2(1,0)*180/Math.PI
}
}
}
}