From aa24dc151df4249483f9c46e0f11e47296a0e42a Mon Sep 17 00:00:00 2001
From: "chirs241097@gmail.com"
 <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb>
Date: Mon, 3 Feb 2014 03:16:50 +0000
Subject: M    trunk/CHANGELOG.TXT M    trunk/VERSION.TXT M    trunk/effects.h
 M    trunk/global.h M    trunk/levels.h M    trunk/main.cpp M   
 trunk/towernbullet.h

---
 CHANGELOG.TXT  |   9 ++-
 VERSION.TXT    |   2 +-
 effects.h      |  15 ++--
 global.h       |  57 +++++++++++--
 levels.h       | 100 ++++++++++++-----------
 main.cpp       |  19 ++++-
 towernbullet.h | 252 +++++++++++++++++++++++++++++----------------------------
 7 files changed, 262 insertions(+), 192 deletions(-)

diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT
index 3ed741a..ddab0f9 100755
--- a/CHANGELOG.TXT
+++ b/CHANGELOG.TXT
@@ -1,10 +1,13 @@
 =================================================================
 Next version:
-0.7.0-8_PR (b61)
-Improve the rendering code. (That code was a great fucking
-resource consumer)
+Maybe 0.7.0-9_PR?..
 
 Pre-Released versions:
+0.7.0-8_PR (b61)
+Improved the rendering code. More tests are required...
+--Okay it's now tested. Another bug in FPS independent bullets
+fixed. No bugs found in the new rendering code.
+
 0.7.0-7_PR (b60)
 Spring Festival commit...
 One level is rewritten.
diff --git a/VERSION.TXT b/VERSION.TXT
index 6ad3e29..35d2849 100755
--- a/VERSION.TXT
+++ b/VERSION.TXT
@@ -1 +1 @@
-0.7.0-7_PR (b60)
\ No newline at end of file
+0.7.0-8_PR (b61)
\ No newline at end of file
diff --git a/effects.h b/effects.h
index 3c11cb5..0443754 100644
--- a/effects.h
+++ b/effects.h
@@ -27,8 +27,9 @@ void SCEffect_Attatch()
 		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=rand()%4+2;
-		bullet[i].bulletspr=new hgeSprite(SprSheet,96,0,24,24);
-		bullet[i].bulletspr->SetColor(0x80FFFFFF);
+		//bullet[i].bulletspr=new hgeSprite(SprSheet,96,0,24,24);
+		//bullet[i].bulletspr->SetColor(0x80FFFFFF);
+		bullet[i].sccolor=0x80FFFFFF;
 	}
 }
 void SCEffect_Process()
@@ -44,7 +45,7 @@ void SCEffect_Process()
 				bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
 				++effskp;
 				if (effskp==7)
-					bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x1F000000),effskp=0;
+					bullet[i].sccolor=bullet[i].sccolor-0x1F000000,effskp=0;
 			}
 			else
 			{
@@ -52,13 +53,13 @@ void SCEffect_Process()
 				bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
 				++effskp;
 				if (effskp==7)
-					bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x1000000),effskp=0;
+					bullet[i].sccolor=bullet[i].sccolor-0x1000000,effskp=0;
 			}
 			//bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
 			//bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
 		}
 		double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
-		if (GETA(bullet[i].bulletspr->GetColor())<=0x0A||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+		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 collision is detected or the bullet flys out of screen, delete it.
 		{
 			bullet[i].exist=false;
@@ -72,7 +73,9 @@ void SCEffect_Process()
 		}
 		else
 		{
-			bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+2,bullet[i].bulletpos.y+2,0,0.2,0);
+			//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+2.4,bullet[i].bulletpos.y+2.4,0,0.2,0);
+			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);
 		}
 	}
 
diff --git a/global.h b/global.h
index fb8ea32..301a855 100644
--- a/global.h
+++ b/global.h
@@ -62,6 +62,9 @@ Multiplier"+1"		0,272,48,48
 Text:blnsns.png
 "Multiplier bonus!"	0,235,163,21
 */
+enum TColors
+{green=0,blue,yellow,purple,red,white,dblue,orange,grey,COLOR_COUNT};
+hgeSprite *bulletspr[COLOR_COUNT],*towerspr[COLOR_COUNT];
 const double zero=1e-5;
 vector2d playerpos;
 bool playerLockX,playerLockY;
@@ -71,12 +74,13 @@ bool LOWFPS=false,diffkey=false;
 inline double GetDist(vector2d,vector2d);
 struct Bullet
 {
-	hgeSprite *bulletspr;//This shit will be deprecated.
+	//hgeSprite *bulletspr;//This shit will be deprecated.
 	vector2d bulletpos;
 	vector2d bulletdir;
 	double dist;
 	int bullettype;
 	int redexplo,redattrib,oriexplo,whicnt;
+	DWORD sccolor;
 	/*In Orange bullets
 	//redattrib also serves as oraattrib to determine if they will explode or change direction
 	//redexplo also serves as orange explo
@@ -90,6 +94,7 @@ struct Bullet
 	int lifetime;
 	bool scollable;
 	double scale;int effbrk;
+	TColors alterColor;
 	void redir(vector2d targ)
 	{
 		bulletdir.x=bulletpos.x-targ.x;
@@ -119,7 +124,7 @@ struct Bullet
 //255: Score point*/
 struct Tower
 {
-	hgeSprite *towerspr;//So will this one.
+	//hgeSprite *towerspr;//So will this one.
 	vector2d towerpos;
 	int towertype;
 	int towertimer,curtimer;
@@ -132,6 +137,7 @@ struct Tower
 	int t3t;
 	bool exist,effect;
 	double offset;
+	DWORD RendColor;
 }tower[100];
 //t3t is for Tower3
 //0:All 12 directions
@@ -364,6 +370,7 @@ void ShowTip(char *tip)
 			TipFont->SetColor(TipFont->GetColor()+0x08000000);
 	}
 }
+void All2pnt();//forward that...
 void ClearAll(bool cbullet=true)
 {
 	DisableAllTower=true;
@@ -373,17 +380,17 @@ void ClearAll(bool cbullet=true)
 		if (!tower[i].exist)continue;
 		if (LOWFPS)
 		{
-			if (tower[i].towerspr->GetColor()>>24>=0x08)
+			if (tower[i].RendColor>>24>=0x08)
 			{
-				tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()-0x8000000);
+				tower[i].RendColor=tower[i].RendColor-0x8000000;
 				none=false;
 			}
 		}
 		else
 		{
-			if (tower[i].towerspr->GetColor()>>24>=0x01)
+			if (tower[i].RendColor>>24>=0x01)
 			{
-				tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()-0x1000000);
+				tower[i].RendColor=tower[i].RendColor-0x1000000;
 				none=false;
 			}
 		}
@@ -392,8 +399,9 @@ void ClearAll(bool cbullet=true)
 	{
 		towcnt=0;
 		memset(tower,0,sizeof(tower));
+		if (cbullet)All2pnt();
 	}
-	if (cbullet)
+	/*if (cbullet)
 	{
 		none=true;
 		for (int i=1;i<=bulcnt;++i)
@@ -424,7 +432,7 @@ void ClearAll(bool cbullet=true)
 		for (int i=1;i<=bulcnt;++i)if (bullet[i].bulletspr->GetColor()>>24>=0x3F){none=false;break;}
 		if (none)
 			bulcnt=0,memset(bullet,0,sizeof(bullet));
-	}
+	}*/
 }
 void SaySomethingAndBye(char *text)
 {
@@ -463,3 +471,36 @@ DWORD ColTrans(DWORD src,DWORD dsr,DWORD speed)
 	}
 	return ARGB(0xFF,sr,sg,sb);
 }
+TextureRect GetTextureRect(int type,TColors color)
+{
+	if (type==0)
+	{
+		switch(color)
+		{
+			case green:return TextureRect(48,0,24,24);
+			case blue:return TextureRect(0,0,24,24);
+			case yellow:return TextureRect(192,0,24,24);
+			case purple:return TextureRect(120,0,24,24);
+			case red:return TextureRect(144,0,24,24);
+			case white:return TextureRect(168,0,24,24);
+			case dblue:return TextureRect(24,0,24,24);
+			case orange:return TextureRect(72,0,24,24);
+			case grey:return TextureRect(96,0,24,24);
+		}
+	}
+	if (type==1)
+	{
+		switch(color)
+		{
+			case green:return TextureRect(0,136,44,44);
+			case blue:return TextureRect(0,48,44,44);
+			case yellow:return TextureRect(180,24,44,44);
+			case purple:return TextureRect(48,24,44,44);
+			case red:return TextureRect(92,24,44,44);
+			case white:return TextureRect(136,24,44,44);
+			case dblue:return TextureRect(0,92,44,44);
+			case orange:return TextureRect(0,180,44,44);
+		}
+	}
+	return TextureRect(0,0,0,0);
+}
diff --git a/levels.h b/levels.h
index 17de738..26dcd63 100644
--- a/levels.h
+++ b/levels.h
@@ -65,7 +65,7 @@ void Level1Part1()
 {
 	//Level procedure
 	//Simple Level procedures should only run once during a level
-	if ((tower[CreateTower1(400,300,857,2)].towerspr->GetColor()>>24)>=0x80)IfCallLevel=false;
+	if ((tower[CreateTower1(400,300,857,2)].RendColor>>24)>=0x80)IfCallLevel=false;
 	//Current_Position=2;
 	frameleft=AMinute*2;
 	tcnt=1;sout=false;dscroll=-0.025f;memset(dmt,true,sizeof(dmt));
@@ -148,11 +148,11 @@ void Level1Part3()
 		CreateTower3(772,i*24-24,1714,2,2),
 		CreateTower3(28,i*24-12,1714,2,2);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			++part;
@@ -415,14 +415,14 @@ void Level3Part1()
 	//Create your towers
 	CreateTower8(400,300,857,3,57,30,false);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
-			IfCallLevel=false;
+			++part;
 			return;
 		}
 }
@@ -450,14 +450,14 @@ void Level3Part2()
 	CreateTower8(30,556,1250,3,57,15,false);
 	CreateTower8(746,556,1250,3,57,15,false);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
-			IfCallLevel=false;
+			++part;
 			return;
 		}
 }
@@ -478,8 +478,8 @@ public:
 	void init()
 	{
 		stage=0;rad1=rad2=srad;elasp=0.0f;ccnt=0;
-		for (int i=0;i<cnt;++i)Bul[i]=&bullet[CreateBullet8(400,300,0,false)],DirectBullet(*Bul[i],srad),Bul[i]->bulletspr->SetColor(0x00FFFFFF);
-		Bul[0]->bulletspeed=2;Bul[0]->bulletspr->SetColor(0x80FFFFFF);
+		for (int i=0;i<cnt;++i)Bul[i]=&bullet[CreateBullet8(400,300,0,false)],DirectBullet(*Bul[i],srad),Bul[i]->scale=0.01;
+		Bul[0]->bulletspeed=2;Bul[0]->scale=1;
 	}
 	void stage0()
 	{
@@ -488,7 +488,7 @@ public:
 		{
 			ccnt=(int)(elasp/0.2f);
 			if (ccnt==1)dtrange=GetDist(Bul[0]->bulletpos,Bul[1]->bulletpos);
-			Bul[ccnt]->bulletspeed=2;Bul[ccnt]->bulletspr->SetColor(0x80FFFFFF);
+			Bul[ccnt]->bulletspeed=2;Bul[ccnt]->scale=1;
 		}
 		if (elasp>2)
 		{
@@ -555,11 +555,11 @@ void Level3Part3()
 	//Create your towers
 	CreateTower8(400,300,999999999,0,999999999,0,false);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			for (int k=0;k<6;++k)
@@ -669,11 +669,11 @@ void Level4Part1()
 	//Create your towers
 	CreateTower9(400,300,1000,4,750,36,750);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			IfCallLevel=false;
@@ -1115,11 +1115,11 @@ void Level4Part24()
 	CreateTower1(9,567,2000,3);
 	CreateTower1(767,567,2000,3);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			++part;
@@ -1168,11 +1168,11 @@ void Level5Part1()
 	CreateTower9(400,300,2000,3,1000,36,750);
 	CreateTower4(400,50,2000,2.5,0);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			IfCallLevel=false;
@@ -1329,11 +1329,11 @@ void Level5Part7()
 	//Create your towers
 	for (int i=1;i<=33;++i)CreateTower8(i*24-12,12,500,10,20,30);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			++part;All2pnt();
@@ -1368,11 +1368,11 @@ void Level5Part9()
 	//Create your towers
 	for (int i=1;i<=33;++i)CreateTower8(i*24-12,12,750,1,1,1),CreateTower8(i*24-12,588,750,1,1,1);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			++part;All2pnt();
@@ -1385,7 +1385,8 @@ void Level5Part10()
 	if (tbrk<=3)return;
 	tbrk=0;
 	int p=CreateBullet1(playerpos.x,12,2);
-	bullet[p].bulletspr->SetTextureRect(72,0,24,24);
+	//bullet[p].bulletspr->SetTextureRect(72,0,24,24);
+	bullet[p].alterColor=orange;
 }
 void Level5Part11()
 {
@@ -1652,11 +1653,11 @@ void Level6Part1()
 	whicnt=10;
 	CreateTower7(400,300,750,3,500);
 	for (int i=1;i<=towcnt;++i)
-		if (tower[i].towerspr->GetColor()==0x80FFFFFF)
-			tower[i].towerspr->SetColor(0x00FFFFFF);
+		if (tower[i].RendColor==0x80FFFFFF)
+			tower[i].RendColor=0x00FFFFFF;
 	for (int i=1;i<=towcnt;++i)
-		if ((tower[i].towerspr->GetColor()>>24)<=0x80)
-			tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+		if ((tower[i].RendColor>>24)<=0x80)
+			tower[i].RendColor=tower[i].RendColor+0x01FFFFFF;
 		else
 		{
 			IfCallLevel=false;
@@ -2358,7 +2359,8 @@ void Level6Part999999999()//well this isnot an easter egg!
 		for (int i=1;i<=rand()%10;++i)
 		{
 			int pnt=CreateBullet2(rand()%780+10,590,1,pi/2);
-			bullet[pnt].bulletspr->SetTextureRect(168,0,24,24);
+			bullet[pnt].alterColor=white;
+			//!!TODO: Restore this later
 		}
 	}
 }
@@ -2549,7 +2551,7 @@ void Level7Part4()
 		}
 	}
 }
-BulletSine bnl[100];//Yukari...
+BulletSine bnl[100];
 double ykbrk;
 void Level7Part5()//This should be another part.
 {
diff --git a/main.cpp b/main.cpp
index 459f060..81a9d55 100644
--- a/main.cpp
+++ b/main.cpp
@@ -805,6 +805,20 @@ int main()
 		TipFont=new hgeFont("./Resources/charmap.fnt");
 		MultFnt=new hgeFont("./Resources/charmap.fnt");
 		spr=new hgeSprite(SprSheet,216,0,24,24);
+		for (int ii=0;ii<COLOR_COUNT;++ii)
+		{
+			TColors i=(TColors)ii;
+			TextureRect a=GetTextureRect(0,i);
+			bulletspr[i]=new hgeSprite(SprSheet,a.x,a.y,a.w,a.h);
+			bulletspr[i]->SetHotSpot(12,12);bulletspr[i]->SetColor(0x80FFFFFF);
+		}
+		for (int ii=0;ii<grey;++ii)
+		{
+			TColors i=(TColors)ii;
+			TextureRect a=GetTextureRect(1,i);
+			towerspr[i]=new hgeSprite(SprSheet,a.x,a.y,a.w,a.h);
+			towerspr[i]->SetHotSpot(22,22);bulletspr[i]->SetColor(0x80FFFFFF);
+		}
 		gui=new hgeGUI();
 		gui->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Start"));
 		gui->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Highscores && Records"));
@@ -818,10 +832,9 @@ int main()
 		if (LOWFPS)
 			hge->System_Log("%s: Low FPS Mode Enabled.\n",MAIN_SRC_FN);
 		hge->System_Start();
-		delete gui;
-		delete fnt;
+		delete gui;delete titlespr;
+		delete fnt;delete playerspr;
 		delete spr;
-		//hge->Effect_Free(snd);
 		hge->Texture_Free(tex);
 		hge->Texture_Free(quad.tex);
 	}
diff --git a/towernbullet.h b/towernbullet.h
index b13bf1b..42e84c8 100644
--- a/towernbullet.h
+++ b/towernbullet.h
@@ -37,11 +37,12 @@ int CreateBullet1(double x,double y,double bs,bool eff=false)
 	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].bulletspr=new hgeSprite(SprSheet,48,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	bullet[i].alterColor=green;
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,48,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -64,13 +65,14 @@ int CreateBullet2(double x,double y,double bs,double rad,bool eff=false)
 	bullet[i].bulletdir.x=cos(rad);
 	bullet[i].bulletdir.y=sin(rad);
 	bullet[i].bulletspeed=bs;
+	bullet[i].alterColor=blue;
 	bullet[i].lifetime=0;
-	bullet[i].bulletspr=new hgeSprite(SprSheet,0,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,0,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].bulletaccel=bullet[i].limv=0;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -100,11 +102,12 @@ void CreateBullet4(double x,double y,double bs,int yelbrk=0,bool eff=false)
 	bullet[i].dist=sqrt(bullet[i].dist);
 	bullet[i].bulletspeed=bs;
 	bullet[i].yelbrk=yelbrk;
-	bullet[i].bulletspr=new hgeSprite(SprSheet,192,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,192,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	bullet[i].alterColor=yellow;
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 }
 void CreateBullet5(double x,double y,double bs,bool eff=false)
@@ -128,11 +131,12 @@ void CreateBullet5(double x,double y,double bs,bool eff=false)
 	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].bulletspr=new hgeSprite(SprSheet,120,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	bullet[i].alterColor=purple;
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,120,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 }
 int CreateBullet6(double x,double y,double bs,int explo,int exp1=8,int exp2=12,bool eff=false)
@@ -156,15 +160,16 @@ int CreateBullet6(double x,double y,double bs,int explo,int exp1=8,int exp2=12,b
 	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].redattrib=0;
 	bullet[i].exp1=exp1;
 	bullet[i].exp2=exp2;
 	bullet[i].oriexplo=bullet[i].redexplo=explo;
-	bullet[i].bulletspr=new hgeSprite(SprSheet,144,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,144,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -189,15 +194,16 @@ int CreateBullet7(double x,double y,double bs,int explo,bool eff=false)
 	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].oriexplo=bullet[i].redexplo=explo;
-	bullet[i].bulletspr=new hgeSprite(SprSheet,168,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,168,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].redattrib=0;
 	bullet[i].whirem=whicnt;
 	bullet[i].whiskp=0;
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -222,11 +228,12 @@ int CreateBullet8(double x,double y,double bs,bool eff=false)
 	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].bulletspr=new hgeSprite(SprSheet,24,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	bullet[i].alterColor=dblue;
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,24,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -257,11 +264,12 @@ int CreateBullet9(double x,double y,double bs,int explo,int cnt,int brk,bool eff
 	bullet[i].redattrib=0;
 	bullet[i].whicnt=cnt;
 	bullet[i].yelbrk=brk;
-	bullet[i].bulletspr=new hgeSprite(SprSheet,72,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	bullet[i].alterColor=orange;
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,72,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 	bullet[i].scollable=true;
 	bullet[i].scale=1;
-	bullet[i].bulletspr->SetHotSpot(12,12);
+	//bullet[i].bulletspr->SetHotSpot(12,12);
 	if (eff)BulletEffect_Attatch(i);
 	return i;
 }
@@ -285,8 +293,8 @@ void CreateBullet255(double x,double y,double bs)
 	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].bulletspr=new hgeSprite(SprSheet,96,0,24,24);
-	bullet[i].bulletspr->SetColor(0x80FFFFFF);
+	//bullet[i].bulletspr=new hgeSprite(SprSheet,96,0,24,24);
+	//bullet[i].bulletspr->SetColor(0x80FFFFFF);
 }
 void All2pnt()
 {
@@ -327,13 +335,11 @@ void ProcessBullet1(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -352,7 +358,7 @@ void ProcessBullet2(int i)
 	}
 	if (!DisablePlayer)
 	{
-		if (LOWFPS)
+		/*if (LOWFPS)
 		{
 			if (bullet[i].bulletspeed<bullet[i].limv)bullet[i].bulletspeed+=bullet[i].bulletaccel*17;
 			//bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20*17;//Process bullet's x coor.
@@ -363,8 +369,9 @@ void ProcessBullet2(int i)
 			if (bullet[i].bulletspeed<bullet[i].limv)bullet[i].bulletspeed+=bullet[i].bulletaccel;
 			//bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20;//Process bullet's x coor.
 			//bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20;//Process bullet's y coor.
-		}
+		}*/
 		//experimental new coor processing code, FPS independent
+		if (bullet[i].bulletspeed<bullet[i].limv)bullet[i].bulletspeed+=bullet[i].bulletaccel*(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());
 	}
@@ -382,9 +389,6 @@ void ProcessBullet2(int i)
 			bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 			bullet[i].dist=0;
 			bullet[i].bullettype=0;
-#ifndef NO_FREE
-			if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 			return;
 		}
 	}
@@ -397,14 +401,12 @@ void ProcessBullet2(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 		return;
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -450,13 +452,11 @@ void ProcessBullet4(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -489,13 +489,11 @@ void ProcessBullet5(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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);
 	}
 }
 void ProcessBullet6(int i)
@@ -554,9 +552,6 @@ void ProcessBullet6(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	BulletEffect_Process(i);
 	double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
@@ -569,13 +564,11 @@ void ProcessBullet6(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -626,9 +619,6 @@ void ProcessBullet7(int i)
 			bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 			bullet[i].dist=0;
 			bullet[i].bullettype=0;
-#ifndef NO_FREE
-			if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 		}
 		else
 		{
@@ -666,9 +656,6 @@ void ProcessBullet7(int i)
 				bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 				bullet[i].dist=0;
 				bullet[i].bullettype=0;
-#ifndef NO_FREE
-				if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 			}
 		}
 	}
@@ -683,13 +670,11 @@ void ProcessBullet7(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		delete bullet[i].bulletspr;
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -726,13 +711,11 @@ void ProcessBullet8(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -761,9 +744,6 @@ void ProcessBullet9(int i)
 					bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 					bullet[i].dist=0;
 					bullet[i].bullettype=0;
-#ifndef NO_FREE
-					if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 				}
 			}
 			if (bullet[i].redattrib==1)
@@ -796,9 +776,6 @@ void ProcessBullet9(int i)
 					bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 					bullet[i].dist=0;
 					bullet[i].bullettype=0;
-#ifndef NO_FREE
-					if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 				}
 			}
 			if (bullet[i].redattrib==1)
@@ -823,13 +800,11 @@ void ProcessBullet9(int i)
 		bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
 		bullet[i].dist=0;
 		bullet[i].bullettype=0;
-#ifndef NO_FREE
-		if (bullet[i].bulletspr)free(bullet[i].bulletspr);
-#endif
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,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 (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
 	}
 }
@@ -871,7 +846,9 @@ void ProcessBullet255(int i)
 	}
 	else
 	{
-		bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x,bullet[i].bulletpos.y,0,0.5,0);
+		//bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x,bullet[i].bulletpos.y,0,0.5,0);
+		bulletspr[grey]->SetColor(0x80FFFFFF);
+		bulletspr[grey]->RenderEx(bullet[i].bulletpos.x+6,bullet[i].bulletpos.y+6,0,0.5,0);
 	}
 }
 int CreateTower1(double x,double y,int timer,double bs,double offset=0,bool eff=false)//This returns the created tower number.
@@ -897,11 +874,12 @@ int CreateTower1(double x,double y,int timer,double bs,double offset=0,bool eff=
 	tower[i].bulletspeed=bs;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,0,136,44,44);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,136,44,44);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	tower[i].offset=offset;
-	tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetHotSpot(22,22);
 	return i;
 }
 int CreateTower2(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
@@ -924,9 +902,10 @@ int CreateTower2(double x,double y,int timer,double bs,bool eff=false)//This ret
 	tower[i].bulletspeed=bs;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,0,48,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,48,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	return i;
 }
@@ -951,9 +930,10 @@ int CreateTower3(double x,double y,int timer,double bs,int t3t,bool eff=false)//
 	tower[i].t3t=t3t;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,0,48,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,48,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	return i;
 }
@@ -978,9 +958,10 @@ int CreateTower3_fixeddir(double x,double y,int timer,double bs,double rad,bool
 	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].towerspr=new hgeSprite(SprSheet,0,48,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,48,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	return i;
 }
@@ -1007,9 +988,10 @@ int CreateTower4(double x,double y,int timer,double bs,int yelbrk=0,bool eff=fal
 	tower[i].bulletspeed=bs;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,180,24,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,180,24,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].yelbrk=yelbrk;
 	tower[i].effect=eff;
 	return i;
@@ -1037,9 +1019,10 @@ int CreateTower5(double x,double y,int timer,double bs,bool eff=false)//This ret
 	tower[i].bulletspeed=bs;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,48,24,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,48,24,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	return i;
 }
@@ -1068,9 +1051,10 @@ int CreateTower6(double x,double y,int timer,double bs,int redexplo,int exp1=8,i
 	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].towerspr=new hgeSprite(SprSheet,92,24,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,92,24,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
 	return i;
 }
@@ -1098,9 +1082,10 @@ int CreateTower7(double x,double y,int timer,double bs,int redexplo,bool eff=fal
 	tower[i].redexplo=redexplo;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,136,24,44,44);
-	tower[i].towerspr->SetHotSpot(22,22);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,136,24,44,44);
+	//tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].whicnt=whicnt;
 	tower[i].effect=eff;
 	return i;
@@ -1131,10 +1116,11 @@ int CreateTower8(double x,double y,int timer,double bs,int timer2,int scnt,bool
 	tower[i].shotcount=tower[i].curshotcount=scnt;
 	tower[i].dblstate=false;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,0,92,44,44);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,92,44,44);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
-	tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetHotSpot(22,22);
 	return i;
 }
 int CreateTower9(double x,double y,int timer,double bs,int explo,int cnt,int brk,bool eff=false)
@@ -1163,10 +1149,11 @@ int CreateTower9(double x,double y,int timer,double bs,int explo,int cnt,int brk
 	tower[i].yelbrk=brk;
 	tower[i].towertimer=tower[i].curtimer=timer;
 	tower[i].towerpos.x=x,tower[i].towerpos.y=y;
-	tower[i].towerspr=new hgeSprite(SprSheet,0,180,44,44);
-	tower[i].towerspr->SetColor(0x80FFFFFF);
+	//tower[i].towerspr=new hgeSprite(SprSheet,0,180,44,44);
+	//tower[i].towerspr->SetColor(0x80FFFFFF);
+	tower[i].RendColor=0x80FFFFFF;
 	tower[i].effect=eff;
-	tower[i].towerspr->SetHotSpot(22,22);
+	//tower[i].towerspr->SetHotSpot(22,22);
 	return i;
 }
 void ProcessTower1()
@@ -1174,7 +1161,9 @@ void ProcessTower1()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=1)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1198,7 +1187,9 @@ void ProcessTower2()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=2)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1219,7 +1210,9 @@ void ProcessTower3()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=3)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1280,7 +1273,9 @@ void ProcessTower4()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=4)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1298,7 +1293,9 @@ void ProcessTower5()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=5)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1316,7 +1313,9 @@ void ProcessTower6()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=6)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1334,7 +1333,9 @@ void ProcessTower7()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=7)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1352,7 +1353,9 @@ void ProcessTower8()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=8)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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)
 		{
@@ -1409,7 +1412,9 @@ void ProcessTower9()
 	for (int i=1;i<=towcnt;++i)
 	{
 		if (!tower[i].exist||tower[i].towertype!=9)continue;
-		tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		//tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+		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;
@@ -1566,11 +1571,13 @@ void CreateBullet2(Bullet &Tar,double x,double y,double bs,double rad,bool eff=f
 	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;
-	Tar.bulletspr=new hgeSprite(SprSheet,0,0,24,24);
-	Tar.bulletspr->SetColor(0x80FFFFFF);
-	Tar.bulletspr->SetHotSpot(12,12);
+	//Tar.bulletspr=new hgeSprite(SprSheet,0,0,24,24);
+	//Tar.bulletspr->SetColor(0x80FFFFFF);
+	//Tar.bulletspr->SetHotSpot(12,12);
 }
 void ProcessBullet2(Bullet &xbul)
 {
@@ -1600,7 +1607,8 @@ void ProcessBullet2(Bullet &xbul)
 		return;
 	}
 	if (dis<=16&&xbul.scollable)++semicoll,++dsmc,xbul.scollable=false,SCEffect_Attatch();
-	xbul.bulletspr->RenderEx(xbul.bulletpos.x+7.2,xbul.bulletpos.y+7.2,0,0.5);
+	//xbul.bulletspr->RenderEx(xbul.bulletpos.x+7.2,xbul.bulletpos.y+7.2,0,0.5);
+	bulletspr[xbul.alterColor]->RenderEx(xbul.bulletpos.x+7.2,xbul.bulletpos.y+7.2,0,0.6*xbul.scale);
 }
 //"Noname"
 class Noname01dotpas
-- 
cgit v1.2.3