Sprites, BOBs  y otras criaturas mágicas (II): EL COPPER

 

El objetivo de este artículo no es tanto entrar en detalles técnicos relacionados con el Copper sino, simplemente, comentar a grandes rasgos su modo de funcionamiento así como, sobre todo, mostrar algunos de sus usos prácticos, principalmente, en juegos ¡Al lío!

 

meme copper

 

La magia del Copper… oh, Wait!

 

El Copper es un coprocesador que puede modificar el valor de los registros de los custom chips, de manera sincronizada con el haz de electrones de la pantalla. Dispone únicamente de 3 instrucciones con las que podemos escribir programas, que reciben el nombre de copperlists:

 

  • WAIT : espera a que el haz de electrones se encuentre en una determinada posición de la pantalla, tanto vertical, como horizontal.
  • MOVE : mueve un valor a un registro de los custom chips.
  • SKIP : si el haz de electrones está en una posición igual o mayor que la indicada, la ejecución se salta la siguiente instrucción de la copperlist.

 

Vamos a olvidarnos de la instrucción SKIP y a centrarnos únicamente en las 2 más utilizadas: WAIT y MOVE. A efectos didácticos, voy a emplear una versión simplificada de ambas instrucciones con el siguiente formato:

Copper - Imagen 01

 

A modo de ejemplo, veamos cómo escribir una copperlist que espere hasta que el haz de electrones esté en la línea 100 y, en ese momento, cambie el color 0 de la paleta (es decir, el color de fondo) a blanco. A continuación esperamos a la línea 116 y volvemos a fijar el color de fondo a negro. Evidentemente, esta copperlist daría como resultado una pantalla con el fondo negro y una franja blanca de 16 líneas de alto, entre las líneas 100 y 115. Algo así:

 

Copper - Imagen 02

 

Si en lugar de sólo dos parejas de WAIT + MOVE empleamos nueve y elegimos los colores de una forma más o menos coherente… ¡tachán!  Si alguna vez habéis oído la expresión “copper sky” para referirse a esos cielos con degradados de colores, tan típicos de los juegos de Amiga, ya sabéis exactamente de dónde procede el nombre y lo relativamente simple que es construirlos:

 

Copper - Imagen 03

 

Nadie es perfecto…

Hasta un coprocesador tan “mágico” como el Copper tiene sus limitaciones. Por simplicidad, no he querido entrar en ellas durante los puntos anteriores, pero las enumero ahora para que veáis que no es oro todo lo que reluce:

  • El Copper lee las instrucciones de la copperlist mediante acceso directo a memoria o DMA. No voy a entrar ahora en detalles sobre el DMA (¿quizás en una entrega posterior?). Lo importante en este caso es saber que dicho acceso a memoria es compartido, en orden de mayor a menor prioridad, por Copper, Blitter y CPU. Cuantas más instrucciones contenga la copperlist, más accesos a memoria necesitará el Copper para leerlas, y más bloqueará el acceso a memoria del Blitter y la CPU, pudiendo llegar, por ejemplo, a ralentizar el desarrollo de un juego.
  • En realidad, el Copper no puede esperar por cualquier coordenada X. Está limitado a posiciones separadas entre sí por 4 pixels (lo-res) u 8 pixels (hi-res).

 

Usos del Copper en juegos y demos

Ahora que ya sois expertos conocedores de los súper-poderes del Copper, vamos a repasar, en orden de complejidad creciente, algunos de sus usos más habituales, especialmente, en juegos y demos:

1) Cambiar las características de la pantalla de manera que podamos tener simultáneamente, por ejemplo, zonas con diferente resolución o número de colores. En una de las mejores conversiones vistas en Amiga, Pang, la zona de juego está en 32 colores y el marcador de la zona inferior, en 16. Usando el Copper, esto es tan sencillo como algo así, suponiendo que el marcador comienza en la línea 244:

Copper - Imagen 04

A la izquierda podéis ver una captura del juego sin modificar. A la derecha, la misma imagen pero mostrando sólo 4 planos (16 colores). Observad como la zona de juego se ve alterada, porque originalmente estaba en 32 colores y ahora le hemos quitado el quinto plano. Sin embargo, el marcador permanece igual, porque ya estaba en 16 colores:

 

Copper - Imagen 05 - Pang

Al Pang le hemos “sacao” los colores…

 

2) Modificar la paleta para establecer secciones horizontales que tengan diferentes colores. Evidentemente, esto permitía tener más colores simultáneamente en pantalla de los 16 o 32 habituales. Es una de las técnicas más empleadas en multitud de juegos de Amiga como el propio Pang, Lionheart, Agony, etc. En este último se elevó a la máxima expresión la conjunción entre los apartados técnico y artístico. Para muestra,  esta imagen del primer nivel, en la que podemos ver una sección de la zona central y como se hizo uso del copper para ir modificando la paleta que, en este playfield, es de sólo 4 colores  (3 + transparente). Las 3 barras de la derecha representan los diferentes valores que van tomando cada uno de los 3 colores que componen el gráfico a medida que el haz de electrones se va desplazando hacia la parte inferior del display:

 

CambioPaleta

El arte de Agony.

 

La copperlist simplificada para conseguir este efecto sería algo así, suponiendo que el árbol comienza en la línea 0 y termina en la línea 96:

Copper - Imagen 06

 

3) Generar efectos de ondulación. Usado hasta la saciedad en intros, cracktros y demos, sobre todo, pero también en juegos, como podemos ver en el mapa que aparece en la parte inferior de la pantalla del gran Fire & Ice:

 

Fire & Ice

Hasta los personajes parecen haber caído bajo el influjo hipnótico del reflejo ondulante

 

La idea consiste, en este caso, en usar el registro de scroll por hardware del Amiga (una vez más, no entraré en detalles, de momento) para desplazar la imagen una cantidad diferente de pixels hacia la derecha en diferentes líneas del reflejo. Aplicando una serie de desplazamientos concretos conseguimos un efecto ondulatorio como el que el gran Andrew Braybrook consiguió en este caso. Algo así, simplificado una vez más:

Copper - Imagen 07
¿Otros usos avanzados del Copper? Realmente, la imaginación es el límite! Bueno, y el DMA y la velocidad del Copper… Bromas aparte, y por citar dos de estos usos: por un lado, ciertas rutinas de scroll vertical y, por otro, el hermano “pobre” del chunky-to-planar (c2p), en concreto, las rutinas chunky-to-Copper (c2c), más propias de las demos que de los juegos y de las que espero poder hablar más en detalle en posteriores entregas de “Sprites, BOBs y otras criaturas mágicas”.

Como siempre, si estáis interesados en ampliar información acerca de cualquiera de los temas tratados en este artículo no dudéis en dejar vuestros comentarios ¡Hasta la próxima!

 

fernando cabrera

Un artículo publicado por:

Fernando Cabrera (@fcabrera_77)
Ingeniero informático. Nostálgico del Spectrum, adorador del Amiga y aficionado a los videojuegos y a la retro-informática. Ahora también Colaborador desde mi sección para Commodore Spain. 

 

 

Logo El rincón de Fer

 

 

8 Comentarios sobre “Sprites, BOBs y otras criaturas mágicas (II): EL COPPER

  1. Spiral World

    Increíble … Posiblemente ahora entienda mejor la copperlist de iniciar una pantalla 🙂

    Muchas gracias Maestro :))

    Pero … Quien me quita el mono ahora ?? Quita quita xDD

    Saludazo muy Grande y gracias por sacar ese tiempo e ilustrarnos 😀

    • Fernando Cabrera

      Gracias, Spiral! 🙂 En AMOS también puedes hacer cosillas con el Copper, si no voy equivocado. Creo que tiene instrucciones para insertar WAITs y MOVEs en la copperlist, a ver si te animas a probarlo ;). Un saludo!

  2. edu_arana

    Con cursos así, da hasta ganas de hacer alguna cosa.

    Muchas gracias Sensei-Fer por compartir tu sabiduría.

    Esperamos más pero no mejor porque es imposible 😉

    Salu2.
    @edu_arana

    • Fernando Cabrera

      Gran Edu, muchas gracias a ti :). De eso se trata, precisamente, de que a la gente se le quite el “miedo” y se lancen a programar, hacer gráficos, música o lo que sea para Amiga o para la plataforma retro que a cada cual le apetezca, jeje. Saludos!

  3. Corto, pero muy bien explicado, muy didactico.
    Ganas de leer mas articulos como este con las maravillas del Amiga

    • Fernando Cabrera

      Muchas gracias :). Espero poder seguir con esta serie de artículos. Mientras tenga tiempo y haya gente a la que le gusten, así será ;). Un saludo!

  4. colpasus

    Muy interesante tu artículo. Estoy empezando a trastear con el ensamblador del Amiga 500 para un proyectito que siempre he querido hacer y me ha venido muy bien para entender el funcionamiento de los BOB’s, ya que tengo que decidir si voy por el camino de sprites, bob’s o un mix.

    Fernando, ¿has pensado en hacer algún tutorial más profundo en lo técnico para mostrar cómo hacer cosas en ensamblador al estilo del de Photon que tiene unos videos muy chulos en youtube? Sería la leche….

    Un saludo.

    • Muchas gracias por tu comentario :). Sé que lo escribiste hace unos días, pero se ha publicado hoy en la web.

      En cuanto al uso de BOBs y sprites… Es una de las decisiones de diseño más críticas en un juego de Amiga. Creo que con la primera parte de esta serie te habrás hecho bastante a la idea de los pros y contras de cada uno. Te sorprendería ver el uso tan escaso de los sprites que hacen algunos de los mejores juegos de Amiga (Turrican 2 y Apidya, por ejemplo). Como te dije, tanto aquí como en el foro de CommodoreMania podemos comentar estos temas más en detalle si lo necesitas ;).

      Tal y como dije por Facebook, hacer un tutorial más técnico es algo que me ronda la cabeza hace ya tiempo. Quizás algún día… 😉 Ánimo con tu proyecto y a disfrutarlo!

      Saludos!

Deja un comentario

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

clear formSubmit