From f4832349efdf06d8a1a410c636045f505efb52f1 Mon Sep 17 00:00:00 2001 From: "chirs241097@gmail.com" Date: Tue, 11 Mar 2014 09:44:43 +0000 Subject: Complete and fix Supernova, add several interfaces. --- CHANGELOG.TXT | 1 + effects.h | 56 ++++++++++++++++++++++++++++---------------------------- global.h | 14 +++++++------- levels.h | 54 +++++++++++++++++++++++++++++++++++++++++++----------- libcgh.h | 15 ++++++++------- towernbullet.h | 2 +- 6 files changed, 88 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 9ceecdf..87f6e7d 100755 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -7,6 +7,7 @@ Add missing tips. Pre-Released versions: 0.8.0-1_PR (b75) New level Supernova. +Extend libcgh again. Adding operator ^ and method l(). 0.8.0-0_PR (b74) New level Achromatopsia. diff --git a/effects.h b/effects.h index 1b3c246..02f0daa 100644 --- a/effects.h +++ b/effects.h @@ -32,39 +32,39 @@ void SCEffect_Attatch(vector2d Target=vector2d(-100,-100)) } void SCEffect_Process(int i) { - if (!bullet[i].exist||bullet[i].bullettype!=254)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; - ++effskp; - if (effskp==7) - bullet[i].sccolor=bullet[i].sccolor-0x1F000000,effskp=0; - } - 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; - ++effskp; - if (effskp==7) - bullet[i].sccolor=bullet[i].sccolor-0x1000000,effskp=0; - } - } - if (GETA(bullet[i].sccolor)<=0x0A||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) + if (!bullet[i].exist||bullet[i].bullettype!=254)return; + if (!DisablePlayer) + { + if (LOWFPS) { - 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; + 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; + ++effskp; + if (effskp==7) + bullet[i].sccolor=bullet[i].sccolor-0x1F000000,effskp=0; } else { - bulletspr[grey]->SetColor(bullet[i].sccolor); - bulletspr[grey]->RenderEx(bullet[i].bulletpos.x+2.4,bullet[i].bulletpos.y+2.4,0,0.2,0); + 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; + ++effskp; + if (effskp==7) + bullet[i].sccolor=bullet[i].sccolor-0x1000000,effskp=0; } + } + if (GETA(bullet[i].sccolor)<=0x0A||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600) + { + 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[grey]->SetColor(bullet[i].sccolor); + bulletspr[grey]->RenderEx(bullet[i].bulletpos.x+2.4,bullet[i].bulletpos.y+2.4,0,0.2,0); + } } void BulletEffect_Attatch(int n) { diff --git a/global.h b/global.h index 07e54d8..8515de7 100644 --- a/global.h +++ b/global.h @@ -105,7 +105,7 @@ public: bulletdir.y=sin(rad); dist=1; } -}bullet[10000]; +}bullet[20000]; /*Something about bullets: //bullettype: //1: player dir-based green bullet @@ -209,12 +209,12 @@ struct Target//An annoying circle void TargGoto(vector2d pos) { double curspd=0.01f; - if (GetDist(pos,targpos)>1)curspd=0.02f;else targpos=pos; - if (GetDist(pos,targpos)>2)curspd=0.1f; - if (GetDist(pos,targpos)>5)curspd=0.5f; - if (GetDist(pos,targpos)>10)curspd=0.75f; - if (GetDist(pos,targpos)>20)curspd=1.0f; - if (GetDist(pos,targpos)>30)curspd=2.0f; + if (GetDist(pos,targpos)>1)curspd=0.25f;else targpos=pos; + if (GetDist(pos,targpos)>2)curspd=0.5f; + if (GetDist(pos,targpos)>5)curspd=1.0f; + if (GetDist(pos,targpos)>10)curspd=2.0f; + if (GetDist(pos,targpos)>20)curspd=3.0f; + if (GetDist(pos,targpos)>30)curspd=4.0f; if (GetDist(pos,targpos)>40)curspd=5.0f; targdir.x=targpos.x-pos.x; targdir.y=targpos.y-pos.y; diff --git a/levels.h b/levels.h index cb98b8e..ad4ec17 100644 --- a/levels.h +++ b/levels.h @@ -3191,28 +3191,59 @@ void Levelm1Part12() vector2d snextarg; int snexcnt,snexstep; Target snexTarg; -void Levelm1Part13()//Additive blending +void Levelm1Part13()//"Supernova" { - frameleft=AMinute*2; + frameleft=AMinute*2;PlayerSplit=false; ++bgbrk;if (LOWFPS)bgbrk+=16; if (bgbrk<30)return; - bgbrk=0; + bgbrk=0;towcnt=0; if (!LOWFPS) DBGColor=ColorTransfer(DBGColor,0xFF000000); else for (int i=1;i<=17;++i)DBGColor=ColorTransfer(DBGColor,0xFF000000); if (DBGColor==0xFF000000) { - frameleft=AMinute,++part; - bgdbbrk=re.NextInt(5,20),bgbrk=0; - avabrk=2.0f;avacurbrk=0;snexTarg.Init(0.001,vector2d(400,300)); + snexTarg.Init(0.001,vector2d(400,300)); + ++part;avabrk=12.0f;avacurbrk=0;tbrk=0; snexstep=0;snexcnt=10;snexTarg.TargShow(); } } +void snCircCreator(vector2d p,int cnt,TColors col,bool mode) +{ + if(mode) + for (int i=0;iTimer_GetDelta(); + tbrk+=hge->Timer_GetDelta(); + if((AMinute*2-frameleft)0.016) + { + tbrk=0; + snCircCreator(vector2d(400,300),60,(TColors)re.NextInt(0,7),true); + } + } + else + { + if(tbrk>0.5) + { + tbrk=0; + snCircCreator(vector2d(400,300),27,(TColors)re.NextInt(0,7),false); + } + } switch (snexstep) { case 0: @@ -3223,9 +3254,9 @@ void Levelm1Part14() if(GetDist(snexTarg.targpos,snextarg)<0.01) { snexstep=2; - avabrk=0; - avacurbrk=0.05; - snexcnt=100-(frameleft/(double)(AMinute*2))*50; + avabrk=(frameleft/(double)(AMinute*2))*0.01666+0.01667; + avacurbrk=0; + snexcnt=40-(frameleft/(double)(AMinute*2))*20; } break; case 2: @@ -3233,10 +3264,11 @@ void Levelm1Part14() { if(--snexcnt>0) { - avabrk=0; + avacurbrk=0; + for(int i=0;i<10;++i) bullet[CreateBullet2(snexTarg.targpos.x,snexTarg.targpos.y,2,re.NextDouble(-pi,pi),true)].addblend=true; } - else snexstep=0,avabrk=2,avacurbrk=0; + else snexstep=0,avabrk=(frameleft/(double)(AMinute*2))*1+1.5f,avacurbrk=0; } break; } diff --git a/libcgh.h b/libcgh.h index 3140946..1ca7d4a 100644 --- a/libcgh.h +++ b/libcgh.h @@ -1,7 +1,7 @@ //Chrisoft Bullet Lab Remix HGE //Chrisoft Game Helper header //Copyright Chrisoft 2014 -//libcgh version 0006 +//libcgh version 0007 //Last full compatible version 0002 //^Modify that when big change is made^ #include @@ -20,13 +20,10 @@ struct vector2d double x,y; vector2d(double _x,double _y){x=_x;y=_y;} vector2d(){x=y=0;} - void ToUnitCircle() - { - double l=sqrt(sqr(x)+sqr(y)); - x/=l;y/=l; - } + double l(){return sqrt(sqr(x)+sqr(y));} + void ToUnitCircle(){double len=l();x/=len;y/=len;} void Swap(){double t=x;x=y;y=t;} - void rotate(double rad){double tx=x*cos(rad)+y*sin(rad),ty=y*cos(rad)-x*sin(rad);x=tx,y=ty;} + void Rotate(double rad){double tx=x*cos(rad)+y*sin(rad),ty=y*cos(rad)-x*sin(rad);x=tx,y=ty;} friend vector2d operator -(vector2d a,vector2d b) { return vector2d(a.x-b.x,a.y-b.y); @@ -47,6 +44,10 @@ struct vector2d { return vector2d(b.x*a,b.y*a); } + friend double operator ^(vector2d a,vector2d b)//cosine of angle + { + return (a|b)/a.l()/b.l(); + } }; inline vector2d ToUnitCircle(vector2d input) { diff --git a/towernbullet.h b/towernbullet.h index 8106dc8..8d0969c 100644 --- a/towernbullet.h +++ b/towernbullet.h @@ -1474,7 +1474,7 @@ void ProcessTower8() 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); + bullet[pnt].bulletdir.Rotate(j*2*pi/5); } } tower[i].curtimer2=tower[i].towertimer2; -- cgit v1.2.3