//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//						  PROCESOS DE CONTROL DEL MENU
//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

process menu();
private
	x_sel[1];y_sel[1]; // donde estaba el cursor
	personaje_actual;  // personaje seleccionado

	tama;
	conta;

begin
  //gráfico del menu y caras de los personajes
	grafico_menu(1);
	caras_personajes();
	
	file=fpg_menu;
	graph=2;
	X=576;Y=65;
	loop
		if(key(t_abajo))
			switch (en_menu)
			 case 0;		   //Si estamos eligiendo opcion
				if (y<260)y+=37;sonido(1);end
			 end
			 case 1;		  //Si estamos eligiendo personaje
				if (y<441)y+=64;sonido(1);end
			 end
			end

			while(key(t_abajo))frame;end
		end

		if(key(t_arriba))
			switch (en_menu)
			 case 0;		   //Si estamos eligiendo opcion
				if(y>65)y-=37;sonido(1);end
			 end
			 case 1;		  //Si estamos eligiendo personaje
				if(y>377)y-=64;sonido(1);end
			 end
			end

			while(key(t_arriba))frame;end
		end

	  //Control de la tecla intro en el menu
		if(key(t_aceptar))
			while(key(t_aceptar))frame;end
			switch (en_menu)	
				case 0;	//si estamos en el menu de opciones

					 switch (y) //para las opciones que no nocesitan personaje
					   case 65:
					   		//objetos
							p_objetos();
							sonido(2);
							y_sel=0;
							en_menu=3;
					   end
					   case 250:
							//orden();
							sonido(2);
							y_sel=0;
							en_menu=2;
					   end
					   case 287:
							//guardar_juego()
							sonido(2);
							y_sel=0;
							en_menu=2;
					   end
					   DEFAULT:
							y_sel=y;
							x_sel=x;
							x=520;y=377;
							sonido(1);
							en_menu=1;
					   end
					 end
				end
				case 1;		 //si estamos eligiendo personaje
				  //comprobamos el personaje que estamos eligiendo
					switch (x)
					 case 520;
						if (y==377)personaje_actual=0;end
						if (y>400) personaje_actual=3;end
					 end
					 case 570;
						if (y==377)personaje_actual=1;end
						if (y>400) personaje_actual=4;end
					 end
					 case 620;
						if (y==377)personaje_actual=2;end
						if (y>400) personaje_actual=5;end
					 end
					end

				  //si tenemos el personaje mostramos la pantalla
					if (personaje[personaje_actual].lo_tengo==True)
						sonido(2);
						switch (y_sel)
						case 102;
							p_armas(personaje_actual);  //Armas
						end
						case 139;
							p_magias(personaje_actual); //Magias
						end
						case 176;
							p_invoc(personaje_actual);	//invoc. del personaje actual
						end
						case 213;
							p_estado(personaje_actual);
						end
						end

						sonido(2);
						while(son.size<>100)frame;end //hasta que no sea del atama¤o el menu, interrumpimos la cachimba esa
						en_menu=2;
					else
						sonido(3);
					end
				end
			end
		end  // fin de la tecla aceptar

		//Control de la tecla supr en el menu
		if(key(t_cancelar))
			sonido(1);
			switch (en_menu)
				case 0;  // Si estamos eligiendo opcion
				  //matamos a los procesos y volveos al juego
				  //  clear_screen();
					SIGNAL(father.father,s_wakeup);
					SIGNAL(father,s_wakeup);
					SIGNAL(id,s_kill_tree);
				end
				case 1; // Si estamos eligiendo personaje
					y=y_sel;x=x_sel;	  //volvemos al menu
					en_menu=0;
				end
				case 2; // Si estamos en alguna de las pantallas
					if (cargado==true)
					  //borramos el texto, los procesos huerfanos y demás
						delete_text(all_text);
						SIGNAL(id_apoyo[0],s_kill);
						SIGNAL(id_apoyo[1],s_kill);
						SIGNAL(id_apoyo[2],s_kill);
						SIGNAL(id_apoyo[3],s_kill);
						SIGNAL(id_apoyo[4],s_kill);
						SIGNAL(id_apoyo[5],s_kill);
						SIGNAL(TYPE pon_cara,s_kill);   
						while(son.son<>0)
							SIGNAL(son.son,s_kill_tree); //matamos a la familia entera del proceso creado junto con el padre
							frame;
						end

						FROM tama=0 TO 9;
							son.size-=10;
							frame;
						end

						SIGNAL(son,s_kill);
					  //comprobamos si venimos de una pantalla con cara
						if(y_sel<>0)
						   en_menu=1;
						else
						   en_menu=0;
						end
						cargado=false;
					end
				end
			end
			while(key(t_cancelar))frame;end
		end  //Fin de la tecla cancelar

		if(key(t_derecha) && en_menu==1 && x<590)
			sonido(1);
			x+=50;
			while(key(t_derecha))frame;end
		end

		if(key(t_izquierda) && en_menu==1 && x>541)
			sonido(1);
			x-=50;
			while(key(t_izquierda))frame;end
		end
		frame;
	end
end

process grafico_menu(grafico);
private
	tama;
begin
	z=1;
	file = fpg_menu;
	graph = grafico;
	x=640;y=0;
	
	loop frame;end
end

process caras_personajes();
private
	conta;
	word coordenadas[1];
begin
	file=fpg_caras;
	size=90;

	for (conta=0;conta<=5;conta++) // asignamos la x y la y para pintar
		if(conta<=2)
			coordenadas[0]=24+54*conta;coordenadas[1]=24;
		else
			coordenadas[0]=24+54*(conta-3);coordenadas[1]=88;
		end

	   //ponemos el gráfico según corresponda
		if (personaje[conta].lo_tengo==true)
			map_put(file,g_caras,conta+1,coordenadas[0],coordenadas[1]);
		else
			map_put(file,g_caras,conta+7,coordenadas[0],coordenadas[1]);
		end
	end

	graph=g_caras;x=560;y=392;
	loop frame;end
end

//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//		   PROCESOS DE CONTROL DE PANTALLAS DEL SISTEMA DE MENUS
//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//  ----------------------------------------------------------------------
//							 PANTALLA OBJETOS
//  ----------------------------------------------------------------------

process p_objetos();
private
	tama;
	
begin
	file=fpg_menu;
	graph=9;
	y=240;x=226;
	
  //definimos las regiones
	region_lst_p_obj[0]=define_region(2,27,103,215,330);
	region_lst_p_obj[1]=define_region(3,310,103,215,330);
   /* region_lst_p_obj[2]=define_region(4,27,291,256,131);
	region_lst_p_obj[3]=define_region(5,310,291,256,131);
	region_lst_p_obj[4]=define_region(6,27,463,256,131);
	region_lst_p_obj[5]=define_region(7,310,463,256,131);*/
  
  //efecto gráfico
	size=0;
	FROM tama=0 TO 9;
		size+=10;
		frame;
	end

  //creamos las listas de los objetos
	id_apoyo[0]=crea_lista_objetos(_OATAQUE,27,110);
	id_apoyo[1]=crea_lista_objetos(_OMEJORA,240,110);
   // id_apoyo[2]=crea_lista_objetos(_OMAGICOS,27,291);
   // id_apoyo[3]=crea_lista_objetos(_OMEJORA,310,291);
   // id_apoyo[4]=crea_lista_objetos(_OCLAVE,27,463);
   // id_apoyo[5]=crea_lista_objetos(_OOTROS,310,463);

  //pasamos a controlar la flechita con la pantalla objetos
	controla_p_objetos();
	
	cargado=true;
	loop frame;end
end

process controla_p_objetos();
private
	conta;
	_sección=0;y_sel[1]=127,127;x_sel;
	conta_lst_obj[1];
	
begin
	 file=fpg_menu;
	 graph=2;flags=1;x=20;y=90;z=-1;
	 loop
		 if(scan_code==t_cancelar && _sección<2)en_menu=2;break;end
		 switch(_sección)
			 case 0:  //si estamos en ataque/magias/curas
				 if(scan_code==t_derecha)x+=400;flags=0;_sección=1;end
				 if(scan_code==t_aceptar)
					 if(obj_tot[0]>0)
						 x_sel=x;
						 x=22;y=y_sel[0];	
						 _sección=2;
						 sonido(1);
					 else
						 sonido(3);
					 end
				 end
			 end

			 case 1:  //si estamos en claves/otros/mejora
				 if(scan_code==t_izquierda)x-=400;flags=1;_sección=0;end
				 if(scan_code==t_aceptar)
					 if(obj_tot[1]>0)
						 flags=1;
						 x_sel=x;
						 x=242;y=y_sel[1];
						 _sección=3;
						 sonido(1);
					 else
						 sonido(3);
					 end
				 end
			 end
			 
			 DEFAULT: //si estamos en cualquier otra parte
				 en_menu=3;
				 switch(scan_code)
				   case t_arriba:
					   if(y==127 && conta_lst_obj[_sección-2]>0)
						   id_apoyo[_sección-2].y+=32;
						   conta_lst_obj[_sección-2]-=1;
					   else
						   if(conta_lst_obj[_sección-2]>0)
							   y-=32;
							   conta_lst_obj[_sección-2]-=1;
						   end
					   end
				   end
				   
				   case t_abajo:
					   if(y==415 &&
						 conta_lst_obj[_sección-2]<obj_tot[_sección-2]-1)
						   id_apoyo[_sección-2].y-=32;
						   conta_lst_obj[_sección-2]+=1;
					   else
						   if(conta_lst_obj[_sección-2]<obj_tot[_sección-2]-1)
							   y+=32;
							   conta_lst_obj[_sección-2]+=1;
						   end
					   end
				   end
				   case t_cancelar:
					   if(_sección)flags=0;else flags=1;end	   
					   y_sel[_sección-2]=y;
					   x=x_sel;y=90;
					   _sección-=2;
					   en_menu=3;
				   end
				 end
			 end
		 end

		 while(scan_code<>0)frame;end;
	 frame;
	 end
	
end

process crea_lista_objetos(tipo,x,y);
private
	conta;
	mi_texto;
	int a;
	
begin
	priority=1000;
	file=fpg_ranuras;
	z=0;
	a=tipo/3;
	obj_tot[a]=0; //Hacemos un calculo para ajustar de 6 a 2
	
  //descargamos el mapa anterior
	if(g_lista_p_objetos[tipo]>-1)unload_map(0,g_lista_p_objetos[tipo]);end


  //vaciamos la lista de apoyo
	for(conta=0;conta<c_n_objetos;conta++)
		apoyo_obj[tipo][conta]=0;
	end

  //rellenamos la lista según convenga
	for(conta=1;conta<=(c_n_objetos*6);conta++)
		if(objetos[conta].lo_tengo==true && (objetos[conta].tipo==tipo || 
		   (objetos[conta].tipo==tipo+1) || (objetos[conta].tipo==tipo+2)))
		   
			apoyo_obj[tipo][obj_tot[a]]=conta;
			obj_tot[a]+=1;
		end
	end

  //creamos un nuevo mapa a medida  
	g_lista_p_objetos[tipo]=new_map(210,obj_tot[a]*32,16);
	set_point(0,g_lista_p_objetos[tipo],0,0,0);

  //escribimos el texto y ponemos el grafiquito
	for(conta=0;conta<obj_tot[a];conta++)
		map_put(file,g_lista_p_objetos[tipo],objetos[apoyo_obj[tipo][conta]].tipo+4,14,13+conta*32);
		mi_texto=write_in_map
					(fuente_textos,objetos[apoyo_obj[tipo][conta]].nombre,0);
		map_put(0,g_lista_p_objetos[tipo],mi_texto,30,5+conta*32);
		unload_map(0,mi_texto);
	end

	region=region_lst_p_obj[tipo];graph=g_lista_p_objetos[tipo];

	loop frame;end	
end

//  ----------------------------------------------------------------------
//						   FIN PANTALLA OBJETOS
//  ----------------------------------------------------------------------


//  ----------------------------------------------------------------------
//							 PANTALLA ESTADO
//  ----------------------------------------------------------------------

process p_estado(perso); //pantalla estado
private
	tama;

begin
	file=fpg_menu;
	graph=5;
	y=240;x=226;//z=-250;

  //efecto gráfico
	size=0;
	FROM tama=0 TO 9;
		size+=10;
		frame;
	end
	
  //Escribimos las cosas
	pon_cara(perso+1,75,86);
	write(1,150,170,0,personaje[perso].nombre);
	write_int(2,150,203,0,OFFSET personaje[perso].pv);
	write_int(2,150,236,0,OFFSET personaje[perso].pv_totales);
	write_int(2,150,270,0,OFFSET personaje[perso].pm);
	write_int(2,150,302,0,OFFSET personaje[perso].pm_totales);
	write_int(2,375,171,0,OFFSET personaje[perso].fuerza);
	write_int(2,375,203,0,OFFSET personaje[perso].resistencia);
	write_int(2,375,236,0,OFFSET personaje[perso].velocidad);


	cargado = true;

	loop frame;end
end

//  ----------------------------------------------------------------------
//							 FIN PANTALLA ESTADO
//  ----------------------------------------------------------------------


//  ----------------------------------------------------------------------
//							 PANTALLA ARMAS
//  ----------------------------------------------------------------------
process p_armas(perso); //control de las armas en el menu
private
	tama;
begin
	file=fpg_menu;
	graph=6;
	y=240;x=226;

  //creamos las regiones
	region_lst_p_armas = define_region(2,7,188,195,150); //brazaletes y armas
	region_lst_p_armas[1] = define_region(3,230,180,279,290); //magias

  //un efecto gráfico
	size=0;
	FROM tama=0 TO 9;
		size+=10;
		frame;
	end

  //escribimos las cosas
	pon_cara(perso+1,75,86);
	write (1,197,60,0,armas[personaje[perso].ident_arma[0]].nombre);
	write (1,197,110,0,brazaletes[personaje[perso].ident_arma[1]].nombre);
		 
  //ponemos las ranuras
	pon_ranuras(perso,0);pon_ranuras(perso,1);

  //pasamos a controlar la flechita con los nuevos procesos
	en_menu = 3;
	controla_pantalla_arma(perso);

	cargado=true;
	loop frame;end
end

process controla_pantalla_arma(perso);   //con este controlamos el input
private
	conta;
	byte _sección=0;//sección del menu armas estamos (similar a en_menu)
				/*
				0 = encima del arma
				1 = encima del brazalete
				2 = en las ranuras del arma
				3 = en las ranuras del brazalete
				4 = en la seleccion del arma
				5 = en la selecciÓn del brazalete
				6 = en la selecciÓn de las magias
				*/

	byte arma_sel;brazalete_sel;
	byte ranura_sel=0;   //nº de la ranura sel. al pulsar intro en ranuras

	byte conta_lst_armas;	   // veces que nos hemos movido
	byte conta_lst_brazaletes; //lo mismo pero para los brazaletes
	conta_lst_magias; //lo mismo pero para las magias, -1 es la posiciÓn de vaciar
	conta_lst_invoc;  //lo mismo

	text_prop[]=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1; //el texto de las propiedades

begin
	file = fpg_menu;
	graph= 2;x=187;y=75;flags=1;z=-5;

	arma_sel = personaje[perso].ident_arma[0];  // arma actual
	brazalete_sel = personaje[perso].ident_arma[1]; //brazalte actual

	loop
		switch(_secciÓn)
		case 0: //Si estamos encima del nombre del arma
			if(scan_code==t_aceptar)
			  //lista de las armas
				crea_lista_armas(perso);while(apoyo[0]==0)frame;end

				x=35;y=203;_secciÓn=4;

			  //escribimos los nombres de las propiedades
				text_prop[0]=write(fuente_textos,31,459,0,"FUE:");
				text_prop[1]=write(fuente_textos,31,459+40,0,"DEF:");
				text_prop[2]=write(fuente_textos,31,459+40*2,0,"SUE:");
				text_prop[3]=write(fuente_textos,125,459,0,"RAP:");
				text_prop[5]=write(fuente_textos,125,459+40,0,"PES:");

			  //escribimos las propiedades

			end

			if(scan_code==t_abajo)y=125;_secciÓn=1;end //al nombre del brazalete
			if(scan_code==t_cancelar)en_menu=2;BREAK;end //al menu principal
			if(scan_code==t_izquierda)sonido(1);x=168;y=103;_secciÓn=2;end  //a ranuras
		end  //fin de si estamos sobre el nombre del arma

		case 1: //si estamos encima del nombre del brazalete
			if(scan_code==t_aceptar)
			   crea_lista_brazaletes(perso);
				x=35;y=203;_secciÓn=5;
			end

			if(scan_code==t_arriba)y=75;_secciÓn=0;end //al nombre del arma
			if(scan_code==t_cancelar)en_menu=2;BREAK;end //menu principal
			if(scan_code==t_izquierda)sonido(1);x=168;y=153;_secciÓn=3;end // a ranuras
		end	 //fin de si estamos sobre el nombre del brazalete

		case 2: //Si estamos encima de las ranuras del arma
			if(scan_code==t_aceptar)
				ranura_sel=(x-128)/40; //nº de ranura seleccionada
				crea_lista_magias(perso,ranura_sel);
				x=238;y=240;_secciÓn=6;
			end

			if(scan_code==t_cancelar)x=187;y=75;_secciÓn=0;end

			if(scan_code==t_derecha)
				if(x<168+(40*(armas[arma_sel].ranuras[0]-1)))x+=40;sonido(1);end
			end

			if(scan_code==t_izquierda)
				if(x>168)x-=40;sonido(1);end
			end
		end //fin de si estamos en las ranuras del arma

		case 3:  //Si estamos encima de las ranuras del brazalete
			if(scan_code==t_aceptar)
				ranura_sel=(x-128)/40; //nº de ranura seleccionada
				crea_lista_invoc(perso,ranura_sel);
				x=238;y=240;_secciÓn=7;
			end

			if(scan_code==t_cancelar)x=187;y=125;_sección=1;end

			if(scan_code==t_derecha)
				if(x<168+(40*(brazaletes[brazalete_sel].ranuras[0]-1)))x+=40;sonido(1);end
			end

			if(scan_code==t_izquierda)
				if(x>168)x-=40;sonido(1);end
			end
		end //fin de si estamos en las ranuras del brazalete

		case 4:  //Si estamos seleccionando armas
					  //escribimos las propiedades 
					  
			if(text_prop[6]==-1)
			text_prop[6]=write(fuente_textos,70,459,0,
				itoa(armas[apoyo[conta_lst_armas]].Fuerza));
			text_prop[7]=write(fuente_textos,70,459+40,0,
				itoa(armas[apoyo[conta_lst_armas]].Defensa));
			text_prop[8]=write(fuente_textos,70,459+80,0,
				itoa(armas[apoyo[conta_lst_armas]].Suerte));
			text_prop[9]=write(fuente_textos,163,459,0,
				itoa(armas[apoyo[conta_lst_armas]].Rapidez));
			text_prop[10]=write(fuente_textos,163,459+40,0,
				itoa(armas[apoyo[conta_lst_armas]].Peso));
			end  
			switch(scan_code)
			 case t_cancelar:
			  //borramos las propiedades
				for(conta=0;conta<11;conta++)if(text_prop[conta]>-1)delete_text(text_prop[conta]);text_prop[conta]=-1;end;end
				conta_lst_armas=0;
			  //borramos la lista de las armas y volvemos al nombre
				SIGNAL(TYPE crea_lista_armas,s_kill);
				x=187;y=75;_secciÓn=0;
			 end

			 case t_abajo:
			   //borramos las propiedades
				for(conta=6;conta<11;conta++)if(text_prop[conta]>-1)delete_text(text_prop[conta]);text_prop[conta]=-1;end;end
 
			  //si estamos en la 5ª arma y hay más movemos el gráfico
				if(y==203+32*4 && conta_lst_armas+1<armas_tot)
					get_id(TYPE crea_lista_armas).y-=32;
					conta_lst_armas++;
				end

				if(y<203+32*4 && conta_lst_armas+1<armas_tot)y+=32;conta_lst_armas++;end
			 end

			 case t_arriba:
			   //borramos las propiedades
				for(conta=6;conta<11;conta++)if(text_prop[conta]>-1)delete_text(text_prop[conta]);text_prop[conta]=-1;end;end
 
			  //si estamos en la 1º arma y hay más movemos el gráfico
				if(y==203 && conta_lst_armas>0)
					get_id(TYPE crea_lista_armas).y+=32; //movemos el gr fico de la lista para bajo
					conta_lst_armas--; //decrementamos el contador de las armas
				end

				if(y>203)y-=32;conta_lst_armas--;end
			 end

			 case t_aceptar:
			  //si el arma que hemos seleccionado no es la seleccionada
				if(arma_sel!=apoyo[conta_lst_armas])
					sonido(2);
					traspasa_magias(apoyo[conta_lst_armas],arma_sel);
					delete_text(all_text);
						
					SIGNAL(TYPE pon_ranuras,s_kill); //matamos las ranuras
										
					arma_sel=apoyo[conta_lst_armas];	 //|
					personaje[perso].ident_arma[0]=arma_sel;//| actualizamos datos

					pon_ranuras(perso,0);pon_ranuras(perso,1);
					
				  //escribimos el nombre del arma y del brazalete
					write (1,197,60,0,armas[personaje[perso].ident_arma[0]].nombre);
					write (1,197,110,0,brazaletes[personaje[perso].ident_arma[1]].nombre);
				   
					conta_lst_armas=0;

					SIGNAL(TYPE crea_lista_armas,s_kill);//matamos a la lista

					x=187;y=75;_secciÓn=0;
				else
					sonido(3);
				end
			 end //fin del case t_aceptar
			end  //fin del switch de las teclas
		end  //fin del case 4

		case 5: //si estamos eligiendo brazalete
			switch(scan_code)
			 case t_cancelar:
				conta_lst_brazaletes=0;
				SIGNAL(TYPE crea_lista_brazaletes,s_kill); //borramos la lista
				x=187;y=125;_secciÓn=1;
			 end

			 case t_abajo:
			  //si estamos en el 5ª brazalete y hay más movemos el gráfico
				if(y==203+32*4 && conta_lst_brazaletes+1<brazaletes_tot)
					get_id(TYPE crea_lista_brazaletes).y-=32;
					conta_lst_brazaletes++;
				end

				if(y<203+32*4 && conta_lst_brazaletes+1<brazaletes_tot)y+=32;conta_lst_brazaletes++;end
			 end

			 case t_arriba:
			  //si estamos en el primer brazalete y qudan por arriba movemos el gráfico
				if(y==203 && conta_lst_brazaletes>0)
					get_id(TYPE crea_lista_brazaletes).y+=32;
					conta_lst_brazaletes--;
				end

				if(y>203)y-=32;conta_lst_brazaletes--;end
			end

			case t_aceptar:
			  //si no estamos seleccionado el escudo seleccionado
			   // if(brazalete_sel!=apoyo_braz[conta_lst_brazaletes])
					sonido(2);
					traspasa_invoc(apoyo_braz[conta_lst_brazaletes],brazalete_sel);
					delete_text(all_text);
					
					SIGNAL(TYPE pon_ranuras,s_kill);  //matamos a ranuras
										
					brazaletes[brazalete_sel].num_personaje=0;
					brazalete_sel=apoyo_braz[conta_lst_brazaletes];//|
					personaje[perso].ident_arma[1]=brazalete_sel;  //| actualizamos datos
					brazaletes[brazalete_sel].num_personaje=perso+1;

					pon_ranuras(perso,0);pon_ranuras(perso,1);   //volvemos a poner ranuras

					conta_lst_brazaletes=0;

					SIGNAL(TYPE crea_lista_brazaletes,s_kill); //borramos la lista de los brazaletes

					x=187;y=125;_secciÓn=1;

				  //escribimos el nombre del arma y dle brazalete
					write (1,197,60,0,armas[personaje[perso].ident_arma[0]].nombre);
					write (1,197,110,0,brazaletes[personaje[perso].ident_arma[1]].nombre);
			 //   else
			 //	   sonido(3);
			 //   end
			 end //fin del case de t_aceptar
			end //fin del switch
		end //fin de si seleccionamos brazaletes

		case 6: //Si estamos seleccionando magias
			switch(scan_code)
			 case t_cancelar:
			  //borramos la lista de las magias
				SIGNAL(TYPE crea_lista_magias,s_kill);

				conta_lst_magias=0;
				x=168+(ranura_sel-1)*40;y=103;_secciÓn=2;
			 end

			case t_abajo:
			  //si estamos en la ultima magia y hay más movemos el gráfico
				if(y==464 && conta_lst_magias+1<magias_tot)
					get_id(TYPE crea_lista_magias).y-=32;
					conta_lst_magias++;
				end
				if(y<463 && conta_lst_magias+1<magias_tot)y+=32;conta_lst_magias++;end
			end

			case t_arriba:
			  //si estamos en la posición de la primera mágia y hay más movemos el gráfico
				if(y==208 && conta_lst_magias>-1)
					get_id(TYPE crea_lista_magias).y+=32;
					conta_lst_magias--;
				end

			  //si estamos debajo del vaciar
		   //	 if(y==317 && conta_lst_magias==0)conta_lst_magias--;y-=32;end

				if(y>=240)y-=32;conta_lst_magias--;end
			end

			case t_aceptar:
			  //si no estamos en el vaciar comprobamos que la ranura seleccionada esté libre
				if(conta_lst_magias>=0)
					if(armas[arma_sel].ranura[ranura_sel-1]==0)
					  //asignamos el id de la magia a la ranura seleccionada
						armas[arma_sel].ranura[ranura_sel-1] = apoyo_mag[conta_lst_magias];
						armas[arma_sel].ranuras[1]+=1;

						magias[apoyo_mag[conta_lst_magias]].num_personaje=perso+1;
					else
					  //quitamos la magia y ponemos la nueva
						magias[armas[arma_sel].ranura[ranura_sel-1]].num_personaje=0;
						armas[arma_sel].ranura[ranura_sel-1] = apoyo_mag[conta_lst_magias];
						magias[apoyo_mag[conta_lst_magias]].num_personaje=perso+1;
					end
				else
				  //desenlazamos la magia
					magias[armas[arma_sel].ranura[ranura_sel-1]].num_personaje=0; //quitamos la magia
					armas[arma_sel].ranura[ranura_sel-1] = 0;
				end

			  //borramos la lista de las ranuras y la de las magias
				SIGNAL(TYPE pon_ranuras,s_kill);
				SIGNAL(TYPE crea_lista_magias,s_kill);

				conta_lst_magias=0;
				x=168+(40*(ranura_sel-1));y=103;_secciÓn=2;

				pon_ranuras(perso,0);pon_ranuras(perso,1); //ponemos ranuras
			 end //fin del case t_aceptar
			end //fin del switch de las teclas
		end //fin de seleccionar magias

		case 7: //Si estamos seleccionando invoc
			switch(scan_code)
			 case t_cancelar:
				SIGNAL(TYPE crea_lista_invoc,s_kill);
				conta_lst_invoc=0;
				x=168+(ranura_sel-1)*40;y=153;_secciÓn=3;
			 end

			 case t_abajo:
			  //si estamos en la ultima invocación y hay más movemos el gráfico
				if(y==464 && conta_lst_invoc+1<invoc_tot)
					get_id(TYPE crea_lista_invoc).y-=32;
					conta_lst_invoc++;
				end

				if(y<463 && conta_lst_invoc+1<invoc_tot)y+=32;conta_lst_invoc++;end
			 end

			 case t_arriba:
			  //si estamos en la posición de la primera invoc y hay más movemos el gráfico
				if(y==208 && conta_lst_invoc>0)
					get_id(TYPE crea_lista_invoc).y+=32;
					conta_lst_invoc--;
				end

			  //si estamos debajo del vaciar
				//if(y==317 && conta_lst_invoc==0)conta_lst_invoc--;y-=32;end

				if(y>=240)y-=32;conta_lst_invoc--;end
			 end

			 case t_aceptar:
			  //si no estamos en el vaciar comprobamos que la ranura seleccionada esté libre
				if(conta_lst_invoc>=0)
					if(brazaletes[brazalete_sel].ranura[ranura_sel-1]==0)
					  //asignamos el id de la invoc a la ranura seleccionada
						brazaletes[brazalete_sel].ranura[ranura_sel-1] = apoyo_invoc[conta_lst_invoc];
						brazaletes[brazalete_sel].ranuras[1]+=1;

						invoc[apoyo_invoc[conta_lst_invoc]].num_personaje=perso+1;
					else
					//quitamos la invocación y ponemos la nueva
						invoc[brazaletes[brazalete_sel].ranura[ranura_sel-1]].num_personaje=0;
						brazaletes[brazalete_sel].ranura[ranura_sel-1] = apoyo_invoc[conta_lst_invoc];
						invoc[apoyo_invoc[conta_lst_invoc]].num_personaje=perso+1;
					end
				else
				  //desenlazamos la invoc
					invoc[brazaletes[brazalete_sel].ranura[ranura_sel-1]].num_personaje=0; //quitamos la invoc
					brazaletes[brazalete_sel].ranura[ranura_sel-1] = 0;
				end

			  //borramos la lista de las ranuras y la de las invoc
				SIGNAL(TYPE pon_ranuras,s_kill);
				SIGNAL(TYPE crea_lista_invoc,s_kill);

				conta_lst_invoc=0;
				x=168+(40*(ranura_sel-1));y=153;_secciÓn=3;

				pon_ranuras(perso,0);pon_ranuras(perso,1);
			 end //fin del case t_aceptar
			end //fin del switch de las teclas
		end //fin de seleccionar invoc
		end //fin del switch principal

		while(scan_code<>0)frame;end;
		frame;
	end
end

//  ----------------------------------------------------------------------
//					 PROCESOS DE APOYO A PANTALLA ARMAS
//  ----------------------------------------------------------------------

process pon_ranuras(perso,tipo); //crea las ranuras de las magias y las invocaciones
private
	byte a;

	sel_arma;sel_brazalete;
	ranuras_tot; //ranuras totales del brazalete y de las armas

begin	
	file = fpg_ranuras;
	z=-1;
	
	switch(tipo)
		case 0://para las ranuras de las armas
		  //descargamos el mapa anterior de las ranuras
			if (g_ranuras[0]>-1)unload_map(0,g_ranuras[0]);end	  
			
	   //	 g_ranuras[0]=new_map(262,22,16);
	   //	 g_ranuras=100;
			g_ranuras[0]=map_clone(fpg_ranuras,100);
			set_point(0,g_ranuras[0],0,131,11);

			sel_arma=personaje[perso].ident_arma[0];
			ranuras_tot = armas[sel_arma].ranuras[0];

			for (a=0;a<=ranuras_tot-1;a++)
			  //las ranuras ocupadas las rellenamos de una cosa y las demás de otra
				if(armas[sel_arma].ranura[a]<>0)
					map_put(file,g_ranuras[0],2,11+(a*40),11);
				else
					map_put(file,g_ranuras[0],1,11+(a*40),11);
				end
			end

		  //ponemos el gráfico en pantalla
			graph=g_ranuras;x=300;y=95;

			id_apoyo[0]=id;
		end

		case 1://para las ranuras de los brazaletes
		  //descargamos el mapa anterior de las ranuras
			if (g_ranuras[1]>-1)unload_map(0,g_ranuras[1]);end	  

		  //  g_ranuras[1]=new_map(262,22,16);
		  //  g_ranuras[1]=100;
			g_ranuras[1]=map_clone(fpg_ranuras,100);
			set_point(0,g_ranuras[1],0,131,11);

			sel_brazalete = personaje[perso].ident_arma[1];
			ranuras_tot = brazaletes[sel_brazalete].ranuras[0];

		  //para las ranuras ocupadas grafico de relleno y para las otras vacío
			for (a=0;a<=ranuras_tot-1;a++)
				if(brazaletes[sel_brazalete].ranura[a]<>0)
					map_put(file,g_ranuras[1],3,11+(a*40),11);
				else
					map_put(file,g_ranuras[1],1,11+(a*40),11);
				end
			end

		  //ponemos el gráfico en pantalla
			graph=g_ranuras[1];x=300;y=145;

			id_apoyo[1]=id;
		end
	end

	loop frame;end
end

process crea_lista_armas(perso); //crea la lista de armas
private
	conta;
	mi_texto;
begin
	file=fpg_ranuras;
	z=-1;
	armas_tot=0;  
	
  //descargamos el mapa anterior
	if(g_lista_p_armas[0]>-1)unload_map(0,g_lista_p_armas[0]);end 
	
	g_lista_p_armas=new_map(279,492,16);
	set_point(0,g_lista_p_armas[0],0,0,0);

  //ponemos a cero la lista de apoyo
	for (conta=0;conta<c_n_armas;conta++)
		apoyo[conta]=0;
	end

  //rellenamos la lista de apoyo según corresponda
	for(conta=1;conta<=c_n_armas*6;conta++)
		if(armas[conta].la_tengo==true && armas[conta].num_personaje==perso)
			apoyo[armas_tot]=conta;
			armas_tot++;
		end
	end

  //escribimos el texto necesario y ponemos el icono
	for(conta=0;conta<armas_tot;conta++)
		map_put(file,g_lista_p_armas,4,34,18+conta*32);
		mi_texto=write_in_map(fuente_textos,armas[apoyo[conta]].nombre,0);
		map_put(file,g_lista_p_armas,mi_texto,47,6+conta*32);
		unload_map(0,mi_texto);
	end

	region=2;graph=g_lista_p_armas;x=5;y=180;

	loop frame;end
end

process crea_lista_brazaletes(perso);
private
	conta;
	mi_texto;
begin
	file=fpg_ranuras;	
	z=-1;	
	brazaletes_tot=0;
	
	//descargamos el mapa anterior 
	if(g_lista_p_armas[1]>-1)unload_map(0,g_lista_p_armas[1]);end

	//creamos el nuevo mapa
	g_lista_p_armas[1]=new_map(279,492,16);
	set_point(0,g_lista_p_armas[1],0,0,0);

	//vaciamos la lista de apoyo
	for(conta=0;conta<c_n_brazaletes;conta++)
		apoyo_braz[conta]=0;
	end

	//rellenamos la lista según convenga
	for(conta=1;conta<=c_n_brazaletes;conta++)
		if(brazaletes[conta].lo_tengo==true && (brazaletes[conta].num_personaje==0))
			apoyo_braz[brazaletes_tot]=conta;
			brazaletes_tot++;
		end
	end

	//escribimos el texto y ponemos el grafiquito
	for(conta=0;conta<brazaletes_tot;conta++)
		map_put(file,g_lista_p_armas[1],5,34,18+conta*32);
		mi_texto=write_in_map (fuente_textos,brazaletes[apoyo_braz[conta]].nombre,0);
		map_put(0,g_lista_p_armas[1],mi_texto,47,6+conta*32);
		unload_map(0,mi_texto);
	end

	region=2;graph=g_lista_p_armas[1];x=5;y=180;

	loop frame;end
end

process crea_lista_magias(perso,ranura);
private
	conta;
	sel_arma; //el arma seleccionada
	mi_texto;
	llamado_por_armas; //si ha sido llamado desde pantalla armas o magias
	
begin
	file=fpg_ranuras;
	z=-1;
	
	magias_tot=0;
	sel_arma=personaje[perso].ident_arma[0];
	
	//descargamos el mapa antiguo
	if(g_lista_p_armas[2]>-1)unload_map(0,g_lista_p_armas[2]);end

	//establce a 0 la lista de apoyo
	for(conta=0;conta<c_n_magias;conta++)
		apoyo_mag[conta]=0;
	end

	//crea internamente la lista nueva
	for(conta=1;conta<=c_n_magias;conta++)
		if(magias[conta].num_personaje==0 && magias[conta].la_tengo==true) //si est  disponible...
			apoyo_mag[magias_tot]=conta;
			magias_tot++;
		end
	end
	
	//creamos el nuevo mapa
	g_lista_p_armas[2]=new_map(275,21+magias_tot*32+16,16);
	set_point(0,g_lista_p_armas[2],0,0,0);

	//crea la lista de magias en el mapa (lo q se ve)
	for(conta=0;conta<magias_tot;conta++)
		map_put(file,g_lista_p_armas[2],2,27,21+(conta+1)*32);//ponemos el grafico de lleno
		mi_texto=write_in_map(fuente_textos,magias[apoyo_mag[conta]].nombre,0); //creamos el texto
		map_put(file,g_lista_p_armas[2],mi_texto,42,10+(conta+1)*32); //escribimos el nombre
		unload_map(0,mi_texto);  //descargamos el texto														  // del arma en el mapa
	end
	
	//comprobamos si ha sido llamado por la pantalla armas  
	llamado_por_armas=get_id(TYPE p_armas);
	
	//gráfico de vacío y texto para vaciar solo en caso de que sea llamado_p_a
	if(llamado_por_armas>0)
		map_put(file,g_lista_p_armas[2],1,27,21);
		mi_texto=write_in_map(fuente_textos,"Vaciar "
			 +magias[armas[sel_arma].ranura[ranura-1]].nombre,0);
		map_put(file,g_lista_p_armas[2],mi_texto,42,10);
		unload_map(0,mi_texto); //descargamos el texto
	end
	graph=g_lista_p_armas[2];
	region=region_lst_p_armas[1];
	
	//segun el proceso ponemos la lista en un lao o en otro  
	if(llamado_por_armas>0) //si ha sido llamado por armas
		x=220;y=180;
	else
		x=225;y=230;
	end 
	loop frame;end
end

process crea_lista_invoc(perso,ranura);
private
	conta;
	sel_brazalete; //el brazalete seleccionada
	mi_texto;
	llamado_por_armas;	//guarda si ha sido llamado desde pantalla armas o magias

begin
	file=fpg_ranuras;
	z=-1;
	
	invoc_tot=0;
	sel_brazalete=personaje[perso].ident_arma[1];
	
  //descargamos el mapa anterior
	if(g_lista_p_armas[2]>-1)unload_map(0,g_lista_p_armas[2]);end
	
	g_lista_p_armas[2]=new_map(275,492,16);
	set_point(0,g_lista_p_armas[2],0,0,0);

  //establce a 0 la lista de apoyo
	for(conta=0;conta<c_n_invoc;conta++)
		apoyo_invoc[conta]=0;
	end

  //crea internamente la lista nueva
	for(conta=1;conta<=c_n_invoc;conta++)
		if(invoc[conta].num_personaje==0 && invoc[conta].la_tengo==true) //si est  disponible...
			apoyo_invoc[invoc_tot]=conta;
			invoc_tot++;
		end
	end

  //crea la lista de invoc "oficial"
	for(conta=0;conta<invoc_tot;conta++)
		map_put(file,g_lista_p_armas[2],3,27,21+(conta+1)*32);//ponemos el grafico de lleno
		mi_texto=write_in_map(fuente_textos,invoc[apoyo_invoc[conta]].nombre,0); //creamos el texto
		map_put(file,g_lista_p_armas[2],mi_texto,42,10+(conta+1)*32); //escribimos el nombre
		unload_map(0,mi_texto);  //descargamos el texto														  // del arma en el mapa
	end

  //comprobamos si ha sido llamado por la pantalla armas
	llamado_por_armas=get_id(TYPE p_armas);

  //gráfico de vacío y texto para vaciar solo en caso de que sea llamado_p_a
	if(llamado_por_armas>0)
		map_put(file,g_lista_p_armas[2],1,27,21);
		mi_texto=write_in_map(fuente_textos,"Vaciar "
			 +invoc[brazaletes[sel_brazalete].ranura[ranura-1]].nombre,0);
		map_put(file,g_lista_p_armas[2],mi_texto,42,10);
		unload_map(0,mi_texto); //descargamos el texto
	end
	graph=g_lista_p_armas[2];
	region=region_lst_p_armas[1];

  //segun el proceso ponemos la lista en un lao o en otro
	if(llamado_por_armas>0)
		x=220;y=180;
	else
		x=225;y=230;
	end
	loop frame;end
end			 

process traspasa_magias(arma_d,arma_o);
private
	ranuras_tot[1];ranuras_ocupadas;
	conta;conta_ranura=0;
begin									 
  //obtenemos el número de ranuras usadas en el arma de origen 
  //y las totales en la de destino  
	ranuras_ocupadas=armas[arma_o].ranuras[1];
  
	ranuras_tot[0]=armas[arma_o].ranuras[0]:				   
	ranuras_tot[1]=armas[arma_d].ranuras[0];
	
  //si hay menos ranuras en el nuevo arma
	if(ranuras_tot[0]>ranuras_tot[1])	   
	  //si hay - o = ranuras ocupadas que ranuras en el nuevo arma
		if(ranuras_ocupadas<=ranuras_tot[1])
			for(conta=0;conta<ranuras_tot[0];conta++)
				if(armas[arma_o].ranura[conta]>0)
					armas[arma_d].ranura[conta_ranura]=armas[arma_o].ranura[conta];
					armas[arma_o].ranura[conta]=0;	
					conta_ranura++;
				end
			end
		  //actualizamos los datos de las armas
			armas[arma_d].ranuras[1]=conta_ranura;
			armas[arma_o].ranuras[1]=0;
		else				 
		  //pasamos las magias al nuevo arma	
			for(conta=0;conta<ranuras_tot[0];conta++)
				if(armas[arma_o].ranura[conta]>0)
					armas[arma_d].ranura[conta_ranura]=armas[arma_o].ranura[conta];
					armas[arma_o].ranura[conta]=0;
					conta_ranura++;
				end
			end
		  //desenlazamos las sobrantes
			for(conta=ranuras_tot[1];conta<=ranuras_tot[0];conta++)
				magias[armas[arma_d].ranura[conta]].num_personaje=0;
				armas[arma_d].ranura[conta]=0;
			end

		 //actualizamos los datos de las armas
			armas[arma_d].ranuras[1]=conta_ranura;
			armas[arma_o].ranuras[1]=0;
		end
	 else
	  //pasamos las magias al nuevo arma	
		for(conta=0;conta<ranuras_tot[0];conta++)
			armas[arma_d].ranura[conta]=armas[arma_o].ranura[conta];
			armas[arma_o].ranura[conta]=0;
		end						
	  //actualizamos los datos de las amrmas	   
		armas[arma_d].ranuras[1]=armas[arma_o].ranuras[1];
		armas[arma_o].ranuras[1]=0;
	end  
end

process traspasa_invoc(braz_d,braz_o);
private
	ranuras_tot[1];ranuras_ocupadas;
	conta;conta_ranura=0;
begin
  //obtenemos el número de ranuras usadas en el brazalete de origen
  //y las totales en la de destino
	ranuras_ocupadas=brazaletes[braz_o].ranuras[1];

	ranuras_tot[0]=brazaletes[braz_o].ranuras[0]:
	ranuras_tot[1]=brazaletes[braz_d].ranuras[0];

  //si hay menos ranuras en el nuevo brazalete
	if(ranuras_tot[0]>ranuras_tot[1])
	  //si hay - o = ranuras ocupadas que ranuras en el nuevo brazalete
		if(ranuras_ocupadas<=ranuras_tot[1])
			for(conta=0;conta<ranuras_tot[0];conta++)
				if(brazaletes[braz_o].ranura[conta]>0)
					brazaletes[braz_d].ranura[conta_ranura]=brazaletes[braz_o].ranura[conta];
					brazaletes[braz_o].ranura[conta]=0;
					conta_ranura++;
				end
			end
		  //actualizamos los datos de los brazaletes
			brazaletes[braz_d].ranuras[1]=conta_ranura;
			brazaletes[braz_o].ranuras[1]=0;
		else
		  //pasamos las invoc al nuevo brazalete
			for(conta=0;conta<ranuras_tot[0];conta++)
				if(brazaletes[braz_o].ranura[conta]>0)
					brazaletes[braz_d].ranura[conta_ranura]=brazaletes[braz_o].ranura[conta];
					brazaletes[braz_o].ranura[conta]=0;
					conta_ranura++;
				end
			end
		  //desenlazamos las sobrantes
			for(conta=ranuras_tot[1];conta<=ranuras_tot[0];conta++)
				invoc[brazaletes[braz_d].ranura[conta]].num_personaje=0;
				brazaletes[braz_d].ranura[conta]=0;
			end

		 //actualizamos los datos de los brazaletes
			brazaletes[braz_d].ranuras[1]=conta_ranura;
			brazaletes[braz_o].ranuras[1]=0;
		end
	 else
	  //pasamos las invoc al nuevo brazalete
		for(conta=0;conta<ranuras_tot[0];conta++)
			brazaletes[braz_d].ranura[conta]=brazaletes[braz_o].ranura[conta];
			brazaletes[braz_o].ranura[conta]=0;
		end
	  //actualizamos los datos de los brazaletes
		brazaletes[braz_d].ranuras[1]=brazaletes[braz_o].ranuras[1];
		brazaletes[braz_o].ranuras[1]=0;
	end
end

//  ----------------------------------------------------------------------
//						   FIN PANTALLA ARMAS
//  ----------------------------------------------------------------------


//  ----------------------------------------------------------------------
//							 PANTALLA MAGIAS
//  ----------------------------------------------------------------------

process p_magias(perso);
private
	tama;
begin
	region_lst_p_armas[1] = define_region(3,234,262,270,195);
	file=fpg_menu;
	graph=7;
	y=240;x=226;
	
  //un efecto gráfico
	size=0;
	FROM tama=0 TO 9;
		size+=10;
		frame;
	end

  //escribimos las cosas
	pon_cara(perso+1,75,86);
	id_apoyo[0]=crea_lista_magias(perso,1);
	id_apoyo[1]=crea_lista_magias_tengo(perso);
  
  //pasamos a controlar la flechita con los nuevos procesos
	en_menu = 3;
	controla_p_magias(perso);

	cargado=true;
	loop frame; end
end		

process controla_p_magias(perso);
private					  
	conta;
	_sección=0;   //para controlar en que parte del menu estamos
	conta_lst_magias=0; //para recorrer la lista de las magias
	
	int p_nivel;
	int p_gasto_pm;
	string p_tipo_mag;
	string p_fuera_batalla;
	string p_estado;
	y_sel=290;
begin					
	file = fpg_menu;
	graph= 2;flags=1;z=-5;
	
  //si no hay magias enlazadas pasamos directamente a la mochila
	if(magias_tot_perso>0)
		x=22;y=290;								   
	else
		x=240;y=y_sel;_sección=1;							
	end

	//escribimos las propiedades de la magia
   /* write(fuente_textos,440,300,2,"Nivel:");
	write(fuente_textos,440,330,2,"Tipo de Mágia:");
	write(fuente_textos,440,360,2,"Gasto de PM:");
	write(fuente_textos,440,390,2,"Causa estado:");
	write(fuente_textos,440,420,2,"¿Uso no batalla?:");

	write_int(fuente_numeros,450,300,0,OFFSET p_nivel);
	write_string(fuente_numeros,450,330,0,OFFSET p_tipo_mag);
	write_int(fuente_numeros,450,360,0,OFFSET p_gasto_pm);
  //write_string(fuente_textos,455,390,1,OFFSET p_tipo_mag);
	write_string(fuente_numeros,450,420,0,OFFSET p_fuera_batalla);*/
	
	loop
		switch(_sección)
			case 0:
				if(scan_code==t_derecha)
					conta_lst_magias=((y_sel-290) + (230-get_id(TYPE crea_lista_magias).y))/32;
					x=240;y=y_Sel;_sección=1;
				end
				if(scan_code==t_cancelar)en_menu=2;BREAK;end //al menu principal 
				if(scan_code==t_abajo && conta_lst_magias<magias_tot_perso-1)
					y+=22;
					conta_lst_magias++;
				end
				if(scan_code==t_arriba && y>290)y-=22;conta_lst_magias--;end

			  //actualizamos las propiedades a escribir
			   /* p_nivel=magias[apoyo_mag_perso[conta_lst_magias]].nivel;
				p_tipo_mag=magias[apoyo_mag_perso[conta_lst_magias]].tipo;
				p_gasto_pm=magias[apoyo_mag_perso[conta_lst_magias]].gasto_pm;
				p_fuera_batalla=magias[apoyo_mag_perso[conta_lst_magias]].fuera_batalla;*/
			end
			case 1:
				switch(scan_code)
				 case t_abajo:
				  //si estamos en la ultima magia y hay más movemos el gráfico
					if(y==450 && conta_lst_magias+1<magias_tot)
						get_id(TYPE crea_lista_magias).y-=32;
						conta_lst_magias++;
					end
					if(y<450 && conta_lst_magias+1<magias_tot)y+=32;conta_lst_magias++;end
				 end

				 case t_arriba:
				  //si estamos en la posición de la primera mágia y hay más movemos el gráfico
					if(y==290 && conta_lst_magias>0)
						get_id(TYPE crea_lista_magias).y+=32;
						conta_lst_magias--;
					end
					
					if(y>290)y-=32;conta_lst_magias--;end
				 end   
				 
				 case t_cancelar:
					conta_lst_magias=0;
					en_menu=2;BREAK;
				 end
				 
				 case t_izquierda:
				 	if(magias_tot_perso>0)
						conta_lst_magias=0;_sección=0;y_sel=y;x=22;y=290;
					end
				 end
				end
			  //actualizamos las propiedades a escribir
			  /*  p_nivel=magias[apoyo_mag[conta_lst_magias]].nivel;
				p_tipo_mag=magias[apoyo_mag[conta_lst_magias]].tipo;
				p_gasto_pm=magias[apoyo_mag[conta_lst_magias]].gasto_pm;
				p_fuera_batalla=magias[apoyo_mag[conta_lst_magias]].fuera_batalla;*/
			end
		end
		
		while(scan_code<>0)frame;end;
	
	frame;
	end   
end		   

process crea_lista_magias_tengo(perso);
private
	 conta;
	 arma_sel;
	 g;mi_texto;
begin
	 file=fpg_ranuras;
	 z=-1;
	 
	 arma_sel=personaje[perso].ident_arma[0];
	 magias_tot_perso=0;
	 
	 g=map_clone(fpg_ranuras,103);
	 set_point(0,g,0,0,0);
						
  //crea la lista interna  
	for(conta=0;conta<7;conta++)
		if(armas[arma_sel].ranura[conta]>0)
			apoyo_mag_perso[magias_tot_perso]=armas[arma_sel].ranura[conta];
			magias_tot_perso++;
		else
			apoyo_mag_perso[conta]=0;
		end
	end							
  //Crea la lista externa	
	for(conta=0;conta<magias_tot_perso;conta++)
		map_put(0,g,2,11,12+conta*22);
		mi_texto=write_in_map(fuente_textos,magias[apoyo_mag_perso[conta]].nombre,3);
		map_put(0,g,mi_texto,25,12+conta*22);
		unload_map(0,mi_texto);
	end
	 
	 graph=g;x=21;y=270;
	 
	 loop frame; end
	 
end 

//  ----------------------------------------------------------------------
//						   FIN PANTALLA MAGIAS
//  ----------------------------------------------------------------------


//  ----------------------------------------------------------------------
//						  PANTALLA INVOCACIONES
//  ----------------------------------------------------------------------
process p_invoc(perso);
private
	tama;
begin
	region_lst_p_armas[1] = define_region(3,234,262,270,195);
	file=fpg_menu;
	graph=8;
	y=240;x=226;;

  //un efecto gráfico
	size=0;
	FROM tama=0 TO 9;
		size+=10;
		frame;
	end

  //escribimos las cosas
	pon_cara(perso+1,75,86);
	id_apoyo[0]=crea_lista_invoc(perso,1);
	id_apoyo[1]=crea_lista_invoc_tengo(perso);

  //pasamos a controlar la flechita con los nuevos procesos
	en_menu = 3;
	controla_p_invoc(perso);

	cargado=true;
	loop frame; end
end

process controla_p_invoc(perso);
private
	conta;
	_sección=0;   //para controlar en que parte del menu estamos
	conta_lst_invoc=0; //para recorrer la lista de las invocaciones

	int p_nivel;
	int p_gasto_pm;
	string p_tipo_mag;
	string P_estado;
	y_sel=290;
begin
	file = fpg_menu;
	graph= 2;flags=1;z=-5;

  //si no hay invocaciones enlazadas pasamos directamente a la mochila
	if(invoc_tot_perso>0)
		x=22;y=y_sel;
	else
		x=240;y=290;_sección=1;
	end

  /*
	//escribimos las propiedades de la invoc
	write(fuente_textos,440,300,2,"Nivel:");
	write(fuente_textos,440,330,2,"Tipo de Mágia:");
	write(fuente_textos,440,360,2,"Gasto de PM:");
	write(fuente_textos,440,390,2,"Causa estado:");

	write_int(fuente_textos,450,300,0,OFFSET p_nivel);
	write_string(fuente_textos,450,330,0,OFFSET p_tipo_mag);
	write_int(fuente_textos,450,360,0,OFFSET p_gasto_pm);
  //write_string(fuente_textos,455,390,1,OFFSET p_tipo_mag);*/

	loop
		switch(_sección)
			case 0:  //si estamos en las invocaciones enlazadas
			  //actualizamos las propiedades a escribir
				p_nivel=invoc[apoyo_invoc_perso[conta_lst_invoc]].nivel;
				p_tipo_mag=invoc[apoyo_invoc_perso[conta_lst_invoc]].tipo;
				p_gasto_pm=invoc[apoyo_invoc_perso[conta_lst_invoc]].gasto_pm;

				if(scan_code==t_derecha)conta_lst_invoc=0;x=240;y=y_sel;_sección=1;end
				if(scan_code==t_cancelar)en_menu=2;BREAK;end //al menu principal
				if(scan_code==t_abajo && conta_lst_invoc<invoc_tot_perso-1)
					y+=22;
					conta_lst_invoc++;
				end
				if(scan_code==t_arriba && y>290)y-=22;conta_lst_invoc--;end
			end
			case 1: //si estamos en las invoc de la mochila
			   //actualizamos las propiedades a escribir
				p_nivel=invoc[apoyo_invoc[conta_lst_invoc]].nivel;
				p_tipo_mag=invoc[apoyo_invoc[conta_lst_invoc]].tipo;
				p_gasto_pm=invoc[apoyo_invoc[conta_lst_invoc]].gasto_pm;

				switch(scan_code)
				 case t_abajo:
				  //si estamos en la ultima invoc y hay más movemos el gráfico
					if(y==450 && conta_lst_invoc+1<invoc_tot)
						get_id(TYPE crea_lista_invoc).y-=32;
						conta_lst_invoc++;
					end
					if(y<450 && conta_lst_invoc+1<invoc_tot)y+=32;conta_lst_invoc++;end
				 end

				 case t_arriba:
				  //si estamos en la posición de la primera invoc y hay más movemos el gráfico
					if(y==290 && conta_lst_invoc>0)
						get_id(TYPE crea_lista_invoc).y+=32;
						conta_lst_invoc--;
					end

					if(y>290)y-=32;conta_lst_invoc--;end
				 end

				 case t_cancelar:
					conta_lst_invoc=0;
				  //si hay invocaciones enlazadas vamos arriba, si no, al menu
					en_menu=2;BREAK;
				 end
				 
				 case t_izquierda:
				 	if(invoc_tot_perso>0)
						_sección=0;y_sel=y;x=22;y=290;
					end 
				 end
				end
			end
		end

		while(scan_code<>0)frame;end;

	frame;
	end
end

process crea_lista_invoc_tengo(perso);
private
	 conta;
	 brazalete_sel;
	 g;mi_texto;
begin
	 file=fpg_ranuras;
	 z=-1;

	 brazalete_sel=personaje[perso].ident_arma[1];
	 invoc_tot_perso=0;

	 g=map_clone(fpg_ranuras,103);
	 set_point(0,g,0,0,0);

  //crea la lista interna
	for(conta=0;conta<7;conta++)
		if(brazaletes[brazalete_sel].ranura[conta]>0)
			apoyo_invoc_perso[invoc_tot_perso]=brazaletes[brazalete_sel].ranura[conta];
			invoc_tot_perso++;
		else
			apoyo_invoc_perso[conta]=0;
		end
	end
  //Crea la lista externa
	for(conta=0;conta<invoc_tot_perso;conta++)
		map_put(0,g,3,11,12+conta*22);
		mi_texto=write_in_map(fuente_textos,invoc[apoyo_invoc_perso[conta]].nombre,3);
		map_put(0,g,mi_texto,25,12+conta*22);
		unload_map(0,mi_texto);
	end

	 graph=g;x=21;y=270;

	 loop frame; end

end

//  ----------------------------------------------------------------------
//						  FIN PANTALLA INVOCACIONES
//  ----------------------------------------------------------------------

process gasta_magia_en(id_mag,de,para);
begin
	//quitamos los puntos mágicos al tio
end


//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//				  PROCESOS DE APOYO A LAS PANTALLAS DEL MENU
//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

process pon_cara(cuala,x,y);
begin
	z=-1;
	file=fpg_caras;
	graph=cuala;
	size=150;
	loop frame;end
end
//------------------------------------------------------------------------
//									FIN MENU
//------------------------------------------------------------------------

