Ya al final de este proceso y antes de pasar al siguiente e ilusionante proyecto, quisiera compartir algunas curiosidades y parte de mis vicisitudes para llevar a cabo tan ardua pero gratificante tarea, como la de realizar nuestro primer videojuego para la maravillosa plataforma MSX.
No hace mucho, en una entrevista para una revista digital, me hicieron una pregunta que me sirve para dar pie sobre sobre lo que quiero compartir con vosotros, en concreto me preguntaron: Estáis trabajando desde LUEGOLU3GO STUDIOS en Nogalious para una gran cantidad de plataformas (aún el periodista no sabía nada de XBOX y PS4, jajaja). ¿Qué desafíos se presentan al desarrollar para tantas máquinas diferentes?
A lo que respondí: El reto principal es el de conocer el hardware muy a fondo (referencia a plataformas 8 bits principalmente), pues cada uno de ellos (MSX, Amstrad, C64 y Spectrum), tienen una serie de limitaciones y ventajas que hay que aprovechar y sortear, pues no es lo mismo poder representar gráficos con un limite de 2 colores por cuadricula de 8x8 pixels y 2 por línea de pantalla, como tampoco lo es tener 8 sprites en pantalla que se mueven con solo cambiar unos bytes, o incluso tener que implementarlos tú mismo porque no existe tal funcionalidad.
Así pues, sin duda, el reto de portar Nogalious a los distintos sistemas de 8 bits a los que se esta portando, es proponer una solución distinta por cada uno de ellos para que el resultado sea lo mas homogéneo posible, teniendo en cuenta lo heterogéneo de cada uno de los sistemas a portar. Para el resto de plataformas, tiene su miga, pero tanto Game Maker como Unity son plataformas muy potentes que prácticamente hacen el 80% del trabajo.
En este caso concreto, hablamos de MSX y bueno, lo primero que hice fue empaparme bien de todas esas particularidades del hardware que poseen los MSX, ya que la plataforma con la que yo más experiencia tenía era con Amstrad.
En su día dije e hice público en alguna entrevista que utilizaría Solid C y es cierto que los primeros pasos del proyecto fueron en este lenguaje, pero pronto me di cuenta que no iba a servir, pues el rendimiento no era el esperado y decidí hacerme una serie de rutinas en ensamblador, porque por esas casualidades de la vida no me llevo mal con este arcano lenguaje de programación que tanto miedo da, pero que tan buen resultado tiene.
Así pues, una vez entendido que el VDP de MSX era muy potente pero que tenía la particularidad de no compartir memoria con la CPU, lo primero que hice fue una serie de rutinas en ensamblador para transferir datos de / para la VRAM tanto en bloques como en unidades, y de pronto: se hizo la magia.
Mover sprites se presentó tan simple como escribir las coordenadas en una dirección de memoria y así con casi cualquier cosa que apareciera en pantalla, pero claro, no todo iban a ser facilidades. Entonces aparecieron las limitaciones: nada de más de 2 colores por línea en cada tile, y cada vez que se ponían 5 sprites en línea, se borraba el quinto, con lo cual y siempre gracias a la maestría y saber hacer del grandísimo Toni Gálvez, empezó el encaje de bolillos que hay detrás de la fenomenal variedad gráfica y técnica, que existe en cada una de las pantallas que componen el juego.
Evidentemente, es clave formar parte de una compañía como LUEGOLU3GO STUDIOS donde prima la calidad del producto final y no hemos escatimado en recursos y tiempo para crear un producto que saque el máximo partido a los MSX de primera generación, es más, me atrevería a decir, que mucha gente quedará sorprendida y no podrá creer que la versión Nogalious para MSX es MSX1 y no MSX2. Y sí, evidentemente todo lo anterior ha implicado retrasos en el desarrollo que la compañía ha entendido y que confío también entiendan nuestros jugadores.
Figura 1. Ejemplo de cuadro de diálogo
En esta pantalla tan "sencilla" (Figura 1), hay bastante más de lo que aparentemente se aprecia a primera vista.
Figura 2. Zoom esquina de cuadro de diálogo
Empecemos por los bordes. No deja de ser curioso, que habíamos dicho que no se podían poner mas de 3 colores por linea en cada tile, y ahí (Figurá 2) claramente hay un mínimo de 3. ¿Cómo es posible? Por supuesto los mas viejos del lugar ya sabrán que hay dos sprites en vez de un tile, y así en cada una de las esquinas. El resto del marco se compone de tiles, pero de no haber utilizado ahí esos sprites, quedaría así (Figura 3):
Figura 3. Zoom esquina de cuadro de diálogo en bruto
Es un detalle que parecería no tener importancia, pero como ya he dicho, en ese afán de utilizar todos los medios posibles y al alcance de nuestras posibilidades, esta será la tónica general a lo largo del juego.
Figura 4. Composición gráfica The Wiseman
Sigamos con The Wiseman, se ve bonito ¿verdad? (Figura 4) Pues estamos en las mismas: limitaciones, limitaciones y más limitaciones, pero con la misma técnica (Figura 5) tenemos el resultado que se puede apreciar en la figura 4.
Figura 5. Componentes gráficos de The Wiseman
El juego esta lleno de estas combinaciones de tiles y sprites para poder dar un resultado que con uno solo de estos artefactos sería imposible.
Otra ventaja que posee el VDP de MSX, es la de poder contar con una serie de caracteres (tiles) configurables para representar la pantalla como un mapa de referencia, esto además se enriquece con la posibilidad de tener 3 franjas de la pantalla con un conjunto de tiles personalizado. Por supuesto, esto no solo es una ventaja para que la pantalla ocupe menos, sino que si no se requiere un movimiento pixel a pixel, nos puede servir para mover porciones de pantalla por la misma, pero claro, como hemos dicho antes, las franjas son independientes unas de otras, y en el caso de Nogalious la riqueza de escenarios que posee hace que necesitemos franjas con tiles totalmente distintos.
Figura 6. Ejemplo de composición de pantalla
Y esto (Figura 6) es solo una pantalla de un mundo y además aún falta el marcador, por supuesto. Por ello, el motor de Nogalious en cada momento inyecta de forma dinámica el tileset propio de cada franja, a continuación del tileset común del mundo que el motor identifica como sólidos, escalables, mortales, destruibles... y así nos permite animar la parte que nos interese del escenario y mover un conjunto de tiles independientes de cada franja por la totalidad de la pantalla, podría parecer una tarea lenta, pero MSX es capaz de rehacer toda la pantalla cargando los tileset de cualquier página de la megarom en el tiempo de un único frame, todo el juego funciona así, por lo que los enemigos son del tamaño que nos interese, dando lugar a jefes de mundo tan grandes como en PC o guardianes con el mismo tamaño que en la versión original.
Un ejemplo quizá mas visible de esto es el mundo 5 (Figura 7), donde aplicando esta técnica nos permite crear el efecto que nos permite que según por donde pase Nogalious, se descubran u oculten determinadas zonas de pantalla, como en la versión original de PC.
Figura 7. Ejemplo de pantallas del Mundo 5
Gestionar los objetos cuando se ocultan o se descubren también tiene su miga, pero eso es algo que os contaré en mi siguiente artículo.
Rafa Ruiz
Comentarios