diff --git a/Fase1.h b/Fase1.h
index bebfefa44bf967e2474681aa18d570f5f0a736fc..857a1347883e79c32539b2b683d72ad3c30dd8cd 100644
--- a/Fase1.h
+++ b/Fase1.h
@@ -1,12 +1,24 @@
-void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool redraw,ALLEGRO_BITMAP *map,int cont,int i,int j,bool *temneon,ALLEGRO_BITMAP **neons,int cor[4],ALLEGRO_BITMAP *frente,ALLEGRO_FONT *font5,ALLEGRO_BITMAP **fireballs,int explox[4][2],int exploy[4][2],ALLEGRO_BITMAP* explosion,Pessoa *p,Sprite s)
+void fase1(Window win,Magia fireball[4][2],ALLEGRO_FONT *font5,int explox[4][2],int exploy[4][2],Pessoa *p,Sprite s)
 {
 	char** matriz;
 	int mapsize,xtile[TAM],ytile[TAM],xcorte[TAM],ycorte[TAM], njogadores = 4;
 	FILE *mapa,*errext;
+	ALLEGRO_BITMAP *map, *frente;
+	int i,j,k,cont = 0,*tlep,*cor;
+	bool redraw = false, sair = false, *puxa, *temneon;
+
+	puxa = (bool *) malloc(sizeof(bool) * njogadores);
+	temneon = (bool *) malloc(sizeof(bool) * njogadores);
+	tlep = (int *) malloc(sizeof(int) * njogadores);
+	cor = (int *) malloc(sizeof(int) * njogadores);
 
 	for(i=0; i<njogadores; ++i) {
 		p[i].x = 100 + 50*i;
 		p[i].y = 200;
+		puxa[i] = false;
+		temneon[i] = true;
+		tlep[i] = 0;
+		cor[i] = i+1;
 	}
 
 	errext = fopen("err.txt","w");
@@ -27,8 +39,6 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 
 	matriz = le_matriz(fopen("Fases/F1/matriz.txt","r"));
 
-    puts("Inicializando o jogo...");
-
 	al_flush_event_queue(win.event_queue);
 	while (!sair) /* Pra sair, botoes como Esc, o X ali em cima direita,... transformam a variavel sair de false pra true, dai sai do while. */
     {
@@ -54,35 +64,32 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			al_draw_bitmap(map,0,0,0);
 
 			cont++;
-			for(i=0; i<4; i++) // Faz parar de correr quando a energia acaba.
+			for(i=0; i<njogadores; i++) // Faz parar de correr quando a energia acaba.
 				if(p[i].energia <= 0)
 					p[i].correr = 1;
 
-			//usa_magias(andou_b,andou_c,andou_d,andou_e,cx,cy,fireball)
-
 			flash(p,tlep,matriz);
 
 			usa_magias(matriz,fireball,p);
 
-			for(int h=0;h<4;h++) {
+			for(k=0;k<njogadores;k++) {
 				for(j=0;j<2;j++) {
-					if(fireball[h][j].ativa == true) {
-						al_draw_bitmap(fireballs[fireball[h][j].d],fireball[h][j].x,fireball[h][j].y,0);
-						//al_rest(4);
+					if(fireball[k][j].ativa == true) {
+						al_draw_bitmap(s.fireballs[fireball[k][j].d],fireball[k][j].x,fireball[k][j].y,0);
 					}
-					if(fireball[h][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
+					if(fireball[k][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
 									// Entao o esquema eh zerar eles e dai o programa come�a a contagem e a impressao.
-						explox[h][j] = exploy[i][j] = 0;
-						fireball[h][j].explosao = false;
+						explox[k][j] = exploy[i][j] = 0;
+						fireball[k][j].explosao = false;
 						//contalinhaexplo = 0;
 					}
-					if(explox[h][j] < 280 && exploy[h][j] < 220) { // Imprime a explosao.
-						al_draw_bitmap_region(explosion,explox[h][j],exploy[h][j],32,32,fireball[h][j].x,fireball[h][j].y,0);
-						explox[h][j] += 32;
-						if(explox[h][j] >= 288) {
-							exploy[h][j] += 32;
-							if(exploy[h][j] < 224)
-								explox[h][j] = 0;
+					if(explox[k][j] < 280 && exploy[k][j] < 220) { // Imprime a explosao.
+						al_draw_bitmap_region(s.explosion,explox[k][j],exploy[k][j],32,32,fireball[k][j].x,fireball[k][j].y,0);
+						explox[k][j] += 32;
+						if(explox[k][j] >= 288) {
+							exploy[k][j] += 32;
+							if(exploy[k][j] < 224)
+								explox[k][j] = 0;
 						}
 					}
 				}
@@ -93,13 +100,13 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			for(i=0;i<4;i++) // Pra nao contar como se estivesse sempre tentando puxar.
 				puxa[i] = false;
 
-            imprime_4_chars_for(cont,matriz,neons,cor,temneon,njogadores,p,s);
+            imprime_4_chars_for(cont,matriz,cor,temneon,njogadores,p,s);
 
             IA(p);
 
-            if(cont==CONT)
-          		cont=0;
-          	for(i=0;i<4;i++)
+            if(cont == CONT)
+          		cont = 0;
+          	for(i=0; i<njogadores; ++i)
           		if(p[i].energia < 100)
 					p[i].energia++;
 
@@ -110,7 +117,7 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
             al_draw_text(font5,VERDE_LIMAO,20,600,0,"Player 1:               Player 2:             Player 3:               Player 4:");
             al_draw_text(font5,VERMELHO,20,620,0,   "Vida    :               Vida    :             Vida    :               Vida    :");
             al_draw_text(font5,AZUL,20,640,0,       "Energia :               Energia :             Energia :               Energia :");
-            for(i=0;i<4;i++)
+            for(i=0; i<njogadores; ++i)
             	for(j=0; j< (p[i].energia/5);j++ )
             		al_draw_text(font5,AMARELO,100+200*i+4*j,640,0,"| ");
             //al_draw_textf(font5,VERDE_LIMAO,20,450,0,"%d",fireball[i][j].explosao);
diff --git a/bin/neon b/bin/neon
index 6d2816eda9829e6a173ed5114c87a542d0f1628a..4d2e07193f26682a664bae20d1e9187b559295a7 100755
Binary files a/bin/neon and b/bin/neon differ
diff --git a/colisao.h b/colisao.h
index 3bcdcdd76a0eb70650fcdc775b3e3b93f8dcf0e5..439a22cf6e4e6c9d5a9a528eb52d43aab76e9285 100644
--- a/colisao.h
+++ b/colisao.h
@@ -38,9 +38,9 @@ typedef struct Magia {
 
 typedef struct Sprite {
 	//*tiles,*chars,*map,*frente,**neons,**fireballs,*explosion;
-	ALLEGRO_BITMAP *tiles;
-	//ALLEGRO_BITMAP
-	//ALLEGRO_BITMAP
+	ALLEGRO_BITMAP *tiles; // Usado pra coisas dos mapas.
+	ALLEGRO_BITMAP **fireballs, *explosion; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball.
+	ALLEGRO_BITMAP **neons; // Todos os neons (4 cores, na sequencia: amarelo - azul - verde - vermelho)
 	//ALLEGRO_BITMAP
 	//ALLEGRO_BITMAP
 	ALLEGRO_BITMAP *chars;
diff --git a/imprime.c b/imprime.c
index f56a654753323327a6467813730620c236e02d91..c8a546709520112303c1c8ddb042a64db23fe1ce 100644
--- a/imprime.c
+++ b/imprime.c
@@ -14,7 +14,7 @@ inline void imprime_char(int cx,int cy,int a,int b,int selx,int sely,Sprite s)
     return ;
 }
 
-int imprime_4_chars_for(int cont,char** matriz,ALLEGRO_BITMAP** neons,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s)
+int imprime_4_chars_for(int cont,char** matriz,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s)
 {
 	//puts("Imprimindo chars...");
 	int i,j,selecx,selecy,char4;
@@ -98,16 +98,16 @@ int imprime_4_chars_for(int cont,char** matriz,ALLEGRO_BITMAP** neons,int *cor,b
 	        p[i].sely = 96 + 128*char4;
 	        imprime_char(p[i].x,p[i].y,p[i].desx,p[i].desy,p[i].selx,p[i].sely,s);
 	        if((p[i].andou_d) == 1 && (p[i].andou_e)==0)
-		 	    imprime_neon(p[i].xneon+4*p[i].correr,p[i].yneon,neons[i],temneon[i]);
+		 	    imprime_neon(p[i].xneon+4*p[i].correr,p[i].yneon,s.neons[i],temneon[i]);
 	        else if((p[i].andou_e) == 1 && (p[i].andou_d)==0)
-			    imprime_neon(p[i].xneon-4*p[i].correr,p[i].yneon,neons[i],temneon[i]);
+			    imprime_neon(p[i].xneon-4*p[i].correr,p[i].yneon,s.neons[i],temneon[i]);
 			else
-	        	imprime_neon(p[i].xneon,p[i].yneon,neons[i],temneon[i]);
+	        	imprime_neon(p[i].xneon,p[i].yneon,s.neons[i],temneon[i]);
 	    }
 	    //printf("Quarto if completo!\n");
 	    if(!(p[i].andou_b) && !(p[i].andou_c) && !(p[i].andou_d) && !(p[i].andou_e)) { // Nao andou.
 			imprime_char(p[i].x,p[i].y,p[i].desx,p[i].desy,32,96,s);
-			imprime_neon(p[i].xneon,p[i].yneon,neons[p[i].time-1],temneon[i]);
+			imprime_neon(p[i].xneon,p[i].yneon,s.neons[p[i].time-1],temneon[i]);
 	    }
 	}
 	//puts("Chars impressos!");
diff --git a/imprime.h b/imprime.h
index e237cbb95a0acc271c6d2949bc5da485153749c0..ef3de9a96830d4e295b6a4f0f5261f8f8a956bd4 100644
--- a/imprime.h
+++ b/imprime.h
@@ -23,4 +23,4 @@
 
 void imprime_char(int cx,int cy,int a,int b,int selx,int sely,Sprite s);
 void imprime_neon(int x,int y,ALLEGRO_BITMAP* neon,bool temneon);
-int imprime_4_chars_for(int cont,char** matriz,ALLEGRO_BITMAP** neons,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s);
+int imprime_4_chars_for(int cont,char** matriz,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s);
diff --git a/include/Fase1.h b/include/Fase1.h
index cb6979b35026640e799b4406bf57a18e46703573..857a1347883e79c32539b2b683d72ad3c30dd8cd 100755
--- a/include/Fase1.h
+++ b/include/Fase1.h
@@ -1,13 +1,24 @@
-void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool redraw,ALLEGRO_BITMAP *map,int cont,int i,int j,bool *temneon,ALLEGRO_BITMAP **neons,int cor[4],ALLEGRO_BITMAP *frente,ALLEGRO_FONT *font5,ALLEGRO_BITMAP **fireballs,int explox[4][2],int exploy[4][2],ALLEGRO_BITMAP* explosion,Pessoa *p,Sprite s)
+void fase1(Window win,Magia fireball[4][2],ALLEGRO_FONT *font5,int explox[4][2],int exploy[4][2],Pessoa *p,Sprite s)
 {
 	char** matriz;
-	//ALLEGRO_BITMAP *tiles;
 	int mapsize,xtile[TAM],ytile[TAM],xcorte[TAM],ycorte[TAM], njogadores = 4;
 	FILE *mapa,*errext;
+	ALLEGRO_BITMAP *map, *frente;
+	int i,j,k,cont = 0,*tlep,*cor;
+	bool redraw = false, sair = false, *puxa, *temneon;
+
+	puxa = (bool *) malloc(sizeof(bool) * njogadores);
+	temneon = (bool *) malloc(sizeof(bool) * njogadores);
+	tlep = (int *) malloc(sizeof(int) * njogadores);
+	cor = (int *) malloc(sizeof(int) * njogadores);
 
 	for(i=0; i<njogadores; ++i) {
 		p[i].x = 100 + 50*i;
 		p[i].y = 200;
+		puxa[i] = false;
+		temneon[i] = true;
+		tlep[i] = 0;
+		cor[i] = i+1;
 	}
 
 	errext = fopen("err.txt","w");
@@ -18,27 +29,16 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
     	fclose(errext);
     	exit(1);
     }
-/*
-    tiles = al_load_bitmap("Imgs/tiles.bmp");
-    if(!tiles) {
-	   	fprintf(errext,"Falha ao abrir a imagem tiles.");
-	   	fclose(errext);
-	   	exit(1);
-	}
-*/
+
     fscanf(mapa,"%i\n",&mapsize);
     for(i=0;i<mapsize+1;i++)
         fscanf(mapa,"%i %i %i %i\n",&xtile[i],&ytile[i],&xcorte[i],&ycorte[i]);
 
-	//al_convert_mask_to_alpha(tiles,al_map_rgb(255,0,255));
-
     map = cria_mapa(win,mapa,mapsize,xtile,ytile,xcorte,ycorte,s);
     frente = cria_frente(win,mapa,mapsize,xcorte,ycorte,xtile,ytile,s); // Obs: Confundi dentro da fun�ao, entao to passando invertido aqui. EH PROPOSITAL!
 
 	matriz = le_matriz(fopen("Fases/F1/matriz.txt","r"));
 
-    puts("Inicializando o jogo...");
-
 	al_flush_event_queue(win.event_queue);
 	while (!sair) /* Pra sair, botoes como Esc, o X ali em cima direita,... transformam a variavel sair de false pra true, dai sai do while. */
     {
@@ -64,35 +64,32 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			al_draw_bitmap(map,0,0,0);
 
 			cont++;
-			for(i=0; i<4; i++) // Faz parar de correr quando a energia acaba.
+			for(i=0; i<njogadores; i++) // Faz parar de correr quando a energia acaba.
 				if(p[i].energia <= 0)
 					p[i].correr = 1;
 
-			//usa_magias(andou_b,andou_c,andou_d,andou_e,cx,cy,fireball)
-
 			flash(p,tlep,matriz);
 
 			usa_magias(matriz,fireball,p);
 
-			for(int h=0;h<4;h++) {
+			for(k=0;k<njogadores;k++) {
 				for(j=0;j<2;j++) {
-					if(fireball[h][j].ativa == true) {
-						al_draw_bitmap(fireballs[fireball[h][j].d],fireball[h][j].x,fireball[h][j].y,0);
-						//al_rest(4);
+					if(fireball[k][j].ativa == true) {
+						al_draw_bitmap(s.fireballs[fireball[k][j].d],fireball[k][j].x,fireball[k][j].y,0);
 					}
-					if(fireball[h][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
+					if(fireball[k][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
 									// Entao o esquema eh zerar eles e dai o programa come�a a contagem e a impressao.
-						explox[h][j] = exploy[i][j] = 0;
-						fireball[h][j].explosao = false;
+						explox[k][j] = exploy[i][j] = 0;
+						fireball[k][j].explosao = false;
 						//contalinhaexplo = 0;
 					}
-					if(explox[h][j] < 280 && exploy[h][j] < 220) { // Imprime a explosao.
-						al_draw_bitmap_region(explosion,explox[h][j],exploy[h][j],32,32,fireball[h][j].x,fireball[h][j].y,0);
-						explox[h][j] += 32;
-						if(explox[h][j] >= 288) {
-							exploy[h][j] += 32;
-							if(exploy[h][j] < 224)
-								explox[h][j] = 0;
+					if(explox[k][j] < 280 && exploy[k][j] < 220) { // Imprime a explosao.
+						al_draw_bitmap_region(s.explosion,explox[k][j],exploy[k][j],32,32,fireball[k][j].x,fireball[k][j].y,0);
+						explox[k][j] += 32;
+						if(explox[k][j] >= 288) {
+							exploy[k][j] += 32;
+							if(exploy[k][j] < 224)
+								explox[k][j] = 0;
 						}
 					}
 				}
@@ -103,13 +100,13 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			for(i=0;i<4;i++) // Pra nao contar como se estivesse sempre tentando puxar.
 				puxa[i] = false;
 
-            imprime_4_chars_for(cont,matriz,neons,cor,temneon,njogadores,p,s);
+            imprime_4_chars_for(cont,matriz,cor,temneon,njogadores,p,s);
 
             IA(p);
 
-            if(cont==CONT)
-          		cont=0;
-          	for(i=0;i<4;i++)
+            if(cont == CONT)
+          		cont = 0;
+          	for(i=0; i<njogadores; ++i)
           		if(p[i].energia < 100)
 					p[i].energia++;
 
@@ -120,7 +117,7 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
             al_draw_text(font5,VERDE_LIMAO,20,600,0,"Player 1:               Player 2:             Player 3:               Player 4:");
             al_draw_text(font5,VERMELHO,20,620,0,   "Vida    :               Vida    :             Vida    :               Vida    :");
             al_draw_text(font5,AZUL,20,640,0,       "Energia :               Energia :             Energia :               Energia :");
-            for(i=0;i<4;i++)
+            for(i=0; i<njogadores; ++i)
             	for(j=0; j< (p[i].energia/5);j++ )
             		al_draw_text(font5,AMARELO,100+200*i+4*j,640,0,"| ");
             //al_draw_textf(font5,VERDE_LIMAO,20,450,0,"%d",fireball[i][j].explosao);
diff --git a/include/colisao.h b/include/colisao.h
index 3bcdcdd76a0eb70650fcdc775b3e3b93f8dcf0e5..439a22cf6e4e6c9d5a9a528eb52d43aab76e9285 100755
--- a/include/colisao.h
+++ b/include/colisao.h
@@ -38,9 +38,9 @@ typedef struct Magia {
 
 typedef struct Sprite {
 	//*tiles,*chars,*map,*frente,**neons,**fireballs,*explosion;
-	ALLEGRO_BITMAP *tiles;
-	//ALLEGRO_BITMAP
-	//ALLEGRO_BITMAP
+	ALLEGRO_BITMAP *tiles; // Usado pra coisas dos mapas.
+	ALLEGRO_BITMAP **fireballs, *explosion; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball.
+	ALLEGRO_BITMAP **neons; // Todos os neons (4 cores, na sequencia: amarelo - azul - verde - vermelho)
 	//ALLEGRO_BITMAP
 	//ALLEGRO_BITMAP
 	ALLEGRO_BITMAP *chars;
diff --git a/include/imprime.h b/include/imprime.h
index e237cbb95a0acc271c6d2949bc5da485153749c0..ef3de9a96830d4e295b6a4f0f5261f8f8a956bd4 100755
--- a/include/imprime.h
+++ b/include/imprime.h
@@ -23,4 +23,4 @@
 
 void imprime_char(int cx,int cy,int a,int b,int selx,int sely,Sprite s);
 void imprime_neon(int x,int y,ALLEGRO_BITMAP* neon,bool temneon);
-int imprime_4_chars_for(int cont,char** matriz,ALLEGRO_BITMAP** neons,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s);
+int imprime_4_chars_for(int cont,char** matriz,int *cor,bool *temneon,int njogadores,Pessoa *p,Sprite s);
diff --git a/keys.c b/keys.c
index 6d1df4b0aecacfdb0953fe8c34402ff282e34c66..1e716e1c8bb3db5893058e9c32c9e1f5228dfa50 100644
--- a/keys.c
+++ b/keys.c
@@ -67,28 +67,18 @@ void keyboard_down(int evkeyboardkeycode,bool *puxa,int *tlep,Magia (*fireball)[
 	for(int i=0; i<4; ++i) {
 		if(p[i].comp==0) {
 			if(evkeyboardkeycode == p[i].botao_char_int[0]) {
-				//andou_c[i] = 1;
 				p[i].andou_c = 1;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[1]) {
-				//andou_b[i] = 1;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[1]) {
 				p[i].andou_b = 1;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[2]) {
-				//andou_d[i] = 1;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[2]) {
 				p[i].andou_d = 1;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[3]) {
-				//andou_e[i] = 1;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[3]) {
 				p[i].andou_e = 1;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[4]) {
+			} else if(evkeyboardkeycode == p[i].botao_char_int[4]) {
 				p[i].correr = 2;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[5]) {
+			} else if(evkeyboardkeycode == p[i].botao_char_int[5]) {
 				puxa[i] = true;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[6]) {
+			} else if(evkeyboardkeycode == p[i].botao_char_int[6]) {
 				tlep[i] = 1;
 			}
 		}
@@ -121,22 +111,14 @@ void keyboard_up(int evkeyboardkeycode,bool *puxa,bool *sair, Pessoa *p)
 	for(int i=0; i<4; ++i) {
 		if(p[i].comp == 0) {
 			if(evkeyboardkeycode == p[i].botao_char_int[0]) {
-				//andou_c[i] = 0;
 				p[i].andou_c = 0;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[1]) {
-				//andou_b[i] = 0;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[1]) {
 				p[i].andou_b = 0;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[2]) {
-				//andou_d[i] = 0;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[2]) {
 				p[i].andou_d = 0;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[3]) {
-				//andou_e[i] = 0;
+			} else if(evkeyboardkeycode == p[i].botao_char_int[3]) {
 				p[i].andou_e = 0;
-			}
-			if(evkeyboardkeycode == p[i].botao_char_int[4]) {
+			} else if(evkeyboardkeycode == p[i].botao_char_int[4]) {
 				p[i].correr = 1;
 			}
 		}
diff --git a/lib/Fase1.h b/lib/Fase1.h
index cb6979b35026640e799b4406bf57a18e46703573..857a1347883e79c32539b2b683d72ad3c30dd8cd 100755
--- a/lib/Fase1.h
+++ b/lib/Fase1.h
@@ -1,13 +1,24 @@
-void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool redraw,ALLEGRO_BITMAP *map,int cont,int i,int j,bool *temneon,ALLEGRO_BITMAP **neons,int cor[4],ALLEGRO_BITMAP *frente,ALLEGRO_FONT *font5,ALLEGRO_BITMAP **fireballs,int explox[4][2],int exploy[4][2],ALLEGRO_BITMAP* explosion,Pessoa *p,Sprite s)
+void fase1(Window win,Magia fireball[4][2],ALLEGRO_FONT *font5,int explox[4][2],int exploy[4][2],Pessoa *p,Sprite s)
 {
 	char** matriz;
-	//ALLEGRO_BITMAP *tiles;
 	int mapsize,xtile[TAM],ytile[TAM],xcorte[TAM],ycorte[TAM], njogadores = 4;
 	FILE *mapa,*errext;
+	ALLEGRO_BITMAP *map, *frente;
+	int i,j,k,cont = 0,*tlep,*cor;
+	bool redraw = false, sair = false, *puxa, *temneon;
+
+	puxa = (bool *) malloc(sizeof(bool) * njogadores);
+	temneon = (bool *) malloc(sizeof(bool) * njogadores);
+	tlep = (int *) malloc(sizeof(int) * njogadores);
+	cor = (int *) malloc(sizeof(int) * njogadores);
 
 	for(i=0; i<njogadores; ++i) {
 		p[i].x = 100 + 50*i;
 		p[i].y = 200;
+		puxa[i] = false;
+		temneon[i] = true;
+		tlep[i] = 0;
+		cor[i] = i+1;
 	}
 
 	errext = fopen("err.txt","w");
@@ -18,27 +29,16 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
     	fclose(errext);
     	exit(1);
     }
-/*
-    tiles = al_load_bitmap("Imgs/tiles.bmp");
-    if(!tiles) {
-	   	fprintf(errext,"Falha ao abrir a imagem tiles.");
-	   	fclose(errext);
-	   	exit(1);
-	}
-*/
+
     fscanf(mapa,"%i\n",&mapsize);
     for(i=0;i<mapsize+1;i++)
         fscanf(mapa,"%i %i %i %i\n",&xtile[i],&ytile[i],&xcorte[i],&ycorte[i]);
 
-	//al_convert_mask_to_alpha(tiles,al_map_rgb(255,0,255));
-
     map = cria_mapa(win,mapa,mapsize,xtile,ytile,xcorte,ycorte,s);
     frente = cria_frente(win,mapa,mapsize,xcorte,ycorte,xtile,ytile,s); // Obs: Confundi dentro da fun�ao, entao to passando invertido aqui. EH PROPOSITAL!
 
 	matriz = le_matriz(fopen("Fases/F1/matriz.txt","r"));
 
-    puts("Inicializando o jogo...");
-
 	al_flush_event_queue(win.event_queue);
 	while (!sair) /* Pra sair, botoes como Esc, o X ali em cima direita,... transformam a variavel sair de false pra true, dai sai do while. */
     {
@@ -64,35 +64,32 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			al_draw_bitmap(map,0,0,0);
 
 			cont++;
-			for(i=0; i<4; i++) // Faz parar de correr quando a energia acaba.
+			for(i=0; i<njogadores; i++) // Faz parar de correr quando a energia acaba.
 				if(p[i].energia <= 0)
 					p[i].correr = 1;
 
-			//usa_magias(andou_b,andou_c,andou_d,andou_e,cx,cy,fireball)
-
 			flash(p,tlep,matriz);
 
 			usa_magias(matriz,fireball,p);
 
-			for(int h=0;h<4;h++) {
+			for(k=0;k<njogadores;k++) {
 				for(j=0;j<2;j++) {
-					if(fireball[h][j].ativa == true) {
-						al_draw_bitmap(fireballs[fireball[h][j].d],fireball[h][j].x,fireball[h][j].y,0);
-						//al_rest(4);
+					if(fireball[k][j].ativa == true) {
+						al_draw_bitmap(s.fireballs[fireball[k][j].d],fireball[k][j].x,fireball[k][j].y,0);
 					}
-					if(fireball[h][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
+					if(fireball[k][j].explosao == true) { // Enquanto explox = 288 e exploy = 224, ele nao immprime a explosao.
 									// Entao o esquema eh zerar eles e dai o programa come�a a contagem e a impressao.
-						explox[h][j] = exploy[i][j] = 0;
-						fireball[h][j].explosao = false;
+						explox[k][j] = exploy[i][j] = 0;
+						fireball[k][j].explosao = false;
 						//contalinhaexplo = 0;
 					}
-					if(explox[h][j] < 280 && exploy[h][j] < 220) { // Imprime a explosao.
-						al_draw_bitmap_region(explosion,explox[h][j],exploy[h][j],32,32,fireball[h][j].x,fireball[h][j].y,0);
-						explox[h][j] += 32;
-						if(explox[h][j] >= 288) {
-							exploy[h][j] += 32;
-							if(exploy[h][j] < 224)
-								explox[h][j] = 0;
+					if(explox[k][j] < 280 && exploy[k][j] < 220) { // Imprime a explosao.
+						al_draw_bitmap_region(s.explosion,explox[k][j],exploy[k][j],32,32,fireball[k][j].x,fireball[k][j].y,0);
+						explox[k][j] += 32;
+						if(explox[k][j] >= 288) {
+							exploy[k][j] += 32;
+							if(exploy[k][j] < 224)
+								explox[k][j] = 0;
 						}
 					}
 				}
@@ -103,13 +100,13 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
 			for(i=0;i<4;i++) // Pra nao contar como se estivesse sempre tentando puxar.
 				puxa[i] = false;
 
-            imprime_4_chars_for(cont,matriz,neons,cor,temneon,njogadores,p,s);
+            imprime_4_chars_for(cont,matriz,cor,temneon,njogadores,p,s);
 
             IA(p);
 
-            if(cont==CONT)
-          		cont=0;
-          	for(i=0;i<4;i++)
+            if(cont == CONT)
+          		cont = 0;
+          	for(i=0; i<njogadores; ++i)
           		if(p[i].energia < 100)
 					p[i].energia++;
 
@@ -120,7 +117,7 @@ void fase1(Window win,bool sair,bool *puxa,int *tlep,Magia fireball[4][2],bool r
             al_draw_text(font5,VERDE_LIMAO,20,600,0,"Player 1:               Player 2:             Player 3:               Player 4:");
             al_draw_text(font5,VERMELHO,20,620,0,   "Vida    :               Vida    :             Vida    :               Vida    :");
             al_draw_text(font5,AZUL,20,640,0,       "Energia :               Energia :             Energia :               Energia :");
-            for(i=0;i<4;i++)
+            for(i=0; i<njogadores; ++i)
             	for(j=0; j< (p[i].energia/5);j++ )
             		al_draw_text(font5,AMARELO,100+200*i+4*j,640,0,"| ");
             //al_draw_textf(font5,VERDE_LIMAO,20,450,0,"%d",fireball[i][j].explosao);
diff --git a/lib/libcolisao.a b/lib/libcolisao.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libcolisao.a and b/lib/libcolisao.a differ
diff --git a/lib/libgrafico.a b/lib/libgrafico.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libgrafico.a and b/lib/libgrafico.a differ
diff --git a/lib/libia.a b/lib/libia.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libia.a and b/lib/libia.a differ
diff --git a/lib/libimprime.a b/lib/libimprime.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libimprime.a and b/lib/libimprime.a differ
diff --git a/lib/libkeys.a b/lib/libkeys.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libkeys.a and b/lib/libkeys.a differ
diff --git a/lib/libmagia.a b/lib/libmagia.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libmagia.a and b/lib/libmagia.a differ
diff --git a/lib/libmap.a b/lib/libmap.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libmap.a and b/lib/libmap.a differ
diff --git a/lib/libneon.a b/lib/libneon.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100755
Binary files a/lib/libneon.a and b/lib/libneon.a differ
diff --git a/libcolisao.a b/libcolisao.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libcolisao.a and b/libcolisao.a differ
diff --git a/libgrafico.a b/libgrafico.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libgrafico.a and b/libgrafico.a differ
diff --git a/libia.a b/libia.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libia.a and b/libia.a differ
diff --git a/libimprime.a b/libimprime.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libimprime.a and b/libimprime.a differ
diff --git a/libkeys.a b/libkeys.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libkeys.a and b/libkeys.a differ
diff --git a/libmagia.a b/libmagia.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libmagia.a and b/libmagia.a differ
diff --git a/libmap.a b/libmap.a
index 5ba9199c4b9057cd13d94efd0dc4f5dc62bf4abc..a0b0e640de6c3c4a2f6c9f0b8d9bd19a069cb571 100644
Binary files a/libmap.a and b/libmap.a differ
diff --git a/neon.c b/neon.c
index cc577908ef373d9a5faa596124d03955def7c7a5..75498915eb4fd1c7d485454d77551a7b123d1e7a 100644
--- a/neon.c
+++ b/neon.c
@@ -11,14 +11,14 @@
 int main()
 {
     /* Coisas relacionadas aos chars */
-    int cont=0,i,j,x,y;
+    int i,j,x,y;
     /* Coisas relacioinadas ao mapa */
 	int mapsize,xtile[TAM],ytile[TAM],xcorte[TAM],ycorte[TAM];
     /* Coisas relacionadas aos neons */
 	//int xneon[NJOGADORES],yneon[NJOGADORES],direcao=0,cor[4]={1,2,3,4};
-	int direcao=0,cor[4]={1,2,3,4};
+	int direcao = 0;
 	/* Coisas relacionadas as tecnicas/magias */
-	int tlep[4]={0,0,0,0},explox[4][2],exploy[4][2];
+	int explox[4][2],exploy[4][2];
 	/* Pessoas, que contem quase todos os dados (ver colisao.h) */
 	Pessoa *p;
 
@@ -36,7 +36,6 @@ int main()
 
 	Window win;
     FILE *mapa,*errext; // errext = error exit (ou saida de erros)
-    bool sair = false,redraw = false,puxa[4]={false,false,false,false},temneon[4]={true,true,true,true};
     /* Magias */
 	Magia fireball[4][2];
 
@@ -44,7 +43,6 @@ int main()
     //ALLEGRO_FONT *font;
 	//font5 = al_load_font("Fonts/fixed_font.tga", 0, 0);
     //ALLEGRO_BITMAP *tiles,*chars,*map,*frente,**neons,**fireballs,*explosion;
-	ALLEGRO_BITMAP *map,*frente,**neons,**fireballs,*explosion;
 	Sprite s;
 
 	/* Inicializacao dos arquivos. */
@@ -62,11 +60,11 @@ int main()
     //	fprintf(errext,"Falha ao abrir a imagem tiles.");fclose(errext);exit(1); }
 
     /* Inicializacao dos Bitmaps */
-	neons = (ALLEGRO_BITMAP**) malloc(4*sizeof(ALLEGRO_BITMAP*));
-	fireballs = (ALLEGRO_BITMAP**) malloc(4*sizeof(ALLEGRO_BITMAP*));
+	s.neons = (ALLEGRO_BITMAP**) malloc(4*sizeof(ALLEGRO_BITMAP*));
+	s.fireballs = (ALLEGRO_BITMAP**) malloc(4*sizeof(ALLEGRO_BITMAP*));
 
     s.chars = al_load_bitmap("Imgs/chars.bmp"); // Obs: Cada imagem de cada char eh 32x32
-    if(!s.chars) {
+    if(!(s.chars)) {
     	fprintf(errext,"Falha ao abrir a imagem chars.");
     	fclose(errext);
     	exit(1);
@@ -79,65 +77,65 @@ int main()
 	   	exit(1);
 	}
 
-    explosion = al_load_bitmap("Imgs/Explo.bmp");
-    if(!explosion) {
+    s.explosion = al_load_bitmap("Imgs/Explo.bmp");
+    if(!(s.explosion)) {
     	fprintf(errext,"Falha ao abrir a imagem explo.");
     	fclose(errext);
     	exit(1);
     }
 
-	neons[0] = al_load_bitmap("Imgs/neonamarelo.bmp");
-    if(!neons[0]) {
-    	fprintf(errext,"Falha ao abrir a imagem neons[0].");
+	s.neons[0] = al_load_bitmap("Imgs/neonamarelo.bmp");
+    if(!s.neons[0]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.neons[0].");
     	fclose(errext);
     	exit(1);
     }
 
-	neons[1] = al_load_bitmap("Imgs/neonazul.bmp");
-    if(!neons[1]) {
-    	fprintf(errext,"Falha ao abrir a imagem neons[1].");
+	s.neons[1] = al_load_bitmap("Imgs/neonazul.bmp");
+    if(!s.neons[1]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.neons[1].");
     	fclose(errext);
     	exit(1);
     }
 
-	neons[2] = al_load_bitmap("Imgs/neonverde.bmp");
-    if(!neons[2]) {
-    	fprintf(errext,"Falha ao abrir a imagem neons[2].");
+	s.neons[2] = al_load_bitmap("Imgs/neonverde.bmp");
+    if(!s.neons[2]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.neons[2].");
     	fclose(errext);
     	exit(1);
     }
 
-	neons[3] = al_load_bitmap("Imgs/neonvermelho.bmp");
-    if(!neons[3]) {
-    	fprintf(errext,"Falha ao abrir a imagem neons[3].");
+	s.neons[3] = al_load_bitmap("Imgs/neonvermelho.bmp");
+    if(!s.neons[3]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.neons[3].");
     	fclose(errext);
     	exit(1);
     }
 
-	fireballs[0] = al_load_bitmap("Imgs/Fireballc.bmp");
-    if(!fireballs[0]) {
-    	fprintf(errext,"Falha ao abrir a imagem fireballs[0].");
+	s.fireballs[0] = al_load_bitmap("Imgs/Fireballc.bmp");
+    if(!s.fireballs[0]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.fireballs[0].");
     	fclose(errext);
     	exit(1);
     }
 
-	fireballs[1] = al_load_bitmap("Imgs/Fireballd.bmp");
-    if(!fireballs[1]) {
-    	fprintf(errext,"Falha ao abrir a imagem fireballs[1].");
+	s.fireballs[1] = al_load_bitmap("Imgs/Fireballd.bmp");
+    if(!s.fireballs[1]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.fireballs[1].");
     	fclose(errext);
     	exit(1);
     }
 
-	fireballs[2] = al_load_bitmap("Imgs/Fireballe.bmp");
-    if(!fireballs[2]) {
-    	fprintf(errext,"Falha ao abrir a imagem fireballs[2].");
+	s.fireballs[2] = al_load_bitmap("Imgs/Fireballe.bmp");
+    if(!s.fireballs[2]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.fireballs[2].");
     	fclose(errext);
     	exit(1);
     }
 
-	fireballs[3] = al_load_bitmap("Imgs/Fireballb.bmp");
-    if(!fireballs[3]) {
-    	fprintf(errext,"Falha ao abrir a imagem fireballs[3].");
+	s.fireballs[3] = al_load_bitmap("Imgs/Fireballb.bmp");
+    if(!s.fireballs[3]) {
+    	fprintf(errext,"Falha ao abrir a imagem s.fireballs[3].");
     	fclose(errext);
     	exit(1);
     }
@@ -157,22 +155,14 @@ int main()
 
 	al_convert_mask_to_alpha(s.tiles,al_map_rgb(255,0,255));
 	al_convert_mask_to_alpha(s.chars,al_map_rgb(255,0,255));
-	al_convert_mask_to_alpha(explosion,al_map_rgb(255,0,255));
+	al_convert_mask_to_alpha(s.explosion,al_map_rgb(255,0,255));
 	for(i=0;i<4;i++) {
-		al_convert_mask_to_alpha(neons[i],al_map_rgb(255,0,255));
-		al_convert_mask_to_alpha(fireballs[i],al_map_rgb(255,0,255));
+		al_convert_mask_to_alpha(s.neons[i],al_map_rgb(255,0,255));
+		al_convert_mask_to_alpha(s.fireballs[i],al_map_rgb(255,0,255));
 	}
-	/* Carrega o mapa */
-
-    //fscanf(mapa,"%i\n",&mapsize);
-    //for(int i=0;i<mapsize+1;i++)
-     //   fscanf(mapa,"%i %i %i %i\n",&xtile[i],&ytile[i],&xcorte[i],&ycorte[i]);
-
 
     al_register_event_source(win.event_queue, al_get_display_event_source(win.display));
-
-    //matriz = le_matriz(fopen("matriz.txt","r"));
-
+/* Tentativa de otimizar - se o proximo 'for' nao for equivalente a esse, deu errado!
 	for(i=0; i<4; ++i) {
         p[i].botao_char[0]=(char*) malloc(30*sizeof(char)); sprintf(p[i].botao_char[0],"%c",98);
 		if(!p[i].botao_char[0]) {
@@ -208,6 +198,32 @@ int main()
 		}
 		p[i].time = 1;
 	}
+*/
+	for(i=0; i<4; ++i) {
+		for(j=0; j<7; ++j) {
+			p[i].botao_char[j] = (char*) malloc(30 * sizeof(char));
+			if(!(p[i].botao_char[j])) {
+				fprintf(errext,"Falha ao alocar memoria para p[%d].botao_char[%d]",i,j);
+				fclose(errext);
+				exit(1);
+			}
+		}
+		sprintf(p[i].botao_char[0],"%c",98);
+		sprintf(p[i].botao_char[1],"%c",99);
+		sprintf(p[i].botao_char[2],"%c",100);
+		sprintf(p[i].botao_char[3],"%c",101);
+		sprintf(p[0].botao_char[4],"%c",97);
+		sprintf(p[0].botao_char[5],"%c",97);
+		sprintf(p[0].botao_char[6],"%c",97);
+		p[i].nome = (char*) malloc(30*sizeof(char));
+		if(!p[i].nome) {
+			fprintf(errext,"Falha ao alocar memoria para p[%d].nome",i);
+			fclose(errext);
+			exit(1);
+		}
+		sprintf(p[i].nome,"player %d",i+1);
+		p[i].time = 1;
+	}
 
 	//teclas_iniciais();
 
@@ -228,11 +244,9 @@ int main()
 	fclose(cmd);
 	fclose(errext);
 
-	puts("Inicializacoes completas!");
-
     /* Opera o jogo */
 	if(abremenu(win,p,s)==1) {
-		fase1(win,sair,puxa,tlep,fireball,redraw,map,cont,i,j,temneon,neons,cor,frente,font5,fireballs,explox,exploy,explosion,p,s);
+		fase1(win,fireball,font5,explox,exploy,p,s);
 	}
 	graphdeinit(win);
 	exit(1);