type COLOR
     int r,g,b;
end

type tEnemigo
	string nombre = "Malo";
	gráfico;
	pv; pv_totales;
    fuerza;
    resistencia;
    velocidad;
    byte estado;
    x,y;		//id del proceso que le creó
end

// DEFINICIONES DEL Writer Deluxe

//-------------------INCLUIR EN LA SECCIÓN DECLARACIONES DE TIPOS---------------------
type __rWDClass
	rFuente=0;			//fuente que se usará
    string rTexto="";	//texto a escribir
    string rIntroChar="&";	//caracter de retorno (para simular la tecla especificada
    					// por rIntroKey ya que los textos cargados se cojen de 
    					// una sola línea
    rIntroKey=0;		//Código ascii de la tecla que se usa para continuar escribiendo
    					//usar 0 para cualquier tecla.
	
	rMaxCaract=20; 		//caracteres por línea
	rMaxRenglones=3;	//máximo de renglones por parrafo
	
	rEspaciado=0;		//distancia entre caracteres (adicional al ancho de cada letra)
	rEspacios=2;		//distancia adicional de los espacios (huecos entre palabras)
	rDistY=0;			//distáncia entre líneas (adicional al tamaño de una letra 
						//mayúscula
	
	rVel=15;			//velocidad general
	rVelPto=100;		//velocidad de pausa después de un punto
	rVelComa=40;		//velocidad de pausa después de coma 
	rVelPtoComa=22;		//velocidad de pausa después de punto y coma
	
	rPosx=0;			//Coordenada X de donde se escribirá (o se pondrá la imagen)
	rPosy=0;			//Coordenada Y de donde se escribirá (o se pondrá la imagen)
	
	rMargenI=0;			//margen izquierdo desde rPosX hasta donde comienza el texto
	rMargenS=0;			//margen superior desde rPosy hasta donde comienza el texto
	
	rTotGraphics=0;		//número de gráficos que se usarán 0 para ninguno. Si se quiere
						//un gráfico para cuando hay una línea y otro para lo demás,
						//se debería poner un 2 (ejemplo). SI se quiere 1 solo gráfico
						//para todo, debe valer 1.
	rGraphics[0];	    //array para cargar los distintos gráficos. Van del siguiente
						//modo: gráfico para una línea rGraphics[|], gráfico para 2
						//líneas rGraphics[2], etc. El gráfico que se muestra cuando
						//no hay disponible para X líneas es el 0.
						
	byte rUseEffects=0;	//0=No usar efectos de entrada. >0 Usar efectos de entrada
	rEffects[1]=0,0;	//array de efectos. 1 elemento: 0=no trasparente,>0 trasparente
						//2 elemento: 0 no usar efecto de entrada, >0 número del 
						//efecto de entrada a usar.	
	
	rExitEffect=0;		//0=no usar efectos de salida. >0 número del efecto a usar
end	
//----------------FIN INCLUIR EN LA SECCIÓN DECLARACIONES DE TIPOS---------------------

const
  //----------------INCLUIR EN LA SECCIÓN DECLARACIONES DE COSTANTES---------------------	
	__rTT=100;			//pon aquí un valor que sea mayor al número de letras (contando
						//espacios) que tendrás en pantalla al mismo tiempo. Un número
						//mu alto consumiría más memória que uno más bajo
	
	__rTL=100;			//Si sabes el número máximo de renglones que ocuparán tus textos
						//ponlo aquí (ahorrarás memória)						
  //--------------FIN INCLUIR EN LA SECCIÓN DECLARACIONES DE COSTANTES-------------------

  //constantes del juego
    c_n_armas = 6;       //número máximo de armas por personaje
    c_n_brazaletes = 15; //número máximo de brazaletes por personaje
    c_n_magias = 30;
    c_n_invoc = 10; 
    c_n_objetos = 10;	 //número máximo de objetos por lista                        
  
  //constantes para los estados del personaje
    _CNORMAL = 0;
    _CENVENENADO = 1;
    _CMUERTO = 2;
    _CDORMIDO = 3;

  //constantes para los tipos de objetos
    _OATAQUE = 0;
    _OCURA = 1;
    _OMAGICOS = 2;
    _OMEJORA = 3;
    _OCLAVE = 4;
    _OOTROS = 5;
  
  //constantes para las vatallas
  	_VBASE=1000;	//velocidad base en milisec

  //otras constantes
  	on=0;	//para los fades
  	off=1;	//para los fades
  	Si=0;
  	No=1;
  	
  	_z1=2;_z2=3; //costantes para la z
  	
  	

global
//fpgs
    fpg_menu_principal;fpg_menu;fpg_caras;fpg_titulo;fpg_personajes;fpg_ranuras;
    fpg_fase;fpg_durezas;fpg_intros;fpg_batallas;
    fuente_textos;fuente_numeros; 
    fuente_act1; //fuente 1 actualmente seleccionada
    fuente_act2; //fuente 2 actualmente seleccionada

//sonidos
    sonidos[2];
	
//variables del control de las teclas, para que se pueda redefinir
    t_arriba=72;
    t_abajo=80;
    t_derecha=77;
    t_izquierda=75;
    t_aceptar=28;
    t_cancelar=83;
    t_menu=_m;

//variables para el control de las colisiones (mapas de durezas)
    color color_bloq=159,0,0;
    colord[2];
    color color_puerta=56,60,0;

//Variables para el control de diversos asepectos del prota: velocidad,altura...
    byte pg_propiedades[2]=4,12,24;
                                
//Variables para el control de los gráficos del prota
    byte pg_arriba[2]=4,5,6;
    byte pg_abajo[2]=1,2,3;
    byte pg_derecha[2]=7,8,9;
    byte pg_izquierda[2]=10,11,12;

//           ESTRUCTURA DE LOS PERSONAJES

    struct Personaje[5]
        lo_tengo;         //si lo tenemos
        cara_x;cara_y;    //posicion de las caras en el menu
        string  nombre = "Aún no tienes éste personaje";
        pv; pv_totales;
        pm; pm_totales;
        fuerza;
        resistencia;
        velocidad;
        byte estado;
        byte ident_arma[1];//el arma que lleva el personaje
    end
//Fin estructura personajes

// ESTRUCTURA DE LAS ARMAS
    struct armas[c_n_armas*6] //30 armas + la nula
        string nombre;      
        fuerza;             
        defensa;            
        suerte;             
        rapidez;            
        peso;               
        gráfico;            
        byte num_personaje; //identificador del personaje que puede llevar el arma
        byte ranuras[1];    //Ranuras totales del arma y ranuras ocupadas
        la_tengo=0;         //para saber si hemos conseguido el arma
        byte ranura[6];     //guarda los ids de las magias enlazadas
    end
//Fin estructura armas

/*ESTRUCTURA DE LOS BRAZALETES
Los brazaletes son objetos defensivos. Cada personaje puede llevar un arma y un brazalete. Los
brazaletes aportan defensa, suerte, estados, y cosas desas y disponen tambi‚n de ranuras al igual
que las armas. Se diferencian principalmente en que son comunes, es decir, todos los personajes
los pueden llevar.
*/
    struct brazaletes[15]   //15 brazaletes + el nulo(con los datos a 0)
        string nombre;      
        byte ranuras[1];    //identico a lo de las armas
        gráfico;            
        aporto[6];          /*las propiedades q aporta el brazalete
                            0=p_Vida, 1=P_magia, 2=fuerza,
                            3= resistencia, 4=suerte,5=velocidad,6=estado */
        byte num_personaje; //para saber que personaje lo tiene, 0 = ninguno
        lo_tengo=0;         
        byte ranura[6];     //guarda los ids de las invocaciones enlazadas
    end
//Fin estructura brazaletes

//ESTRUCTURA DE LAS MAGIAS
    struct magias[c_n_magias]
        string nombre;
        aporto[6];             /*las propiedades q aporta la magia
                                 0=p_Vida, 1=P_magia, 2=fuerza, 3= resistencia,
                                 4=suerte,5=velocidad,6=estado.valores<0 para quitar ptos*/
        la_tengo=0;
        num_personaje;         //para saber que personaje lo tiene, 0 = ninguno
        nivel;
        word tipo;
        int gasto_pm;
        fuera_batalla;

    end
//Fin estructuras magias

//ESTRUCTURA DE LAS INVOCACIONES
    struct invoc[c_n_invoc]
        string nombre;
        aporto[6];             /*las propiedades q aporta la invoc
                                 0=p_Vida, 1=P_magia, 2=fuerza, 3= resistencia,
                                 4=suerte,5=velocidad,6=estado.valores<0 para quitar ptos*/
        la_tengo=0;
        num_personaje;         //para saber que personaje la tiene, 0 = ninguno
        nivel;
        gasto_pm;
        string tipo;

    end
//Fin

//ESTRUCTURA DE LOS OBJETOS
    struct objetos[c_n_objetos*6]
        string nombre;
        aporto[6];
        lo_tengo=0;
        byte tipo;
    end
//FIN


//    VARIABLES DE CONTROL DEL JUEGO
//-----------------------------------------------------------------------------

//regiones
    id_region_pantalla;  //el identificador de la region de la pantalla principal

//Gráficos
	g_negro; //para los fades
    g_fase; //gráfico de la fase
    g_durezas; //grafico de la dureza de la gase
    id_grafico_fondo_anim_princip;
	g_mensajes; //gráfico para los mensajes
	
	
//Canciones
    id_canción_anim_princip;
    id_cancion=-1; 				//id de la canción actual

//Pantallas
//He nombrado pantalla al conjunto de varios mapas que juntos forman una casa
//, un pueblo, etc.
    struct pantallas[10]
        px=0;
        py=0;
        string nombre;
    end
    
    p_actual;  //la pantalla en la que estamos
           

//    VARIABLES DEL CONTROL DE BATALLAS
//-----------------------------------------------------------------------------

	g_fbatalla; 			//gráfico para el fondo de las batallas
	g_mbatalla;				//cópia del menu de la batalla del fpg
	
	protas_b[3]=2,0,1,2;	//protas q participaran en batlla, el primer campo es
							// para indicar el número total
	
	Byte menu_b=false;		//para saber cuando se ha de poner el cursor en el menú							
	
	Byte orden_batalla[5]; 	//a quien le toca atacar
	orden_protas[2]=-1,-1,-1;
	byte num_luchadores;   	//número de luchadores q hay en la batalla
	turno_protas=0;				
	
	byte num_enemigos;		//número de enemigos
	tEnemigo Enemigos[2];	//enemigos
	

//    VARIABLES DEL CONTROL DEL MNU
//-----------------------------------------------------------------------------

//regiones
    region_lst_p_armas[1];
    region_lst_p_magias[1];
    region_lst_p_obj[5];
    
//general
    cargado = false;     		//¿Cargados los elementos de un menu?
    byte en_menu=0;      		//parte del menu en la q estamos, 0 = en el menu
                     			
    id_apoyo[5];        		//ids de procesos huérfanos

//graficos
    g_caras=100;         		//gráfico en el cual pondremos las caras

//PANTALLAS
    g_lista_p_armas[3]=-1,-1,	//gráficos para el mapa en el que escribiremos
    					-1,-1; 	//las armas, magias y brazaletes
    g_ranuras[1]=-1,-1;         //gráfico donde se pondran las ranuras 
    g_lista_p_objetos[5];	    //gráfico para las listas de los objetos
	
    armas_tot;brazaletes_tot;   //número de armas y brazaletes que se tiene
    magias_tot;                 //lo mismo pero para las magias
    invoc_tot;                  //lo mismo para las invoc
    magias_tot_perso;           //las magias que tiene el perso enlazadas
    invoc_tot_perso;            //las invoc que tiene el perso enlazadas
    obj_tot[5];					//los objetos totales que hay en cada lista
    
    apoyo[c_n_armas];           //ids de los nombres las armas
    apoyo_braz[c_n_brazaletes]; //ids de los nombres de los brazaletes
    apoyo_mag[c_n_magias];      //ids de los nombres de las magias
    apoyo_invoc[c_n_invoc];     //ids de los nombres de las invocaciones
    apoyo_mag_perso[6];         //ids de las magias q tiene enlazadas el perso
    apoyo_invoc_perso[6];       //ids de las invoc q tiene enlazadas el perso
	apoyo_obj[5][c_n_objetos];  //ids de los objetos en cada una de las listas


// VARIABLES DE CONTROL DE TEXTOS OCN RPG_WRITER_DELUXE
//----------------------------------------------------------------------------------
__rWDClass conf_txt;
