Mr Painter: Nacido para MK II

Recapitulando, año 1995, decidí hacer una versión de Mortal Kombat II para la pb1k, pero no sabía cómo producir las imágenes, entonces decidí crear mi propio software de edición de imágenes.

El proceso de creación fue bastante desafiante, un proyecto en sí mismo.

La pantalla de la pb1k está construída y concebida de la siguiente manera:

Las primeras versiones que desarrollé, eran muy sencillas, databan de antes de MK2, tuvieron nombres como MC POINT, SUPER PAINTER, MC PICTY. Controlaba un (1) pixel en pantalla utilizando las teclas de las flechas, y una de las teclas -la barra espaciadora si no recuerdo mal- permitía cambiar de función, desplazarse sin pintar o desplazarse pintando. Otra tecla controlaba de manera similar la función de borrado. Para ello utilicé la función DRAW( , ) DRAWC( , ) y un ciclo que retornaba al principio utilizando GOTO/GOSUB hasta que se detectara una entrada de teclado usando la función INPUT$.

Como usuario había que estar atento a la tecla que se había activado previamente pues en la pantalla no había espacio para desplegar status o mensajes, afortunadamente, el desplazamiento era suficientemente lento como para controlar el daño en caso de ir borrando algo ya dibujado, pero eso era todo lo que hacía, no había función de borrado general,  grabado o recuperación, todo eso vino después.

El reto más grande fue grabar la pantalla, para lograrlo, tuve que pasar por las 3 pruebas, 3 pruebas, 3 pruebas:

1. Mapas de bits

La primera aproximación a grabar la pantalla la hice recorriéndola pixel a pixel preguntando si estaba encendido o no y creando una cadena de caracteres con  unos y ceros (1,0) que luego pudiera leer y volver a presentar, no lo sabía entonces pero estaba replicando un formato de mapa de bits o bmp. Por supuesto era muy lento y los archivos eran grandes (6144 bytes -192×32-), también se tardaba mucho en abrir la imagen y volver a presentarla en pantalla y teniendo en cuenta que la memoria de trabajo total de la pb1k era de 32kb hacía inviable utilizarlo, debía encontrar otra solución.

2. La tabla ASCII.

La tabla ASCII en la pb1k tiene 512 caracteres, en experimentos previos había descubierto que 256 de ellos podían ser manipulados para que al representarlos en pantalla mostraran la distribución de pixeles que yo deseara. Cada caracter tenía 6×8 pixeles y podía ser representado con una cadena hexadecimal, ahora,  teniendo en cuenta que la pantalla estaba dividida de manera lógica para albergar 32 caracteres de manera horizontal en 4 lineas de representación vertical, potencialmente podía utilizar sólo 128 bytes para guardar toda la pantalla, severa reducción de espacio en comparación a los 6144 bytes que ocupaban mi incipiente formato bitmap descrito anteriormente.

Esta solución fue interesante y me permitió grabar archivos de imágenes en 2 formatos diferentes, sin embargo, aún no lograba tener la velocidad de representación gráfica que necesitaba y se notaba el orden de la construcción debido a la baja velocidad de refresco de la pantalla, había que buscar otra solución.

*Imagen real de una página de mi cuaderno de notas, imposible saber con exactitud la fecha, pero debe datar aproximadamente de 1992,’93.

3. La memoria de la pantalla.

Me llevó un tiempo, pero descubrí leyendo los manuales de la pb1k que utilizando unos comandos del Basic C61 era posible hacer referencia al contenido de la memoria; resulta que los diseñadores del aparato permitieron acceso a la parte de la memoria encargada de almacenar los contenidos de la pantalla, estos comandos, que hasta ese momento nunca había usado son el PEEK y POKE, con ellos uno puede leer y escribir en la dirección de memoria que uno quiera y con unos pocos experimentos con otros comandos complementarios y haciendo referencia a los manuales, descubrí que podía “copiar y pegar” los contenidos de pantalla, moverlos, etc. creando por primera vez, un verdadero bitmap almacenado en binario, el resultado fueron archivos relativamente pequeños, pero con la ventaja de la representación casi instantánea de la imagen en pantalla.

Tiempo después, cuando el juego estaba tomando forma, utilicé ese mismo conocimiento para poder incorporar al MK II  una función que capturase la pantalla de la pb1k y poder guardar algo de historia en archivos, en la última versión de Mr. Painter (2.1) agregué la posibilidad de imprimir y estos son algunos de los resultados.

   

Evidentemente son imágenes digitalizadas usando un scanner sobre una hoja impresa en 1995, afortunadamente la hoja sobrevivió junto con alguna otra poca documentación que mantuve a salvo.

En las imágenes se puede apreciar que en el juego utilicé la técnica de modificación de caracteres ACII (sprites) para los personajes y la de acceso directo a la memoria de la pantalla para los escenarios, por eso, se ven unos espacios en blanco alrededor de los personajes que “borran” los pixeles del fondo.

Ahora, ya estaba listo para el proceso de creación de las imágenes (sprites) y manipulación de las mismas en el juego, para ello utilicé como referencia las imágenes que estaban en la revista Club Nintendo #28 y con muuuucha paciencia fui creando personajes y escenarios, ahora, debía programar:

– Selección de personajes

– Elección aleatoria de escenarios

– Movimientos autónomos de los personajes

– Interacción del jugador con los personajes

– Puntuación

– Final del juego

Para todo eso, el Basic C61 de la pb1k era muy lento, debía utilizar el arma secreta, assembler HD61700, pero de eso, hablaré en el siguiente post. -“Aprendiendo el lenguaje de la máquina”

Comments are closed.