Recopilación de errores del modo7

Started by Drumpi, June 14, 2011, 08:06:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Bueno, como veo que el pesado de Free está más así de lo normal ;D vamos a ir anotando diversos fallos que veamos del modo7 para cuando Splinter tenga un ratillo allá por el 2024 :D

El caso del escalado de los sprites va a estar pendiente hasta que consiga hacer un port del Drajon Lol a DIV o a cualquier alternativa que funcione en los SO de los que dispongo.

De momento, el modo7 no funciona si se activa el SCALE_MODE con cualquier filtro. Cualquier otro gráfico sí va, pero nada que se relacione con el modo7.

Los gráficos exteriores no funcionan con cualquier tamaño, sé que tienen que tener unas medidas determinadas, creo que algo de potencias de 2, pero un mapa de 1024x128 no va. No es una pega demasiado gorda, pero si se usa un mapa de 64x64, por ejemplo, sólo dibuja el cuadrado entre (0,0) y (31,31).

La variable M7.FLAGS actúa sobre el render como si fuera un proceso, y no como debería (o al menos, según el manual de Osk):
1: repite el gráfico principal horizontalmente.
2: repite el gráfico principal verticalmente.
4: repite el gráfico exterior horizontalmente.
8: repite el gráfico exterior verticalmente.
Y no existen M7.FLAGS1 y M7.FLAGS2 que actúan como si fueran los flags de cada imagen (espejados, transparencias...). No, esto no lo tenía DIV, era una mejora de Fenix.



Aprovecho para comentar que si se usa el mapa 0 como mapa de origen con MAP_XPUTNP, el programa se cae con ventanazo de windows de error grave, en lugar de devolver el típico valor de error.
Si alguien tiene una versión de Bennu más moderna que la mía, que haga la prueba para confirmar todo esto oficialmente, que con el juego ando demasiado liado y le tengo que hacer un par de cosillas a Splinter mientras no pueda arreglar lo de los scroll cíclicos.
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)

SplinterGU

drumpi, el scale no va porque m7 solo trabaja en 8 bits, scale = 16bits.

lo de los fondos exteriores ni idea, tengo que revisarlo.

flags, solo hay 1 flag que afecta a la estructura global m7[], (nunca existio en fenix 2 flags para m7) los flags permitidos son:

B_VMIRROR
B_HMIRROR
B_TRANSLUCENT

te estas confundiendo con el scroll, que ese si tiene 2 flags.

es perfecto que trabaje sobre el render, para hacer lo que vos decis, que trabaje sobre los procesos deberian ser la flags normal que tiene el proceso (como cualquier proceso fuera del m7) y que segun veo en el codigo deberia funcionar.

si tienes un ejemplo de eso del map_xputnp lo pruebo.

no entendi el problema de los scroll ciclicos.


Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Pues me ha fastidiado a base de bien.
Necesitaba que el modo7 fuese cíclico para poder usar un gráfico de tamaño aceptable y reducir al máximo el uso de PUT, porque como tampoco funciona bien la repetición del gráfico exterior, tampoco puedo hacer uso del mismo para los niveles de tamaño estratosféricos que necesito.

Ahora sólo me quedan dos soluciones: recolocación, o uso y abuso de la memoria. La primera no me gusta, y la segunda puede ser una aberración (hablo de niveles de unos 6MB como poco).
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)

SplinterGU

el grafico solo deberia tener el tamaño del area que se repite.

me parece que deberia ser potencia de 2.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Te comento: un mapa puede tener tranquilamente del orden de 4096 pixels de ancho. Dado que del modo7 sólo se ven aproximadamente 1024, la idea era tener un mapa de 1024 pixels de ancho que se repitiese horizontalmente, de forma que por cada 16 pixels que avanzase, repintase 16 columnas de pixels del mapa con los que debería haber más allá de los 1024, de forma que, al llegar al final del mapa, y al repetirse, se vería la continuación del mapa de 4096 pixels.

Es un método que creo que ya comenté como posible mejora para el motor de tiles usando el scroll y un mapa del tamaño de la pantalla, que me ahorraría dibujar todos los pixels y mejorando el rendimiento (teóricamente).

Pero si no puedo hacer que el mapa se repita, mal vamos, no se puede usar, y repintar todo el mapa es imposible sin que caiga a 3FPS, así que o lo pinto todo de golpe (mapa gigante), o voy repintando a medida que avance y lo hago retroceder cuando esté a mitad del mapa.
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)

SplinterGU

la verdad que no te entiendo drumpi, los mapas se repiten a la perfeccion... puedes ver el ejemplo oficial de fenix, el antiquisimo que hizo cebrain, el suelo tiene un grafico chico que se repite eternamente, horizontal y vertical.

la verdad que estoy perdido, no logro entender a que te refieres.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Drumpi te sugiero que hagas unos dibujos chulos como hacia el desaparecido (de nuevo) DCElso, para explicarte mejor :)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind


Krammer

Creo que quiere un scroll dinámico para un mapa.
Osea, que un mapa se repita ciclicamente como si fuese un Scroll, pero esto lo puedes hacer con un scroll mismo y actualizando el mapa usando en el scroll..
Lo que ya no se es si bennu puede actualizar los mapas de TOP y BACK una vez en marcha el scroll.

Quizá pueda servirte esto si bennu puede updatear en tiempo real los mapas para el scroll Drumpi.

Drumpi

Intentaré explicarme mejor:

Supongamos que tengo un nivel para un modo7 de este tamaño:



Eso es enoooooooormente grande para tenerlo en memoria (imaginemos que unos 9MB). Sin embargo, si usamos un mapa de este tamaño:



Sólo ocupa 1MB y el rendimiento es 2000 veces mejor. Lo suyo sería usar un mapa de ese tamaño. Si lo repetimos horizontalmente, se vería una cosa así:



pero eso, de momento no nos importa.
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)

Drumpi

Ahora supongamos que avanzamos en el mapa hasta la cruz azul, mientras dibujamos en el mapa lo que debería haber más allá del borde derecho del mapa en la parte izquierda:



Cuando avancemos un monton de pixels, en el modo7 repetido se verá la siguiente imagen:



Nosotros estaremos en la cruz azul, y veremos lo que hay dentro del cuadrado azul, sin embargo, en el mapa de 1MB lo que habrá dibujado y lo que se repite hasta el infinito es la imágen de dentro del cuadrado verde. De esta forma, desde el punto de vista del proceso cámara, el nivel parece que es infinito, cuando lo que realmente hacemos es modificar un pequeño mapa.

Espero que así quede un poco más claro.
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)

l1nk3rn3l

joer eres profesor de alguna universidad?  :P

SplinterGU

veamos...

1) el rendimiento es el mismo, solo ocupa mas memoria.
2) que tiene que ver esto con modo7? modo 7 no dibuja scrolls, tiene piso, y cielo. (son texturas, no escenearios)

sigo sin entender.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

1) No es el mismo rendimiento, porque para empezar ocupa menos memoria, y además, en el SBTime en WIZ hay una caida de rendimiento la primera vez que subes al piso más alto y tienes una panorámica de todo el nivel, que no sale cuando el suelo de dicho nivel tapa todo lo que hay delante.

2) La idea es montar un scroll sobre el mapa sin tener que repintar el mapa entero, sólo parte de él, como si fuera un buffer circular (es el mismo principio).

De todas formas, veo que la mejor manera de hacerlo de momento es usar un mapa el doble de largo, repintar, y recolocar al llegar al final. Al menos, hasta que se pueda hacer un scroll sobre un mapa o usar un mapa exterior de mayor tamaño que 32x32.

Quote from: l1nk3rn3l on June 18, 2011, 01:20:39 PM
joer eres profesor de alguna universidad?  :P

¿Eso es bueno o malo? ^^U
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)