#define functions
int main(){
int id=getID();
int center=getLocal("center");
int frame=getLocal(center,"frame");
if(id==center){
setLocal(center,"frame",frame+1);
}
int explode=getLocal("explode");
int pulse=getLocal("pulse");
if(id==center&&explode==0){
if(frame%10==0){
if(pulse==0){
setLocal("pulse",1);
setFrame(1);
}else{
setLocal("pulse",0);
setFrame(0);
}
}
}
if(id==center)
while(getMessageCount()>0&&explode==0){
int health=getLocal("health");
if(getFlag()=="damage"){
int damage=getMessage();
health=health-damage;
setLocal("health",health);
if(health<0){
int ii=center;
while(ii<center+9){
setLocal(ii,"explode",frame);
ii=ii+1;
}
if(getLocal("type")=="headmine"){
//playSound(61);
setGlobal("score",getGlobal("score")+50);
setLocal("killed",0);
if(rand()<=0.25){
int s=createSprite(18,14,getX(),getY(),2);
setFrame(s,6);
setLocal(s,"animate",0);
setLocal(s,"type","health");
float aangle=rand()*360.0;
aangle=intValue(aangle%24)*15.0;
int ax=intValue((cos(aangle)*2.0));
int ay=intValue(((-1)*sin(aangle)*2.0));
setLocal(s,"addx",ax);
setLocal(s,"addy",ay);
}
}
}
}
nextMessage();
}
while(getCollidedCount()>0&&explode==0){
int target=collidedWith();
string type=getLocal(target,"type");
if(type!="asteroidexplode"&&type!="enemy"&&type!="explode"&&type!="headmine"&&type!="mine"&&type!="planet"&&type!="asteroid"&&type!="bullet"){
int ii=center;
while(ii<center+9){
setLocal(ii,"explode",frame);
ii=ii+1;
}
}
nextCollided();
}
if(explode>0){
if(id==center){
int phase=0;
if(getImage()==14)
phase=1;
if(getImage()==15)
phase=2;
explode1(frame,explode,phase);
}else
if(id==center+1){
explode2(frame,explode,5,24,4);
}else
if(id==center+2){
explode2(frame,explode,4,0,0);
}else if(id>center+2){
explode2(frame,explode,-1,0,0);
}
}
}
int explode2(int life,int explodestart,int frame,int x,int y){
if(life>=explodestart+10&&life<explodestart+20){
if(frame>0)
setFrame(frame);
}else if(life>=explodestart+20){
int s=0;
int ii=0;
int x=getX();
int y=getY();
int id=getID();
while(ii<5){
int x1=intValue(rand()*24);
int y1=intValue(rand()*24);
s=createSprite(11,7,x+x1,y+y1,2);
setFrame(s,2);
setLocal(s,"type","explode");
setLocal(s,"damage",1);
setLocal(s,"movey",0);
setLocal(s,"movex",0);
setLocal(s,"life",0);
setLocal(s,"explode",0);
setLocal(s,"parent",id);
setLocal("dealdamage",2);
ii=ii+1;
}
destroySprite();
}
}
int explode1(int life,int explodestart,int phase){
if(phase==0&&isLocalSet("killed")){
drawText("50","courier",10,getX()-getViewportX()+32,getY()-getViewportY()+32-(life-explodestart),255,255,255,255);
}
if(phase==0){
if(life<explodestart+10){
setFrame(2);
}else if(life<explodestart+20){
setFrame(3);
}else if(life<explodestart+25){
setFrame(0);
setImage(14);
setLocal("explode",life);
}
}else{
if(life<explodestart+3){
setFrame(1);
}else if(life<explodestart+6){
setFrame(2);
}else if(life<explodestart+9){
setFrame(3);
}else if(life<explodestart+12){
setFrame(4);
}else if(life<explodestart+15){
setFrame(5);
}else if(life<explodestart+18){
if(phase==2)
destroySprite();
else{
setImage(15);
setLocal("explode",life);
}
}
}
}