Parece que he desempolvado la parte de mi cerebro para tocar código y me he propuesto juguetear con el mapper MMC3 de la NES, y para la ocasión (a parte de otras cosas que ya hice hace tiempo) me he querido ayudar del videojuego Magical Chase (Quest 1991, PC-Engine/Turbografx) para mostrar cuanto de viable tendría un port para NES de este programa.
Como siempre, utilizaré el compilador CC65, que me permite escribir en Lenguaje C, y como librería con las funciones más básicas, tiraré de NESlib (de Shiru). Además, añadiré otra librería más para funciones más complejas y que me ayude a desarrollar el programa en el mapper MMC3, con sus IRQs, cambios de banco al vuelo, etc. Esta librería es la última versión de NESdoug (de
Dougeff).
Llevo un par de semanas con el asunto, y lo cierto es que dominar esta librería y su implementación del IRQ no me ha sido sencillo para la cierta "complejidad" que requieren algunos mapeados del juego. Actualmente, me estoy centrando en el primer nivel de la versión americana (cambian los gráficos respecto al japonés), y aunque parece muy sencillo de copiar, ya no lo es tanto si quieres hacer el pequeño parallax que tiene en el eje Y. Seguramente se pueda hacer muy similar, pero por ahora yo solo he conseguido hacer esto.
Como podéis ver, hay varias líneas de división para simular profundidad:
Y realmente aquí lo que hay es una combinación de las dos nametables A y B, configurados con un mirroring en VERTICAL, y luego calculando los IRQ para los cortes, salto de cámara, y escaneos.
Opte por esta forma de trabajar el nivel, por el empeño de realizar ese pequeño parallax vertical sobre el eje Y que no ha quedado como quería, aunque menos es nada.
Otros detalles a tener en cuenta, son los soportes del puente. En este caso he elegido realizarlo con sprites para que se fusionen convenientemente con el fondo y creen la ilusión de que estamos ante dos capas. Esto más adelante va a dar algún problema, dado que la NES solo puede mostrar 64 sprites/tiles en pantalla, y los dos soportes del puente ya consumen 12 tiles cada uno.
Además, hay que tener en cuenta el detalle de que parte de estos soportes se esconden tras el HUB inferior cuando la cámara está en su punto más bajo. Para ocultarlos, puse 8 tiles vacíos, con alta prioridad, en uno de los costados de la pantalla para que cuando el puente pase por su línea de escaneo, estos no se puedan dibujar debido a que la NES solo puede poner 8 tiles/sprites en la misma línea.
Todo esto queda muy bonito si no tenemos en cuenta que todavía nos falta añadir enemigos, proyectiles, etc... Lo que provocaría un autentico festival de parpadeos muy al estilo de Parodius! (Konami 1992).
¿Soluciones? Ahora os cuento.