Bennu Game Development

Foros en Español => Proyectos => Topic started by: tSuKiYoMi on May 06, 2010, 04:31:02 PM

Title: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 06, 2010, 04:31:02 PM
Hola a todos. Os explico, estoy haciendo un shooter con scroll horizontal al mas puro estilo R-Type para Wiz en BennuGD llamado GyPhon Striker y por el momento no he tirado ni una sola linea de código en Bennu, ahora mismo estoy con el apartado gráfico del juego. Por el momento llevo hechos gráficos como fondos de pantalla, naves enemigas, efectos de explosión, el tipo de armas, items, etc. Algunos de estos gráficos y diseños son propios y otros son ripeados de juegos como R-Type y Blazing Star. La duda que tengo ahora mismo es si siguiendo el tutorial de Oscar se puede hacer un shooter decente (aún no me he leido el tutorial por falta de tiempo, no me crucifiqueis aún por favor...... ;D), y otra duda que tengo es si existe algún tutorial donde se explique como crear menús para los juegos, pantallas de configuración, selección de tipo de jugador (quiero meter varios tipos de naves cada una con un tipo de disparo diferente), y cosas por el estilo.

saludos y muchas gracias de antemano.
Title: Re: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 06, 2010, 07:14:55 PM
alguno de vosotros puede reolverme las dudas planteadas?
Title: Re: [GAME] GyPhon Striker
Post by: FreeYourMind on May 06, 2010, 07:28:53 PM
Eso más que dudas es pedir que te hagan el juego  ;D

Mirate tranquilamente los ejemplos que vienen con DIV, ahí tienes de sobra ejemplos para mirar y hacer lo que quieres...
Hay que currarselo, por aqui te resolveran dudas que te vayan saliendo, no pidas que te hagan un menu y te lo pongan aqui :)
Title: Re: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 06, 2010, 07:39:27 PM
no pido que hagan el juego tio, pero si pregunto si existe algun tipo de tutorial, ahora que sino lo hay pues nada, solo tenias que decir eso.
Title: Re: [GAME] GyPhon Striker
Post by: FreeYourMind on May 06, 2010, 08:20:17 PM
Que si hombre, el mejor tutorial que puedes encontrar son los juegos que vienen con DIV, vienen con comentarios para aburrir, en serio empieza por ahí...
Title: Re: [GAME] GyPhon Striker
Post by: josebita on May 06, 2010, 10:17:07 PM
Es verdad, si aún estás dando los primeros pasos con Bennu, lo mejor es que veas el código que viene con otros juegos para que veas cómo hacen ellos las cosas.

También puedes coger el código de algún juego más moderno, como el Garnatron (http://projects.bennugd.org/?details=44).
Title: Re: [GAME] GyPhon Striker
Post by: gecko on May 06, 2010, 10:39:18 PM
En el Bennupack tambien hay MUCHOS ejemplos para ir toqueteando....

MUCHOS...
Title: Re: [GAME] GyPhon Striker
Post by: SplinterGU on May 06, 2010, 10:43:50 PM
sinceramente no lei los manuales que hay de bennugd... pero te sugiero leas el de Osk y los cursos de windgate... son los que hay y con los que todos los que se inician en bennugd aprenden...
Title: Re: [GAME] GyPhon Striker
Post by: Drumpi on May 06, 2010, 11:26:08 PM
De hecho, el famoso capítulo 6 del manual de DIV, te enseña a hacer precisamente eso, a hacer un shooter, al menos, la parte del juego.
Y ha servido de inspiración para muchos tutoriales o partes de ellos, como el de Osk, alguno de los de windgate e incluso a mi mismo ^^U

En cuestión de menús, me temo que ahi poco podemos ayudarte: podemos dar algún consejo suelto, como que uses mapas de durezas, o que asignes cada opción a un botón distinto, pero cada diseño es un mundo enorme de posibilidades y no existe una "fórmula mágica" para esto.

Y respecto a las respuestas, esto no es gp32spain, aquí nos tomamos las cosas con más tranquilidad, así que no esperes una respuesta en menos de 24 horas (al menos, yo no la espero, y siempre me sorprendo, sobre todo de la magnitud de mis fallos tontos :D :D :D).
Title: Re: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 07, 2010, 12:06:24 PM
gracias a todos por vuestras recomendaciones, ahora estoy siguiendo el tutorial de Osk, y estoy haciendome el ejemplo del juego del pin-pon para entender más o menos la dinámica. He visto que en ese mismo tutorial viene el ejemplo de shooter, asi que ya ire probando. ;D

Con respecto a lo de los menús creo que al final no habrá problemas he estado mirando los ejemplitos del Div2 y ahi viene bastante bien, asi que ya esta.

saludos.
Title: Re: [GAME] GyPhon Striker
Post by: SplinterGU on May 07, 2010, 02:17:51 PM
buenisimo... esperamos ver tu proyecto pronto...
Title: Re: [GAME] GyPhon Striker
Post by: l1nk3rn3l on May 07, 2010, 02:56:41 PM
en el bennupack hay un ejemplo ya hecho en ejemplos avanzados(advance)

http://bennupack.blogspot.com/




...
Title: Re: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 07, 2010, 04:26:08 PM
Quote from: l1nk3rn3l on May 07, 2010, 02:56:41 PM
en el bennupack hay un ejemplo ya hecho en ejemplos avanzados(advance)

http://bennupack.blogspot.com/




...

si gracias, ya lo tenia presente. Supongo que cuando lo tenga terminado no habra problemas en subirlo aqui y tmb en GP32Spain al mismo tiempo, no?
Title: Re: [GAME] GyPhon Striker
Post by: Mr Matsusaka on May 09, 2010, 10:33:34 AM
Ningun problema, por supuesto. :)
PD: Bienvenido Tsukiyomi.
Title: Re: [GAME] GyPhon Striker
Post by: Windgate on May 09, 2010, 01:46:25 PM
A seguir tutoriales, a mirar ejemplos, a hacer mil juegos hasta comprender todo Bennu, tienes para unos años de diversión :D

Sobre lo que dices de menús, tengo en mente cómo hacerlos usando FUNCTION, ya que su llamada bloquea, y es fácil bloquear al menú anterior cuando se invoca el siguiente submenú. Desgraciadamente no me he puesto a implementarlo :P

Estaría bien si sale un hilo exclusivo sobre cómo hacer menús desplegables, con ejemplos sencillitos, de hecho incluso algún módulo que se pueda reutilizar molaría.
Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 03:57:08 PM
No se si es esto lo que quieres.

Tengo hecho un botón y una barra deslizadora, todo en fase muuuy alfa, que por eso no lo he colgado.

Ahora mismo estoy con el juegecito de GP, y está parado.

A ver donde lo he metido... lo busco. Na, que no lo encuentro, a encender el portatil de programar...



He preparado un código autosuficiente, sólo te hace falta un fpg con el cursor del ratón.

Es una chapuza, no me mateis.


Aquí el boton.





import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";


const
   Izquierdo=0;
   Derecho=1;
end



global
int cursor;
end


private
end

DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
            int iGraph)
   local
      int iX=0;
      int iY=0;
      byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
      byte bRepintar=0;
      int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   end
end


process Main()

private
   int iFuente=0;
   Boton iIde;
   int x1,y1;
   byte bLineas;
   string sTexto1[2]="";
   string sTexto2[0]="";
   string sTexto3[4]="";
   string sTexto4[0]="";
end

begin
   sTexto1[0]="Hola,g";
   sTexto1[1]="Esto es una pruebag";
   sTexto1[2]="Hola,g";

   sTexto2[0]="Mariiiig";

   sTexto3[0]="1g";
   sTexto3[1]="22g";
   sTexto3[2]="333g";
   sTexto3[3]="4g";
   sTexto3[4]="55555555g";
   
   sTexto4[0]="";
   bLineas=sizeof(sTexto3)/sizeof(sTexto3[0]);



   delete_draw(0);
   drawing_z(1);
   drawing_color(rgb(100,100,100));
   draw_box(0,0,200,200);
   frame;

   cursor=load_fpg("cursors.fpg");

   raton();
   iIde=boton(0,0,&sTexto3,bLineas,iFuente,3,0,rgb(0,0,250),50,10);
   iIde.iX=10;
   iIde.iY=10;
   iIde.bRepintar=1;
   iIde=boton(0,0,&sTexto2,sizeof(sTexto2)/sizeof(sTexto2[0]),iFuente,3,0,rgb(0,0,250),5,10);
   iIde.iX=190;
   iIde.iY=10;
   iIde.bRepintar=1;
   iIde=boton(0,0,&sTexto1,sizeof(sTexto1)/sizeof(sTexto1[0]),iFuente,4,0,rgb(0,0,250),5,10);
   iIde.iX=10;
   iIde.iY=160;
   iIde.bRepintar=1;
   iIde=boton(15,15,&sTexto4,sizeof(sTexto4)/sizeof(sTexto4[0]),iFuente,4,0,rgb(0,0,250),5,10);
   iIde.iX=190;
   iIde.iY=160;
   iIde.bRepintar=1;
   //iIde=boton(10,0,40,0,sTexto2,iFuente,0,0,rgb(0,250,0),5);
   //iIde=boton(10,0,80,0,sTexto3,iFuente,0,rgb(50,50,250),rgb(0,0,0),50);
   //iIde=boton(10,0,200,0,"Púlsame",iFuente,0,rgb(50,250,250),rgb(0,0,0),5);

while (!key(_ESC))
   frame;
end
exit();
end
process raton();
begin
loop
   graph=1;
   x=mouse.x;
   y=mouse.y;
   z=-251;
   frame;
end


end
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
            int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.

iX:    Coordenada X.
iAncho:   Ancho del botón. 0-automático.
iY:      Coordenada Y.
iAlto:   Alto del botón. 0-automático.
sTexto[]:   Texto del botón. Cada línea independiente.
bLineas:   Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Texto:   Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph:   Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/


private
   int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
   int iAlto_Texto_Total=0;  // Contanedrá el alto del texto a mostrar.
   int iAncho_Texto;      // Ancho de línea en curso.
   int iAlto_Texto;      // Alto de la línea en curso.
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   int iCentrado=0;
   byte bContador=0;  // Contador de usos múltiples.
   int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
   int iAncho_Grafico=0;  //Ancho del gráfico.
   byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end

begin
   drawing_z(-248);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   text_z=-251;
   //Espero Inicializacion.
   while (bRepintar==0)
      frame;
   end
   bRepintar=0;
//   write_var(0,iX-5,iY,4,bpulsado);
//   write_var(0,iX-5,iY+10,4,brepintar);
//   write_var(0,iX-5,iY+20,4,bfocus);
   loop
      // Inicializando varables por defecto.
      iAncho_Texto_Mayor=0;
      iAlto_Texto=Text_height(iFuente,"Pruebag");
      iAlto_Texto_Total=iAlto_Texto*bLineas;
      bContador=0;
      //Analizando tamaño del texto en el botón.
      while (bContador<bLineas)
         iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
         if(iAncho_Texto_Mayor<iAncho_Texto)
            iAncho_Texto_Mayor=iAncho_Texto;
         end
         bcontador++;
      end
      if (iAncho==0)
         iAncho=iAncho_Texto_Mayor+bSeparacion*2;
      end
      if (iAlto==0)
         iAlto=iAlto_Texto_Total+bSeparacion*2;
      end
      if (dColor_Boton==0)
         dColor_Boton=rgb(190,190,190);
      end
      if (dColor_Texto==0)
         dColor_Texto=rgb(0,0,0);
      end
      if(iAncho>iAlto)
         iAncho_Grafico=iAlto;
      else
         iAncho_Grafico=iAncho;
      end
      if(iGraph>0)
         if(iIde_Grafico>0)
            iIde_Grafico.X=iX+iAncho/2+1;
            iIde_Grafico.Y=iY+iAlto/2+1;
            iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
         else
            iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
         end
      end
      drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
      if (bPulsado==0)
         drawing_color(rgb(0,0,0));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(255,255,255));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
         iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X-=1;
            iIde_Grafico.Y-=1;
         end
      else
         drawing_color(rgb(255,255,255));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(0,0,0));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
         iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X+=1;
            iIde_Grafico.Y+=1;
         end
      end
      frame;
      // Mientras no manden repintar...
      if (!mouse.left and bRepintar==1)
         bRepintar=0;
      end
      //signal(father,s_wakeup);
      //signal(father.father,s_wakeup);
      while (bRepintar==0)
         if (!mouse.left and bPulsado==1)
            bPulsado=0;
            bRepintar=1;
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
            bFocus=1;
         else
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
            and bFocus==1)
            bPulsado=1;
            bRepintar=1;
            bFocus=0;
         end
         if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
            bFocus=0;
         end
         frame;
      end
      //signal(father,s_freeze);
      //signal(father.father,s_freeze);
      bRepintar=0;
      // Borro y repinto.
      bContador=0;
      while (bContador<=6)
         delete_draw(iIde[bContador]);
         bContador++;
      end
      bContador=0;
      while(bContador<bLineas)
         delete_text(iIde[7+bContador]);
         bContador++;
      end
   end

end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.

iX:    Coordenada X.
iY:      Coordenada Y.
iSize:   Tamaño del gráfico.
iGraph:   Nº del gráfico.
*/

begin
   Z=-249;
   x=iX;
   y=iY;
   z=-249;
   size=iSize;
   graph=iGraph;
   loop
      frame;
   end
end
//------------------------------------------------------------------------------
Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 04:24:39 PM
Y aquí una caja con barra deslizante.

Os hace falta un fichero a mostrar y un fpg con el cursor.

No me mateis, ya lo pasaré a limpio.   ;D  (línea 916 más o menos).

Va en 2 trozos, que no entra.





import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";

const
   Izquierdo=0;
   Derecho=1;
end



global
   int cursor;
   int iPrincipio_Pantalla=0;
   int iFinal_Pantalla=0;
   string Pantalla[30]; // Pantalla virtual donde escribo.
   int CantidadLineas=0; //nº de líneas en el fichero.
end

local
   int iValor=0;

end

   
//   end
private
end

DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
            int iGraph)
   local
      int iX=0;
      int iY=0;
      byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
      //byte bRepintar=0;
   end
end


local
   int iSalto; //Cantidad que debe de moverser iValor cualdo pulsamos para avance página.
end



DECLARE process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
           dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
           int iValor_Maximo, int iValor_Inicial)
end

local
   Boton iIde_Arriba;
   Boton iIde_Abajo;
   Boton iIde_Centro;
   byte bRepintar;
   int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
end



           
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
            int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.

iX:    Coordenada X.
iAncho:   Ancho del botón. 0-automático.
iY:      Coordenada Y.
iAlto:   Alto del botón. 0-automático.
sTexto[]:   Texto del botón. Cada línea independiente.
bLineas:   Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Texto:   Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph:   Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/


private
   int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
   int iAlto_Texto_Total=0;  // Contanedrá el alto del texto a mostrar.
   int iAncho_Texto;      // Ancho de línea en curso.
   int iAlto_Texto;      // Alto de la línea en curso.
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   int iCentrado=0;
   byte bContador=0;  // Contador de usos múltiples.
   int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
   int iAncho_Grafico=0;  //Ancho del gráfico.
   byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end

begin
   drawing_z(-248);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   text_z=-251;
   //Espero Inicializacion.
   while (bRepintar==0)
      frame;
   end
   bRepintar=0;
//   write_var(0,iX-5,iY,4,bpulsado);
//   write_var(0,iX-5,iY+10,4,brepintar);
//   write_var(0,iX-5,iY+20,4,bfocus);
   loop
      // Inicializando varables por defecto.
      iAncho_Texto_Mayor=0;
      iAlto_Texto=Text_height(iFuente,"Pruebag");
      iAlto_Texto_Total=iAlto_Texto*bLineas;
      bContador=0;
      //Analizando tamaño del texto en el botón.
      while (bContador<bLineas)
         iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
         if(iAncho_Texto_Mayor<iAncho_Texto)
            iAncho_Texto_Mayor=iAncho_Texto;
         end
         bcontador++;
      end
      if (iAncho==0)
         iAncho=iAncho_Texto_Mayor+bSeparacion*2;
      end
      if (iAlto==0)
         iAlto=iAlto_Texto_Total+bSeparacion*2;
      end
      if (dColor_Boton==0)
         dColor_Boton=rgb(190,190,190);
      end
      if (dColor_Texto==0)
         dColor_Texto=rgb(0,0,0);
      end
      if(iAncho>iAlto)
         iAncho_Grafico=iAlto;
      else
         iAncho_Grafico=iAncho;
      end
      if(iGraph>0)
         if(iIde_Grafico>0)
            iIde_Grafico.X=iX+iAncho/2+1;
            iIde_Grafico.Y=iY+iAlto/2+1;
            iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
         else
            iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
         end
      end
      drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
      if (bPulsado==0)
         drawing_color(rgb(0,0,0));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(255,255,255));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
         iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X-=1;
            iIde_Grafico.Y-=1;
         end
      else
         drawing_color(rgb(255,255,255));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(0,0,0));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
         iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X+=1;
            iIde_Grafico.Y+=1;
         end
      end
      frame;
      // Mientras no manden repintar...
      if (!mouse.left and bRepintar==1)
         bRepintar=0;
      end
      //signal(father,s_wakeup);
      //signal(father.father,s_wakeup);
      while (bRepintar==0)
         if (!mouse.left and bPulsado==1)
            bPulsado=0;
            bRepintar=1;
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
            bFocus=1;
         else
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
            and bFocus==1)
            bPulsado=1;
            bRepintar=1;
            bFocus=0;
         end
         if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
            bFocus=0;
         end
         frame;
      end
      //signal(father,s_freeze);
      //signal(father.father,s_freeze);
      bRepintar=0;
      // Borro y repinto.
      bContador=0;
      while (bContador<=6)
         delete_draw(iIde[bContador]);
         bContador++;
      end
      bContador=0;
      while(bContador<bLineas)
         delete_text(iIde[7+bContador]);
         bContador++;
      end
   end

end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.

iX:    Coordenada X.
iY:      Coordenada Y.
iSize:   Tamaño del gráfico.
iGraph:   Nº del gráfico.
*/

begin
   Z=-249;
   x=iX;
   y=iY;
   z=-249;
   size=iSize;
   graph=iGraph;
   loop
      frame;
   end
end
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
           dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
           int iValor_Maximo, int iValor_Inicial)

/*
Función que dibuja una barra deslizante.

iX:    Coordenada X.
iAncho:   Ancho de la barra. 0-Por defecto.
iY:      Coordenada Y.
iAlto:   Alto de la barra incluido los botones. 0-Por defecto.
iAlto_Boton:    Alto del botón de la barra. Ancho de la bara por defecto.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Simbolo_Boton:    0-Negro por defecto.
dColor_Barra:          Color de la barra. 0-Gris Claro por defecto.
dColor_Boton_Barra:    Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo:   Valor máximo de la Barra.
iValor_Inicial:   Valor inicial.
iValor         Valor actual.
*/




private
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   byte bContador=0;  // Contador de usos múltiples.

   int iMouse_Diferencia=0;

   string sTexto[0]="";
   int iTamano_Barra=0;
   int iTamano_Barra_Libre=0;
   int iAlto_Boton_Central=0;
   int iValor_Antiguo=0;
end

begin
   iIde_Arriba=load_fpg("cursors.fpg");
   drawing_z(-246);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   // Inicializando varables por defecto.
   bRepintar=0;
   if (iAncho==0)
      iAncho=20;
   end
   if (iAlto==0)
      iAlto=300;
   end
   if (iAlto_Boton==0)
      iAlto_Boton=iAncho;
   end
   if (dColor_Boton==0)
      dColor_Boton=rgb(190,190,190);
   end
   if (dColor_Simbolo_Boton==0)
      dColor_Simbolo_Boton=rgb(0,0,0);
   end
   if (dColor_Barra==0)
      dColor_Barra=rgb(200,200,200);
   end
   if (dColor_Boton_Barra==0)
      dColor_Boton_Barra=rgb(190,190,190);
   end
   //Calculo el tamaña de la barra descontandole los 3 botones.
   iTamano_Barra=iAlto-iAlto_Boton*3-3;
   
   iAlto_Boton_Central=iAlto_Boton;
   // Si el tamaño de la barra es mayor que el valor a máximo, aumento el boton central para igualar dicho tamaño.
   if(iTamano_Barra>iValor_Maximo);
      iAlto_Boton_Central=iAlto_Boton+iTamano_Barra-iValor_Maximo;
   end
   iValor=iValor_Inicial;
   iTamano_Barra_Libre=iAlto-iAlto_Boton*2-iAlto_Boton_Central-3;
   
   //Dibujo los botones arriba, abajo y centro.
   iIde_Arriba=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 10);
   iIde_Arriba.iX=iX;
   iIde_Arriba.iY=iY;
   iIde_Arriba.bRepintar=1;
   iIde_Abajo=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 9);
   iIde_Abajo.iX=iX;
   iIde_Abajo.iY=iY+iAlto-iAlto_Boton;
   iIde_Abajo.bRepintar=1;
   iIde_Centro=boton(iAncho, iAlto_Boton_Central, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 0);
   iIde_Centro.iX=iX;
   iIde_Centro.iY=iY+iAlto_Boton+1;
   iIde_Centro.bRepintar=1;
   drawing_z(-247);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   //Dibujo barra por donde se desplaza el botón central.
   drawing_color(rgb(50,50,50));
   iIde[0]=draw_line(iX,iY+iAlto-iAlto_Boton-1,iX+iAncho,iY+iAlto-iAlto_Boton-1);
   iIde[1]=draw_line(iX+iAncho,iY+1+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton);
   drawing_color(rgb(255,255,255));
   iIde[2]=draw_line(iX,iY+iAlto_Boton+1,iX+iAncho,iY+1+iAlto_Boton);
   iIde[3]=draw_line(iX,iY+iAlto_Boton+1,iX,iY+iAlto-iAlto_Boton);
   drawing_color(rgb(200,200,200));
   iIde[14]=draw_box(iX,iY+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton-1);
   //Ajust boton central al valor inicial.
   iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
   iIde_Centro.bRepintar=1;
   frame;
   iValor_Antiguo=iValor;
   loop
      if (iIde_Arriba.bPulsado==1)    // Si pulso del botón de abajo, incremento 1 el valor de la barra.
         if(iValor>0);            // Tengo en cuenta la repetición de teclas.
            iValor--;
            // Si el valor es multiplo de la barra, muevo el botón central.
            if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
               iIde_Centro.iY--;
               iIde_Centro.bRepintar=1;
            end
         end
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!iIde_Arriba.bPulsado==1)
               timer[0]=50;
            end
         end
         while (iIde_Arriba.bPulsado==1)
            if(iValor>0);
               iValor--;
               if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
                  iIde_Centro.iY--;
                  iIde_Centro.bRepintar=1;
               end
            end
            frame;
         end
         frame;
      end
      if (iIde_Abajo.bPulsado==1) // Si pulso del botón de abajo, incremento 1 el botón central.
         if(iValor<iValor_Maximo);
            iValor++;
            if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
               iIde_Centro.iY++;
               iIde_Centro.bRepintar=1;
            end
         end
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!iIde_Abajo.bPulsado==1)
               timer[0]=50;
            end
         end
         while (iIde_Abajo.bPulsado==1)
         if(iValor<iValor_Maximo);
            iValor++;
            if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
               iIde_Centro.iY++;
               iIde_Centro.bRepintar=1;
            end
         end
            frame;
         end
         frame;
      end
      if (iIde_Centro.bPulsado==1 and iMouse_Diferencia==0)  // Si pulsal el botón central calculo la distancia entre este y el mouse.
         iMouse_Diferencia=mouse.y-iIde_Centro.iY;
      end
      if (iIde_Centro.bPulsado==1 and iMouse_Diferencia!=0)  // Si se muevo el mouse, muevo el botón central.
         iIde_Centro.iY=mouse.y-iMouse_Diferencia;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iIde_Centro.bPulsado==0)  // Si sueltan el mouse, borro la distancia entre el botón central y el mouse.
         iMouse_Diferencia=0;
      end

      if (iIde_Centro.iY<iY+iAlto_Boton+1)  // Compruebo que el boton central no se sale fuera de rango.
         iIde_Centro.iY=iY+iAlto_Boton+1;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iIde_Centro.iY>iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central)  // Compruebo que el boton central no se sale fuera de rango.
         iIde_Centro.iY=iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iValor_Antiguo!=iValor)
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         iValor_Antiguo=iValor;
      end
      // Comprobando el salto de página.
      // Pulso por arriba.
      if (mouse.x>iX and mouse.x<iX+iAncho and
         (mouse.y>iY+iAlto_Boton and mouse.y<iIde_Centro.iY)
         and mouse.left)
         iValor-=iSalto;
         if (iValor<0)
            iValor=0;
         end
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!mouse.left)
               timer[0]=50;
            end
         end
         while (mouse.left)
            iValor-=iSalto;
            if (iValor<0)
               iValor=0;
            end
            iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
            iIde_Centro.bRepintar=1;
            frame;
         end
      end
      // Pulso por abajo.
      if (mouse.x>iX and mouse.x<iX+iAncho and
         (mouse.y<iY+iAlto-iAlto_Boton-1 and mouse.y>iIde_Centro.iY+iAlto_Boton_Central)
         and mouse.left)
         iValor+=iSalto;
         if (iValor>iValor_Maximo)
            iValor=iValor_Maximo;
         end
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!mouse.left)
               timer[0]=50;
            end
         end
         while (mouse.left)
            iValor+=iSalto;
            if (iValor>iValor_Maximo)
               iValor=iValor_Maximo;
            end
            iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
            iIde_Centro.bRepintar=1;
            frame;
         end
      end
   frame;
   end

end
end
Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 04:26:12 PM
Trozo 2. Juntarlos todos, espero que haga algo.


//------------------------------------------------------------------------------
process Caja_De_Texto(int iX, int iAncho, int iY, int iAlto, string sTexto, int iFuente,int iAncho_Barra)

/*
Proceso que dibuja una barra caja y una barra deslizante si es necesario.

iX:    Coordenada X.
iAncho:   Ancho de la caja. 0-Por defecto toda la pantalla.
iY:      Coordenada Y.
iAlto:   Alto de la caja. 0-Por defecto toda la pantalla.
sTexto: Texto a mostrar.
iFuente:      Fuente del texto. 0 por defecto la de sistema.
iAncho_Barra: Ancho de la barra deslizante.

dColor_Boton_Barra:    Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo:   nº de líneas de texto.
iValor_Inicial:   1ª linea a mostrar.
iValor:         Línea por la que vamos.
*/



private
   byte bContador=0;  // Contador de usos múltiples.
   int iTabla_Lineas[10000]=0; //Tabla de comienzo de las líneas de texto.
   int iCantidad_Lineas=100; //Cantidad de líneas en el texto.
   int iSeparacion_Lineas=3;
   int iLineas_Caja=17;
   int iAlto_Linea=0; //Alto máximo de una línea;
   string Pantalla[30];
   int iValor_Anterior; // Valor a comparar con el de la barra.
end

begin
   drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   // Inicializando varables por defecto.
   if (iAncho==0)
      iAncho=200;
   end
   if (iAlto==0)
      iAlto=300;
   end
   //Dibujo la caja.
   /*
   drawing_color(rgb(50,50,50));
   iIde[0]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
   iIde[1]=draw_line(iX+iAncho,iY+1,iX+iAncho,iY+iAlto);
   drawing_color(rgb(255,255,255));
   iIde[2]=draw_line(iX,iY+1,iX+iAncho,iY+1);
   iIde[3]=draw_line(iX,iY+1,iX,iY+iAlto);
   drawing_color(rgb(200,200,200));
   iIde[14]=draw_box(iX,iY,iX+iAncho,iY+iAlto-1);
*/
   //Calculo cantidad de líneas en el texto y me hago una tabla.
   sTexto=regex_replace(chr(9)," ",sTexto);
   iCantidad_Lineas=Calcula_Lineas(sTexto, iFuente, iAncho-iAncho_Barra-20, &iTabla_Lineas);
   iAlto_Linea=text_height(iFuente,sTexto);
   iSeparacion_Lineas=iAlto_Linea/2;
   iLineas_Caja=(iAlto-8)/(iAlto_Linea+iSeparacion_Lineas);
   // Dibujo la tabla.
   drawing_z(-246);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.

   drawing_color(rgb(100,100,100));
   iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
   iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
   iIde[2]=draw_line(iX+iAncho-iAncho_Barra-4,iY+2,iX+iAncho-iAncho_Barra-4,iY+iAlto-4);
   drawing_color(rgb(255,255,255));
   iIde[3]=draw_line(iX+2,iY+iAlto-2,iX+iAncho-2,iY+iAlto-2);
   iIde[4]=draw_line(iX+iAncho-2,iY+2,iX+iAncho-2,iY+iAlto-2);

   drawing_color(rgb(255,255,255));
   iIde[5]=draw_line(iX,iY,iX+iAncho,iY);
   iIde[6]=draw_line(iX,iY,iX,iY+iAlto);
   drawing_color(rgb(0,0,0));
   iIde[7]=draw_line(iX+2,iY+2,iX+iAncho-2,iY+2);
   iIde[8]=draw_line(iX+2,iY+2,iX+2,iY+iAlto-2);
   drawing_color(rgb(255,255,255));
   iIde[9]=draw_box(iX+3,iY+3,iX+iAncho-4,iY+iAlto-4);
   iIde[10]=Barra_Deslizante(iX+iAncho-iAncho_Barra-3,iAncho_Barra,iY+3,iAlto-7,0,0,0,0,0,
      iCantidad_Lineas-iLineas_Caja,0);
   iIde[10].iSalto=iLineas_Caja;
   //say(iCantidad_Lineas-iLineas_Caja+1);
   text_z=-250;
   set_text_color(0);
   Pinta_Pantalla(iX+3, iY+3, 0, sTexto,
       &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
   iValor_Anterior=iIde[10].iValor;
    loop
      if(iValor_Anterior!=iIde[10].iValor)
         iValor_Anterior=iIde[10].iValor;
         Pinta_Pantalla(iX+3, iY+3, -1, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
      end

      if(key(_down))
         Pinta_Pantalla(iX+3, iY+3, _down, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
         iValor_Anterior=iIde[10].iValor;
            /*
            if(iIde[10].iValor<iCantidad_Lineas-iLineas_Caja-2)
               iIde[10].iValor++;
               iIde[10].bRepintar=1;
               iValor_Anterior++;
            end
            */
      end
      if(key(_up))
         Pinta_Pantalla(iX+3, iY+3, _up, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
         iValor_Anterior=iIde[10].iValor;
/*
            if (iIde[10].iValor>0)
               iIde[10].iValor--;
               iIde[10].bRepintar=1;
               iValor_Anterior--;
            end
*/
      end
/*
      if(key(_right))
         Pinta_Pantalla(iX+3, iY+3, _right, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
            if (iIde[10].iValor>0)
               iIde[10].iValor--;
               iIde[10].bRepintar=1;
               iValor_Anterior--;
            end
      end
*/
      frame;
   end
end
//------------------------------------------------------------------------------
function Calcula_Lineas(string sTexto, int iFuente, int iAncho, pointer iTabla_Lineas)
// Formatea la variable sTexto y calcula el nº de lineas.

private
   int iLongitud; //Longitud sTexto.
   int iInicio_Linea=0;
   int iFinal_Linea=1;
   int iCantidad_Lineas=0;
end

begin
   iLongitud=len(sTexto);
   //Relleno tabla de lineas.
   while (iFinal_Linea<=iLongitud)
      if((sTexto[iFinal_Linea]==13)or
           (text_width(iFuente,substr(sTexto,iInicio_Linea,iFinal_Linea-iInicio_Linea+1))>iAncho)or
           (iFinal_Linea==iLongitud))
         if(sTexto[iFinal_Linea+1]==10)
            iFinal_Linea++;
         end
         //say(iInicio_Linea);
         iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
         iInicio_Linea=iFinal_Linea+1;
         iCantidad_Lineas++;
      end
      iFinal_Linea++;
   end
   iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
   return iCantidad_Lineas;
end
//------------------------------------------------------------------------------
function Pinta_Pantalla(int iX, int iY, int iDireccion, string sTexto,
       int pointer iTabla_Lineas, int iAlto_Linea, int iSeparacion_Lineas, int iFuente, int iLineas_Caja,
       int iCantidad_Lineas, int iPuntero_Barra)
/*
Función que repinta el texto en la caja.
0:   Pinta inicialmente,
_down:   mueve una línea hacia abajo.
_up:   mueve una línea hacia arriba.
_left:   mueve una página hacia arriba.
_right:   mueve una página hacia abajo.
*/

private
   int iContador=1;
   int iLinea=0; //Línea por la que voy escribiendo.
   int iLongitud; //Longitud del sTexto;
end

begin
   iLongitud=len(sTexto);
   switch (iDireccion)
      case 0: // Inicializa.
         iPrincipio_Pantalla=0;
         iFinal_Pantalla=0;
         iContador=0;
         while (iContador<=iLineas_Caja)
            Pantalla[iContador]="";
            iContador++;
         end
         ilinea=0;
         while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
               else
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
               end
            end
            write_var(iFuente,iX+4,iLinea*(iAlto_Linea+iSeparacion_Lineas)+iY+8,0,Pantalla[iLinea]);
            iLinea++;
            iFinal_Pantalla++;
         end
         return;   
      end

      case -1: //Repinta dependiendo de _Barra.iValor.
         iFinal_Pantalla=iPuntero_Barra.iValor;
         iLinea=0;
         while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
               else
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
               end
            end
            iLinea++;
            iFinal_Pantalla++;
         end
         iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja-1;
         return;   
      end

      case _down: // Abajo **************************
         iLinea=0;
         if  (iFinal_Pantalla<=iCantidad_Lineas)
            iPrincipio_Pantalla++;
            while (iLinea<iLineas_Caja-1)
               Pantalla[iLinea]=Pantalla[iLinea+1];
               iLinea++;
            end
            Pantalla[iLinea]="";
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
            end
            iFinal_Pantalla++;
            iPuntero_Barra.iValor++;
         end
         return;   
      end   
         
      case _up: // Arriba *************************************
         if (iPrincipio_Pantalla>0)
            iLinea=iLineas_Caja;
            while (iLinea>0)
               Pantalla[iLinea]=Pantalla[iLinea-1];
               iLinea--;
            end
            Pantalla[iLinea]="";
            iPrincipio_Pantalla--;
            iFinal_Pantalla--;
            if(sTexto[iTabla_Lineas[iPrincipio_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-2);
            else
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-1);
            end
            iPuntero_Barra.iValor--;
            //say(iPuntero_Barra.iValor);
         end   
         return;   
      end   

      case _right:
         if (iFinal_Pantalla<CantidadLineas-1)
            iFinal_Pantalla=iFinal_Pantalla+iLineas_Caja;
            if (iFinal_Pantalla>CantidadLineas-1)
               iFinal_Pantalla=CantidadLineas-1;
            end
            iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja;
            iLinea=0;
            while ((iLinea<iLineas_Caja))
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
               iLinea++;
            end
         end
         return;   
      end

      case _left:
         if (iPrincipio_Pantalla>0)
            iPrincipio_Pantalla=iPrincipio_Pantalla-iLineas_Caja;
            if (iPrincipio_Pantalla<1)
               iPrincipio_Pantalla=0;
            end
            iFinal_Pantalla=iPrincipio_Pantalla+iLineas_Caja;
            iLinea=0;
            while ((iLinea<iLineas_Caja))
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
               iLinea++;
            end
         end
         return;
      end
   end
   
   
end      



process Main()




private
   int iFuente=0;
//   Boton iIde;
   int x1,y1;
   byte bLineas;
   string sTexto1[2]="";
   string sTexto2[0]="";
   string sTexto3[4]="";
   string sTexto="";
end

begin
   set_fps(30,0);
   delete_draw(0);
   drawing_z(1);
   drawing_color(rgb(100,100,100));
   draw_box(0,0,350,300);
   cursor=load_fpg("cursors.fpg"); // AQUI EL FPG CON EL GRAFICO DEL CURSOR. ####################
   raton();

   sTexto=File("varios.prg"); // AQUI EL FICHERO A MOSTRAR.  #####################################
   iIde=Caja_De_Texto(10,300,15,220,sTexto,iFuente,10);
   //write_var(0,200,100,4,iIde.iValor);
while (!key(_ESC))
   frame;
end
exit();
end
process raton();
begin
loop
   graph=1;
   x=mouse.x;
   y=mouse.y;
   z=-251;
   frame;
end


end
Title: Re: [GAME] GyPhon Striker
Post by: FreeYourMind on May 09, 2010, 04:45:05 PM
No era más fácil ponerlo de adjunto ? Karma por el labor de todos modos :)


Uppppsssssssssss, Division By Zero...
Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 04:58:29 PM
Veleeeeeee, esta noche lo pongo mono, si me dejan.  ;D
Title: Re: [GAME] GyPhon Striker
Post by: FreeYourMind on May 09, 2010, 05:00:10 PM
Yo tengo algo parecido de los tiempos de DIV por aqui, si te interesa podré buscartelo cuando tenga más tiempo...
Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 05:20:10 PM
Cuando vuecencia pueda.  :D
Title: Re: [GAME] GyPhon Striker
Post by: FreeYourMind on May 09, 2010, 05:51:34 PM
Aqui te lo dejo :) Tenia eventos y controles como si fueran de "Windows", no lo he probado, sobretodo porque es necesario compilarlo con DIV ya que usa la dll 'ascii.dll' de Tizo para DIV, aunque algo de ello puedes aprovechar.

Mirate tambien las cajas de texto que ha hecho Windgate, igual no las conocias:

http://forum.bennugd.org/index.php?topic=861.msg12691#msg12691

Title: Re: [GAME] GyPhon Striker
Post by: Fede on May 09, 2010, 07:06:21 PM
Gracias compañero.
Title: Re: [GAME] GyPhon Striker
Post by: tSuKiYoMi on May 15, 2010, 05:55:38 PM
gracias a toda la peña. Hace un par de dias que no entro asi que toca comentar los avances conseguidos. Bueno el apartado gráfico  creo que ya esta prácticamente terminado. Tengo en total 20 misiones programadas y tengo todos los fondos de pantalla terminados.

Respecto al tema de las naves enemigas consegui terminar un par de diseños propios y aunque me ha costado sudor y lagrimas he conseguido ripear una especie de robot-humanoide al mas puro estilo Macross del juego Blazing Star. Todo esta retocado usando el editor gráfico de Div-2 (gracias a FreeYourMind por pasarlo). Los efectos de explosiones tmb están terminados asi como los items que puede capturar la nave espacial escogida. Me falta por terminar/retocar los gráficos de la nave del protagonista y los distintos tipos de disparos.

Respecto al tema de los menus ya esta resuelto, en el tuto de osk viene perfectamente explciado como realiar menus sencillos, asi que no me complicare muxo la vida y lo seguire porque esta bastante bien.

saludos.