[ATARI] Bopotron!

En esta sección te invitamos a colocar tus historias, videos, documentales, links o sitios que puedan dar a conocer esta maravillosa era de la Retrocomutación de los 80-90s
Responder
Avatar de Usuario
vitoco
Mensajes: 1970
Registrado: Lun Ene 28, 2013 5:47 pm
Contactar:

[ATARI] Bopotron!

Mensaje por vitoco » Jue May 09, 2013 4:55 pm

Hace algunos días, mi hijo mayor jugaba Super Smash Bros Brawl en Wii, pero me llamó la atención lo que estaba haciendo en ese momento: creaba un escenario de lucha, ubicando en pantalla distintos tipos de bloques y unas plataformas móviles. Fue como un dejavú.

A comienzos de 1985 llegó a mis manos una revista A.N.A.L.O.G. que traía un juego de Kyle Peacock para digtar: Bopotron!

Se trataba de un juego muy simple en que se controlaba un robot que debía desplazarse por la pantalla con ayuda de plataformas móviles, sin golpearse la cabeza ni caer de mucha altura, para traspasar su energía a unidades descargadas, por lo que además debía recargarse en fuentes de poder ubicadas en otros lugares de la pantalla. Era un puzzle contra el tiempo, e incluía sólo 5 niveles:

Imagen Imagen Imagen Imagen Imagen

Usando el botón del joystick se podía avanzar a mayor velocidad, pero con un consumo mayor de energía.

Pero eso no era todo. La misma revista traía otro programa del mismo autor: Bopotron Construction Set. Este programa permitía 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 hacían 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 más:

Imagen Imagen Imagen Imagen Imagen

Ahora vamos a lo técnico...

Bopotron! estaba programado en BASIC, pero con varias rutinas en assembler. Tanto el código binario como las coordenadas de los elementos en pantalla para dibujar los distintos niveles se almacenaban como secuencias de números decimales en sentencias DATA.

Lo que hacía el programa para crear niveles era generar líneas 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, después de eso había que cargar el juego con LOAD y agregarle el nuevo nivel usando ENTER. También había que cambiar una variable al comenzo del programa para indicar el máximo de niveles disponibles. Finalmente podías grabar con SAVE el juego modificado para no perderlo. Otra variable al comienzo permitía indicar en qué nivel partir, así se podía 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 estático, como los suelos, las baterías y escaleras. Si nos saltamos las rutinas de inicialización para los caracteres gráficos, el nivel 1 se ve así:

Imagen

Las componentes móviles 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 debía caer o cuando era atropellado por una plataforma.

Recuerdo que dibujé los escenarios propios para nuevos niveles en hoja de cuadernillo de matemáticas como guía, porque en hoja de cuaderno universitario no cabía la pantalla completa. La parte interesante era el trazado del recorrido de las plataformas móviles, y había que aprovecharlas para hacer más complicado el juego.

Las plataformas eran manejadas por una rutina en assembler definida como VBI. Sólo había que entregarle las coordenadas de inicio, término y velocidad para cada tramo a recorrer por cada plataforma.

Cuando debía hacer ajustes a los parámetros del nivel de turno, lo hacía modificando directamente sobre las líneas de DATA en el juego, y luego probaba otra vez. Por lo tanto, la porción 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, también 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 electrónico... ¡Estábamos en 1985 y recién comenzaba el furor por el Fax!

En ese proceso también se me ocurrió hacer algunos cambios al juego. Fueron cosas simples, como traducir los mensajes a español y cambiar la inicialización de las rutinas en assembler desde líneas de DATA por strings con todos los caracteres ATASCII para llegar y usar, con lo que se aceleraba notablemente la partida del juego, y además se ahorraba memoria ¡para más niveles!

Otra cosa que me aburría durante el juego era tener que esperar que el robot recargara energía desde las fuentes de poder a la misma velocidad que se descargaba cuando se traspasaba a las unidades descargadas... ¡paf! Ahora la carga era instantánea.

¿Técnico 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 código claramente es relocalizable en memoria. Eso incluye DLI, VBI y la gráfica del robot. Sin embargo, las variables sí están fijas en la página 6 ($0600).

El set de caracteres modificado para la gráfica 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 interrupción (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 sólo dibuja los niveles en pantalla, administra la puntuación 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 página 6 de la memoria y es donde el programa en BASIC controla en un loop para saber qué está pasando.

¿Fue mucha cháchara?

Pueden ver y jugar Bopotron! descargando bopotron.atr. Ese disco tiene DOS 2.5 sin pichicatas ni AUTORUN.SYS, e incluye los siguientes archivos:
  • BOPOTRON.BAS: Bopotron! original de la revista con 5 niveles. Correr con RUN "D:BOPOTRON.BAS" en BASIC.
  • BOPOTRON: Versión como la digité yo, pero con 9 niveles. Correr con RUN "D:BOPOTRON" en BASIC.
  • BOPOMOD: Versión modificada final, con 10 niveles. Correr con RUN "D:BOPOMOD" en BASIC.
  • BOPOFAB.NIV: Versión modificada del Construction Set para fabricar niveles. Correr con RUN "D:BOPOFAB.NIV" en BASIC.
  • BOPOLST.NIV: Rutina para extraer e imprimir o guardar los niveles en forma independiente. Se carga sobre cualquier versión 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.
Mi recomendación es que prueben BOPOMOD, cargando el ATR sin tecla OPTION, pues se requiere BASIC:

Imagen

Advertencia: Si usan emulador, recomiendo jugar con un joystick real. La dinámica del juego y los tiempos ajustados para cumplir la misión exigen más coordinación y habilidad que la que pueden obtener simplemente usando, por ejemplo, el teclado numérico del PC.

Pueden revisar la línea 160 y ver qué parámetros pueden cambiar, y cuál es su efecto en el juego.
Adjuntos
bopotron.zip
Fuentes de este artículo, por si se pierden los enlaces.
(47.84 KiB) Descargado 191 veces

Avatar de Usuario
devwebcl
Mensajes: 28
Registrado: Vie Abr 26, 2013 9:08 pm

Re: [ATARI] Bopotron!

Mensaje por devwebcl » Jue May 09, 2013 5:01 pm

que bien ! yo tambien tuve esa revista en mis manos, recuerdo bien la portada y el creador de niveles, pero nunca lo tipee por flojera :twisted:

tiempo despues lo consegui, pero nunca llegue tan lejos como para jugarlo tanto y hacer niveles. Me quedo como un pendiente historico, ya que siempre me han gustado los juegos de basic.

muy buen y extenso articulo !

--Devwebcl

Responder