diff options
author | Chris Xiong <chirs241097@gmail.com> | 2015-10-26 22:52:36 +0800 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2015-10-26 22:52:36 +0800 |
commit | 3bd383baf6a17e734329e1fc677c7e86283db772 (patch) | |
tree | 69a9148087577f797624ceb9c71323a2563d6bb4 /towernbullet.h | |
parent | 543e4f570be9b279ba558ca61cc02cda251af384 (diff) | |
download | bullet-lab-remix-3bd383baf6a17e734329e1fc677c7e86283db772.tar.xz |
Added support for relative line numbers.
Added instructions for, brk and cont. (They are still untested...)
Parser code cleanup. Removed garbage output to stderr.
Reorganize the repository structure.
Updated BLR2 code move it into archive.
Added BLR1 files.
Diffstat (limited to 'towernbullet.h')
-rw-r--r-- | towernbullet.h | 2892 |
1 files changed, 0 insertions, 2892 deletions
diff --git a/towernbullet.h b/towernbullet.h deleted file mode 100644 index 8acf516..0000000 --- a/towernbullet.h +++ /dev/null @@ -1,2892 +0,0 @@ -// Chrisoft Bullet Lab Remix HGE -*- C++ -*- -// Towers and Bullets Implementations -// Copyright Chrisoft 2014 -#include "effects.h" -//static const char* TOWERNBULLET_H_FN="towernbullet.h"; - -void RenderAlter(vector2d p,TColors ca,TColors cb,double rot=0,double scl=1) -{ - float x,y,w,h; - bulletspr[ca]->GetTextureRect(&x,&y,&w,&h); - bulletspr[ca]->SetTextureRect(x,y,12,h); - bulletspr[ca]->SetHotSpot(12,12); - bulletspr[ca]->RenderEx(p.x,p.y,rot,scl); - bulletspr[ca]->SetTextureRect(x,y,w,h); - bulletspr[ca]->SetHotSpot(12,12); - - bulletspr[cb]->GetTextureRect(&x,&y,&w,&h); - bulletspr[cb]->SetTextureRect(x,y,12,h); - bulletspr[cb]->SetHotSpot(12,12); - bulletspr[cb]->RenderEx(p.x,p.y,rot+pi,scl); - bulletspr[cb]->SetTextureRect(x,y,w,h); - bulletspr[cb]->SetHotSpot(12,12); -} -int CreateBullet1(double x,double y,double bs,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - 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].alterColor=green;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); - return i; -} -int CreateBullet2(double x,double y,double bs,double rad,bool eff=false,bool invi=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].addblend=false; - bullet[i].extborder=false; - bullet[i].inv=invi; - bullet[i].bullettype=2; - bullet[i].bulletpos.x=x; - bullet[i].bulletpos.y=y; - bullet[i].bulletdir=vector2d(cos(rad),sin(rad)); - bullet[i].limpos=vector2d(-999,-999); - bullet[i].bulletspeed=bs; - bullet[i].alterColor=blue; - bullet[i].alterColor2=COLOR_COUNT; - bullet[i].lifetime=0; - bullet[i].whirem=0; - bullet[i].scollable=true; - bullet[i].collable=true; - bullet[i].bulletaccel=bullet[i].limv=0; - bullet[i].scale=1;bullet[i].rot=0; - if (eff)BulletEffect_Attatch(i); - return i; -} -void CreateBullet3(double x,double y,double bs,int dir,bool eff=false) -{ - CreateBullet2(x,y,bs,dir*0.5235987756,eff,false); -} -void CreateBullet4(double x,double y,double bs,int yelbrk=0,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - 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].scollable=true; - bullet[i].scale=1;bullet[i].lifetime=0; - bullet[i].alterColor=yellow;bullet[i].alterColor2=COLOR_COUNT; - if (eff)BulletEffect_Attatch(i); -} -void CreateBullet5(double x,double y,double bs,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - 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].alterColor=purple;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); -} -int CreateBullet6(double x,double y,double bs,int explo,int exp1=8,int exp2=12,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - bullet[i].bullettype=6; - bullet[i].bulletpos.x=x; - bullet[i].bulletpos.y=y; - bullet[i].bulletdir.x=re.NextDouble(-1,1); - bullet[i].bulletdir.y=re.NextDouble(-1,1); - 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].alterColor=red;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].redattrib=0; - bullet[i].exp1=exp1; - bullet[i].exp2=exp2; - bullet[i].oriexplo=bullet[i].redexplo=explo; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); - return i; -} -int CreateBullet7(double x,double y,double bs,int explo,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - bullet[i].bullettype=7; - bullet[i].bulletpos.x=x; - bullet[i].bulletpos.y=y; - bullet[i].bulletdir.x=re.NextDouble(-1,1); - bullet[i].bulletdir.y=re.NextDouble(-1,1); - 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].alterColor=white;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].oriexplo=bullet[i].redexplo=explo; - bullet[i].redattrib=0; - bullet[i].whirem=whicnt; - bullet[i].whiskp=0; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); - return i; -} -int CreateBullet8(double x,double y,double bs,bool eff=false) -{ - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - bullet[i].bullettype=8; - 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].alterColor=dblue;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); - return i; -} -int CreateBullet9(double x,double y,double bs,int explo,int cnt,int brk,bool eff=false) -{ - //This creates bullet9 in random direction and as attrib 0 - //change them if necessary. - ++shots; - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].inv=false; - bullet[i].bullettype=9; - bullet[i].bulletpos.x=x; - bullet[i].bulletpos.y=y; - bullet[i].bulletdir.x=re.NextDouble(-1,1); - bullet[i].bulletdir.y=re.NextDouble(-1,1); - 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].redattrib=0; - bullet[i].whicnt=cnt; - bullet[i].yelbrk=brk; - bullet[i].alterColor=orange;bullet[i].alterColor2=COLOR_COUNT; - bullet[i].scollable=true; - bullet[i].scale=1; - if (eff)BulletEffect_Attatch(i); - return i; -} -void CreateBullet255(double x,double y,double bs,int spno=0) -{ - int i=AllocBullet(); - bullet[i].exist=true; - bullet[i].bullettype=255; - bullet[i].bulletpos.x=x; - bullet[i].bulletpos.y=y; - bullet[i].redattrib=spno; - vector2d spos=playerpos+splitData[spno]; - bullet[i].bulletdir.x=x-spos.x; - bullet[i].bulletdir.y=y-spos.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].exp1=re.NextInt(0,9)?0:1; -} -void All2pnt() -{ - for (int i=1;i<=bulcnt;++i) - { - if(bullet[i].bullettype<200&&bullet[i].exist) - { - CreateBullet255(bullet[i].bulletpos.x,bullet[i].bulletpos.y,10); - 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; - } - } -} -void ProcessBullet1(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=1)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - BulletEffect_Process(i); - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear(); - 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 - { - bulletspr[bullet[i].alterColor]->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(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=2)return; - if (Current_Position==1)bullet[i].lifetime+=hge->Timer_GetDelta(); - if (!DisablePlayer) - { - //experimental new coor processing code, FPS independent - if (bullet[i].whirem<=0) - { - if (bullet[i].bulletaccel>0&&bullet[i].bulletspeed<bullet[i].limv)bullet[i].bulletspeed+=bullet[i].bulletaccel*(1000.0f/hge->Timer_GetFPS()); - if (bullet[i].bulletaccel<0&&bullet[i].bulletspeed>bullet[i].limv)bullet[i].bulletspeed+=bullet[i].bulletaccel*(1000.0f/hge->Timer_GetFPS()); - } - else - bullet[i].whirem-=1000.0f/hge->Timer_GetFPS(); - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20*(1000.0f/hge->Timer_GetFPS()); - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20*(1000.0f/hge->Timer_GetFPS()); - if(GetDist(bullet[i].bulletpos,bullet[i].limpos)<1) - { - BulletEffect_Death(bullet[i],ColorToDWORD(bullet[i].alterColor)); - bullet[i].exist=false; - bullet[i].bulletpos.x=bullet[i].bulletpos.y=-999; - bullet[i].bulletdir.x=bullet[i].bulletdir.y=0; - bullet[i].dist=0; - bullet[i].bullettype=0;return; - } - } - BulletEffect_Process(i); - if(PlayerSplit) - { - bool rndr=true; - for(int j=0;j<4;++j) - { - double dis=GetDist(bullet[i].bulletpos,playerpos+splitData[j]); - if (bullet[i].bulletpos.x<=-25||bullet[i].bulletpos.x>=825||bullet[i].bulletpos.y<=-25||bullet[i].bulletpos.y>=625) - { - bullet[i].exist=false;rndr=false; - bullet[i].bulletpos.x=bullet[i].bulletpos.y=-999; - bullet[i].bulletdir.x=bullet[i].bulletdir.y=0; - bullet[i].dist=0; - bullet[i].bullettype=0; - return; - } - if (bullet[i].scale<1.2&&dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&bullet[i].collable) - { - ++coll,scminus+=10000,Mult_BatClear();bullet[i].collable=false;rndr=false; - if(!bullet[i].inv) - { - 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; - } - return; - } - else - { - if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch(playerpos+splitData[j]); - } - } - if(rndr) - { - if(bullet[i].alterColor2==COLOR_COUNT) - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - else - RenderAlter(vector2d(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2),bullet[i].alterColor,bullet[i].alterColor2,bullet[i].rot,0.6*bullet[i].scale), - Current_Position==1?bullet[i].rot+=(i&1?1:-1)*(1000/hge->Timer_GetFPS())*pi/1000:0; - } - } - else - { - double dis=GetDist(bullet[i].bulletpos,playerpos); - if ((!bullet[i].extborder&&(bullet[i].bulletpos.x<=-25||bullet[i].bulletpos.x>=825||bullet[i].bulletpos.y<=-25||bullet[i].bulletpos.y>=625))|| - (bullet[i].extborder&&(bullet[i].bulletpos.x<=-225||bullet[i].bulletpos.x>=1025||bullet[i].bulletpos.y<=-225||bullet[i].bulletpos.y>=825))) - { - bullet[i].exist=false; - bullet[i].bulletpos.x=bullet[i].bulletpos.y=-999; - bullet[i].bulletdir.x=bullet[i].bulletdir.y=0; - bullet[i].dist=0; - bullet[i].bullettype=0; - return; - } - if (bullet[i].scale<1.2&&dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&bullet[i].collable) - { - ++coll,scminus+=10000,Mult_BatClear();bullet[i].collable=false; - if(!bullet[i].inv) - { - 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; - } - return; - } - else - { - if(bullet[i].alterColor2==COLOR_COUNT) - { - if(bullet[i].addblend)bulletspr[bullet[i].alterColor]->SetBlendMode(0); - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - if(bullet[i].addblend)bulletspr[bullet[i].alterColor]->SetBlendMode(2); - } - else - RenderAlter(vector2d(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2),bullet[i].alterColor,bullet[i].alterColor2,bullet[i].rot,0.6*bullet[i].scale), - Current_Position==1?bullet[i].rot+=(i&1?1:-1)*(1000/hge->Timer_GetFPS())*pi/1000: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(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=4)return; - if (Current_Position==1)bullet[i].lifetime+=hge->Timer_GetDelta(); - 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; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - BulletEffect_Process(i); - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear(); - 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 - { - bulletspr[bullet[i].alterColor]->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(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=5)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - BulletEffect_Process(i); - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7)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 - { - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - } -} -void ProcessBullet6(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=6)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - 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<=bullet[i].exp1;++j) - { - int pnt=CreateBullet6(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo,bullet[i].exp1,bullet[i].exp2,bullet[i].scale>1.5?true:false); - bullet[pnt].setdir(2*pi/(double)bullet[i].exp1*j); - bullet[pnt].redattrib=1; - } - } - else - { - for (int j=1;j<=bullet[i].exp2;++j) - CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,2*pi/(double)bullet[i].exp2*j+clockrot,bullet[i].scale>1.5?true:false); - 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; - } - BulletEffect_Process(i); - if(PlayerSplit) - { - bool rndr=true; - for(int j=0;j<4;++j) - { - double dis=GetDist(bullet[i].bulletpos,playerpos+splitData[j]); - if (bullet[i].bulletpos.x<=-25||bullet[i].bulletpos.x>=825||bullet[i].bulletpos.y<=-25||bullet[i].bulletpos.y>=625) - { - bullet[i].exist=false;rndr=false; - bullet[i].bulletpos.x=bullet[i].bulletpos.y=-999; - bullet[i].bulletdir.x=bullet[i].bulletdir.y=0; - bullet[i].dist=0; - bullet[i].bullettype=0; - return; - } - if (bullet[i].scale<1.2&&dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&bullet[i].collable) - { - ++coll,scminus+=10000,Mult_BatClear();bullet[i].collable=false;rndr=false; - if(!bullet[i].inv) - { - 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; - } - return; - } - else - { - if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch(playerpos+splitData[j]); - } - } - if(rndr) - { - if(bullet[i].alterColor2==COLOR_COUNT) - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - else - RenderAlter(vector2d(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2),bullet[i].alterColor,bullet[i].alterColor2,bullet[i].rot,0.6*bullet[i].scale), - Current_Position==1?bullet[i].rot+=(i&1?1:-1)*(1000/hge->Timer_GetFPS())*pi/1000:0; - } - } - else - { - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (bullet[i].bulletpos.x<=-25||bullet[i].bulletpos.x>=825||bullet[i].bulletpos.y<=-25||bullet[i].bulletpos.y>=625) - { - bullet[i].exist=false; - bullet[i].bulletpos.x=bullet[i].bulletpos.y=-999; - bullet[i].bulletdir.x=bullet[i].bulletdir.y=0; - bullet[i].dist=0; - bullet[i].bullettype=0; - return; - } - if (bullet[i].scale<1.2&&dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&bullet[i].collable) - { - ++coll,scminus+=10000,Mult_BatClear();bullet[i].collable=false; - if(!bullet[i].inv) - { - 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; - } - return; - } - else - { - if(bullet[i].alterColor2==COLOR_COUNT) - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - else - RenderAlter(vector2d(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2),bullet[i].alterColor,bullet[i].alterColor2,bullet[i].rot,0.6*bullet[i].scale), - Current_Position==1?bullet[i].rot+=(i&1?1:-1)*(1000/hge->Timer_GetFPS())*pi/1000:0; - if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch(); - } - } -} -void ProcessBullet7(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=7)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - 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) - { - int pnt=CreateBullet7(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo,bullet[i].scale>1.5?true:false); - - 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<=whrcnt;++j) - { - int pnt=CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,j*2.0f*pi/(double)whrcnt+whirot,bullet[i].scale>1.5?true:false); - if(level==6&&part==1) - { - bullet[pnt].limv=8; - bullet[pnt].bulletaccel=0.005; - bullet[pnt].bulletspeed=0; - } - if (level==6&&part>=2&&part<=11&&(j&1)) - { - bullet[pnt].limv=5; - bullet[pnt].bulletaccel=0.005; - bullet[pnt].bulletspeed=0; - bullet[pnt].redir(playerpos); - bullet[pnt].bulletdir.Rotate((j>>1&1?1:-1)*pi/72); - } - } - 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; - } - } - } - BulletEffect_Process(i); - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear(); - 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 - { - bulletspr[bullet[i].alterColor]->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 ProcessBullet8(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=8)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - BulletEffect_Process(i); - if(bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - int cnt=re.NextInt(2,5);if (Dis8ref)cnt=0; - if(PlayerSplit)cnt=re.NextInt(0,2); - if(bullet[i].redattrib) - { - if(re.NextInt(0,3))//more possibility to reflect - { - if(bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800)bullet[i].bulletdir.x=-bullet[i].bulletdir.x; - if(bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)bullet[i].bulletdir.y=-bullet[i].bulletdir.y; - } - else//vanish or reflect?... - { - cnt=4-4*(frameleft/(double)(AMinute*1.5)); - for (int ii=1;ii<=cnt;++ii) - CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,2,re.NextDouble(-pi,pi)); - 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; - return; - } - } - else - { - for (int ii=1;ii<=cnt;++ii) - { - int pnt=CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,re.NextDouble(-pi,pi)); - if (t8special) - { - bullet[pnt].alterColor=(TColors)(re.NextInt(0,7)); - bullet[pnt].alterColor2=(TColors)(re.NextInt(0,7)); - if(re.NextInt(0,3)==3)bullet[pnt].redir(vector2d(400,300)); - if(re.NextInt(0,1))++ii; - } - } - 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; - return; - } - } - if(PlayerSplit) - { - for(int j=0;j<4;++j) - { - double dis=GetDist(bullet[i].bulletpos,playerpos+splitData[j]); - if (dis<=6) - { - if (dis<=6){if(clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear();} - 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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch(playerpos+splitData[j]); - } - } - bulletspr[bullet[i].alterColor]->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0); - } - else - { - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6) - { - if (dis<=6){if(clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear();} - 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;return; - } - else - { - bulletspr[bullet[i].alterColor]->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 ProcessBullet9(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=9)return; - if (!DisablePlayer) - { - if (LOWFPS) - { - bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - if (bullet[i].redattrib==0) - { - bullet[i].redexplo-=17; - if (bullet[i].redexplo<=0) - { - for (int ii=0;ii<bullet[i].whicnt;++ii) - { - int pnt=CreateBullet9(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,0,0,bullet[i].yelbrk); - bullet[pnt].setdir(2*pi/(double)bullet[i].whicnt*ii); - 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; - } - } - if (bullet[i].redattrib==1) - { - bullet[i].yelbrk-=17; - if (bullet[i].yelbrk<=0) - { - bullet[i].redir(playerpos); - bullet[i].redattrib=2; - } - } - } - else - { - bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - if (bullet[i].redattrib==0) - { - --bullet[i].redexplo; - if (bullet[i].redexplo<=0) - { - for (int ii=0;ii<bullet[i].whicnt;++ii) - { - int pnt=CreateBullet9(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,0,0,bullet[i].yelbrk); - bullet[pnt].setdir(2*pi/(double)bullet[i].whicnt*ii); - 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; - } - } - if (bullet[i].redattrib==1) - { - --bullet[i].yelbrk; - if (bullet[i].yelbrk<=0) - { - bullet[i].redir(playerpos); - bullet[i].redattrib=2; - } - } - } - } - BulletEffect_Process(i); - double dis=GetDist(bullet[i].bulletpos,playerpos); - if (dis<=6||bullet[i].bulletpos.x<=-100||bullet[i].bulletpos.x>=900||bullet[i].bulletpos.y<=-100||bullet[i].bulletpos.y>=700) - { - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7)++coll,scminus+=10000,Mult_BatClear(); - 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 - { - bulletspr[bullet[i].alterColor]->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(int i) -{ - if (!bullet[i].exist||bullet[i].bullettype!=255)return; - if (!DisablePlayer) - { - bullet[i].bulletspeed=10; - vector2d spos=playerpos+splitData[bullet[i].redattrib]; - bullet[i].bulletdir.x=bullet[i].bulletpos.x-spos.x; - bullet[i].bulletdir.y=bullet[i].bulletpos.y-spos.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; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17; - } - else - { - bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20; - bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20; - } - } - double dis=GetDist(bullet[i].bulletpos,playerpos+splitData[bullet[i].redattrib]); - if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) - { - if(bullet[i].exp1)score+=mult*100;else mult+=0.01; - 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(bullet[i].exp1) - { - bulletspr[green]->SetColor(0x40FFFFFF); - bulletspr[green]->SetBlendMode(BLEND_ALPHAADD); - bulletspr[green]->RenderEx(bullet[i].bulletpos.x+6,bullet[i].bulletpos.y+6,0,0.5,0); - bulletspr[green]->SetBlendMode(BLEND_ALPHABLEND); - bulletspr[green]->SetColor(0x80FFFFFF); - } - else - { - bulletspr[grey]->SetColor(0x20FFFFFF); - bulletspr[grey]->SetBlendMode(BLEND_ALPHAADD); - bulletspr[grey]->RenderEx(bullet[i].bulletpos.x+6,bullet[i].bulletpos.y+6,0,0.5,0); - bulletspr[grey]->SetBlendMode(BLEND_ALPHABLEND); - } - } -} -int CreateTower1(double x,double y,int timer,double bs,double offset=0,bool eff=false) -{ - 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].RendColor=0x80FFFFFF; - tower[i].effect=eff; - tower[i].offset=offset; - return i; -} -int CreateTower2(double x,double y,int timer,double bs,bool eff=false) -{ - 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].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower3(double x,double y,int timer,double bs,int t3t,bool eff=false) -{ - 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].t3t=t3t; - tower[i].towertimer=tower[i].curtimer=timer; - tower[i].towerpos.x=x,tower[i].towerpos.y=y; - tower[i].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower3_fixeddir(double x,double y,int timer,double bs,double rad,bool eff=false) -{ - 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].offset=rad;tower[i].t3t=999; - tower[i].towertimer=tower[i].curtimer=timer; - tower[i].towerpos.x=x,tower[i].towerpos.y=y; - tower[i].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower4(double x,double y,int timer,double bs,int yelbrk=0,bool eff=false) -{ - 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].RendColor=0x80FFFFFF; - tower[i].yelbrk=yelbrk; - tower[i].effect=eff; - return i; -} -int CreateTower5(double x,double y,int timer,double bs,bool eff=false) -{ - 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].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower6(double x,double y,int timer,double bs,int redexplo,int exp1=8,int exp2=12,bool eff=false) -{ - 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].exp1=exp1;tower[i].exp2=exp2; - tower[i].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower7(double x,double y,int timer,double bs,int redexplo,bool eff=false) -{ - 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].RendColor=0x80FFFFFF; - tower[i].whicnt=whicnt; - tower[i].effect=eff; - return i; -} -int CreateTower8(double x,double y,int timer,double bs,int timer2,int scnt,bool eff=false) -{ - 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=8; - tower[i].bulletspeed=bs; - tower[i].towertimer=tower[i].curtimer=timer; - tower[i].towertimer2=tower[i].curtimer2=timer2; - tower[i].shotcount=tower[i].curshotcount=scnt; - tower[i].dblstate=false; - tower[i].towerpos.x=x,tower[i].towerpos.y=y; - tower[i].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -int CreateTower9(double x,double y,int timer,double bs,int explo,int cnt,int brk,bool eff=false) -{ - 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=9; - tower[i].bulletspeed=bs; - tower[i].redexplo=explo; - tower[i].whicnt=cnt; - tower[i].yelbrk=brk; - tower[i].towertimer=tower[i].curtimer=timer; - tower[i].towerpos.x=x,tower[i].towerpos.y=y; - tower[i].RendColor=0x80FFFFFF; - tower[i].effect=eff; - return i; -} -void ProcessTower1() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=1)continue; - towerspr[green]->SetColor(tower[i].RendColor); - towerspr[green]->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 (fabs(tower[i].offset)>1e-7) - { - double trad=atan2l(tower[i].towerpos.y-playerpos.y,tower[i].towerpos.x-playerpos.x)+tower[i].offset; - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,trad,tower[i].effect); - } - else - 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; - towerspr[blue]->SetColor(tower[i].RendColor); - towerspr[blue]->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); - clockrot+=deltarot; - deltarot+=deltadelta; - } - } -} -void ProcessTower3() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=3)continue; - towerspr[blue]->SetColor(tower[i].RendColor); - towerspr[blue]->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==999) - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].offset,tower[i].effect); - 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); - if (tower[i].t3t==1) - { - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect); - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect); - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect); - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect); - } - if (tower[i].t3t==4) - { - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*3/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*5/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*7/4.0f,tower[i].effect); - } - if (tower[i].t3t==5) - { - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*3/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*5/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*7/4.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,0,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi/2.0f,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi,tower[i].effect); - CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,pi*3/2.0f,tower[i].effect); - } - if (tower[i].t3t==2) - { - if (re.NextInt(0,1)) - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect); - else - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect); - } - if (tower[i].t3t==3) - { - if (re.NextInt(0,1)) - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect); - else - CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect); - } - } - } -} -void ProcessTower4() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=4)continue; - towerspr[yellow]->SetColor(tower[i].RendColor); - towerspr[yellow]->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); - } - } -} -void ProcessTower5() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=5)continue; - towerspr[purple]->SetColor(tower[i].RendColor); - towerspr[purple]->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); - } - } -} -void ProcessTower6() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=6)continue; - towerspr[red]->SetColor(tower[i].RendColor); - towerspr[red]->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].exp1,tower[i].exp2,tower[i].effect); - } - } -} -void ProcessTower7() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=7)continue; - towerspr[white]->SetColor(tower[i].RendColor); - towerspr[white]->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); - } - } -} -void ProcessTower8() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=8)continue; - towerspr[dblue]->SetColor(tower[i].RendColor); - towerspr[dblue]->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545); - if (DisableAllTower)continue; - if (!tower[i].dblstate) - { - if (LOWFPS) - tower[i].curtimer-=17; - else - --tower[i].curtimer; - if (tower[i].curtimer<=0) - { - tower[i].curtimer=tower[i].towertimer; - tower[i].dblstate=true; - tower[i].curtimer2=tower[i].towertimer2; - tower[i].curshotcount=tower[i].shotcount; - if (!Dis8ref&&!t8special)BTarg.TargShow(); - if (!Dis8ref)BTarg.targpos=playerpos; - if (PlayerSplit) - { - int r=0; - for(int i=1;i<4;++i) - if(GetDist(playerpos+splitData[r],vector2d(400,300))> - GetDist(playerpos+splitData[i],vector2d(400,300)))r=i; - BTarg.targpos=playerpos+splitData[r]; - } - } - } - else - { - if (LOWFPS) - tower[i].curtimer2-=17; - else - --tower[i].curtimer2; - if (tower[i].curtimer2<=0) - { - if (tower[i].curshotcount<=0) - { - tower[i].curtimer=tower[i].towertimer; - tower[i].dblstate=false; - tower[i].curtimer2=tower[i].towertimer2; - tower[i].curshotcount=tower[i].shotcount; - if (!Dis8ref)BTarg.TargHide(); - continue; - } - if (!t8special) - { - int pnt=CreateBullet8(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect); - if(level==-1&&part==21)bullet[pnt].redattrib=1;else bullet[pnt].redattrib=0; - if (Dis8ref) - { - if (tower[i].towerpos.y<300) - bullet[pnt].setdir(-pi/2);else bullet[pnt].setdir(pi/2); - } - else bullet[pnt].redir(BTarg.targpos); - } - else - { - for(int j=0;j<5;++j) - { - int pnt=CreateBullet8(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect); - bullet[pnt].alterColor=white; - bullet[pnt].redir(BTarg.targpos); - bullet[pnt].bulletdir.Rotate(j*2*pi/5); - } - } - tower[i].curtimer2=tower[i].towertimer2; - --tower[i].curshotcount; - } - } - } -} -void ProcessTower9() -{ - for (int i=1;i<=towcnt;++i) - { - if (!tower[i].exist||tower[i].towertype!=9)continue; - towerspr[orange]->SetColor(tower[i].RendColor); - towerspr[orange]->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; - CreateBullet9(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].redexplo,tower[i].whicnt,tower[i].yelbrk,tower[i].effect); - } - } -} -//Laser Implementation -int Lasercnt; -class Laser -{ -private: - hgeDistortionMesh *graphic; - int Res; - vector2d data1[MaxRes],data2[MaxRes]; - double GetDist() - { - double res=99999.9999f,tres; - static vector2d correction=vector2d(8.4,8.4); - for (int i=0;i<Res-1;++i) - { - vector2d sa,sb; - sa=data1[i]+RenCtr;sb=data1[i+1]+RenCtr; - tres=GetDistSeg(sa,sb,playerpos+correction); - sa=data2[i]+RenCtr;sb=data2[i+1]+RenCtr; - if(GetDistSeg(sa,sb,playerpos+correction)<tres) - tres=GetDistSeg(sa,sb,playerpos+correction); - if (tres<res)res=tres; - } - return res; - } -public: - bool EnableColl; - vector2d RenCtr; - int collbrk,scollbrk; - void SetRes(int _Res){Res=_Res;} - void Render() - { - graphic->Render(RenCtr.x,RenCtr.y); - } - void Init(int _Res=0) - { - graphic=new hgeDistortionMesh(MaxRes,2); - graphic->Clear(0x00000000); - collbrk=scollbrk=0; - Res=_Res; - EnableColl=false; - } - void SetTexture(HTEXTURE Texture,double x=0.0f,double y=0.0f,double w=0.0f,double h=0.0f) - { - graphic->SetTexture(Texture); - if (x||y||w||h)graphic->SetTextureRect(x,y,w,h); - } - void Setdata(int x,vector2d pa,vector2d pb,DWORD color) - { - data1[x]=pa;data2[x]=pb; - graphic->SetDisplacement(x,0,data1[x].x,data1[x].y,HGEDISP_TOPLEFT); - graphic->SetDisplacement(x,1,data2[x].x,data2[x].y,HGEDISP_TOPLEFT); - graphic->SetColor(x,0,color);graphic->SetColor(x,1,color); - } - bool InsPoint(vector2d pa,vector2d pb,DWORD color) - { - if (Res==MaxRes)return false; - data1[++Res-1]=pa;data2[Res-1]=pb; - graphic->SetDisplacement(Res-1,0,data1[Res].x,data1[Res].y,HGEDISP_TOPLEFT); - graphic->SetDisplacement(Res-1,1,data2[Res].x,data2[Res].y,HGEDISP_TOPLEFT); - graphic->SetColor(Res-1,0,color);graphic->SetColor(Res-1,1,color); - return true; - } - void RemoveLastPoint(DWORD color) - { - for (int i=2;i<=Res;++i) - { - data1[i-1]=data1[i]; - data2[i-1]=data2[i]; - graphic->SetDisplacement(i-1,0,data1[i-1].x,data1[i-1].y,HGEDISP_TOPLEFT); - graphic->SetDisplacement(i-1,1,data2[i-1].x,data2[i-1].y,HGEDISP_TOPLEFT); - graphic->SetColor(i-1,0,color);graphic->SetColor(i-1,1,color); - } - graphic->SetDisplacement(Res-1,0,data1[Res].x,data1[Res].y,HGEDISP_TOPLEFT); - graphic->SetDisplacement(Res-1,1,data2[Res].x,data2[Res].y,HGEDISP_TOPLEFT); - graphic->SetColor(Res-1,0,color);graphic->SetColor(Res-1,1,color); - --Res; - } - void Process() - { - Render(); - if (EnableColl) - { - if (GetDist()<3.0f&&clrrange<1e-5&&clrrad-pi/2<1e-7) - { - if (!LOWFPS)++collbrk;else collbrk+=17; - if (collbrk>200) - ++coll,scminus+=10000,collbrk=0,Mult_BatClear(); - } - } - if (GetDist()<9.0f) - { - if (!LOWFPS)++scollbrk;else scollbrk+=17; - if (scollbrk>200) - ++semicoll,scollbrk=0,++dsmc,SCEffect_Attatch(); - } - - } -}laser[200]; -void ProcessLaser() -{ - //Well, I only cares rendering and collision checking.. - //Change laser data in the level code. - for (int i=1;i<=Lasercnt;++i)laser[i].Process(); -} -//Special bullet creation and processing code for some level... -void CreateBullet2(Bullet &Tar,double x,double y,double bs,double rad,bool eff=false) -{ - Tar.exist=true; - Tar.bullettype=2; - Tar.bulletpos.x=x; - Tar.bulletpos.y=y; - Tar.bulletdir.x=cos(rad); - Tar.bulletdir.y=sin(rad); - Tar.bulletspeed=bs; - Tar.alterColor=blue; - Tar.scale=1; - Tar.scollable=true; - Tar.bulletaccel=0; -} -void ProcessBullet2(Bullet &xbul,bool colchk=true) -{ - if (!xbul.exist||xbul.bullettype!=2)return; - if (!xbul.dist)xbul.dist=1; - if (xbul.bulletaccel>0&&xbul.bulletspeed<xbul.limv)xbul.bulletspeed+=xbul.bulletaccel*(1000.0f/hge->Timer_GetFPS()); - if (xbul.bulletaccel<0&&xbul.bulletspeed>xbul.limv)xbul.bulletspeed+=xbul.bulletaccel*(1000.0f/hge->Timer_GetFPS()); - xbul.bulletpos.x-=xbul.bulletspeed*(xbul.bulletdir.x/xbul.dist)/20*(1000.0f/hge->Timer_GetFPS()); - xbul.bulletpos.y-=xbul.bulletspeed*(xbul.bulletdir.y/xbul.dist)/20*(1000.0f/hge->Timer_GetFPS()); - double dis=GetDist(xbul.bulletpos,playerpos); - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&colchk&&xbul.collable) - { - ++coll,scminus+=10000,Mult_BatClear();xbul.collable=false; - return; - } - if (dis<=16&&xbul.scollable)++semicoll,++dsmc,xbul.scollable=false,SCEffect_Attatch(); - if (colchk)bulletspr[xbul.alterColor]->RenderEx(xbul.bulletpos.x+7.2,xbul.bulletpos.y+7.2,0,0.6*xbul.scale); -} -//"Noname" -class Noname01dotpas -{ -private: - Laser untitledlas; - Bullet untitledbul; - double x,y,range1,range2; - double r1lim,r2lim; - bool las,reverse,done; - int PMod,pos,boomlim; - DWORD color; -public: - bool Exist() - { - return (fabs(y)>1e-6); - } - void Init(int x,int pmd,double _r1lim,double _r2lim,int _boomlim,DWORD _color) - { - untitledlas.Init(); - this->x=x,this->y=2;color=_color; - CreateBullet2(untitledbul,x,2,0,3*pi/2); - untitledbul.bulletaccel=0.0005; - untitledbul.limv=2;untitledbul.collable=true; - las=false; - reverse=false; - done=false; - PMod=pmd; - r1lim=_r1lim;r2lim=_r2lim;boomlim=_boomlim; - if (re.NextInt(0,100)>boomlim) - pos=re.NextInt(0,600); - else - pos=999; - untitledlas.SetTexture(SprSheet,0,264,248,8); - } - void noname2pnt() - { - if(!las) - CreateBullet255(untitledbul.bulletpos.x,untitledbul.bulletpos.y,10); - else - { - for (int i=0;i<60;++i) - { - double trad=(i/60.0f)*pi*2; - vector2d a; - if (!(i%PMod)) - { - a.x=cos(trad)*range2;a.y=sin(trad)*range2; - } - else - { - a.x=cos(trad)*range1;a.y=sin(trad)*range1; - } - a=a+untitledbul.bulletpos; - CreateBullet255(a.x,a.y,10); - } - } - } - void Process() - { - if (!las) - ProcessBullet2(untitledbul),x=untitledbul.bulletpos.x,y=untitledbul.bulletpos.y; - else - untitledlas.EnableColl=true, - untitledlas.Process(); - if (!untitledbul.exist)y=-1; - if (y>pos&&!done&&!las) - { - las=true; - range1=range2=2; - for (int i=0;i<60;++i) - { - double trad=(i/60.0f)*pi*2; - vector2d a,b; - a.x=cos(trad)*range1;a.y=sin(trad)*range1; - b.x=cos(trad)*(range1-10);b.y=sin(trad)*(range1-10); - untitledlas.InsPoint(a,b,color); - } - int i=60; - double trad=1.0f/60*pi*2; - vector2d a,b; - if (!(i%PMod)) - { - a.x=cos(trad)*range2;a.y=sin(trad)*range2; - b.x=cos(trad)*(range2-10);b.y=sin(trad)*(range2-10); - } - else - { - a.x=cos(trad)*range1;a.y=sin(trad)*range1; - b.x=cos(trad)*(range1-10);b.y=sin(trad)*(range1-10); - } - for (int i=60;i<MaxRes;++i)untitledlas.InsPoint(a,b,color); - }else - if (las) - { - untitledlas.RenCtr=vector2d(x+7.2,y+7.2); - untitledlas.Render();untitledlas.EnableColl=true; - untitledlas.Process(); - if (!reverse) - { - if (range1<r1lim)range1+=0.2*(1000.0/hge->Timer_GetFPS()),range2=range1; - if (range1>=r1lim&&range2<r2lim)range2+=0.1*(1000.0/hge->Timer_GetFPS()); - if (range2>=r2lim)reverse=true; - } - else - { - if (range2>=r1lim)range2-=0.1*(1000.0/hge->Timer_GetFPS());else range1-=0.2*(1000.0/hge->Timer_GetFPS()),range2=range1; - if (range1<=2)las=false,done=true; - } - for (int i=0;i<60;++i) - { - double trad=(i/60.0f)*pi*2; - vector2d a,b; - if (!(i%PMod)) - { - a.x=cos(trad)*range2;a.y=sin(trad)*range2; - b.x=cos(trad)*(range2-10);b.y=sin(trad)*(range2-10); - } - else - { - a.x=cos(trad)*range1;a.y=sin(trad)*range1; - b.x=cos(trad)*(range1-10);b.y=sin(trad)*(range1-10); - } - untitledlas.Setdata(i,a,b,color); - } - int i=60; - double trad=pi*2; - vector2d a,b; - if (!(i%PMod)) - { - a.x=cos(trad)*range2;a.y=sin(trad)*range2; - b.x=cos(trad)*(range2-10);b.y=sin(trad)*(range2-10); - } - else - { - a.x=cos(trad)*range1;a.y=sin(trad)*range1; - b.x=cos(trad)*(range1-10);b.y=sin(trad)*(range1-10); - } - for (int i=60;i<MaxRes;++i) - untitledlas.Setdata(60,a,b,color); - } - } -}noname[1000]; -//"CTarg" -class SimpleBullet -{ -public: - TColors aC,aC2; - vector2d bulletpos; - int scollable,lastcoll; - double rot; - bool Update_SimpBul() - { - if (lastcoll) - { - ++lastcoll; - if (LOWFPS)lastcoll+=16; - } - if (scollable) - { - ++scollable; - if (LOWFPS)scollable+=16; - } - if (lastcoll>=200)lastcoll=0; - if (scollable>=200)scollable=0; - if (aC2==COLOR_COUNT)bulletspr[aC]->RenderEx(bulletpos.x+7.2,bulletpos.y+7.2,0,0.6,0);//blink hack - else RenderAlter(vector2d(bulletpos.x+7.2,bulletpos.y+7.2),aC,aC2,rot,0.6); - double dis=GetDist(bulletpos,playerpos); - if (dis<=6&&clrrange<1e-5&&clrrad-pi/2<1e-7&&!lastcoll) - { - ++coll,scminus+=10000;lastcoll=1;Mult_BatClear(); - return true;//Collision - } - else - { - if (dis<=16&&!scollable)++semicoll,++dsmc,scollable=1,SCEffect_Attatch(); - return false; - } - } -}; -class TCTarg -{ -private: - Target Targ; - SimpleBullet CircBul[37]; - int BulLim,bul; - double radian,range; - double Ubrk,Ulim; -public: - void Init(int _BulLim,double _InitRange,double _Ulim) - { - Targ.Init(-0.01,playerpos); - Targ.TargShow(); - BulLim=_BulLim; - Ulim=_Ulim; - bul=BulLim; - radian=0; - range=_InitRange; - for (int i=1;i<=BulLim;++i) - { - CircBul[i].bulletpos=vector2d(3+Targ.targpos.x+range*sin(radian-i*(2*pi/BulLim)), - 3+Targ.targpos.y-range*cos(radian-i*(2*pi/BulLim))); - CircBul[i].aC=blue;CircBul[i].aC2=COLOR_COUNT;CircBul[i].rot=0; - CircBul[i].scollable=0; - } - } - double GetRange() - { - return range; - } - void SetRange(double _range) - { - range=_range; - } - void Update() - { - Targ.TargRender(); - if (LOWFPS)radian+=17*60*pi/50000.0f;else radian+=60*pi/50000.0f; - Ubrk+=hge->Timer_GetDelta(); - hgeColorRGB tcol; - tcol.a=tcol.r=1; - tcol.b=tcol.g=Ubrk>Ulim?0.0f:(Ulim-Ubrk)/Ulim; - Targ.targspr->SetColor(tcol.GetHWColor()); - if (Ubrk>Ulim) - { - Targ.TargFollowPlayer(); - if (GetDist(Targ.targpos,playerpos)<4.0f)Ubrk=0.0f; - } - for (int i=1;i<=bul;++i) - { - CircBul[i].bulletpos=vector2d(3+Targ.targpos.x+range*sin(radian-i*(2*pi/BulLim))-6, - 3+Targ.targpos.y-range*cos(radian-i*(2*pi/BulLim))-6); - CircBul[i].Update_SimpBul(); - } - } -}; -TCTarg CTarg; -#undef rad1 -#undef rad2 -class TROF -{ -public: - int Bul[64]; - double rad1,rad2,drad,srad,dtrad,dtrad2; - double range,drange,dtrange,cdtrange; - int stage,cnt,ccnt,delay,cf; - double elasp; - void init() - { - stage=0;rad1=rad2=srad;elasp=0.0f;ccnt=0; - for (int i=0;i<cnt;++i)Bul[i]=CreateBullet8(400,300,0,false),bullet[Bul[i]].setdir(srad),bullet[Bul[i]].scale=0.01,bullet[Bul[i]].inv=true; - bullet[Bul[0]].bulletspeed=2;bullet[Bul[0]].scale=1; - } - void stage0() - { - elasp+=hge->Timer_GetDelta(); - if ((int)(elasp/0.15f)>ccnt&&ccnt<cnt-1) - { - ccnt=(int)(elasp/0.2f); - if (ccnt==1)dtrange=GetDist(bullet[Bul[0]].bulletpos,bullet[Bul[1]].bulletpos); - bullet[Bul[ccnt]].bulletspeed=2;bullet[Bul[ccnt]].scale=1; - } - if (elasp>2) - { - stage=1;NewMultpo(vector2d(400,300)); - drange=GetDist(bullet[Bul[ccnt-1]].bulletpos,vector2d(400,300)); - dtrad=(drad-srad);while (dtrad>pi/6.0f)dtrad-=pi/6.0f;dtrad/=delay; - dtrad2=(2*pi-drad+srad);while (dtrad2>pi/6.0f)dtrad2-=pi/6.0f;dtrad2/=delay; - for (int i=0;i<cnt;++i)bullet[Bul[i]].bulletspeed=0; - cf=0; - } - } - void stage1() - { - cf+=(LOWFPS?17:1); - rad1=srad+dtrad*cf;rad2=srad-dtrad2*cf; - for (int i=0;i<cnt;++i) - if (bullet[Bul[i]].bullettype==8) - { - if (i&1) - bullet[Bul[i]].bulletpos=vector2d(400+(drange+(cnt-i)*dtrange)*cos(rad1-pi),300+(drange+(cnt-i)*dtrange)*sin(rad1-pi)); - else - bullet[Bul[i]].bulletpos=vector2d(400+(drange+(cnt-i)*dtrange)*cos(rad2-pi),300+(drange+(cnt-i)*dtrange)*sin(rad2-pi)); - } - if (cf>delay) - { - cf=delay; - rad1=srad+dtrad*cf;rad2=srad-dtrad2*cf; - for (int i=0;i<cnt;++i) - if (bullet[Bul[i]].bullettype==8) - { - if (i&1) - bullet[Bul[i]].bulletpos=vector2d(400+(drange+(cnt-i)*dtrange)*cos(rad1-pi),300+(drange+(cnt-i)*dtrange)*sin(rad1-pi)); - else - bullet[Bul[i]].bulletpos=vector2d(400+(drange+(cnt-i)*dtrange)*cos(rad2-pi),300+(drange+(cnt-i)*dtrange)*sin(rad2-pi)); - bullet[Bul[i]].bulletspeed=2,bullet[Bul[i]].redir(vector2d(400,300)), - bullet[Bul[i]].bulletdir=vector2d(-bullet[Bul[i]].bulletdir.x,-bullet[Bul[i]].bulletdir.y); - bullet[Bul[i]].inv=false; - } - stage=2; - } - } - void stage2(){} - void update() - { - switch(stage) - { - case 0:stage0();break; - case 1:stage1();break; - case 2:stage2();break; - } - } -}; -class BCircle -{ -private: - SimpleBullet Bullets[360]; - int BCnt; - double radian,range,DT,drad; - vector2d Centre; -public: - void Init(double _irange,double _drad,int _Cnt,vector2d _Centre,TColors _Col=blue,TColors _Col2=COLOR_COUNT) - { - range=_irange; - BCnt=_Cnt; - radian=0; - DT=0.0f; - drad=_drad; - Centre=_Centre; - for (int i=1;i<=BCnt;++i) - { - Bullets[i].bulletpos=vector2d(3+Centre.x+range*sin(radian-i*(2*pi/BCnt))-6, - 3+Centre.y-range*cos(radian-i*(2*pi/BCnt))-6); - Bullets[i].aC=_Col;Bullets[i].aC2=_Col2; - Bullets[i].rot=0; - } - } - double GetRange(){return range;} - void SetRange(double _range){range=_range;} - void SetDT(double _DT){DT=_DT;} - double GetDT(){return DT;} - double GetRad(){return radian;} - void circ2pnt() - { - for(int i=1;i<=BCnt;++i) - CreateBullet255(Bullets[i].bulletpos.x,Bullets[i].bulletpos.y,10); - } - void Update() - { - DT+=hge->Timer_GetDelta(); - if (LOWFPS)radian+=17*drad;else radian+=drad; - for (int i=1;i<=BCnt;++i) - { - Bullets[i].bulletpos=vector2d(3+Centre.x+range*sin(radian-i*(2*pi/BCnt))-6, - 3+Centre.y-range*cos(radian-i*(2*pi/BCnt))-6); - Bullets[i].rot+=(LOWFPS?17:1)*pi/1000; - Bullets[i].Update_SimpBul(); - } - } -}; -class BulletSine -{ -private: - Bullet headb; - vector2d a,b,lastgenerated; - int generated[400]; - int gencnt; - bool OutOfBound() - { - if (headb.bulletpos.x<=-25||headb.bulletpos.x>=825||headb.bulletpos.y<=-25||headb.bulletpos.y>=625) - return true;return false; - } -public: - bool active; - void Init(vector2d _a,vector2d _b) - { - a=_a;b=_b;lastgenerated=_a; - CreateBullet2(headb,a.x,a.y,6,0); - headb.redir(b); - active=true;memset(generated,0,sizeof(generated)); - gencnt=0; - } - void Update() - { - if (GetDist(lastgenerated,headb.bulletpos)>4.0f) - { - ++gencnt; - double rad=(gencnt&1)?(gencnt+1)/2*pi/18.0f:-gencnt/2*pi/18.0f; - generated[gencnt]=CreateBullet2(headb.bulletpos.x,headb.bulletpos.y,0,rad,true); - bullet[generated[gencnt]].inv=true; - lastgenerated=headb.bulletpos; - } - if (OutOfBound()) - { - active=false; - for (int i=1;i<=gencnt;++i) - if (generated[i]) - bullet[generated[i]].bulletaccel=0.005,bullet[generated[i]].limv=2, - bullet[generated[i]].inv=false,bullet[generated[i]].collable=true; - memset(generated,0,sizeof(generated)); - } - ProcessBullet2(headb); - } -}; -class WOP -{ -private: - int trail[200]; - double brk,blim,rad,k,ml; - vector2d a,b; - Bullet hbul; - bool OutOfBound() - { - if (hbul.bulletpos.x<=-25||hbul.bulletpos.x>=825||hbul.bulletpos.y<=-25||hbul.bulletpos.y>=625) - { - for (int i=0;i<200;++i)if (trail[i])return false; - return true; - }return false; - } -public: - bool active; - void Init(vector2d _a,vector2d _b,double _ml,double _bl) - { - a=_a,b=_b,ml=_ml,blim=_bl;rad=0; - if (fabs(b.x-a.x)<1e-6)return;k=(b.y-a.y)/(b.x-a.x); - CreateBullet2(hbul,a.x,a.y,7,0);hbul.redir(b); - active=true;memset(trail,0,sizeof(trail)); - } - void Update() - { - if (Current_Position!=1)return; - ProcessBullet2(hbul,false); - brk+=hge->Timer_GetDelta(); - if (brk>blim) - { - brk=0; - for (int i=0;i<200;++i) - { - if (trail[i]) - if (bullet[trail[i]].lifetime>ml)BulletEffect_Death(bullet[trail[i]],0x8000CCFF),bullet[trail[i]].exist=false,trail[i]=0; - } - rad+=pi/16.0f; - vector2d uv=ToUnitCircle(vector2d(1,-k));uv.Swap(); - int pnt=0;while (trail[pnt])++pnt; - trail[pnt]=CreateBullet2(hbul.bulletpos.x+uv.x*50*sin(rad),hbul.bulletpos.y+uv.y*50*sin(rad),0,0,true); - pnt=0;while (trail[pnt])++pnt; - trail[pnt]=CreateBullet2(hbul.bulletpos.x-uv.x*50*sin(rad),hbul.bulletpos.y-uv.y*50*sin(rad),0,0,true); - } - if (OutOfBound())active=false; - } -}; -class BTail -{ -//devide the screen into a 16*12 matrix, put random colored bullets, arranged -//in the shape of the snake, on to it. -//^Maybe this description is too bad to understand. See the code. -//Partly based on class WOP -private: - class Pile - { - private: - int pb[200]; - int matrixx,matrixy,progress,cnt; - double brk;TColors color; - public: - int getProgress(){return progress;} - void create(int _x,int _y,TColors _col) - { - matrixx=_x;matrixy=_y;color=_col; - progress=1;cnt=0; - } - void kill() - { - for(int i=0;i<cnt;++i) - { - if(pb[i]) - { - if(bullet[pb[i]].bullettype==2) - { - bullet[pb[i]].exist=false;pb[i]=0; - } - } - } - } - void update() - { - if(!progress)return; - if(progress<10) - { - brk+=hge->Timer_GetDelta(); - if(brk>0.03) - { - brk=0;if(progress++>5)return (void)(progress=10); - for(int i=0;i<10;++i) - { - vector2d ran=vector2d(re.NextDouble(0,50)+matrixx*50,re.NextDouble(0,50)+matrixy*50); - pb[cnt++]=CreateBullet2(ran.x,ran.y,0,0,true); - bullet[pb[cnt-1]].alterColor=color; - } - } - } - else - { - brk+=hge->Timer_GetDelta(); - if(brk>0.03) - { - bool alldone=true; - for(int i=0;i<cnt;++i) - { - if(pb[i]) - { - if(bullet[pb[i]].bullettype==2&&bullet[pb[i]].lifetime>1) - { - BulletEffect_Death(bullet[pb[i]],ColorToDWORD(color)); - bullet[pb[i]].exist=false;pb[i]=0; - } - else alldone=false; - } - } - if(alldone)progress=0; - } - } - } - }; - Pile piles[30]; - bool tactive; - int listx[30],listy[30],cnt; - TColors pcolor;double tlifetime; - bool check(int x,int y) - { - if(x<0||x>15)return false; - if(y<0||y>12)return false; - for(int i=0;i<cnt;++i) - if(x==listx[i]&&y==listy[i])return false; - return true; - } -public: - bool isActive(){return tactive;} - void Create() - { - pcolor=(TColors)re.NextInt(0,7);tactive=true; - cnt=0;memset(listx,0,sizeof(listx)); - memset(listy,0,sizeof(listy));tlifetime=0; - listx[cnt++]=re.NextInt(0,15);listy[cnt-1]=re.NextInt(0,11); - piles[cnt-1].create(listx[cnt-1],listy[cnt-1],pcolor); - } - void Update() - { - tlifetime+=hge->Timer_GetDelta(); - if(tlifetime>15) - { - tactive=false; - for(int i=0;i<30;++i) - if(piles[i].getProgress())piles[i].kill(); - } - if(piles[cnt-1].getProgress()==10) - { - int dlx[4],dly[4],dcnt=0; - if(check(listx[cnt-1]+1,listy[cnt-1])) - dlx[dcnt]=listx[cnt-1]+1,dly[dcnt++]=listy[cnt-1]; - if(check(listx[cnt-1]-1,listy[cnt-1])) - dlx[dcnt]=listx[cnt-1]-1,dly[dcnt++]=listy[cnt-1]; - if(check(listx[cnt-1],listy[cnt-1]+1)) - dlx[dcnt]=listx[cnt-1],dly[dcnt++]=listy[cnt-1]+1; - if(check(listx[cnt-1],listy[cnt-1]-1)) - dlx[dcnt]=listx[cnt-1],dly[dcnt++]=listy[cnt-1]-1; - if(dcnt&&cnt<30) - { - int rd=re.NextInt(0,dcnt-1); - listx[cnt++]=dlx[rd];listy[cnt-1]=dly[rd]; - piles[cnt-1].create(listx[cnt-1],listy[cnt-1],pcolor); - } - } - bool none=true; - for(int i=0;i<30;++i) - if(piles[i].getProgress())none=false,piles[i].update(); - if(none)tactive=false; - } -}; -class SimpleThing -{ -private: - vector2d center; - int step,cnt; - double rad,dly,lr,ra; - SimpleBullet b[500]; - double r[500],mr[500]; - bool create,rot; -public: - void Init(vector2d _ctr) - { - center=_ctr;step=cnt=dly=lr=ra=0; - create=true;rot=false; - } - void Update(bool rv) - { - dly+=hge->Timer_GetDelta(); - if(dly>0.2&&create) - { - dly=0; - for(int i=0;i<10;++i) - { - b[cnt].bulletpos=center; - b[cnt].aC=blue;b[cnt].aC2=COLOR_COUNT; - r[cnt/10]=0;mr[cnt/10]=(lr+=2); - if (lr>620)create=false; - ++cnt; - } - } - bool all=!create; - if(!rot) - for(int i=0;i<cnt;++i) - { - b[i].bulletpos=vector2d(center.x+r[i/10]*cos(i/10*pi/12+pi/5*(i%10)),center.y+r[i/10]*sin(i/10*pi/12+pi/5*(i%10))); - if(r[i/10]<mr[i/10])r[i/10]+=(LOWFPS?17:1)*0.01,all=false; - else r[i/10]=mr[i/10]; - b[i].Update_SimpBul(); - } - if(all||rot) - { - rot=true; - rv?rad+=(LOWFPS?17:1)*ra:rad-=(LOWFPS?17:1)*ra; - if(ra<pi/7200)ra+=(LOWFPS?17:1)*pi/630000000.0f; - for(int i=0;i<cnt;++i) - { - b[i].bulletpos=vector2d(center.x+r[i/10]*cos(i/10*pi/12+rad+pi/5*(i%10)),center.y+r[i/10]*sin(i/10*pi/12+rad+pi/5*(i%10))); - b[i].Update_SimpBul(); - } - } - } - void toPoint() - { - for(int i=0;i<cnt;++i) - CreateBullet255(b[i].bulletpos.x,b[i].bulletpos.y,10); - } -}; -class diffCreator -{ -protected: - bool active; - double range; - int cnt; - vector2d center; - int C; - int target[200]; - vector2d created[200]; -private: - TColors rbGetColor(int a) - { - switch (a) - { - case 2:return orange; - case 3:return yellow; - case 4:return green; - case 5:return blue; - case 6:return dblue; - case 7:return purple; - default:return circle; - } - } - bool test(vector2d a) - { - for(int i=0;i<cnt;++i) - if(GetDist(a,created[i])<12)return false; - return true; - } -public: - void init(vector2d _ctr) - { - active=true; - cnt=0;range=0; - center=_ctr; - C=CreateBullet2(center.x,center.y,0,0,true); - bullet[C].alterColor=red; - } - bool isActive(){return active;} - void update() - { - range+=hge->Timer_GetDelta()*400; - vector2d a;bool all=true; - for(a=vector2d(center.x-15,center.y);a.x>-25;a.x-=15) - if(GetDist(a,center)<=range) - { - if(test(a)) - target[cnt++]=CreateBullet2(a.x,a.y,0,0,true), - created[cnt-1]=vector2d(a.x,a.y), - bullet[target[cnt-1]].inv=true, - bullet[target[cnt-1]].alterColor=red; - } - else all=false; - for(a=vector2d(center.x+15,center.y);a.x<825;a.x+=15) - if(GetDist(a,center)<=range) - { - if(test(a)) - target[cnt++]=CreateBullet2(a.x,a.y,0,pi,true), - created[cnt-1]=vector2d(a.x,a.y), - bullet[target[cnt-1]].inv=true, - bullet[target[cnt-1]].alterColor=red; - } - else all=false; - for(a=vector2d(center.x,center.y-15);a.y>-25;a.y-=15) - if(GetDist(a,center)<=range) - { - if(test(a)) - target[cnt++]=CreateBullet2(a.x,a.y,0,pi/2,true), - created[cnt-1]=vector2d(a.x,a.y), - bullet[target[cnt-1]].inv=true, - bullet[target[cnt-1]].alterColor=red; - } - else all=false; - for(a=vector2d(center.x,center.y+15);a.y<625;a.y+=15) - if(GetDist(a,center)<=range) - { - if(test(a)) - target[cnt++]=CreateBullet2(a.x,a.y,0,-pi/2,true), - created[cnt-1]=vector2d(a.x,a.y), - bullet[target[cnt-1]].inv=true, - bullet[target[cnt-1]].alterColor=red; - } - else all=false; - a=center; -#define _bat \ - bullet[target[cnt-1]].redir(center),\ - created[cnt-1]=bullet[target[cnt-1]].bulletpos,\ - bullet[target[cnt-1]].bulletdir.x=-bullet[target[cnt-1]].bulletdir.x,\ - bullet[target[cnt-1]].bulletdir.y=-bullet[target[cnt-1]].bulletdir.y,\ - bullet[target[cnt-1]].inv=true,\ - bullet[target[cnt-1]].alterColor=rbGetColor(i+j); - for(int i=1;i<=6;++i) - for(int j=1;j<=7-i;++j) - if(GetDist(vector2d(a.x+i*15,a.y+j*15),center)<=range){ - if(test(vector2d(a.x+i*15,a.y+j*15))) - target[cnt++]=CreateBullet2(a.x+i*15,a.y+j*15,0,0,true),_bat;} - else all=false; - for(int i=1;i<=6;++i) - for(int j=1;j<=7-i;++j) - if(GetDist(vector2d(a.x-i*15,a.y+j*15),center)<=range){ - if(test(vector2d(a.x-i*15,a.y+j*15))) - target[cnt++]=CreateBullet2(a.x-i*15,a.y+j*15,0,0,true),_bat;} - else all=false; - for(int i=1;i<=6;++i) - for(int j=1;j<=7-i;++j) - if(GetDist(vector2d(a.x+i*15,a.y-j*15),center)<=range){ - if(test(vector2d(a.x+i*15,a.y-j*15))) - target[cnt++]=CreateBullet2(a.x+i*15,a.y-j*15,0,0,true),_bat;} - else all=false; - for(int i=1;i<=6;++i) - for(int j=1;j<=7-i;++j) - if(GetDist(vector2d(a.x-i*15,a.y-j*15),center)<=range){ - if(test(vector2d(a.x-i*15,a.y-j*15))) - target[cnt++]=CreateBullet2(a.x-i*15,a.y-j*15,0,0,true),_bat;} - else all=false; -#undef _bat - if(all) - { - BulletEffect_Death(bullet[C],0x80FF3333); - bullet[C].exist=false; - for(int i=0;i<cnt;++i) - { - bullet[target[i]].bulletspeed=-0.5; - bullet[target[i]].bulletaccel=0.0005; - bullet[target[i]].limv=3; - bullet[target[i]].inv=false; - bullet[target[i]].collable=true; - } - active=false; - } - }; -}; -class RTV -{ -private: - int mode,cnt,stage,spnr,dcorr; - bool active;TColors col; - double drad,rad,brk; - int targ[600]; -public: - bool isActive(){return active;} - void Init(int _mode,double _drad,int _spnr,TColors _c,int _dcorr) - { - mode=_mode;drad=_drad;rad=0;spnr=_spnr; - brk=0;active=true;cnt=0;stage=0;col=_c; - memset(targ,0,sizeof(targ));dcorr=_dcorr; - } - void Update() - { - switch(mode) - { - case 1: - { - brk+=hge->Timer_GetDelta(); - bool dchk=(stage==1); - for(int i=0;i<cnt;++i) - { - if(bullet[targ[i]].bulletspeed>1&&GetDist(vector2d(400,300),bullet[targ[i]].bulletpos)>=200) - bullet[targ[i]].bulletspeed=0; - if(bullet[targ[i]].bulletspeed>1)dchk=false; - } - if(dchk) - { - for(int i=0;i<cnt;++i) - { - double rad=atan2(bullet[targ[i]].bulletdir.y,bullet[targ[i]].bulletdir.x); - int cc=(int)(rad/drad); - if((cc/6+dcorr)&1) - bullet[targ[i]].bulletaccel=0.005, - bullet[targ[i]].limv=3; - else - bullet[targ[i]].bulletaccel=-0.005, - bullet[targ[i]].limv=-3; - } - return(void)(active=false); - } - if(stage==0) - { - if(brk>0.05) - { - brk=0;rad+=drad; - if(fabs(rad)>2*pi/spnr+pi/180)return(void)(stage=1); - for(int i=0;i<spnr;++i) - { - targ[cnt]=CreateBullet2(400,300,2,rad+i*2*pi/spnr), - bullet[targ[cnt]].inv=true, - bullet[targ[cnt++]].alterColor=col; - } - } - } - } - break; - case 2: - { - brk+=hge->Timer_GetDelta(); - bool dchk=(stage==1); - for(int i=0;i<cnt;++i) - { - if(bullet[targ[i]].bulletspeed>1&&GetDist(vector2d(400,300),bullet[targ[i]].bulletpos)>=200) - bullet[targ[i]].bulletspeed=0; - if(bullet[targ[i]].bulletspeed>1)dchk=false; - } - if(dchk) - { - if(re.NextInt(0,1)) - for(int i=0;i<cnt;++i) - bullet[targ[i]].bulletaccel=-0.005, - bullet[targ[i]].limv=-3; - else - for(int i=0;i<cnt;++i) - bullet[targ[i]].bulletaccel=0.005, - bullet[targ[i]].limv=3; - return(void)(active=false); - } - if(stage==0) - { - if(brk>0.05) - { - brk=0;rad+=drad; - if(fabs(rad)>2*pi/spnr+pi/180)return(void)(stage=1); - for(int i=0;i<spnr;++i) - { - targ[cnt]=CreateBullet2(400,300,2,rad+i*2*pi/spnr), - bullet[targ[cnt]].inv=true; - bullet[targ[cnt++]].alterColor=col; - } - } - } - } - break; - case 3: - { - brk+=hge->Timer_GetDelta(); - if(brk>0.05) - { - brk=0;rad+=drad; - if(fabs(rad)>2*pi/spnr+pi/180)return(void)(active=false); - for(int i=0;i<spnr;++i) - { - targ[cnt]=CreateBullet2(400,300,2,rad+i*2*pi/spnr); - bullet[targ[cnt]].inv=true; - bullet[targ[cnt++]].alterColor=col; - targ[cnt]=CreateBullet2(400,300,2,-rad+i*2*pi/spnr); - bullet[targ[cnt]].inv=true; - bullet[targ[cnt++]].alterColor=col; - } - } - } - break; - } - } -}; -bool achromab,achromaB[100]; -class achromaGroup -{ -private: - class achromaBullet:public SimpleBullet - { - private: - bool active; - double spd,acc,lim; - public: - bool isActive(){return active;} - void achromaInit(vector2d pos,TColors initcol,double _lim) - { - bulletpos=pos;spd=0;acc=0.0005;lim=_lim;rot=0; - lastcoll=0;aC=initcol;aC2=COLOR_COUNT; - active=true; - } - void Reverse() - { - spd=0; - if(aC==green)aC=red; - else if(aC==red)aC=green; - } - void achromaUpdate() - { - if(aC==red)lastcoll=1;//ignore coll for red. - bulletpos.y+=spd*(1000.0f/hge->Timer_GetFPS()); - if(spd+acc*(1000.0f/hge->Timer_GetFPS())<lim)spd+=acc*(1000.0f/hge->Timer_GetFPS()); - if(bulletpos.y>610)active=false; - Update_SimpBul(); - } - }bullets[1000]; -public: - double crbrk,llim;TColors col; - void Init(TColors initcol,double _llim) - { - col=initcol;llim=_llim; - crbrk=re.NextDouble(0,frameleft/(double)(AMinute+ThirtySeconds))*(part==36?0.07:0.02)+0.03; - } - void Reverse() - { - if(col==red)col=green; - else if(col==green)col=red; - for(int i=0;i<1000;++i)if(bullets[i].isActive())bullets[i].Reverse(); - } - void achroma2pnt() - { - for(int i=0;i<1000;++i)if(bullets[i].isActive())CreateBullet255(bullets[i].bulletpos.x,bullets[i].bulletpos.y,10); - } - void Update(int msk=0) - { - crbrk-=hge->Timer_GetDelta(); - if(achromab) - { - if(crbrk<=0) - { - crbrk=re.NextDouble(0,frameleft/(double)AMinute)*(part==36?0.07:0.02)+0.03; - for(int i=0;i<1000;++i) - if(!bullets[i].isActive()) - { - bullets[i].achromaInit(vector2d(re.NextDouble(10,790),-5),col,llim); - break; - } - } - for(int i=0;i<1000;++i)if(bullets[i].isActive())bullets[i].achromaUpdate(); - } - else - { - if(crbrk<=0) - { - crbrk=1; - if(msk) - { - memset(achromaB,0,sizeof(achromaB)); - for(int i=0;i<80;++i)achromaB[i]=re.NextInt(0,1); - } - for(int i=0;i<80;++i) - { - if(achromaB[i]&&col==green) - { - for(int j=0;j<1000;++j) - if(!bullets[j].isActive()) - { - bullets[j].achromaInit(vector2d(i*10,-5),col,llim); - break; - } - } - if(!achromaB[i]&&col==red) - { - for(int j=0;j<500;++j) - if(!bullets[j].isActive()) - { - bullets[j].achromaInit(vector2d(i*10,-5),col,llim); - break; - } - } - } - } - for(int i=0;i<500;++i)if(bullets[i].isActive())bullets[i].achromaUpdate(); - } - } -}; -class yellowGroup -{ -private: - int ylw[100]; - bool dirdone[100]; - bool active; -public: - bool isActive(){return active;} - void Init(int _cnt,double _yv) - { - memset(ylw,0,sizeof(ylw));active=true; - memset(dirdone,0,sizeof(dirdone)); - for (int i=0;i<_cnt;++i) - { - int pnt=CreateBullet2(400,300,_yv,frameleft*pi/AMinute+i*(2*pi/_cnt)); - bullet[pnt].alterColor=yellow; - ylw[i]=pnt; - } - } - void Update() - { - bool done=true; - for (int i=0;i<100;++i) - { - if(ylw[i]&&bullet[ylw[i]].lifetime>2&&!dirdone[i]&&bullet[ylw[i]].alterColor==yellow) - bullet[ylw[i]].redir(playerpos),dirdone[i]=true; - if(ylw[i]&&bullet[ylw[i]].lifetime>5&&bullet[ylw[i]].alterColor==yellow) - { - int cc=re.NextInt(0,5); - for(int j=0;j<cc;++j) - { - int pnt=CreateBullet2(bullet[ylw[i]].bulletpos.x,bullet[ylw[i]].bulletpos.y,0,re.NextDouble(-pi,pi)); - if(!re.NextInt(0,3))bullet[pnt].redir(playerpos); - bullet[pnt].bulletaccel=0.002;bullet[pnt].limv=3; - } - BulletEffect_Death(bullet[ylw[i]],ColorToDWORD(yellow)); - bullet[ylw[i]].exist=false; - bullet[ylw[i]].bullettype=0; - ylw[i]=0; - } - else done=false; - } - if(done)active=false; - } -}; -class Spinner -{ -private: - SimpleBullet abullet[40][100]; - int arms; - double rad,rstep; -public: - void Init(int _arms,double _rstep) - { - memset(abullet,0,sizeof(abullet)); - arms=_arms;rstep=_rstep;rad=0; - for(int i=0;i<arms;++i) - for(int j=0;j*rstep<505;++j) - { - abullet[i][j].aC=blue;abullet[i][j].aC2=COLOR_COUNT; - } - } - void Update(double delta) - { - for(int i=0;i<arms;++i) - for(int j=0;j*rstep<505;++j) - { - double crad=rad+i*(2*pi/arms); - abullet[i][j].bulletpos=vector2d(400+j*rstep*cos(crad),300+j*rstep*sin(crad)); - abullet[i][j].Update_SimpBul(); - } - rad+=hge->Timer_GetDelta()*1000*delta; - } -}; -class expSpinner -{ -private: - int bullets[1000]; - int arms,cnt,lc; - double brk,len,dr,da; - bool active; - bool InBound(vector2d pos) - { - if (pos.x<=-25||pos.x>=825||pos.y<=-25||pos.y>=625) - return false;return true; - } -public: - void Init(int _arms,double _drange,double _drad) - { - arms=_arms;lc=cnt=len=0;dr=_drange;da=_drad;active=true; - } - bool isActive(){return active;} - void Update() - { - brk+=hge->Timer_GetDelta(); - if(brk<0.03)return;brk=0; - bool none=true; - for(int i=0;i<arms;++i) - { - double rad=da+i*2*pi/(double)arms,drad=rad+lc*pi/15;int c=(lc&1)?1:-1; - if(InBound(vector2d(400+len*cos(rad),300+len*sin(rad)))) - { - bullets[cnt++]=CreateBullet2( - 400+len*cos(rad),300+len*sin(rad),0,c*drad,true); - c=-c;none=false; - } - } - len+=dr;++lc; - if(none) - { - active=false; - for(int i=0;i<cnt;++i)bullet[bullets[i]].bulletaccel=0.002,bullet[bullets[i]].limv=2; - } - } -}; -class CPinBall -{ -private: - int center; - int circles[10][30]; - int layer,lifetime;double rot,drt; - vector2d delta; -public: - vector2d& Delta(){return delta;} - vector2d& Position(){return bullet[center].bulletpos;} - double Radius(){return layer*10.0-5;} - void Init(vector2d pos,int _lay) - { - center=0;memset(circles,0,sizeof(circles));double speed=re.NextDouble(2,5); - center=CreateBullet2(pos.x,pos.y,speed,re.NextInt(-pi,pi),true); - delta=speed*bullet[center].bulletdir; - layer=_lay;rot=0;lifetime=1;drt=re.NextDouble(-0.5*pi,0.5*pi); - for(int i=0;i<layer;++i) - { - for(int j=0;j<(i+1)*3;++j) - { - circles[i][j]=CreateBullet2(pos.x,pos.y,0,0,true); - bullet[circles[i][j]].bulletpos=vector2d(pos.x+10*i*cos(rot+j*2*pi/((i+1)*3)),pos.y+10*i*sin(rot+j*2*pi/((i+1)*3))); - } - } - } - void Kill() - { - BulletEffect_Death(bullet[center],ColorToDWORD(blue)); - bullet[center].exist=bullet[center].bullettype=0; - for(int i=0;i<layer;++i) - for(int j=0;j<(i+1)*3;++j) - { - BulletEffect_Death(bullet[circles[i][j]],ColorToDWORD(blue)); - bullet[circles[i][j]].exist=bullet[circles[i][j]].bullettype=0; - } - lifetime=0; - } - int& Getlifetime(){return lifetime;} - void UpdateDelta() - { - vector2d tdt=ToUnitCircle(delta); - bullet[center].bulletdir=tdt;bullet[center].bulletspeed=delta.l(); - } - void Update() - { - vector2d pos=bullet[center].bulletpos; - rot+=hge->Timer_GetDelta()*drt; - for(int i=0;i<layer;++i) - for(int j=0;j<(i+1)*3;++j) - bullet[circles[i][j]].bulletpos=vector2d(pos.x+10*i*cos(rot+j*2*pi/((i+1)*3)),pos.y+10*i*sin(rot+j*2*pi/((i+1)*3))); - } -}; -class LineLaser:public Laser -{ -protected: - double width; - vector2d a,b; - DWORD color; -public: - void SetColl(bool col){EnableColl=col;} - void InitLine(vector2d _a,vector2d _b,double _w,DWORD _c) - { - a=_a;b=_b;color=_c;Init(2); - SetTexture(SprSheet,151,264,2,8); - SetWidth(_w);RenCtr=vector2d(0,0); - } - void SetWidth(double _w) - { - width=_w; - vector2d dir(a-b);dir.ToUnitCircle(); - vector2d pd=dir;pd.Rotate(pi/2); - Setdata(0,a-width*pd,a+width*pd,color); - for(int i=1;i<MaxRes;++i)Setdata(i,b-width*pd,b+width*pd,color); - } - double GetWidth(){return width;} - void llsrtopnt(double dis) - { - vector2d dir=a-b;dir.ToUnitCircle();dir=dis*dir; - vector2d x=b; - while(!(x.x<=-25||x.x>=825||x.y<=-25||x.y>=625)) - { - CreateBullet255(x.x,x.y,10); - x=x+dir; - } - } - //use Laser::Process... -}; -class SimpLL:public LineLaser -{ -public: - bool active; - int stp; - double brk; -}; -class SELineLaser -{ -private: - LineLaser lsr; - bool active,h; - double brk,x; -public: - bool isActive(){return active;} - void Init(int _x,bool _h) - { - x=_x;h=_h; - if(h) - lsr.InitLine(vector2d(0,x),vector2d(800,x),0,SETA(ColorToDWORD(blue),0x80)); - else - lsr.InitLine(vector2d(x,0),vector2d(x,600),0,SETA(ColorToDWORD(blue),0x80)); - active=true;brk=0.05; - } - void Update() - { - lsr.Process(); - brk-=hge->Timer_GetDelta(); - if(brk<0) - { - brk=0.05; - lsr.SetWidth(lsr.GetWidth()+0.2); - if(lsr.GetWidth()>1)lsr.SetColl(true); - if(lsr.GetWidth()>6) - { - int t=0; - if(!re.NextInt(0,2)) - { - if(h?playerpos.y>x:playerpos.x>x)t=1; - vector2d px; - vector2d dir=h?vector2d(-1,0):vector2d(0,-1);dir=18*dir; - for(int c=0,tt=t;c<2;++c,dir=-1*dir,tt=t^1) - { - px=h?vector2d(playerpos.x,x):vector2d(x,playerpos.y); - if(c)px=px+dir; - while(!(px.x<=-25||px.x>=825||px.y<=-25||px.y>=625)) - { - tt^=1; - int pnt=CreateBullet2(px.x,px.y,0,0); - bullet[pnt].bulletdir=(tt?1:-1)*(h?vector2d(0,1):vector2d(1,0)); - bullet[pnt].limv=3;bullet[pnt].bulletaccel=0.001; - px=px+dir; - } - } - } - else - { - vector2d dir=h?vector2d(-1,0):vector2d(0,-1);dir=18*dir; - vector2d px=h?vector2d(800+re.NextInt(-18,0),x):vector2d(x,600+re.NextInt(-18,0)); - while(!(px.x<=-25||px.x>=825||px.y<=-25||px.y>=625)) - { - t^=1; - int pnt=CreateBullet2(px.x,px.y,0,0); - bullet[pnt].bulletdir=(t?1:-1)*(h?vector2d(0,1):vector2d(1,0)); - bullet[pnt].limv=3;bullet[pnt].bulletaccel=0.001; - px=px+dir; - } - } - active=false; - } - } - } -}; |