Motor de Scroll Tileado v3.2.1 by Drumpi

Started by Drumpi, July 10, 2016, 06:07:15 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Bueno, lo dije hace poco y ya está aquí, o al menos una versión beta que necesita de mucho testeo, pero por lo que he probado funciona.
Se trata del nuevo motor de scroll tileado diseñado por un servidor y al que tengo que ponerle nombre, que ya toca después de más de 12 años usándolo :D

Versión definitiva:
[NO DISPONIBLE]

En el adjunto están los ficheros de lo que es la beta de esta versión. Aviso que no está completo y entre otras cosas:
- El motor de scroll por procesos (carpeta procesos_zoom) es una adaptación del último código disponible, pero está sin limpiar del todo, e incluye funciones de zoom (en el original no debería tenerlo, por temas de rendimiento, este es un motor aparte).
- El motor de scroll isométrico (carpeta isometrico) está sin probar, es un copia/pega directo de la versión anterior de Fenix, aunque debería funcionar en Bennu.
- Los mapas de ejemplo (carpeta recursos) son los primeros que he pillado:
    · IFenixD.tmf se usa con tiles2.fpg. Es un mapa de tiles de 32x32 pixels, pero muchos tiles superan ese tamaño y dejan restos en el nuevo motor. Además es un mapa con 2 capas.
    · lvl1_0_castlehorror.tmf se usa con level01.fpg. Es un mapa de tiles de 16x16 pixels (lo digo para que lo tengais en cuenta al usar start_tscroll), sacado directamente del Echo.
    · lvl3_city.dur.tmf se usa con durezas.fpg. Es un mapa de tiles de 16x16 pixels. Es una modificación del mapa de durezas del nivel 3 del Echo, y se incluye como ejemplo de mapa que usa tiles de tamaño byte.
- Los ficheros de prueba no se han modificado. Sólo se han probado test1.prg, prueba1.prg y prueba2.prg. El resto habrá que modificarlos.
- En la carpeta info se han copiado los manuales de las versiones anteriores. Aunque no hay muchas modificaciones, sí que hay algunos cambios, así que no os los tomeis literalmente, sino como una orientación.

Lo importante de este fichero son las carpetas tmapa y graph_tscroll. Si ejecutais los ficheros prueba1.prg y prueba2.prg podreis ver en acción el nuevo motor de scroll pintando a mapa. El código es muy sencillo de seguir, creo, y si descomentais las líneas 71 a 75 de prueba1.prg, podreis ver el mapa de la primera capa, y cómo va dibujando los tiles a medida que se desplaza la cámara con los cursores. Prueba2.prg es lo mismo que prueba1.prg, pero se ha creado un nuevo proceso para que lo siga la cámara.

Lo subo así, ahora, por si alguien puede echarle un vistazo, probarlo con mapas creados con el Tilemap Editor 2, y encontrar los fallos que se me hayan podido pasar (creo que a veces ocurre un random exit cuando stop_tscroll intenta descargar el FPG de los tiles). Cuanto antes, mejor ^^U

Su funcionamiento, aunque ya lo he comentado es el siguiente:
El motor genera un mapa por cada capa que tenga el mapa de tiles. Estos mapas son incluidos en scrolls del motor de Bennu (dos por cada scroll) y usados de forma cíclica. Cada vez que la cámara avanza un tile, una nueva fila/columna es pintada usando la naturaleza cíclica del mapa (es decir, si avanzamos hacia la derecha, la primera columna que se pintará será la primera de la izquierda, pues esta aparecerá en el scroll por la derecha al haber desaparecido por la izquierda). Pero no todos los tiles se pintan, sólo aquellos que hayan cambiado, según un array que almacena el tile que hay en cada posición del mapa.
Un detalle: en la estructura t_scroll hay un campo llamado scroll_primero. El valor indicado ahí será el primer scroll de Bennu que usará el tscroll, y los siguientes serán los que tengan el siguiente valor mayor (es decir, que si le ponemos como valor 3, se usará primero el scroll[3], luego el scroll[4] y seguido del scroll[5], suponiendo que tengamos 5 ó 6 capas de tiles). Scroll_ultimo indica el último scroll usado por tscroll. Así que podeis saber qué scrolls están libres (o asignarlos al tscroll antes de iniciarlo) durante la ejecución de vuestro juego y usar los restantes para vuestras cosas. Ah, también necesita una región para uso propio (es decir, de los scrolls).

Siento ir con tantas prisas, pero quiero que lo vayais viendo lo antes posible.
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)

Fede

Lo primero... ¡Muchas gracias!  8)

Y ahora a ver el código para ver si me entero de lo que has hecho.  :P
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Drumpi

Si no entiendes alg... Bueno, tu pregunta lo que necesites :D
De todas formas, justo después de subirlo me he dado cuenta de algo grave y llevo horas intentando dar con la solución: ¿cómo meto al prota entre los dos planos del scroll si cada scroll tiene una única Z? Creo que se podía si el proceso era de tipo c_scroll ¿no? lo cual me plantearía otro problema, porque la colocación de los objetos se hace mediante una función a mano, y no relativo al scroll :S

¿Ideas? Porque hasta ahora sólo se me ha ocurrido usar sólo un plano de scroll en lugar de los dos de los scrolls, lo que nos limitaría de 20 planos a un máximo de 10, y tendríamos la mitad de los scrolls disponibles para otras cosas.
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

Pues nada, a falta de ideas mejores, he añadido un parámetro extra a start_tscroll para indicar si queremos usar una o dos capas del mapa tileado por cada scroll de Bennu que vayamos a usar.
El cambio en el código ha sido insignificante, porque los mapas se actualizan de forma independiente a los scrolls de Bennu, y el número de mapas no influyen en el número de scrolls usados.

Sin embargo, he obtenido un resultado sorprendente:
- Con el scroll tileado antiguo tenía una velocidad de 909fps "en vacío", o sea, sin desplazar el scroll para nada (en este caso, los únicos cálculos que hay son la posición de la cámara) y entre 898-820fps en movimiento.
- Con el nuevo scroll, el del primer mensaje, en vacío superaba fácilmente los 1000, llegando a 1050 o 1100 con el mapa de Fenix Land, pero con velocidades que superaban los 900fps de media en movimiento, incluso llegando a los 950 y con picos de 1000.
- Y sin embargo, con esta nueva versión, usando un scroll diferente para cada una de las capas, he tenido 1150 en vacío y como de 50 a 100 fps más que la versión anterior.

En fin, os la dejo aquí abajo. Ya sabeis, si usais un scroll por capa tendreis control de cada una de las Z de cada capa a través de scroll.z (en prueba2.prg teneis el ejemplo), pero si usais dos capas por scroll podreis tener hasta 20 capas diferentes con Z controladas de dos en dos.
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)