Migración de juegos Fenix a Bennu - Apuntes de diferencias y resoluciones.

Started by FreeYourMind, September 30, 2009, 05:20:12 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

La verdad el tema del solapamiento que decias no entendi muy bien.

DCelso

:D, nah, simplemente era que se veían en pantalla menos de 10 disparos cuando yo lanzaba justo 10.
Era debido a que algunos de ellos estaban detrás de otros lo que hacía pensar que no estaban cuando en realidad sí que estaban.
Al poner un valor de alpha = 100 se ve más claro ya que los que están sin solapar se ven más claruchos y los que están solapados se ven más oscuros porque mezclan sus colores, no lo mezcan en sí, pero como uno deja ver lo que hay por debajo y el otro está por debajo pues da esa sensación.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

splinter_work

bueno, a decir verdad si se mezclan... cosas internas del blitter... :D

FreeYourMind

Nueva diferencia en migrácion, en este caso no se si en Fenix hay diferencia en relación a Bennu (me imagino que funcione como en DIV), la diferencia es entre DIV y Bennu:


En DIV si definimos un texto como varible local o global seria por ejemplo:

GLOBAL
mi_texto;

BEGIN
mi_texto = "Hola Mundo!";
write(0, 160, 120, 4, mi_texto);
FRAME(400);

--> Imprime "Hola Mundo!" en pantalla.



En Bennu no funciona, te imprime "0";
Hay que declarar mi_texto como string para que funcione:

GLOBAL
string mi_texto;

BEGIN
mi_texto = "Hola Mundo!";
write(0, 160, 120, 4, mi_texto);
FRAME(400);


Saludos.

SplinterGU

es correcto, asi es... los tipos se definen en el momento de declaracion, no en runtime... en fenix es igual a bennu...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Nuevos problemas:

En este caso es diferencia entre DIV y Bennu (me imagino que en Fenix sea como en Bennu):


En DIV1 funciona perfectamente.

Tengo definida la siguiente estructura global:

  STRUCT sl[2000]
    x, y, graf, tipo;
  END


2 - En una funcion tengo los siguientes case:
...
   CASE 1:
      load("nivel1.lvl", OFFSET sl);
    END
    CASE 2:
      load("nivel2.lvl", &sl);
    END
...

Problemas:

Tanto poniendo OFFSET como & dice que la variable sl es requerida.
Como tengo que escribir el load para los 2 casos ?
Nota: poniendo load("nivel1.lvl", sl) funciona, pero tengo un problema con la información que saco de este fichero, ya que parece
que no la saca toda (como si no pillara todo el tamaño de este).

SplinterGU

creo que esto ya te lo dije, no tenes que usar ni offset ni &... directamente la variable...

cuando hiciste el save, tenes que haberlo hecho tambien sin el offset...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Deberías poner el texto completo del error, porque el omitir algunas palabras cambia todo el contexto del error.
En teoría, si pones load("nivel1.lvl", sl) debería cargarte las 2000 estructuras, no se qué quieres decir con que no saca todos los datos ¿qué datos no te saca? Tambien puede ser porque no has especificado el tipo de los datos dentro de la struct, últimamente tanto Fenix como Bennu son bastante quisquillosos con los tipos (algo que se agradece para pillar buenas costumbres... pero que tendrá a los novatos nerviosos).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

Si ya hablamos del tema en su momento.
Este es otro caso que tenia pendiente, aqui no se hace ningun save sólo es para leer, he estado debugeando y al final llegue al problema, y este viene de aqui, porque yo
lo tenia con:

load("nivel1.lvl", sl);

pero como ya dije no me esta extrayendo correctamente la información de este fichero.

Este fichero en realidad tiene la información del mapa (me imagino que sea los (x,y) que cada objeto tiene), o sea lo le, y hace un map_block_copy de los objetos y pinta el respectivo mapa del nivel (que se carga como .map vacio pero que se llena en ejecución. En realidad son 3 mapas distintos por nivel).

No se como coño o con que herramientas hizo los mapas para guardar su información en estos ficheros, ya que DIV1 no permite crear estes ficheros. He contactado el autor del original, pero parece que no visita mucho su email :)

Os pongo las funciones que pintan el mapa, o sea, el sistema de tiles que utiliza, el original de DIV comentado y el que adapte (le puse 0 en el ultimo parametro de entrada que es nuevo de Bennu y tampoco se lo que significa):


PROCESS BuildMap()
BEGIN
  FOR (typ = 0; typ <= 2000; typ++)
    IF (sl[typ].graf <> 0)
      PutTile(sl[typ].x, sl[typ].y, sl[typ].graf, sl[typ].tipo);
    END
  END
END

PROCESS PutTile(x, y, graf, tip)
BEGIN
/*
IF (tip == 0)
    Map_Block_Copy(TilesFile, ScrollMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center), graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height));
  END
  IF (tip == 1)
    Map_Block_Copy(TilesFile, FrontMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center), graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height));
  END
  IF (tip == 2)
    Map_Block_Copy(TilesFile, ColMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center), graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height));
  END
*/

  IF (tip == 0) // ScrollMap: Objetos del escenário
    Map_Block_Copy(TilesFile, ScrollMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center),
                   graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height), 0); // Bennu
  END
  IF (tip == 1) // FrontMap: Suelo del escenário
    Map_Block_Copy(TilesFile, FrontMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center),
                  graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height), 0); // Bennu
  END
  IF (tip == 2) // ColMap: Paredes del escenário
    Map_Block_Copy(TilesFile, ColMap, x - graphic_info(TilesFile, graf, g_x_center), y - graphic_info(TilesFile, graf, g_y_center),
                  graf, 0, 0, graphic_info(TilesFile, graf, g_wide), graphic_info(TilesFile, graf, g_height), 0); // Bennu
  END
END






SplinterGU

antes de probar directamente con este archivo, no te parece que seria mejor hacer una prueba aislada? un save y load de un array de una estructura de este tipo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

El Load se hace porque sino no me salen los gráficos.

Os pongo unas pantallas (hasta hoy no habia puesto fotos de betas para que no entraran ganas, pero poco importa):





Como puedes ver, hay tiles de los cuales su información de posición (x,y) no se ha leido, ya que no salen y son datos del principio del fichero ya que falla al principo del pintado ...

De todos modos ya me pondré debuggeando para ver que valores obtiene del fichero.

SplinterGU

nunca supongas, es mejor siempre hacer una prueba aislada, para ver que diferencias hay que considerar o simplemente para ver si existe algun bug... pero probar algo dentro de un contexto no te ayuda mucho a determinar donde esta el problema... luego si todos los elementos separados funcionan bien, asi si analizas el contexto...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

He estando haciendo pruebas, no llego a ningun sitio ;(

He imprimido los siguientes resultados:

sl = 2712
sl[0] = 2712
sl[1] = 664
sl[2] = 18
sl[3] = 18
sl[4] = 18
sl[5] = 17
sl[6] = 82
sl[7] = 82
sl[8] = 82
sl[9] = 82
sl[10] = 146
sl[11] = 146
&sl[11].x = 146
sl[12] = 146
sl[13] = 146
sl[14] = 210
sl[15] = 210
sl[16] = 210
sl[17] = 210
sl[18] = 274
sl[19] = 274
sl[20] = 274
sl[500] = 2878
sl[501] = 2878
sl[502] = 2878
sl[503] = 2878
sl[800] = 2324
sl[900] = 2804
sl[901] = 2052
sl[902] = 3002
sl[903] = 2804
sl[1000] = 0
sl[1500] = 0
sl[2000] = 0
sl[2210] = 0
sl[2711] = 0
sl[2712] = 0

FreeYourMind

Traigo más datos:

&sl[0].x = 0108071C
&sl[0].y = 140
&sl[0].graf = 6
&sl[0].tipo = 0
&sl[1].x = 669
&sl[1].y = 376
&sl[1].graf = 42
&sl[1].tipo = 0
&sl[2].x = 18
&sl[2].y = 116
&sl[2].graf = 52
&sl[2].tipo = 0
&sl[3].x = 18
&sl[3].y = 72
&sl[3].graf = 52
&sl[3].tipo = 0
&sl[4].x = 10
&sl[4].y = 28
&sl[4].graf = 52


Aqui se puede observar un valor muy raro:

&sl[0].x = 0108071C

o sea, el valor de X no puede tener ese valor, me imagino que es lo que provoca que ese (x,y) no se pinte...

A ver que os parece.

Drumpi

Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)