Holas de nuevo:
Sorpresa sorpresa, hace tres días tuve un nuevo ataque de insomnio galopante, y tuve una revelación que me sirvió para resolver el problema que tenía con el motor de mapas tileados a modo de parche.
Como la nueva version de Fenix se está retrasando con cada retraso de la Wiz, y aun no se ha dicho nada de que tambien salga un port para GP2X, me planteé la posibilidad de hacer este engendro mientras se solucionan los raros problemas que estoy teniendo.
El problema estaba en cargar los mapas de tiles en memoria, porque por alguna razón, la sentencia alloc, que reserva el espacio necesario para guardar los datos, se vuelve loca y me escupe del programa. Pues bien, lo he solucionado usando mapas gráficos:
Mediante un pequeño código, se convierten los TPR/TMF en FPG normales y corrientes, que guardan un mapa por cada capa. Cada mapa contiene en cada pixel el número del tile que debería ir en esa posición.
Nos podemos beneficiar del hecho de que existen mapas de 8 y 16bits para almacenar mapas con datos de tipo byte y word, pero no int (tampoco es una gran pérdida, pues sólo pueden haber 1000 tiles por FPG). Otra pega es que el tamaño de los mapas de tiles ya no están limitados sólo por la memoria del sistema, sino tambien por las limitaciones del formato MAP (unos 4000 x 3000 pixels, pero consultadlo porque es fácil que me equivoque, aun así, 4000 x 3000 tiles creo que es suficiente para hacer un Super Metroid sin separar los mapas), y por último que "sólo" podremos usar 1000 capas.
Pero no he terminado:
Aunque me han reportado que el antiguo motor V3 fallaba, tengo una version de FenixLand que usa dicho motor y funciona, aun usando alloc, pero que hace cosas raras (el personaje se mueve a razón de cientos de tiles por frame). Y lo que es más sospechoso: intenté compilar la version antigua, la que si funcionaba (con el motor V2), y tambien me ha dado fallos.
Es posible que haya algun fallo compilando en Wxp64 o con las versiones de UFenix que tengo, no lo se, tengo que mirarlo. Sobre todo, me extraña que en PC haya logrado una mejora de rendimiento del 200% de la version V2 a la V3, y en GP2X apenas se note mucha diferencia. Incluso portando el nuevo motor V3 a FenixLand, tengo los fallos que comentaba antes del personaje que se teletransporta.
La prueba realizada con un enorme mapa, a 320x240, tiles de 32x32, y dos capas, no ha bajado, en ningun momento, de 70fps, con picos de hasta 120fps.
En fin, que a ver si puedo hacer pruebas y aislo todo lo que pueda los fallos, porque esto es un cachondeo, y si veo que la cosa va bien, pues lo subiré sin falta.
No obstante, si alguien quiere probarlo y/o buscar los errores, pues me lo decis y os subo los fuentes para que los mireis.
Marcadores