diff options
-rwxr-xr-x | CHANGELOG.TXT | 22 | ||||
-rwxr-xr-x | VERSION.TXT | 2 | ||||
-rw-r--r-- | global.h | 7 | ||||
-rw-r--r-- | levels.h | 45 | ||||
-rw-r--r-- | main.cpp | 9 | ||||
-rw-r--r-- | towernbullet.h | 161 |
6 files changed, 223 insertions, 23 deletions
diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 9730ac6..c46e5b2 100755 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,19 +1,34 @@ =================================================================== Next version: -0.7.2-2_PR/0.7.3-0_PR +0.7.3-0_PR TODOs: -Test classic mode, difficulty adjustments. +Make multiplier function. +Test classic mode, difficulty adjustments. Merge code for Windows. P.S.: Level 1 may be too hard now. -There's only one level left before the next pre-release version!! 0.7.x-x_PR will be another public pre-release version. Pre-Released versions: +0.7.2-2_PR (b72) +New level "return to void". That's a 3 in 1 class. I used +particularly many "return(void)(...);" in this level (which I +always love to use). +This indicates all "normal" levels are completed. +Fixed: Trypophobia stops if too many CLR's are used. +Fixed the problem in All2pnt(). +A Small bug in the Windows build is fixed. +File list in the Windows build is updated. + 0.7.2-1_PR (b71) (Level7 will be almost twice longer than Level6!) I'm extremely tired these days, I can't even keep my eyes open while typing... Some of my classmates helped testing several levels and found some bugs, thanks a lot! + +After a short test, I found that the Windows build is almost +broken... Crashes and misbehaves are everywhere! + +Maybe Windows is noble and won't run this garbage:( ===Real changelog starts from here=== New level "Trypophobia", however it seems that this level won't cause trypophobia at all! @@ -51,6 +66,7 @@ under Low FPS Mode. Minor code cleanups. Removed more useless comments, my code is still hard to comprehend, though. +Fix the misbehave of modulo with minus numbers... Small interface and behaviour changes: -If a bullet is effect-attatched and the effect is running, it won't die. diff --git a/VERSION.TXT b/VERSION.TXT index 1c85f05..38fae88 100755 --- a/VERSION.TXT +++ b/VERSION.TXT @@ -1 +1 @@ -0.7.2-1_PR (b71)
\ No newline at end of file +0.7.2-2_PR (b72)
\ No newline at end of file @@ -303,7 +303,11 @@ void Error(const char *EC,bool hgecreated=false) hge->Release(); } #ifdef WIN32 - remove("./Resources/bg.png"); + remove("./Resources/b_diff.png"); + remove("./Resources/b_inter.png"); + remove("./Resources/b_null.png"); + remove("./Resources/e_sflake.png"); + remove("./Resources/e_skyitem.png"); remove("./Resources/blnsns.png"); remove("./Resources/charmap.fnt"); remove("./Resources/ss.png"); @@ -315,6 +319,7 @@ void Error(const char *EC,bool hgecreated=false) remove("./Resources/Music/BLR2_TR01.ogg"); remove("./Resources/Music/BLR2_TR07.ogg"); remove("./Resources/Music/BLR2_TR09.ogg"); + remove("./Resources/Music/CanonTechno.ogg"); _rmdir("./Resources/Music"); _rmdir("./Resources"); #endif @@ -2512,7 +2512,7 @@ void Level7Part8() } void rainbowCreator(double rl,double rr,double rad,TColors col,double speed,bool invi=false) { - double r=rand()%((int)(rr-rl)*10000)/10000.0f+rl; + double r=rand()%((int)(abs(rr-rl)*10000))/10000.0f+rl; int pnt=CreateBullet2(900+cos(rad)*r,700+sin(rad)*r,speed,rand()/32767.0f,true,invi); bullet[pnt].alterColor=col; } @@ -2945,8 +2945,37 @@ void Level7Part24() for (int i=0;i<100;++i) if (wop[i].active)wop[i].Update(); } -//Rearrange needed since here, see LEVELS.txt -void Level7Part25()//3 circles +RTV rtv[100]; +void Level7Part25() +{ + frameleft=AMinute+ThirtySeconds; + All2pnt();towcnt=Lasercnt=0; + ++part;memset(rtv,0,sizeof(rtv)); + avabrk=1;avacurbrk=0.7; +} +void Level7Part26() +{ + avacurbrk+=hge->Timer_GetDelta(); + if(avacurbrk>avabrk&&frameleft>TenSeconds/3) + { + avacurbrk=0;avabrk=frameleft/(double)(AMinute+ThirtySeconds)*1.25+0.75; + for(int i=0;i<100;++i)if(!rtv[i].isActive()) + { + int spinner=6; + if(frameleft<AMinute)spinner=8; + if(frameleft<ThirtySeconds)spinner=12; + if(rand()%100>40)rtv[i].Init(1,(rand()&1?1:-1)*pi/123,spinner,(TColors)(rand()%8),rand()%12); + else if(rand()&1) + rtv[i].Init(2,(rand()&1?1:-1)*pi/60,spinner,(TColors)(rand()%8),rand()%12); + else + rtv[i].Init(3,pi/48,spinner,(TColors)(rand()%8),rand()%12); + break; + } + } + for(int i=0;i<100;++i)if(rtv[i].isActive())rtv[i].Update(); +} +//Level8 stats from here +void Level7Part27()//3 circles { frameleft=AMinute;clrtime=2;towcnt=0; DisableAllTower=false; @@ -2973,7 +3002,7 @@ void L7P26Creator(vector2d p,int cnt,TColors col) bullet[pnt].bulletaccel=-0.003;bullet[pnt].limv=((AMinute-frameleft)/(double)AMinute)+1.0f; } } -void Level7Part26() +void Level7Part28() { avacurbrk+=hge->Timer_GetDelta(); avabrk=(frameleft/(double)AMinute)*0.5f+0.5f; @@ -2987,7 +3016,7 @@ void Level7Part26() } BCircle scircles[200]; double rspd[200]; -void Level7Part27()//circles +void Level7Part29()//circles { frameleft=AMinute;clrtime=2;towcnt=0; DisableAllTower=false; @@ -3003,7 +3032,7 @@ void Level7Part27()//circles ++part;All2pnt();avabrk=1.0f;avacurbrk=1.0f;memset(scircles,0,sizeof(scircles)); } } -void Level7Part28() +void Level7Part30() { avacurbrk+=hge->Timer_GetDelta(); avabrk=0.1+(frameleft/(double)AMinute)*0.4f; @@ -3030,14 +3059,14 @@ void Level7Part28() } } } -void Level7Part29()//Minesweeper +void Level7Part31()//Minesweeper { frameleft=AMinute; All2pnt();towcnt=0; Lasercnt=0; ++part; } -void Level7Part30()//Minesweeper-child +void Level7Part32()//Minesweeper-child { if (rand()%100>95) { @@ -449,6 +449,8 @@ void CallLevels() if (level==7&&part==28)Level7Part28(); if (level==7&&part==29)Level7Part29(); if (level==7&&part==30)Level7Part30(); + if (level==7&&part==31)Level7Part31(); + if (level==7&&part==32)Level7Part32(); if (level==1&&part==5)level=2,part=0; if (level==2&&part==10)level=3,part=0; if (level==3&&part==7)level=4,part=0; @@ -854,7 +856,11 @@ int main() hge->System_Shutdown(); hge->Release(); #ifdef WIN32 - remove("./Resources/bg.png"); + remove("./Resources/b_diff.png"); + remove("./Resources/b_inter.png"); + remove("./Resources/b_null.png"); + remove("./Resources/e_sflake.png"); + remove("./Resources/e_skyitem.png"); remove("./Resources/blnsns.png"); remove("./Resources/charmap.fnt"); remove("./Resources/ss.png"); @@ -866,6 +872,7 @@ int main() remove("./Resources/Music/BLR2_TR01.ogg"); remove("./Resources/Music/BLR2_TR07.ogg"); remove("./Resources/Music/BLR2_TR09.ogg"); + remove("./Resources/Music/CanonTechno.ogg"); _rmdir("./Resources/Music"); _rmdir("./Resources"); #endif diff --git a/towernbullet.h b/towernbullet.h index a5d643a..15899ac 100644 --- a/towernbullet.h +++ b/towernbullet.h @@ -299,12 +299,15 @@ void All2pnt() { for (int i=1;i<=bulcnt;++i) { - 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; + 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) @@ -1945,6 +1948,19 @@ private: matrixx=_x;matrixy=_y;color=_col; progress=1;cnt=0; } + void kill() + { + for(int i=0;i<cnt;++i) + { + if(pb[i]) + { + if(pb[i]->bullettype==2) + { + pb[i]->exist=false;pb[i]=0; + } + } + } + } void update() { if(!progress)return; @@ -1972,7 +1988,7 @@ private: { if(pb[i]) { - if(pb[i]->lifetime>1) + if(pb[i]->bullettype==2&&pb[i]->lifetime>1) { BulletEffect_Death(*pb[i],ColorToDWORD(color)); pb[i]->exist=false;pb[i]=0; @@ -1988,7 +2004,7 @@ private: Pile piles[30]; bool tactive; int listx[30],listy[30],cnt; - TColors pcolor; + TColors pcolor;double tlifetime; bool check(int x,int y) { if(x<0||x>15)return false; @@ -2003,12 +2019,19 @@ public: { pcolor=(TColors)(rand()%8);tactive=true; cnt=0;memset(listx,0,sizeof(listx)); - memset(listy,0,sizeof(listy)); + memset(listy,0,sizeof(listy));tlifetime=0; listx[cnt++]=rand()%16;listy[cnt-1]=rand()%12; 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; @@ -2223,3 +2246,123 @@ public: } }; }; +class RTV +{ +private: + int mode,cnt,stage,spnr,dcorr; + bool active;TColors col; + double drad,rad,brk; + Bullet *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(targ[i]->bulletspeed>1&&GetDist(vector2d(400,300),targ[i]->bulletpos)>=200) + targ[i]->bulletspeed=0; + if(targ[i]->bulletspeed>1)dchk=false; + } + if(dchk) + { + for(int i=0;i<cnt;++i) + { + double rad=atan2(targ[i]->bulletdir.y,targ[i]->bulletdir.x); + int cc=(int)(rad/drad); + if((cc/6+dcorr)&1) + targ[i]->bulletaccel=0.005, + targ[i]->limv=3; + else + targ[i]->bulletaccel=-0.005, + 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]=&bullet[CreateBullet2(400,300,2,rad+i*2*pi/spnr)], + targ[cnt]->inv=true, + targ[cnt++]->alterColor=col; + } + } + } + } + break; + case 2: + { + brk+=hge->Timer_GetDelta(); + bool dchk=(stage==1); + for(int i=0;i<cnt;++i) + { + if(targ[i]->bulletspeed>1&&GetDist(vector2d(400,300),targ[i]->bulletpos)>=200) + targ[i]->bulletspeed=0; + if(targ[i]->bulletspeed>1)dchk=false; + } + if(dchk) + { + if(rand()%2) + for(int i=0;i<cnt;++i) + targ[i]->bulletaccel=-0.005, + targ[i]->limv=-3; + else + for(int i=0;i<cnt;++i) + targ[i]->bulletaccel=0.005, + 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]=&bullet[CreateBullet2(400,300,2,rad+i*2*pi/spnr)], + targ[cnt]->inv=true; + 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]=&bullet[CreateBullet2(400,300,2,rad+i*2*pi/spnr)]; + targ[cnt]->inv=true; + targ[cnt++]->alterColor=col; + targ[cnt]=&bullet[CreateBullet2(400,300,2,-rad+i*2*pi/spnr)]; + targ[cnt]->inv=true; + targ[cnt++]->alterColor=col; + } + } + } + break; + } + } +}; |