// -*- C++ -*-
//Chrisoft Bullet Lab Remix HGE
//Towers and Bullets Implementations
//"Copyleft" Chrisoft 2013
//WANTED:
//Human-being which really knows what these mean, please contact Chirsno which is puzzled by these shitty codes..
#include "effects.h"
int CreateBullet1(double x,double y,double bs,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=1;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=x-playerpos.x;
bullet[i].bulletdir.y=y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].bulletspr=new hgeSprite(SprSheet1,23,0,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
return i;
}
void CreateBullet2(double x,double y,double bs,double rad,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=2;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=cos(rad);
bullet[i].bulletdir.y=sin(rad);
bullet[i].bulletspeed=bs;
bullet[i].lifetime=0;
bullet[i].bulletspr=new hgeSprite(SprSheet1,0,0,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
}
void CreateBullet3(double x,double y,double bs,int dir,bool eff=false)
{
CreateBullet2(x,y,bs,dir*0.5235987756,eff);
}
void CreateBullet4(double x,double y,double bs,int yelbrk=0,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=4;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=x-playerpos.x;
bullet[i].bulletdir.y=y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].yelbrk=yelbrk;
bullet[i].bulletspr=new hgeSprite(SprSheet1,0,46,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
}
void CreateBullet5(double x,double y,double bs,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=5;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=x-playerpos.x;
bullet[i].bulletdir.y=y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].bulletspr=new hgeSprite(SprSheet1,0,23,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
}
int CreateBullet6(double x,double y,double bs,int explo,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=6;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=rand()%100-50;
bullet[i].bulletdir.y=rand()%100-50;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].oriexplo=bullet[i].redexplo=explo;
bullet[i].bulletspr=new hgeSprite(SprSheet1,23,23,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
return i;
}
int CreateBullet7(double x,double y,double bs,int explo,bool eff=false)
{
++shots;
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=7;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=rand()%100-50;
bullet[i].bulletdir.y=rand()%100-50;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].oriexplo=bullet[i].redexplo=explo;
bullet[i].bulletspr=new hgeSprite(SprSheet1,46,23,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
bullet[i].redattrib=0;
bullet[i].whirem=whicnt;
bullet[i].whiskp=0;
bullet[i].scollable=true;
bullet[i].scale=1;
bullet[i].bulletspr->SetHotSpot(12,12);
if (eff)BulletEffect_Attatch(i);
return i;
}
void CreateBullet255(double x,double y,double bs)
{
int i;
if (bulcnt==0)
bulcnt=i=1;
else
{
for (i=1;i<=bulcnt;++i)
if (!bullet[i].exist)break;
if (i>bulcnt)bulcnt=i;
}
bullet[i].exist=true;
bullet[i].bullettype=255;
bullet[i].bulletpos.x=x;
bullet[i].bulletpos.y=y;
bullet[i].bulletdir.x=x-playerpos.x;
bullet[i].bulletdir.y=y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
bullet[i].bulletspeed=bs;
bullet[i].bulletspr=new hgeSprite(SprSheet1,46,0,24,24);
bullet[i].bulletspr->SetColor(0x80FFFFFF);
}
void ProcessBullet1()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=1)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
}
BulletEffect_Process(i);
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
if (dis<=6)++coll,scminus+=10000;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
}
}
}
void ProcessBullet2()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=2)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (LOWFPS)bullet[i].lifetime+=17;else ++bullet[i].lifetime;
if (bullet[i].lifetime>=15000&&Refliction)
{
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
continue;
}
if (!DisablePlayer)
{
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20;//Process bullet's y coor.
}
}
BulletEffect_Process(i);
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
{
if (Refliction)
bullet[i].bulletdir.x=-bullet[i].bulletdir.x,
bullet[i].bulletdir.y=-bullet[i].bulletdir.y;
else
{
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
continue;
}
}
if (dis<=6)
//If collision is detected or the bullet flys out of screen, delete it.
{
++coll,scminus+=10000;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
continue;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
}
}
}
//There is no need for ProcessBullet3() because they are in fact bullet2
void ProcessBullet4()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=4)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
if (LOWFPS)
bullet[i].whirem+=17;
else
++bullet[i].whirem;
if ((yelattrib&&bullet[i].whirem>=bullet[i].yelbrk)||!yelattrib)
{
bullet[i].whirem=0;
bullet[i].bulletdir.x=bullet[i].bulletpos.x-playerpos.x;
bullet[i].bulletdir.y=bullet[i].bulletpos.y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
}
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
BulletEffect_Process(i);
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
if (dis<=6)++coll,scminus+=10000;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
}
}
}
void ProcessBullet5()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=5)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
BulletEffect_Process(i);
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
if (dis<=6)playerspeed*=0.9,playerslospeed*=0.9;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
}
}
}
void ProcessBullet6()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=6)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
BulletEffect_Process(i);
if (!LOWFPS)
{
if (bullet[i].redattrib==0)
--bullet[i].redexplo;
else
bullet[i].redexplo-=2;
}
else
{
if (bullet[i].redattrib==0)
bullet[i].redexplo-=17;
else
bullet[i].redexplo-=34;
}
if (bullet[i].redexplo<=0&&!DisableAllTower)
{
if (bullet[i].redattrib==0)
{
for (int j=1;j<=8;++j)
{
int pnt=CreateBullet6(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo);
//hge->Effect_PlayEx(snd,100,(bullet[i].bulletpos.x-400)/4);
bullet[pnt].bulletdir.x=cos(j*0.785398);
bullet[pnt].bulletdir.y=sin(j*0.785398);
bullet[pnt].dist=bullet[pnt].bulletdir.x*bullet[pnt].bulletdir.x+bullet[pnt].bulletdir.y*bullet[pnt].bulletdir.y;
bullet[pnt].dist=sqrt(bullet[pnt].dist);
bullet[pnt].redattrib=1;
}
}
else
{
for (int j=1;j<=12;++j)
CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,j*0.5236+clockrot);
clockrot+=deltarot;
deltarot+=0.004363322313;
}
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
if (dis<=6)++coll,scminus+=10000;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
}
}
}
void ProcessBullet7()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=7)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
if (LOWFPS)
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
BulletEffect_Process(i);
if (!LOWFPS)
{
if (bullet[i].redattrib==0)
--bullet[i].redexplo;
else
bullet[i].redexplo-=3;
}
else
{
if (bullet[i].redattrib==0)
bullet[i].redexplo-=17;
else
bullet[i].redexplo-=51;
}
if (bullet[i].redexplo<=0&&!DisableAllTower)
{
if (bullet[i].redattrib==0)
{
int pnt=CreateBullet7(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo);
//hge->Effect_PlayEx(snd,100,(bullet[i].bulletpos.x-400)/4);
bullet[pnt].bulletdir.x=0;
bullet[pnt].bulletdir.y=0;
bullet[pnt].dist=1;
bullet[pnt].redattrib=1;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
if (!LOWFPS)
++bullet[i].whiskp;
else
bullet[i].whiskp+=17;
if (bullet[i].whiskp>50)
{
for (int j=1;j<=12;++j)
CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,j*0.5236+whirot);
whirot+=dwhirot;
dwhirot+=0.004363322313;
bullet[i].whiskp=0;
--bullet[i].whirem;
}
if (bullet[i].whirem<=0)
{
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
}
}
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
if (dis<=6)++coll,scminus+=10000;
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
}
}
}
void ProcessBullet255()
{
for (int i=1;i<=bulcnt;++i)
{
if (!bullet[i].exist||bullet[i].bullettype!=255)continue;//If this bullet doesn't exist or is not of this type, do not render it.
if (!DisablePlayer)
{
bullet[i].bulletdir.x=bullet[i].bulletpos.x-playerpos.x;
bullet[i].bulletdir.y=bullet[i].bulletpos.y-playerpos.y;
bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
bullet[i].dist=sqrt(bullet[i].dist);
if (LOWFPS)
{
bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
}
else
{
bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
}
double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
//If collision is detected or the bullet flys out of screen, delete it.
{
bullet[i].exist=false;
bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
bullet[i].dist=0;
bullet[i].bullettype=0;
}
else
{
bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x,bullet[i].bulletpos.y,0,0.5,0);
}
}
}
int CreateTower1(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
{
return i;
}
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=1;
tower[i].bulletspeed=bs;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,44,0,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].effect=eff;
return i;
}
int CreateTower2(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)return i;
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=2;
tower[i].bulletspeed=bs;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,0,0,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].effect=eff;
return i;
}
int CreateTower3(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)return i;
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=3;
tower[i].bulletspeed=bs;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,0,0,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].effect=eff;
return i;
}
int CreateTower4(double x,double y,int timer,double bs,int yelbrk=0,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
{
return i;
}
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=4;
tower[i].bulletspeed=bs;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,88,44,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].yelbrk=yelbrk;
tower[i].effect=eff;
return i;
}
int CreateTower5(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
{
return i;
}
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=5;
tower[i].bulletspeed=bs;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,88,0,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].effect=eff;
return i;
}
int CreateTower6(double x,double y,int timer,double bs,int redexplo,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
{
return i;
}
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=6;
tower[i].bulletspeed=bs;
tower[i].redexplo=redexplo;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,0,44,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].effect=eff;
return i;
}
int CreateTower7(double x,double y,int timer,double bs,int redexplo,bool eff=false)//This returns the created tower number.
{
int i;
if (towcnt==0)
towcnt=i=1;
else
{
for (i=1;i<=towcnt;++i)
{
if (!tower[i].exist)break;
if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
{
return i;
}
}
if (i>towcnt)
towcnt=i;
}
tower[i].exist=true;
tower[i].towertype=7;
tower[i].bulletspeed=bs;
tower[i].redexplo=redexplo;
tower[i].towertimer=tower[i].curtimer=timer;
tower[i].towerpos.x=x,tower[i].towerpos.y=y;
tower[i].towerspr=new hgeSprite(SprSheet2,44,44,44,44);
tower[i].towerspr->SetHotSpot(22,22);
tower[i].towerspr->SetColor(0x80FFFFFF);
tower[i].whicnt=whicnt;
tower[i].effect=eff;
return i;
}
void ProcessTower1()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=1)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
tower[i].curtimer=tower[i].towertimer;
CreateBullet1(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect);
}
}
}
void ProcessTower2()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=2)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
for (int j=1;j<=12;++j)
CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,j*0.5236+clockrot,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
clockrot+=deltarot;
//deltarot+=0.004363322313;
deltarot+=deltadelta;
}
}
}
void ProcessTower3()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=3)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
if (tower[i].t3t==0)
for (int j=1;j<=12;++j)
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,j,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
if (tower[i].t3t==1)
{
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
if (tower[i].t3t==2)
{
if (rand()%2==0)
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
else
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
if (tower[i].t3t==3)
{
if (rand()%2==0)
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
else
CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
}
}
}
void ProcessTower4()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=4)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
CreateBullet4(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].yelbrk,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
}
}
void ProcessTower5()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=5)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
CreateBullet5(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
}
}
void ProcessTower6()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=6)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
CreateBullet6(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].redexplo,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
}
}
void ProcessTower7()
{
for (int i=1;i<=towcnt;++i)
{
if (!tower[i].exist||tower[i].towertype!=7)continue;
tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
if (DisableAllTower)continue;
if (LOWFPS)
tower[i].curtimer-=17;
else
--tower[i].curtimer;
if (tower[i].curtimer<=0)
{
tower[i].curtimer=tower[i].towertimer;
CreateBullet7(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].redexplo,tower[i].effect);
//hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
}
}
}