jueves, 14 de febrero de 2008

QBIQS (I) Los orígenes

Un proyecto largamente pensado

Para empezar a contar la historia de este juego, permitidme parafrasear a la inmortal Sophia Petrillo: "Madrid, 1990...".

Madrid, 1990, concretamente un tórrido mes de julio de 1990, momento en el que cayó en mis manos el número 65 de la revista MSX-Club. En ese número publicaron unos cromos a color con imágenes del QUARTH para MSX2. Me quedé absolutamente fascinado con aquel juego, de apariencia tan simple y adictiva. En aquellos momentos yo sólo tenía un MSX1, por lo que no podía disfrutar de ese juego, por lo que se me metió en la cabeza la idea de programar una versión para MSX1.

Pero en aquellos momentos mis conocimientos sobre programación y sobre el MSX eran escasos, aparte de no tener los medios necesarios como para acometer semejante tarea. Un año y medio más tarde me compré un Amiga 500, por lo que el proyecto de hacer un QUARTH para MSX1 quedó en el olvido durante más de 15 años.

Una vez más he de agradecer a mi amigo Edu Robsy por idear y organizar la MSX-Dev, ya que me proporcionó la excusa perfecta para retomar este proyecto que siempre había estado rondando por mi memoria.

Comenzando punto por punto

Mi sorpresa fue mayúscula cuando, investigando un poco, descubrí la existencia de una versión del QUARTH para MSX1, llamada Block Hole y publicada por Zemina. Lógicamente el primer paso fue buscarla para ver si merecía la pena el esfuerzo de crear una nueva versión de un juego ya existente. Encontré el juego y lo probé. Me encantó el efecto de las estrellas que se desplazan pixel a pixel por debajo de las piezas, aunque éstas se desplazan carácter a carácter (igual que en la versión de 2 jugadores del QUARTH de Konami).

Sin embargo la jugabilidad de la versión de Zemina no es la del QUARTH ni mucho menos.

Así pues me decidí a rescatar el proyecto de hacer un QUARTH para MSX1 y me planteé la posibilidad de que el scroll de las piezas fuese pixel a pixel, ¿sería posible hacerlo en un MSX1? En el juego original los artistas de Konami aprovechan el registro de scroll vertical por hardware que tienen los MSX2 y superiores. De esta forma consiguen ese efecto, pero a costa de que el decorado también se desplaza junto con las piezas. En MSX1 había que hacerlo de otra manera...


La idea detrás del scroll del QBIQS es bastante simple: todas las piezas del juego se componen de 14 diferentes patrones que se combinan de manera adecuada junto con un decimoquinto patrón (el vacío). Sólo tenía que dibujar las combinaciones verticales de dos cualesquiera de estas piezas desplazándolas pixel a pixel, así tendría todos los posibles casos. Problema: 15 patrones dan 225 combinaciones, que a 8 pixels de altura por patrón dan 1800 posibles gráficos... ¡Pero si sólo tengo 256!

Analizando un poco más el problema me di cuenta de que no todas las combinaciones de patrones son válidas, por lo que calculé (por la cuenta de la vieja) aquellas que sí lo eran y todo se redujo a un total de 183 patrones. Dejé reservados 200 patrones por si (que va a ser que sí) me hacían falta más y me puse manos a la obra para ver aquello moviéndose.

Una vez dibujados los patrones, el siguiente paso fue diseñar una rutina que se encargase de volcarlos de forma adecuada en la tabla de nombres, así conseguiría el efecto visual de un scroll pixel a pixel. La cosa, que parece complicada, no lo es en absoluto, ya que con 8 tablas de 256 bytes el volcado se agiliza un montón. Me llevó toda una tarde el diseñar esas tablas (en depurarlas tardé un poco más de tiempo pues con el paso de las semanas iban saliendo los errorcillos que había), pero mereció la pena porque las piezas ya se desplazaban pixel a pixel y con la suficiente soltura como para que el juego funcione sin problemas a 60hz.

Terminaré esta introducción al QBIQS comentando que en el QUARTH original, las piezas tienen un color diferente en cada nivel, por lo que programé una rutina que permite cambiar los nibbles de una tabla en ram (aquí descubrí lo útiles que resultan para estos menesteres las instrucciones RRD y RLD). Si utilizamos esa rutina sobre una tabla de colores conseguimos el efecto deseado.

Continuará...

No hay comentarios: