aboutsummaryrefslogtreecommitdiff
path: root/towernbullet.h
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
commit3bd383baf6a17e734329e1fc677c7e86283db772 (patch)
tree69a9148087577f797624ceb9c71323a2563d6bb4 /towernbullet.h
parent543e4f570be9b279ba558ca61cc02cda251af384 (diff)
downloadbullet-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.h2892
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;
- }
- }
- }
-};