From 609780609172b7a7580a49f385087aa10bc1454d Mon Sep 17 00:00:00 2001
From: "chirs241097@gmail.com"
 <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb>
Date: Sun, 6 Jul 2014 13:59:07 +0000
Subject: Fix bug that cause you unable to charge if you try to use clr
 directly after your clr's used up. Add Multpo's for Level 3/4/5/6, and level
 7 partically. Fix stupid bug in Level4Part2 and other similiar parts. Fix
 several bugs in level 5/6. Reduce given-away score in level "Sine Wave". It
 wassssSssss too long! Fix typo... Blinking HangUpText *should* be fixed
 now...

---
 ChangeLog      |  16 ++++++-
 Readme         |  12 +++--
 VERSION        |   2 +-
 global.h       |   2 +-
 levels.h       | 137 ++++++++++++++++++++++++++++++++++-----------------------
 libcghEx.cpp   |   2 +-
 main.cpp       | 118 ++++++++++++++++++++++++-------------------------
 menus.h        |   2 +-
 towernbullet.h |   2 +-
 9 files changed, 168 insertions(+), 125 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d8de95f..dfb2054 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,16 +2,18 @@
 Next version:
 The final release is just there!!
 Todo's:
-*Adjust difficulty!*
+*Adjust difficulty!*//almost done?
 *Add multpo's.*
+*Distribute CLRs.*
 Bug fixes.
 Tests.
 Wishlist?
 
 Known bugs:
-HangUpText blinking still exists...
+Blue bullets appearing in Vortex of leaves.
 
 Wishlist:
+Add spawning effect for Multpo.
 Make more data stored in .blrscore.
 In-game music bring back.
 ~~Now Playing(Music Room)~~
@@ -19,6 +21,16 @@ In-game music bring back.
 of next BLR.)
 
 Pre-Released versions:
+0.9.6-0 (r96)
+Fix bug that cause you unable to charge if you try to use clr directly
+after your clr's used up.
+Add Multpo's for Level 3/4/5/6, and level 7 partically.
+Fix stupid bug in Level4Part2 and other similiar parts.
+Fix several bugs in level 5/6.
+Reduce given-away score in level "Sine Wave". It wassssSssss too long!
+Fix typo...
+Blinking HangUpText *should* be fixed now...
+
 0.9.5-0 (r95)
 Change configuration and score file names. Files with their names
 begin with "." may be annoying in Windows though...
diff --git a/Readme b/Readme
index 0066d82..8bc493f 100644
--- a/Readme
+++ b/Readme
@@ -99,15 +99,19 @@ Others' comments...
 
 Requirements & Recommends
 Basic environment:
-CPU: Atom 1.6GHz will even work.
-RAM: 1GiB
-GPU&VRAM: Not worse than Intel HD Graphics.
-OS: Windows XP+ & DirectX 9 / Linux kernel 2.6+ & OpenGL 1.2+
+CPU: 1GHz.
+RAM: 256MiB
+GPU&VRAM: With DirectX 9+/OpenGL 1.2+ support.
+OS*: Windows XP+ & DirectX 9 / Linux kernel 2.6+ & OpenGL 1.2+
 Recommended environment:
 CPU: Lots of cores.
 GPU&VRAM: Very fast graphic rendering.
 Sound: Ability to run OpenAL software version.
 
+*: According to Micro$oft and MinGW, this game should also run in Windows
+98(SE)/ME**, but who's still using that?
+**: The source code is just there. You can even port it to MS-DOS...
+
 MORE Recommends...
 -SERIOUSLY, NO Trypophobia!
 -CheatEngine(skip levels, obtain more Clear Range's, and more...)
diff --git a/VERSION b/VERSION
index f8a919d..3df9a6c 100755
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.9.5-0 (r95)
\ No newline at end of file
+0.9.6-0 (r96)
\ No newline at end of file
diff --git a/global.h b/global.h
index 1acc1e0..a535013 100644
--- a/global.h
+++ b/global.h
@@ -341,7 +341,7 @@ static const char* archive[]={
 };
 #endif
 //static const char* GLOBAL_H_FN="global.h";
-static const char* BLRVERSION="0.9.5-0 (r95)";
+static const char* BLRVERSION="0.9.6-0 (r96)";
 static const char *months="JanFebMarAprMayJunJulAugSepOctNovDec";
 char *parseDate(const char *date)
 {
diff --git a/levels.h b/levels.h
index 2c45ecd..383598b 100644
--- a/levels.h
+++ b/levels.h
@@ -628,7 +628,7 @@ void Level4Part3()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -663,7 +663,7 @@ void Level4Part5()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -699,7 +699,7 @@ void Level4Part7()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -734,7 +734,7 @@ void Level4Part9()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -770,7 +770,7 @@ void Level4Part11()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -805,7 +805,7 @@ void Level4Part13()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -841,7 +841,7 @@ void Level4Part15()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
@@ -876,14 +876,14 @@ void Level4Part17()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=4,doneredir=true;
 		}
 	}
 }
 void Level4Part18()
 {
-	frameleft=TenSeconds/2;clrtime=0;
+	frameleft=TenSeconds;clrtime=0;
 	DisableAllTower=false;
 	if (Current_Position==1)
 	{
@@ -911,7 +911,7 @@ void Level4Part19()
 			}
 			else
 				if (!doneredir)
-					for (int i=0;i<cred;++i)
+					for (int i=0;i<=cred;++i)
 						bullet[redirs[i]].redir(ATarg.targpos),bullet[redirs[i]].bulletspeed=2,doneredir=true;
 		}
 		if (posx<766)
@@ -940,7 +940,7 @@ void Level4Part20()
 		IfShowTip=false;
 		FadeTip=false;
 		Current_Position=2;
-		ShowTip("Double Kill, right?");
+		ShowTip("Double Spinner...?");
 	}
 	if (Current_Position==1)
 	{
@@ -1030,6 +1030,7 @@ void Level4Part24()
 }
 void Level4Part25()
 {
+	if(re.NextInt(0,599)==10)NewMultpo();
 	for (int i=2;i<=5;++i)
 	tower[i].towertimer=((frameleft)/(double)AMinute)*1800+200;
 }
@@ -1129,7 +1130,7 @@ void Level5Part4()
 	{
 		pos=0;rev=!rev;
 		for (int i=1;i<=bulcnt;++i)
-			if (bullet[i].bulletspeed<1e-5)
+			if (bullet[i].bullettype==2&&bullet[i].bulletspeed<1e-5)
 				bullet[i].bulletaccel=0.001,
 				bullet[i].limv=1+1.5*(frameleft/(double)AMinute);
 	}
@@ -1170,6 +1171,7 @@ void Level5Part4()
 			laser[i].Setdata(j,t,s,0xEEFF8800);
 			trad=initrad+j*pi/36.0f;
 			if (shot&&j==pos)bullet[CreateBullet2(400+t.x,300+t.y,0.0f,re.NextDouble(0,pi),1)].alterColor=orange;
+			if (shot&&j==pos&&re.NextInt(0,249)==99)NewMultpo(vector2d(400+t.x,300+t.y));
 		}
 		if (pos>8&&pos<23)
 			laser[i].EnableColl=true;
@@ -1206,7 +1208,7 @@ void Level5Part6()
 				if (re.NextInt(1,1000)>=850)
 					CreateBullet9(bullet[tbuls[j]].bulletpos.x,bullet[tbuls[j]].bulletpos.y,3,500,18,300);
 		}
-		BulletEffect_Death(bullet[tbuls[j]],blue);
+		BulletEffect_Death(bullet[tbuls[j]],ColorToDWORD(blue));
 		bullet[tbuls[j]].exist=false;
 		tbuls[j]=0;
 	}
@@ -1214,13 +1216,13 @@ void Level5Part6()
 void Level5Part7()
 {
 	frameleft=ThirtySeconds;Dis8ref=true;tbrk=0;
-	if (towcnt!=33&&towcnt!=0)return ClearAll();
+	if (towcnt!=33&&towcnt!=0)return ClearAll(false);
 	DisableAllTower=false;
 	if (IfShowTip)
 	{
 		IfShowTip=false;
 		FadeTip=false;
-		Current_Position=2;
+		Current_Position=2;All2pnt();
 		ShowTip("Threatening effect of high speed bullets");
 		return;
 	}
@@ -1236,7 +1238,7 @@ void Level5Part7()
 			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
-			++part;All2pnt();
+			++part;tcnt=0;
 			return;
 		}
 }
@@ -1244,20 +1246,21 @@ void Level5Part8()
 {
 	tbrk+=hge->Timer_GetDelta();
 	if (tbrk<=3)return;
-	tbrk=0;int tg;
+	tbrk=0;int tg;++tcnt;
 	if (re.NextInt(1,1000)>=500)tg=CreateBullet9(200,12,8,300,12,200);else tg=CreateBullet9(600,12,8,300,12,200);
 	bullet[tg].redir(playerpos);
+	if (tcnt>4)NewMultpo(),tcnt=0;
 }
 void Level5Part9()
 {
 	frameleft=ThirtySeconds;Dis8ref=true;tbrk=0;
-	if (towcnt!=66&&towcnt!=0)return ClearAll();
+	if (towcnt!=66&&towcnt!=0)return ClearAll(false);
 	DisableAllTower=false;
 	if (IfShowTip)
 	{
 		IfShowTip=false;
 		FadeTip=false;
-		Current_Position=2;
+		Current_Position=2;All2pnt();
 		ShowTip("Do not panic!");
 		return;
 	}
@@ -1273,7 +1276,7 @@ void Level5Part9()
 			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
-			++part;All2pnt();
+			++part;tcnt=0;
 			return;
 		}
 }
@@ -1281,7 +1284,8 @@ void Level5Part10()
 {
 	tbrk+=hge->Timer_GetDelta();
 	if (tbrk<=3)return;
-	tbrk=0;
+	tbrk=0;++tcnt;
+	if(tcnt>4)NewMultpo(),tcnt=0;
 	for (int i=0;i<6;++i)
 	{
 		int p=CreateBullet2(playerpos.x+cos(i*pi/3.0f)*6,12+sin(i*pi/3.0f)*6,2,-pi/2);
@@ -1466,12 +1470,12 @@ void Level5Part19()
 	if (Current_Position==1)
 	{
 		++part;All2pnt();
-		ATarg.TargHide();
+		ATarg.TargHide();tbrk=0;
 	}
 }
 void Level5Part20()
 {
-	ntbrk+=hge->Timer_GetDelta();
+	ntbrk+=hge->Timer_GetDelta();tbrk+=hge->Timer_GetDelta();
 	if(LOWFPS)ntrot+=16*pi/960.0f;else ntrot+=pi/960.0f;
 	if(ntbrk<0.01)return;
 	ntbrk=0;++ntcnt;if (ntcnt>15)ntcnt=0;
@@ -1491,7 +1495,9 @@ void Level5Part20()
 		bullet[a].redattrib=1;bullet[a].redir(vector2d(400,300));
 		bullet[a].bulletdir.x=-bullet[a].bulletdir.x;
 		bullet[a].bulletdir.y=-bullet[a].bulletdir.y;
+		if(tbrk>5)NewMultpo(vector2d(400+250*sin(ntrot+i*2*pi/rtatr),300+250*cos(ntrot+i*2*pi/rtatr)));
 	}
+	if(tbrk>5)tbrk=0;
 }
 void Level5Part21()
 {
@@ -1566,11 +1572,12 @@ void Level6Part2()
 	All2pnt();frameleft=TenSeconds;
 	++part;spcnt=2;sixrad=sixbrk=0;
 	whicnt=1;DisableAllTower=false;
+	tbrk=0;
 }
 void Level6Part3()
 {
 	sixbrk+=hge->Timer_GetDelta();
-	if (sixrad>2*pi)return;
+	if (sixrad>2*pi){if(tbrk<1)NewMultpo(vector2d(400,300)),tbrk=100;return;}
 	if (sixbrk<0.04)return;
 	sixbrk=0;
 	sixrad+=pi/25.0f;
@@ -1585,11 +1592,12 @@ void Level6Part4()
 	frameleft=TenSeconds;whrcnt=9;
 	++part;spcnt=3;sixrad=sixbrk=0;
 	whicnt=1;DisableAllTower=false;
+	tbrk=0;
 }
 void Level6Part5()
 {
 	sixbrk+=hge->Timer_GetDelta();
-	if (sixrad>2*pi)return;
+	if (sixrad>2*pi){if(tbrk<1)NewMultpo(vector2d(400,300)),tbrk=100;return;}
 	if (sixbrk<0.04)return;
 	sixbrk=0;
 	sixrad+=pi/25.0f;
@@ -1601,14 +1609,14 @@ void Level6Part5()
 }
 void Level6Part6()
 {
-	frameleft=TenSeconds;
+	frameleft=TenSeconds;tbrk=0;
 	++part;spcnt=4;sixrad=sixbrk=0;
 	whicnt=1;DisableAllTower=false;
 }
 void Level6Part7()
 {
 	sixbrk+=hge->Timer_GetDelta();
-	if (sixrad>2*pi)return;
+	if (sixrad>2*pi){if(tbrk<1)NewMultpo(vector2d(400,300)),tbrk=100;return;}
 	if (sixbrk<0.04)return;
 	sixbrk=0;
 	sixrad+=pi/25.0f;
@@ -1623,11 +1631,12 @@ void Level6Part8()
 	frameleft=TenSeconds;whrcnt=6;
 	++part;spcnt=5;sixrad=sixbrk=0;
 	whicnt=1;DisableAllTower=false;
+	tbrk=0;
 }
 void Level6Part9()
 {
 	sixbrk+=hge->Timer_GetDelta();
-	if (sixrad>2*pi)return;
+	if (sixrad>2*pi){if(tbrk<1)NewMultpo(vector2d(400,300)),tbrk=100;return;}
 	if (sixbrk<0.04)return;
 	sixbrk=0;
 	sixrad+=pi/25.0f;
@@ -1642,11 +1651,12 @@ void Level6Part10()
 	frameleft=TenSeconds;whrcnt=6;
 	++part;spcnt=6;sixrad=sixbrk=0;
 	whicnt=1;DisableAllTower=false;
+	tbrk=0;
 }
 void Level6Part11()
 {
 	sixbrk+=hge->Timer_GetDelta();
-	if (sixrad>2*pi)return;
+	if (sixrad>2*pi){if(tbrk<1)NewMultpo(vector2d(400,300)),tbrk=100;return;}
 	if (sixbrk<0.04)return;
 	sixbrk=0;
 	sixrad+=pi/25.0f;
@@ -1675,6 +1685,7 @@ void Level6Part12()
 	if (Current_Position==1)
 	{
 		++part;squashrev=false;All2pnt();
+		tbrk=0;
 		CreateTower3(10,10,400,2,1);
 		CreateTower3(766,10,400,2,1);
 		CreateTower3(10,566,400,2,1);
@@ -1687,6 +1698,12 @@ void Level6Part12()
 }
 void Level6Part13()
 {
+	tbrk+=hge->Timer_GetDelta();
+	if(tbrk>=12)
+	{
+		for(int i=1;i<=4;++i)NewMultpo(tower[i].towerpos);
+		tbrk=0;
+	}
 	if (!squashrev)
 	{
 		if (!LOWFPS)
@@ -1702,14 +1719,14 @@ void Level6Part13()
 		}
 		else
 		{
-			tower[1].towerpos.x+=0.1;
-			tower[1].towerpos.y+=0.07354;
-			tower[2].towerpos.x-=0.1;
-			tower[2].towerpos.y+=0.07354;
-			tower[3].towerpos.x+=0.1;
-			tower[3].towerpos.y-=0.07354;
-			tower[4].towerpos.x-=0.1;
-			tower[4].towerpos.y-=0.07354;
+			tower[1].towerpos.x+=0.16;
+			tower[1].towerpos.y+=0.117664;
+			tower[2].towerpos.x-=0.16;
+			tower[2].towerpos.y+=0.117664;
+			tower[3].towerpos.x+=0.16;
+			tower[3].towerpos.y-=0.117664;
+			tower[4].towerpos.x-=0.16;
+			tower[4].towerpos.y-=0.117664;
 		}
 	}
 	else
@@ -1727,14 +1744,14 @@ void Level6Part13()
 		}
 		else
 		{
-			tower[1].towerpos.x-=0.1;
-			tower[1].towerpos.y-=0.07354;
-			tower[2].towerpos.x+=0.1;
-			tower[2].towerpos.y-=0.07354;
-			tower[3].towerpos.x-=0.1;
-			tower[3].towerpos.y+=0.07354;
-			tower[4].towerpos.x+=0.1;
-			tower[4].towerpos.y+=0.07354;
+			tower[1].towerpos.x-=0.16;
+			tower[1].towerpos.y-=0.117664;
+			tower[2].towerpos.x+=0.16;
+			tower[2].towerpos.y-=0.117664;
+			tower[3].towerpos.x-=0.16;
+			tower[3].towerpos.y+=0.117664;
+			tower[4].towerpos.x+=0.16;
+			tower[4].towerpos.y+=0.117664;
 		}
 	}
 	if (tower[1].towerpos.x>766||tower[1].towerpos.x<10)squashrev=!squashrev;
@@ -1759,12 +1776,13 @@ void Level6Part14()//Avalanche
 	}
 	if (Current_Position==1)
 	{
-		++part;All2pnt();avabrk=1.0f;avacurbrk=0;dir=false;
+		++part;All2pnt();avabrk=1.0f;avacurbrk=tbrk=0;dir=false;
 	}
 }
 void Level6Part15()
 {
 	avacurbrk+=hge->Timer_GetDelta();
+	tbrk+=hge->Timer_GetDelta();
 	avabrk=((double)frameleft/(double)AMinute)*0.04f+0.01f;
 	if (avacurbrk>avabrk)
 	{
@@ -1772,6 +1790,7 @@ void Level6Part15()
 		int pnt=CreateBullet2(re.NextDouble(10,790),200,-6.25,3*pi/2.0f);
 		bullet[pnt].limv=re.NextInt(2,8);bullet[pnt].bulletaccel=0.005;
 	}
+	if (tbrk>6)NewMultpo(vector2d(re.NextDouble(20,780),re.NextDouble(20,150))),tbrk=0;
 }
 void Level6Part16()
 {
@@ -1810,6 +1829,7 @@ void Level6Part17()
 		else
 		pnt=CreateBullet6(ATarg.targpos.x,ATarg.targpos.y,4,1000);
 		bullet[pnt].dist=1;bullet[pnt].bulletdir=vector2d(0,0);
+		if(re.NextInt(0,19)==14)NewMultpo();
 	}
 }
 //begin hexagon
@@ -2225,14 +2245,16 @@ void Level6Part30()//Hyperfluid!
 	}
 	if (Current_Position==1)
 	{
-		++part;All2pnt();avabrk=0.2f;avacurbrk=0;sixbrk=-1;
+		++part;All2pnt();avabrk=0.2f;avacurbrk=0;sixbrk=-1;tbrk=0;
 	}
 }
-void Level6Part999999999()//well this isnot an easter egg!
+void Level6Part999999999()//well this is not an easter egg!
 {
 	avabrk=(frameleft/(double)AMinute)*0.15f+0.05f;
 	avacurbrk+=hge->Timer_GetDelta();
 	sixbrk+=hge->Timer_GetDelta();
+	tbrk+=hge->Timer_GetDelta();
+	if(tbrk>10)tbrk=0,NewMultpo(vector2d(re.NextDouble(40,100),re.NextDouble(30,75)));
 	if (avacurbrk>avabrk)
 	{
 		avacurbrk=0;
@@ -2289,7 +2311,7 @@ void Level7Part1()
 	for (int i=1;i<=17;++i)DBGColor=ColorTransfer(DBGColor,0xFF0B0916);
 	if (DBGColor==0xFF0B0916)
 	{
-		frameleft=AMinute,++part;
+		frameleft=AMinute,++part;tbrk=0;
 		bgdbbrk=re.NextInt(5,20),bgbrk=0;
 		avabrk=0.2f;avacurbrk=0;skystp=false;
 	}
@@ -2328,6 +2350,8 @@ void Level7Part2()
 	avabrk=(frameleft/(double)AMinute)*0.15f+0.15f;
 	avacurbrk+=hge->Timer_GetDelta();
 	sixbrk+=hge->Timer_GetDelta();
+	tbrk+=hge->Timer_GetDelta();
+	if (tbrk>10)tbrk=0,NewMultpo(vector2d(re.NextDouble(200,600),re.NextDouble(500,575)));
 	if (avacurbrk>avabrk)
 	{
 		avacurbrk=0;
@@ -2494,6 +2518,7 @@ void Level7Part7()
 	avacurbrk+=hge->Timer_GetDelta();
 	if (avacurbrk>avabrk)
 	{
+		if(re.NextInt(0,4)==0)NewMultpo();
 		avacurbrk=0;
 		bool lasta,lastb;
 		lasta=re.NextInt(1,1000)<500;lastb=re.NextInt(1,1000)<500;
@@ -2565,6 +2590,7 @@ void Level7Part9()
 		if (avacurbrk>avabrk)
 		{
 			avacurbrk=0;
+			if(re.NextInt(0,19)==7)NewMultpo();
 			double spd=((AMinute-frameleft)/(double)AMinute)+1;
 			for(int i=0;i<((AMinute-frameleft)/(double)AMinute)*20;++i)
 			sntang=re.NextDouble(-pi,-pi/2),
@@ -2668,6 +2694,7 @@ void Level7Part13()
 				while (GetDist(pos,playerpos)<100)
 				pos=vector2d(re.NextDouble(0,800),re.NextDouble(0,600));
 				dfc[i].init(pos);
+				if(re.NextInt(0,7)==3)NewMultpo(pos);
 			}
 			break;
 		}
@@ -3858,36 +3885,36 @@ void Levelm2Part14()
 	if(tbrk>0.075)
 	{
 		tbrk=0;
+		asssrd1+=pi/45;
 		//right
 		for(int i=0;i<5;++i)
 			CreateBullet2(810,120*(i+1)+120*sin(asssrd1),2,0,true);
-		asssrd1+=pi/45;
 		//right2
-		if(assetime>30)
+		if(assetime>15)
 		{
 			for(int i=0;i<5;++i)
 			CreateBullet2(810,120*(i+1)+120*sin(asssrd1+pi/12),2,0,true);
 		}
 		//left
-		if(assetime>60)
+		if(assetime>30)
 		{
 			for(int i=0;i<5;++i)
 			CreateBullet2(-10,120*(i+1)+120*sin(asssrd1),2,pi,true);
 		}
 		//left2
-		if(assetime>90)
+		if(assetime>45)
 		{
 			for(int i=0;i<5;++i)
 			CreateBullet2(-10,120*(i+1)+120*sin(asssrd1+pi/12),2,pi,true);
 		}
-		if(assetime>120)
+		if(assetime>60)
 		{
 			avacurbrk-=hge->Timer_GetDelta();
 			if(avacurbrk<0)
 			{
 				CreateBullet1(0,0,3,0);CreateBullet1(800,0,3,0);
 				CreateBullet1(0,600,3,0);CreateBullet1(800,600,3,0);
-				avacurbrk=0.5-0.3*(assetime-120.0f)/60.0f;
+				avacurbrk=0.5-0.3*(assetime-60.0f)/60.0f;
 				if(avacurbrk<0.1)avacurbrk=0.1;
 			}
 		}
diff --git a/libcghEx.cpp b/libcghEx.cpp
index 9c5f636..3c19f14 100644
--- a/libcghEx.cpp
+++ b/libcghEx.cpp
@@ -68,7 +68,7 @@ void CircleIndicator::Render(double x,double y){circle->Render(x,y);}
 
 void LinearProgresser::Init(double _a,double _b,double _Lim){a=_a,b=_b,Limit=_Lim;}
 void LinearProgresser::Launch(){Elapsed=0;val=a;}
-void LinearProgresser::Update(double DT){if (Elapsed>=Limit)return (void)(val=b,Elapsed=Limit);Elapsed+=DT;val=(b-a)*(Elapsed/Limit)+a;}
+void LinearProgresser::Update(double DT){if (Elapsed+DT>=Limit)return (void)(val=b,Elapsed=Limit);Elapsed+=DT;val=(b-a)*(Elapsed/Limit)+a;}
 double LinearProgresser::GetValue(){return val;}
 double LinearProgresser::GetA(){return a;}
 double LinearProgresser::GetB(){return b;}
diff --git a/main.cpp b/main.cpp
index 9f78873..27a07f8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -214,73 +214,73 @@ void ProcessPlayer()
 		if (playerpos.y>10)playerpos.y-=realspd;
 	if (hge->Input_GetKeyState(HGEK_DOWN)&&!playerLockY)
 		if ((playerpos.y<570&&!PlayerSplit)||(playerpos.y<270&&PlayerSplit))playerpos.y+=realspd;
-	if(mode!=2)
+	if(mode==2)return;
+	if (!clrmode)
 	{
-		if (!clrmode)
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_HIT&&clrmaxrange==0)
+		{clrind=0;charge=1;}
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_KEEP&&charge)
 		{
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_HIT&&clrmaxrange==0)
-			{clrind=0;charge=1;}
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_KEEP&&charge)
-			{
-				if (clrmaxrange<=400)
-				{if (LOWFPS)clrmaxrange+=1.6;else clrmaxrange+=0.1;}
-				if (!LOWFPS)clrind+=0.001*pi;else clrind+=0.016*pi;
-				clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f);
-				if(PlayerSplit)for(int i=1;i<4;++i)
-				clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f);
-			}
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_RELEASE&&charge)
-			{
-				charge=0;
-				if (clrmaxrange<=50)
-				{if (clrtime+clrbns>0){--clrtime;clrmaxrange=350;Player_Clear_Expand();++clrusg;}}
-				else
-				{Player_Clear_Expand();++clrusg;}
-			}
-			if (clrrange!=0)
-			{
-				Player_Clear_Expand();
-				clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*(clrmaxrange-clrrange)/193.0f);
-				if(PlayerSplit)for(int i=1;i<4;++i)
-				clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*(clrmaxrange-clrrange)/193.0f);
-				clrind+=(LOWFPS?0.016*pi:0.001*pi);
-			}
-			if (clrrange>=clrmaxrange)clrrange=clrmaxrange=0;
+			if (clrmaxrange<=400)
+			{if (LOWFPS)clrmaxrange+=1.6;else clrmaxrange+=0.1;}
+			if (!LOWFPS)clrind+=0.001*pi;else clrind+=0.016*pi;
+			clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f);
+			if(PlayerSplit)for(int i=1;i<4;++i)
+			clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f);
 		}
-		else
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_RELEASE&&charge)
 		{
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_HIT&&clrmaxrange==0)
-			{clrind=0;charge=1;}
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_KEEP&&charge)
-			{
-				if (clrmaxrange<=400)
-				{if (LOWFPS)clrmaxrange+=1.6;else clrmaxrange+=0.1;}
-				if (!LOWFPS)clrind+=0.001*pi;else clrind+=0.016*pi;
-				clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f);
-				if(PlayerSplit)for(int i=1;i<4;++i)
-				clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f);
-			}
-			if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_RELEASE&&charge)
+			charge=0;
+			if (clrmaxrange<=50)
 			{
-				charge=0;
-				if (clrmaxrange<=50)
-				{
-					if(clrtime+clrbns>0)
-					{
-						Player_Clear_Rotate();if(clrmaxrange<50)--clrtime,clrmaxrange=350;++clrusg;
-					}
-				}else{Player_Clear_Rotate();++clrusg;}
+				if (clrtime+clrbns>0)
+				{--clrtime;clrmaxrange=350;Player_Clear_Expand();++clrusg;}
+				else clrmaxrange=0;
 			}
-			if (clrrad-pi/2>1e-7)
+			else{Player_Clear_Expand();++clrusg;}
+		}
+		if (clrrange!=0)
+		{
+			Player_Clear_Expand();
+			clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*(clrmaxrange-clrrange)/193.0f);
+			if(PlayerSplit)for(int i=1;i<4;++i)
+			clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*(clrmaxrange-clrrange)/193.0f);
+			clrind+=(LOWFPS?0.016*pi:0.001*pi);
+		}
+		if (clrrange>=clrmaxrange)clrrange=clrmaxrange=0;
+	}
+	else
+	{
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_HIT&&clrmaxrange==0)
+		{clrind=0;charge=1;}
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_KEEP&&charge)
+		{
+			if (clrmaxrange<=400)
+			{if (LOWFPS)clrmaxrange+=1.6;else clrmaxrange+=0.1;}
+			if (!LOWFPS)clrind+=0.001*pi;else clrind+=0.016*pi;
+			clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f);
+			if(PlayerSplit)for(int i=1;i<4;++i)
+			clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f);
+		}
+		if (hge->Input_GetKeyStateEx(diffkey?HGEK_X:HGEK_Z)==HGEKST_RELEASE&&charge)
+		{
+			charge=0;
+			if (clrmaxrange<=50)
 			{
-				Player_Clear_Rotate();
-				clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f*(5*pi/2.0f-clrrad)/(2*pi));
-				if(PlayerSplit)for(int i=1;i<4;++i)
-				clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f*(5*pi/2.0f-clrrad)/(2*pi));
-				clrind+=(LOWFPS?0.016*pi:0.001*pi);
-			}
-			if (5*pi/2-clrrad<1e-7)clrrad=pi/2,clrmaxrange=0;
+				if(clrtime+clrbns>0)
+				{--clrtime;clrmaxrange=350;Player_Clear_Rotate();++clrusg;}
+				else clrmaxrange=0;
+			}else{Player_Clear_Rotate();++clrusg;}
+		}
+		if (clrrad-pi/2>1e-7)
+		{
+			Player_Clear_Rotate();
+			clrcircle->RenderEx(playerpos.x+7.2,playerpos.y+7.2,clrind,2*clrmaxrange/193.0f*(5*pi/2.0f-clrrad)/(2*pi));
+			if(PlayerSplit)for(int i=1;i<4;++i)
+			clrcircle->RenderEx(playerpos.x+splitData[i].x+7.2,playerpos.y+splitData[i].y+7.2,clrind,2*clrmaxrange/193.0f*(5*pi/2.0f-clrrad)/(2*pi));
+			clrind+=(LOWFPS?0.016*pi:0.001*pi);
 		}
+		if (5*pi/2-clrrad<1e-7)clrrad=pi/2,clrmaxrange=0;
 	}
 }
 void RefreshScore()
diff --git a/menus.h b/menus.h
index cca8132..70d6998 100644
--- a/menus.h
+++ b/menus.h
@@ -1110,7 +1110,7 @@ public:
 			if(mode==1)
 				MenuFont->printf(xoffset-100,310,HGETEXT_LEFT,"Restarts %d",restarts);
 			else
-				MenuFont->printf(xoffset-100,310,HGETEXT_LEFT,"Restarts %d",coll);
+				MenuFont->printf(xoffset-100,310,HGETEXT_LEFT,"Collisions %d",coll);
 			MenuFont->printf(xoffset-100,340,HGETEXT_LEFT,"Semi-collisions %d",semicoll);
 			MenuFont->printf(xoffset-100,370,HGETEXT_LEFT,"CLR Usage %d",clrusg);
 			MenuFont->printf(xoffset-100,400,HGETEXT_LEFT,"Average FPS: %.02f",averfps);
diff --git a/towernbullet.h b/towernbullet.h
index a79fb61..dc78aea 100644
--- a/towernbullet.h
+++ b/towernbullet.h
@@ -1886,7 +1886,7 @@ public:
 		}
 		if (elasp>2)
 		{
-			stage=1;
+			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;
-- 
cgit v1.2.3