Hace algunos das, mi hijo mayor jugaba Super Smash Bros Brawl en Wii, pero me llam la atencin lo que estaba haciendo en ese momento: creaba un escenario de lucha, ubicando en pantalla distintos tipos de bloques y unas plataformas mviles. Fue como un [i]dejav[/i].

A comienzos de 1985 lleg a mis manos una revista A.N.A.L.O.G. que traa un juego de Kyle Peacock para digtar: [b]Bopotron![/b]

Se trataba de un juego muy simple en que se controlaba un robot que deba desplazarse por la pantalla con ayuda de plataformas mviles, sin golpearse la cabeza ni caer de mucha altura, para traspasar su energa a unidades descargadas, por lo que adems deba recargarse en fuentes de poder ubicadas en otros lugares de la pantalla. Era un puzzle contra el tiempo, e inclua slo 5 niveles:

[img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel01.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel02.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel03.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel04.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel05.png[/img]

Usando el botn del joystick se poda avanzar a mayor velocidad, pero con un consumo mayor de energa.

Pero eso no era todo. La misma revista traa otro programa del mismo autor: [b]Bopotron Construction Set[/b]. Este programa permita crear nuevos niveles para Bopotron! a partir de datos y coordenadas que se ingresaban en pantalla.

Obviamente no me bast digitar y jugar Bopotron! por una tarde... se me hacan jugo las manos por crear nuevos niveles. Digit el otro programa y a probarlo: fueron varias tardes de verano creando o ajustando niveles. En total, hice 5 niveles ms:

[img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel06.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel07.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel08.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel09.png[/img] [img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-nivel10.png[/img]

Ahora vamos a lo tcnico...

Bopotron! estaba programado en BASIC, pero con varias rutinas en [i]assembler[/i]. Tanto el cdigo binario como las coordenadas de los elementos en pantalla para dibujar los distintos niveles se almacenaban como secuencias de nmeros decimales en sentencias DATA.

Lo que haca el programa para crear niveles era generar lneas de DATA numeradas apropiadamente para indicar los elementos que conformaban el nivel indicado. Eso se grababa en disco o cinta como si fuese hecho usando el comando LIST, por lo tanto, despus de eso haba que cargar el juego con LOAD y agregarle el nuevo nivel usando ENTER. Tambin haba que cambiar una variable al comenzo del programa para indicar el mximo de niveles disponibles. Finalmente podas grabar con SAVE el juego modificado para no perderlo. Otra variable al comienzo permita indicar en qu nivel partir, as se poda probar el nuevo nivel sin pasar por todos los anteriores.

El campo de juego lo conformaba una pantalla de texto, pero en modo ANTIC 4 y con set de caracteres redefinidos para todo tipo de elemento visible, pero esttico, como los suelos, las bateras y escaleras. Si nos saltamos las rutinas de inicializacin para los caracteres grficos, el nivel 1 se ve as:

[img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-gr0.png[/img]

Las componentes mviles fueron implementados con Players/Missiles... estos eran el robot y las plataformas. Se usaba el motor de colisiones del hardware para detectar cuando Bopotron! estaba en el aire y deba caer o cuando era atropellado por una plataforma.

Recuerdo que dibuj los escenarios propios para nuevos niveles en hoja de cuadernillo de matemticas como gua, porque en hoja de cuaderno universitario no caba la pantalla completa. La parte interesante era el trazado del recorrido de las plataformas mviles, y haba que aprovecharlas para hacer ms complicado el juego.

Las plataformas eran manejadas por una rutina en assembler definida como VBI. Slo haba que entregarle las coordenadas de inicio, trmino y velocidad para cada tramo a recorrer por cada plataforma.

Cuando deba hacer ajustes a los parmetros del nivel de turno, lo haca modificando directamente sobre las lneas de DATA en el juego, y luego probaba otra vez. Por lo tanto, la porcin de codigo BASIC asociado al nivel de turno cambiaba respecto de lo generado inicialmente. Como la idea era guardar cada nivel en forma independiente, hice una rutina que se anexaba a al juego, tambin usando ENTER, para listar el nivel que se indique. El objetivo era enviar los niveles por correo al autor del juego, pues as lo solicit l en la revista donde se public. Ojo que el correo era postal, no correo electrnico... Estbamos en 1985 y recin comenzaba el furor por el Fax!

En ese proceso tambin se me ocurri hacer algunos cambios al juego. Fueron cosas simples, como traducir los mensajes a espaol y cambiar la inicializacin de las rutinas en assembler desde lneas de DATA por strings con todos los caracteres ATASCII para llegar y usar, con lo que se aceleraba notablemente la partida del juego, y adems se ahorraba memoria para ms niveles!

Otra cosa que me aburra durante el juego era tener que esperar que el robot recargara energa desde las fuentes de poder a la misma velocidad que se descargaba cuando se traspasaba a las unidades descargadas... paf! Ahora la carga era instantnea.

Tcnico nivel avanzado o muy curioso?

Las rutinas en assembler no son cargadas en posiciones fijas de memoria, sino que en variables tipo string, por lo que el cdigo claramente es relocalizable en memoria. Eso incluye DLI, VBI y la grfica del robot. Sin embargo, las variables s estn fijas en la pgina 6 ($0600).

El set de caracteres modificado para la grfica de los elementos en pantalla es cargado en la memoria libre, justo bajo la memoria que utiliza la pantalla en modo GRAPHICS 0. El cambio del modo 0 a ANTIC 4 se hace modificando directamente la lista de despliegue (DL) original, cambiando al modo de caracteres de 4 colores en 4 pixeles de ancho e indicando cuando aplicar la interrupcin (DLI), la cual cambia al vuelo el set de caracteres de normal a color justo debajo del puntaje.

Lo interesante en el desarrollo de este juego, es que la parte en BASIC slo dibuja los niveles en pantalla, administra la puntuacin y el tiempo, e inicializa y coordina las rutinas en assembler. El movimiento del robot (players) y plataformas (missiles) es administrado en assembler durante DLI, es decir, se ubican en la pantalla durante el refresco de un nuevo frame, utilizando las propiedades de colisiones de P/M para detectar como y por donde se puede desplazar el robot o si ha chocado y pierde una vida. Esos estados son almacenados en la pgina 6 de la memoria y es donde el programa en BASIC controla en un loop para saber qu est pasando.

Fue mucha chchara?

Pueden ver y jugar Bopotron! descargando [url=http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron.atr]bopotron.atr[/url]. Ese disco tiene DOS 2.5 sin pichicatas ni AUTORUN.SYS, e incluye los siguientes archivos:

[list][*][b]BOPOTRON.BAS[/b]: Bopotron! original de la revista con 5 niveles. Correr con RUN "D:BOPOTRON.BAS" en BASIC.
[*][b]BOPOTRON[/b]: Versin como la digit yo, pero con 9 niveles. Correr con RUN "D:BOPOTRON" en BASIC.
[*][b]BOPOMOD[/b]: Versin modificada final, con 10 niveles. Correr con RUN "D:BOPOMOD" en BASIC.
[*][b]BOPOFAB.NIV[/b]: Versin modificada del Construction Set para fabricar niveles. Correr con RUN "D:BOPOFAB.NIV" en BASIC.
[*][b]BOPOLST.NIV[/b]: Rutina para extraer e imprimir o guardar los niveles en forma independiente. Se carga sobre cualquier versin del juego con ENTER "D:BOPOLST.NIV" en BASIC, con lo que se agrega la linea 0 y de la 9000 en adelante. Usando RUN pasa directamente a la rutina.[/list]
Mi recomendacin es que prueben BOPOMOD, cargando el ATR sin tecla OPTION, pues se requiere BASIC:

[img]http://www.vitoco.cl/atari/retronia/posts/bopotron/bopotron-run.png[/img]

Advertencia: Si usan emulador, recomiendo jugar con un joystick real. La dinmica del juego y los tiempos ajustados para cumplir la misin exigen ms coordinacin y habilidad que la que pueden obtener simplemente usando, por ejemplo, el teclado numrico del PC.

Pueden revisar la lnea 160 y ver qu parmetros pueden cambiar, y cul es su efecto en el juego.
