Asteroids: información en la zona derecha de la pantalla #Programación retro del Commodore 64

Los sprites pueden utilizar hasta nueve bits para moverse en la dirección X. En la dirección Y sólo pueden utilizar ocho bits. La pantalla del C64 es apaisada.

El uso de nueve bits en la dirección X no es obligatorio. Muchos juegos del C64 presentaban en la zona derecha de la pantalla información de posición, vidas, tiempo, puntos, etc. Esta información hay que ponerla en algún sitio y, puesto que llevar los sprites hasta la derecha implica complicar un poco los programas, una solución aceptable es pintarla ahí.

Y ese fue el enfoque inicial que le di al proyecto Asteroids05 y siguientes. Luego me he arrepentido, porque me ha parecido que el juego queda mejor con la información abajo, aprovechando la pantalla en toda su amplitud.

No obstante, como hemos dicho que de lo que más se aprende es de los errores, y estoy firmemente convencido de esto, ahí vamos: vamos a meter en la zona derecha de la pantalla información de posición, vidas, puntos, etc.

Luego cambiaremos de enfoque y llevaremos la información abajo, lo que nos dejará una lección importante: es más fácil hacer las cosas bien desde el comienzo, que cambiarlas más adelante. Esto es tanto más cierto cuanto más importante sea el requerimiento o la decisión de diseño que se rectifica.

Por el camino aprenderemos o recordaremos otra cosa: el uso de pantallas. Pero… ¿no dijimos en la primera entrada que Asteroids no usaba pantallas? A ver, no es el típico juego de pantallas que hay que ir superando. Básicamente tiene dos pantallas, la de juego, que es la que nos ocupa ahora, y la inicial, que meteremos más adelante.

Y si empezamos a hacer varias cosas con pantallas, lo suyo es tener un nuevo fichero "Pantalla.asm" (análogo a "Jugador.asm", "Disparos.asm", etc.):

Asteroids - Fichero pantallas

En "Pantalla.asm" tenemos:

  • La inicialización de la pantalla.
  • La actualización de la pantalla.

La inicialización de la pantalla es la rutina "inicializaPantalla" que antes estaba directamente en el fichero "Asteroids.asm":

Asteroids - Rutina inicializa pantalla

En "inicializaPantalla" seguimos teniendo la configuración del color del borde y los colores de fondo en negro, y el relleno de la RAM de color con el color blanco.

Ha desaparecido, en cambio, el relleno de la RAM de vídeo con espacios. Esto es así porque ahora esta información sale de una pantalla diseñada con CBM prg Studio.

La pantalla está diseñada en el fichero "Pantallas.sdd", y tiene esta apariencia:

Asteroids - Diseño pantalla

La forma de incluirla en el programa es mediante la directiva "incbin Pantallas.bin". Esta directiva se encuentra en el nuevo fichero "Recursos.asm", que es un sucesor más general que el anterior "Sprites.asm":

Asteroids - Fichero recursos

Y, por último, la forma de cargar la pantalla en la inicialización es usando la rutina "copiaBloque" de la librería "LibChars":

Asteroids - Cargar pantalla

Por otro lado, si pintamos información en pantalla lógicamente es para actualizarla durante el juego. Esto lo hacemos con la rutina "actualizaPantalla", que se llama desde el bucle de juego:

Asteroids - Rutina actualiza pantalla - llamada

Y lo que hace la rutina "actualizaPantalla" es pintar las coordenadas X, Y, la velocidad y el ángulo. Más adelante añadiremos vidas, puntos, y demás historias.

Asteroids - Rutina actualiza pantalla

Hasta ahora, para pintar un número hexadecimal usábamos la rutina "pintaHex" de la librería "LibText". Pero esta rutina pinta el número en la posición del cursor, y ahora queremos usar posiciones de memoria concretas. Por ello, ha sido necesario mejorar "libText" con nuevas rutinas que usan posiciones de memoria concretas en vez de la posición del cursor (ej. "pintaHex2").

En resumen, las novedades que tenemos son:

  • Un nuevo fichero "Pantalla.asm".
  • Una pantalla diseñada en el fichero "Pantallas.sdd" y exportada al fichero "Pantallas.bin".
  • El anterior fichero "Sprites.asm" se convierte en el nuevo fichero "Recursos.asm". Este fichero importa los recursos (sprites, pantallas, etc.).
  • Se inicializa la pantalla en la inicialización, y se actualiza en el bucle de juego.
  • Para la actualización de la pantalla, se ha mejorado la librería "LibText".

Todo esto puede verse en el proyecto Asteroids05, y el resultado aquí:

Asteroids - Pantalla con info derecha


Código del proyecto: Asteroids05


Editar

Josepzin

No hay comentarios:

Publicar un comentario